Initial commit

This commit is contained in:
Ranjan 2024-06-09 11:57:47 +05:45
commit 25d7edc016
94 changed files with 20790 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/vendor/

27
composer.json Normal file
View File

@ -0,0 +1,27 @@
{
"name": "bibhuti/installer",
"autoload": {
"psr-4": {
"Bibhuti\\Installer\\": "src/"
},
"files": [
"src/Helpers/Function.php"
]
},
"authors": [
{
"name": "Ranjan",
"email": "ranjan@bibhutisolutions.com"
}
],
"extra": {
"laravel": {
"providers": [
"Bibhuti\\Installer\\Providers\\LaravelInstallerServiceProvider"
]
}
},
"config": {
"sort-packages": true
}
}

18
composer.lock generated Normal file
View File

@ -0,0 +1,18 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "6e699b3d20da591ece30a46c3cf69224",
"packages": [],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": [],
"prefer-stable": false,
"prefer-lowest": false,
"platform": [],
"platform-dev": [],
"plugin-api-version": "2.6.0"
}

141
src/Config/installer.php Normal file
View File

@ -0,0 +1,141 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Server Requirements
|--------------------------------------------------------------------------
|
| This is the default Laravel server requirements, you can add as many
| as your application require, we check if the extension is enabled
| by looping through the array and run "extension_loaded" on it.
|
*/
'core' => [
'minPhpVersion' => '7.0.0',
],
'final' => [
'key' => true,
'publish' => false,
],
'requirements' => [
'php' => [
'openssl',
'pdo',
'mbstring',
'tokenizer',
'JSON',
'cURL',
],
'apache' => [
'mod_rewrite',
],
],
/*
|--------------------------------------------------------------------------
| Folders Permissions
|--------------------------------------------------------------------------
|
| This is the default Laravel folders permissions, if your application
| requires more permissions just add them to the array list bellow.
|
*/
'permissions' => [
'storage/framework/' => '775',
'storage/logs/' => '775',
'bootstrap/cache/' => '775',
],
/*
|--------------------------------------------------------------------------
| Environment Form Wizard Validation Rules & Messages
|--------------------------------------------------------------------------
|
| This are the default form field validation rules. Available Rules:
| https://laravel.com/docs/5.4/validation#available-validation-rules
|
*/
'environment' => [
'form' => [
'rules' => [
'app_name' => 'required|string|max:50',
'environment' => 'required|string|max:50',
'environment_custom' => 'required_if:environment,other|max:50',
'app_debug' => 'required|string',
'app_log_level' => 'required|string|max:50',
'app_url' => 'required|url',
'database_connection' => 'required|string|max:50',
'database_hostname' => 'required|string|max:50',
'database_port' => 'required|numeric',
'database_name' => 'required|string|max:50',
'database_username' => 'required|string|max:50',
'database_password' => 'nullable|string|max:50',
'broadcast_driver' => 'required|string|max:50',
'cache_driver' => 'required|string|max:50',
'session_driver' => 'required|string|max:50',
'queue_driver' => 'required|string|max:50',
'redis_hostname' => 'required|string|max:50',
'redis_password' => 'required|string|max:50',
'redis_port' => 'required|numeric',
'mail_driver' => 'required|string|max:50',
'mail_host' => 'required|string|max:50',
'mail_port' => 'required|string|max:50',
'mail_username' => 'required|string|max:50',
'mail_password' => 'required|string|max:50',
'mail_encryption' => 'required|string|max:50',
'pusher_app_id' => 'max:50',
'pusher_app_key' => 'max:50',
'pusher_app_secret' => 'max:50',
],
],
],
/*
|--------------------------------------------------------------------------
| Installed Middleware Options
|--------------------------------------------------------------------------
| Different available status switch configuration for the
| canInstall middleware located in `canInstall.php`.
|
*/
'installed' => [
'redirectOptions' => [
'route' => [
'name' => 'welcome',
'data' => [],
],
'abort' => [
'type' => '404',
],
'dump' => [
'data' => 'Dumping a not found message.',
],
],
],
/*
|--------------------------------------------------------------------------
| Selected Installed Middleware Option
|--------------------------------------------------------------------------
| The selected option fo what happens when an installer instance has been
| Default output is to `/resources/views/error/404.blade.php` if none.
| The available middleware options include:
| route, abort, dump, 404, default, ''
|
*/
'installedAlreadyAction' => '',
/*
|--------------------------------------------------------------------------
| Updater Enabled
|--------------------------------------------------------------------------
| Can the application run the '/update' route with the migrations.
| The default option is set to False if none is present.
| Boolean value
|
*/
'updaterEnabled' => 'true',
];

View File

@ -0,0 +1,34 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Helpers\DatabaseManager;
use Illuminate\Routing\Controller;
class DatabaseController extends Controller
{
/**
* @var DatabaseManager
*/
private $databaseManager;
/**
* @param DatabaseManager $databaseManager
*/
public function __construct(DatabaseManager $databaseManager)
{
$this->databaseManager = $databaseManager;
}
/**
* Migrate and seed the database.
*
* @return \Illuminate\View\View
*/
public function database()
{
$response = $this->databaseManager->migrateAndSeed();
return redirect()->route('installer::final')->with(['message' => $response]);
}
}

View File

@ -0,0 +1,152 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Events\EnvironmentSaved;
use Bibhuti\Installer\Helpers\EnvironmentManager;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\DB;
use Validator;
class EnvironmentController extends Controller
{
/**
* @var EnvironmentManager
*/
protected $EnvironmentManager;
/**
* @param EnvironmentManager $environmentManager
*/
public function __construct(EnvironmentManager $environmentManager)
{
$this->EnvironmentManager = $environmentManager;
}
/**
* Display the Environment menu page.
*
* @return \Illuminate\View\View
*/
public function environmentMenu()
{
return view('installer::environment');
}
/**
* Display the Environment page.
*
* @return \Illuminate\View\View
*/
public function environmentWizard()
{
$envConfig = $this->EnvironmentManager->getEnvContent();
return view('installer::environment-wizard', compact('envConfig'));
}
/**
* Display the Environment page.
*
* @return \Illuminate\View\View
*/
public function environmentClassic()
{
$envConfig = $this->EnvironmentManager->getEnvContent();
return view('installer::environment-classic', compact('envConfig'));
}
/**
* Processes the newly saved environment configuration (Classic).
*
* @param Request $input
* @param Redirector $redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function saveClassic(Request $input, Redirector $redirect)
{
$message = $this->EnvironmentManager->saveFileClassic($input);
event(new EnvironmentSaved($input));
return $redirect->route('installer::environmentClassic')
->with(['message' => $message]);
}
/**
* Processes the newly saved environment configuration (Form Wizard).
*
* @param Request $request
* @param Redirector $redirect
* @return \Illuminate\Http\RedirectResponse
*/
public function saveWizard(Request $request, Redirector $redirect)
{
$rules = config('installer.environment.form.rules');
$messages = [
'environment_custom.required_if' => trans('installer_messages.environment.wizard.form.name_required'),
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
return $redirect->route('installer::environmentWizard')->withInput()->withErrors($validator->errors());
}
if (!$this->checkDatabaseConnection($request)) {
return $redirect->route('installer::environmentWizard')->withInput()->withErrors([
'database_connection' => trans('installer_messages.environment.wizard.form.db_connection_failed'),
]);
}
$results = $this->EnvironmentManager->saveFileWizard($request);
event(new EnvironmentSaved($request));
return $redirect->route('installer::database')
->with(['results' => $results]);
}
/**
* TODO: We can remove this code if PR will be merged: https://github.com/RachidLaasri/installer/pull/162
* Validate database connection with user credentials (Form Wizard).
*
* @param Request $request
* @return bool
*/
private function checkDatabaseConnection(Request $request)
{
$connection = $request->input('database_connection');
$settings = config("database.connections.$connection");
config([
'database' => [
'default' => $connection,
'connections' => [
$connection => array_merge($settings, [
'driver' => $connection,
'host' => $request->input('database_hostname'),
'port' => $request->input('database_port'),
'database' => $request->input('database_name'),
'username' => $request->input('database_username'),
'password' => $request->input('database_password'),
]),
],
],
]);
DB::purge();
try {
DB::connection()->getPdo();
return true;
} catch (Exception $e) {
return false;
}
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Events\LaravelInstallerFinished;
use Bibhuti\Installer\Helpers\EnvironmentManager;
use Bibhuti\Installer\Helpers\FinalInstallManager;
use Bibhuti\Installer\Helpers\InstalledFileManager;
use Illuminate\Routing\Controller;
class FinalController extends Controller
{
/**
* Update installed file and display finished view.
*
* @param \Bibhuti\Installer\Helpers\InstalledFileManager $fileManager
* @param \Bibhuti\Installer\Helpers\FinalInstallManager $finalInstall
* @param \Bibhuti\Installer\Helpers\EnvironmentManager $environment
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function finish(InstalledFileManager $fileManager, FinalInstallManager $finalInstall, EnvironmentManager $environment)
{
$finalMessages = $finalInstall->runFinal();
$finalStatusMessage = $fileManager->update();
$finalEnvFile = $environment->getEnvContent();
event(new LaravelInstallerFinished);
return view('installer::finished', compact('finalMessages', 'finalStatusMessage', 'finalEnvFile'));
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Helpers\PermissionsChecker;
use Illuminate\Routing\Controller;
class PermissionsController extends Controller
{
/**
* @var PermissionsChecker
*/
protected $permissions;
/**
* @param PermissionsChecker $checker
*/
public function __construct(PermissionsChecker $checker)
{
$this->permissions = $checker;
}
/**
* Display the permissions check page.
*
* @return \Illuminate\View\View
*/
public function permissions()
{
$permissions = $this->permissions->check(
config('installer.permissions')
);
return view('installer::permissions', compact('permissions'));
}
}

View File

@ -0,0 +1,39 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Helpers\RequirementsChecker;
use Illuminate\Routing\Controller;
class RequirementsController extends Controller
{
/**
* @var RequirementsChecker
*/
protected $requirements;
/**
* @param RequirementsChecker $checker
*/
public function __construct(RequirementsChecker $checker)
{
$this->requirements = $checker;
}
/**
* Display the requirements page.
*
* @return \Illuminate\View\View
*/
public function requirements()
{
$phpSupportInfo = $this->requirements->checkPHPversion(
config('installer.core.minPhpVersion')
);
$requirements = $this->requirements->check(
config('installer.requirements')
);
return view('installer::requirements', compact('requirements', 'phpSupportInfo'));
}
}

View File

@ -0,0 +1,62 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Bibhuti\Installer\Helpers\DatabaseManager;
use Bibhuti\Installer\Helpers\InstalledFileManager;
use Illuminate\Routing\Controller;
class UpdateController extends Controller
{
use \Bibhuti\Installer\Helpers\MigrationsHelper;
/**
* Display the updater welcome page.
*
* @return \Illuminate\View\View
*/
public function welcome()
{
return view('installer::update.welcome');
}
/**
* Display the updater overview page.
*
* @return \Illuminate\View\View
*/
public function overview()
{
$migrations = $this->getMigrations();
$dbMigrations = $this->getExecutedMigrations();
return view('installer::update.overview', ['numberOfUpdatesPending' => count($migrations) - count($dbMigrations)]);
}
/**
* Migrate and seed the database.
*
* @return \Illuminate\View\View
*/
public function database()
{
$databaseManager = new DatabaseManager;
$response = $databaseManager->migrateAndSeed();
return redirect()->route('LaravelUpdater::final')
->with(['message' => $response]);
}
/**
* Update installed file and display finished view.
*
* @param InstalledFileManager $fileManager
* @return \Illuminate\View\View
*/
public function finish(InstalledFileManager $fileManager)
{
$fileManager->update();
return view('installer::update.finished');
}
}

View File

@ -0,0 +1,19 @@
<?php
namespace Bibhuti\Installer\Controllers;
use Illuminate\Routing\Controller;
class WelcomeController extends Controller
{
/**
* Display the installer welcome page.
*
* @return \Illuminate\Http\Response
*/
public function welcome()
{
// dd('asd');
return view('installer::welcome');
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace Bibhuti\Installer\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Http\Request;
use Illuminate\Queue\SerializesModels;
class EnvironmentSaved
{
use Dispatchable, InteractsWithSockets, SerializesModels;
private $request;
/**
* Create a new event instance.
*
* @param Request $request
* @return void
*/
public function __construct(Request $request)
{
$this->request = $request;
}
public function getRequest()
{
return $this->request;
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace Bibhuti\Installer\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class LaravelInstallerFinished
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct()
{
//
}
}

View File

@ -0,0 +1,115 @@
<?php
namespace Bibhuti\Installer\Helpers;
use Exception;
use Illuminate\Database\SQLiteConnection;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Console\Output\BufferedOutput;
class DatabaseManager
{
/**
* Migrate and seed the database.
*
* @return array
*/
public function migrateAndSeed()
{
$outputLog = new BufferedOutput;
$this->sqlite($outputLog);
return $this->migrate($outputLog);
}
/**
* Run the migration and call the seeder.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function migrate(BufferedOutput $outputLog)
{
try {
Artisan::call('migrate', ['--force' => true], $outputLog);
} catch (Exception $e) {
return $this->response($e->getMessage(), 'error', $outputLog);
}
return $this->seed($outputLog);
}
/**
* Seed the database.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function seed(BufferedOutput $outputLog)
{
try {
Artisan::call('db:seed', ['--force' => true], $outputLog);
} catch (Exception $e) {
return $this->response($e->getMessage(), 'error', $outputLog);
}
return $this->response(trans('installer_messages.final.finished'), 'success', $outputLog);
// return $this->permissions($outputLog);
}
/**
* Seed the database.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function permissions(BufferedOutput $outputLog)
{
try {
Artisan::call('permissions:generate', ['--force' => true], $outputLog);
} catch (Exception $e) {
return $this->response($e->getMessage(), 'error', $outputLog);
}
return $this->response(trans('installer_messages.final.finished'), 'success', $outputLog);
}
/**
* Return a formatted error messages.
*
* @param string $message
* @param string $status
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private function response($message, $status, BufferedOutput $outputLog)
{
return [
'status' => $status,
'message' => $message,
'dbOutputLog' => $outputLog->fetch(),
];
}
/**
* Check database type. If SQLite, then create the database file.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
*/
private function sqlite(BufferedOutput $outputLog)
{
if (DB::connection() instanceof SQLiteConnection) {
$database = DB::connection()->getDatabaseName();
if (!file_exists($database)) {
touch($database);
DB::reconnect(Config::get('database.default'));
}
$outputLog->write('Using SqlLite database: ' . $database, 1);
}
}
}

View File

@ -0,0 +1,135 @@
<?php
namespace Bibhuti\Installer\Helpers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class EnvironmentManager
{
/**
* @var string
*/
private $envPath;
/**
* @var string
*/
private $envExamplePath;
/**
* Set the .env and .env.example paths.
*/
public function __construct()
{
$this->envPath = base_path('.env');
$this->envExamplePath = base_path('.env.example');
}
/**
* Get the content of the .env file.
*
* @return string
*/
public function getEnvContent()
{
if (!file_exists($this->envPath)) {
if (file_exists($this->envExamplePath)) {
copy($this->envExamplePath, $this->envPath);
} else {
touch($this->envPath);
}
}
return file_get_contents($this->envPath);
}
/**
* Get the the .env file path.
*
* @return string
*/
public function getEnvPath()
{
return $this->envPath;
}
/**
* Get the the .env.example file path.
*
* @return string
*/
public function getEnvExamplePath()
{
return $this->envExamplePath;
}
/**
* Save the edited content to the .env file.
*
* @param Request $input
* @return string
*/
public function saveFileClassic(Request $input)
{
$message = trans('installer_messages.environment.success');
try {
file_put_contents($this->envPath, $input->get('envConfig'));
} catch (Exception $e) {
$message = trans('installer_messages.environment.errors');
}
return $message;
}
/**
* Save the form content to the .env file.
*
* @param Request $request
* @return string
*/
public function saveFileWizard(Request $request)
{
$results = trans('installer_messages.environment.success');
$envFileData =
'APP_NAME=\'' . $request->app_name . "'\n" .
'APP_ENV=' . $request->environment . "\n" .
'APP_KEY=' . 'base64:' . base64_encode(Str::random(32)) . "\n" .
'APP_DEBUG=' . $request->app_debug . "\n" .
'APP_LOG_LEVEL=' . $request->app_log_level . "\n" .
'APP_URL=' . $request->app_url . "\n\n" .
'DB_CONNECTION=' . $request->database_connection . "\n" .
'DB_HOST=' . $request->database_hostname . "\n" .
'DB_PORT=' . $request->database_port . "\n" .
'DB_DATABASE=' . $request->database_name . "\n" .
'DB_USERNAME=' . $request->database_username . "\n" .
'DB_PASSWORD=' . $request->database_password . "\n\n" .
'BROADCAST_DRIVER=' . $request->broadcast_driver . "\n" .
'CACHE_DRIVER=' . $request->cache_driver . "\n" .
'SESSION_DRIVER=' . $request->session_driver . "\n" .
'QUEUE_DRIVER=' . $request->queue_driver . "\n\n" .
'REDIS_HOST=' . $request->redis_hostname . "\n" .
'REDIS_PASSWORD=' . $request->redis_password . "\n" .
'REDIS_PORT=' . $request->redis_port . "\n\n" .
'MAIL_DRIVER=' . $request->mail_driver . "\n" .
'MAIL_HOST=' . $request->mail_host . "\n" .
'MAIL_PORT=' . $request->mail_port . "\n" .
'MAIL_USERNAME=' . $request->mail_username . "\n" .
'MAIL_PASSWORD=' . $request->mail_password . "\n" .
'MAIL_ENCRYPTION=' . $request->mail_encryption . "\n\n" .
'PUSHER_APP_ID=' . $request->pusher_app_id . "\n" .
'PUSHER_APP_KEY=' . $request->pusher_app_key . "\n" .
'PUSHER_APP_SECRET=' . $request->pusher_app_secret;
try {
file_put_contents($this->envPath, $envFileData);
} catch (Exception $e) {
$results = trans('installer_messages.environment.errors');
}
return $results;
}
}

View File

@ -0,0 +1,79 @@
<?php
namespace Bibhuti\Installer\Helpers;
use Exception;
use Illuminate\Support\Facades\Artisan;
use Symfony\Component\Console\Output\BufferedOutput;
class FinalInstallManager
{
/**
* Run final commands.
*
* @return string
*/
public function runFinal()
{
$outputLog = new BufferedOutput;
$this->generateKey($outputLog);
$this->publishVendorAssets($outputLog);
return $outputLog->fetch();
}
/**
* Generate New Application Key.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return \Symfony\Component\Console\Output\BufferedOutput|array
*/
private static function generateKey(BufferedOutput $outputLog)
{
try {
if (config('installer.final.key')) {
Artisan::call('key:generate', ['--force' => true], $outputLog);
}
} catch (Exception $e) {
return static::response($e->getMessage(), $outputLog);
}
return $outputLog;
}
/**
* Publish vendor assets.
*
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return \Symfony\Component\Console\Output\BufferedOutput|array
*/
private static function publishVendorAssets(BufferedOutput $outputLog)
{
try {
if (config('installer.final.publish')) {
Artisan::call('vendor:publish', ['--all' => true], $outputLog);
}
} catch (Exception $e) {
return static::response($e->getMessage(), $outputLog);
}
return $outputLog;
}
/**
* Return a formatted error messages.
*
* @param $message
* @param \Symfony\Component\Console\Output\BufferedOutput $outputLog
* @return array
*/
private static function response($message, BufferedOutput $outputLog)
{
return [
'status' => 'error',
'message' => $message,
'dbOutputLog' => $outputLog->fetch(),
];
}
}

21
src/Helpers/Function.php Normal file
View File

@ -0,0 +1,21 @@
<?php
/**
* Set the active class to the current opened menu.
*
* @param string|array $route
* @param string $className
* @return string
*/
function isActive($route, $className = 'active')
{
if (is_array($route)) {
return in_array(Route::currentRouteName(), $route) ? $className : '';
}
if (Route::currentRouteName() == $route) {
return $className;
}
if (strpos(URL::current(), $route)) {
return $className;
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace Bibhuti\Installer\Helpers;
class InstalledFileManager
{
/**
* Create installed file.
*
* @return int
*/
public function create()
{
$installedLogFile = storage_path('installed');
$dateStamp = date('Y/m/d h:i:sa');
if (!file_exists($installedLogFile)) {
$message = trans('installer_messages.installed.success_log_message') . $dateStamp . "\n";
file_put_contents($installedLogFile, $message);
} else {
$message = trans('installer_messages.updater.log.success_message') . $dateStamp;
file_put_contents($installedLogFile, $message . PHP_EOL, FILE_APPEND | LOCK_EX);
}
return $message;
}
/**
* Update installed file.
*
* @return int
*/
public function update()
{
return $this->create();
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace Bibhuti\Installer\Helpers;
use Illuminate\Support\Facades\DB;
trait MigrationsHelper
{
/**
* Get the migrations in /database/migrations.
*
* @return array Array of migrations name, empty if no migrations are existing
*/
public function getMigrations()
{
$migrations = glob(database_path() . DIRECTORY_SEPARATOR . 'migrations' . DIRECTORY_SEPARATOR . '*.php');
return str_replace('.php', '', $migrations);
}
/**
* Get the migrations that have already been ran.
*
* @return \Illuminate\Support\Collection List of migrations
*/
public function getExecutedMigrations()
{
// migrations table should exist, if not, user will receive an error.
return DB::table('migrations')->get()->pluck('migration');
}
}

View File

@ -0,0 +1,83 @@
<?php
namespace Bibhuti\Installer\Helpers;
class PermissionsChecker
{
/**
* @var array
*/
protected $results = [];
/**
* Set the result array permissions and errors.
*
* @return mixed
*/
public function __construct()
{
$this->results['permissions'] = [];
$this->results['errors'] = null;
}
/**
* Check for the folders permissions.
*
* @param array $folders
* @return array
*/
public function check(array $folders)
{
foreach ($folders as $folder => $permission) {
if (!($this->getPermission($folder) >= $permission)) {
$this->addFileAndSetErrors($folder, $permission, false);
} else {
$this->addFile($folder, $permission, true);
}
}
return $this->results;
}
/**
* Get a folder permission.
*
* @param $folder
* @return string
*/
private function getPermission($folder)
{
return substr(sprintf('%o', fileperms(base_path($folder))), -4);
}
/**
* Add the file to the list of results.
*
* @param $folder
* @param $permission
* @param $isSet
*/
private function addFile($folder, $permission, $isSet)
{
array_push($this->results['permissions'], [
'folder' => $folder,
'permission' => $permission,
'isSet' => $isSet,
]);
}
/**
* Add the file and set the errors.
*
* @param $folder
* @param $permission
* @param $isSet
*/
private function addFileAndSetErrors($folder, $permission, $isSet)
{
$this->addFile($folder, $permission, $isSet);
$this->results['errors'] = true;
}
}

View File

@ -0,0 +1,114 @@
<?php
namespace Bibhuti\Installer\Helpers;
class RequirementsChecker
{
/**
* Minimum PHP Version Supported (Override is in installer.php config file).
*
* @var _minPhpVersion
*/
private $_minPhpVersion = '7.0.0';
/**
* Check for the server requirements.
*
* @param array $requirements
* @return array
*/
public function check(array $requirements)
{
$results = [];
foreach ($requirements as $type => $requirement) {
switch ($type) {
// check php requirements
case 'php':
foreach ($requirements[$type] as $requirement) {
$results['requirements'][$type][$requirement] = true;
if (!extension_loaded($requirement)) {
$results['requirements'][$type][$requirement] = false;
$results['errors'] = true;
}
}
break;
// check apache requirements
case 'apache':
foreach ($requirements[$type] as $requirement) {
// if function doesn't exist we can't check apache modules
if (function_exists('apache_get_modules')) {
$results['requirements'][$type][$requirement] = true;
if (!in_array($requirement, apache_get_modules())) {
$results['requirements'][$type][$requirement] = false;
$results['errors'] = true;
}
}
}
break;
}
}
return $results;
}
/**
* Check PHP version requirement.
*
* @return array
*/
public function checkPHPversion(string $minPhpVersion = null)
{
$minVersionPhp = $minPhpVersion;
$currentPhpVersion = $this->getPhpVersionInfo();
$supported = false;
if ($minPhpVersion == null) {
$minVersionPhp = $this->getMinPhpVersion();
}
if (version_compare($currentPhpVersion['version'], $minVersionPhp) >= 0) {
$supported = true;
}
$phpStatus = [
'full' => $currentPhpVersion['full'],
'current' => $currentPhpVersion['version'],
'minimum' => $minVersionPhp,
'supported' => $supported,
];
return $phpStatus;
}
/**
* Get current Php version information.
*
* @return array
*/
private static function getPhpVersionInfo()
{
$currentVersionFull = PHP_VERSION;
preg_match("#^\d+(\.\d+)*#", $currentVersionFull, $filtered);
$currentVersion = $filtered[0];
return [
'full' => $currentVersionFull,
'version' => $currentVersion,
];
}
/**
* Get minimum PHP version ID.
*
* @return string _minPhpVersion
*/
protected function getMinPhpVersion()
{
return $this->_minPhpVersion;
}
}

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'تنصيب Laravel',
'next' => 'متابعة',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'تنصيب Laravel',
'message' => 'أهلا بك في صفحة تنصيب Laravel',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'المتطلبات',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'تراخيص المجلدات',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'الإعدادات',
'save' => 'حفظ ملف .env',
'success' => 'تم حفظ الإعدادات بنجاح',
'errors' => 'حدث خطأ أثناء إنشاء ملف .env. رجاءا قم بإنشاءه يدويا',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'النهاية',
'finished' => 'تم تنصيب البرنامج بنجاح...',
'exit' => 'إضغط هنا للخروج',
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Installer',
'next' => 'Nächster Schritt',
'finish' => 'Installieren',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Willkommen zum Installer',
'message' => 'Willkommen zum Laravel Installationsassistent.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Vorraussetzungen',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Berechtigungen',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Umgebungsvariablen',
'save' => 'Speichere .env',
'success' => 'Ihre .env Konfiguration wurde gespeichert.',
'errors' => 'Ihre .env Konfiguration konnte nicht gespeichert werden. Bitte erstellen Sie diese manuell.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Fertig!',
'finished' => 'Die Anwendung wurde erfolgreich installiert.',
'exit' => 'Hier klicken zum Beenden',
],
];

View File

@ -0,0 +1,247 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Installer',
'next' => 'Next Step',
'back' => 'Previous',
'finish' => 'Install',
'forms' => [
'errorTitle' => 'The Following errors occurred:',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'templateTitle' => 'Welcome',
'title' => 'Laravel Installer',
'message' => 'Easy Installation and Setup Wizard.',
'next' => 'Check Requirements',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'Step 1 | Server Requirements',
'title' => 'Server Requirements',
'next' => 'Check Permissions',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'Step 2 | Permissions',
'title' => 'Permissions',
'next' => 'Configure Environment',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Step 3 | Environment Settings',
'title' => 'Environment Settings',
'desc' => 'Please select how you want to configure the apps <code>.env</code> file.',
'wizard-button' => 'Form Wizard Setup',
'classic-button' => 'Classic Text Editor',
],
'wizard' => [
'templateTitle' => 'Step 3 | Environment Settings | Guided Wizard',
'title' => 'Guided <code>.env</code> Wizard',
'tabs' => [
'environment' => 'Environment',
'database' => 'Database',
'application' => 'Application',
],
'form' => [
'name_required' => 'An environment name is required.',
'app_name_label' => 'App Name',
'app_name_placeholder' => 'App Name',
'app_environment_label' => 'App Environment',
'app_environment_label_local' => 'Local',
'app_environment_label_developement' => 'Development',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'Production',
'app_environment_label_other' => 'Other',
'app_environment_placeholder_other' => 'Enter your environment...',
'app_debug_label' => 'App Debug',
'app_debug_label_true' => 'True',
'app_debug_label_false' => 'False',
'app_log_level_label' => 'App Log Level',
'app_log_level_label_debug' => 'debug',
'app_log_level_label_info' => 'info',
'app_log_level_label_notice' => 'notice',
'app_log_level_label_warning' => 'warning',
'app_log_level_label_error' => 'error',
'app_log_level_label_critical' => 'critical',
'app_log_level_label_alert' => 'alert',
'app_log_level_label_emergency' => 'emergency',
'app_url_label' => 'App Url',
'app_url_placeholder' => 'App Url',
'db_connection_failed' => 'Could not connect to the database.',
'db_connection_label' => 'Database Connection',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Database Host',
'db_host_placeholder' => 'Database Host',
'db_port_label' => 'Database Port',
'db_port_placeholder' => 'Database Port',
'db_name_label' => 'Database Name',
'db_name_placeholder' => 'Database Name',
'db_username_label' => 'Database User Name',
'db_username_placeholder' => 'Database User Name',
'db_password_label' => 'Database Password',
'db_password_placeholder' => 'Database Password',
'app_tabs' => [
'more_info' => 'More Info',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Setup Database',
'setup_application' => 'Setup Application',
'install' => 'Install',
],
],
],
'classic' => [
'templateTitle' => 'Step 3 | Environment Settings | Classic Editor',
'title' => 'Classic Environment Editor',
'save' => 'Save .env',
'back' => 'Use Form Wizard',
'install' => 'Save and Install',
],
'success' => 'Your .env file settings have been saved.',
'errors' => 'Unable to save the .env file, Please create it manually.',
],
'install' => 'Install',
/*
*
* Installed Log translations.
*
*/
'installed' => [
'success_log_message' => 'Laravel Installer successfully INSTALLED on ',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Installation Finished',
'templateTitle' => 'Installation Finished',
'finished' => 'Application has been successfully installed.',
'migration' => 'Migration &amp; Seed Console Output:',
'console' => 'Application Console Output:',
'log' => 'Installation Log Entry:',
'env' => 'Final .env File:',
'exit' => 'Click here to exit',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Updater',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'Welcome To The Updater',
'message' => 'Welcome to the update wizard.',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'Overview',
'message' => 'There is 1 update.|There are :number updates.',
'install_updates' => 'Install Updates',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Finished',
'finished' => 'Application\'s database has been successfully updated.',
'exit' => 'Click here to exit',
],
'log' => [
'success_message' => 'Laravel Installer successfully UPDATED on ',
],
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Traducciones compartidas.
*
*/
'title' => 'Instalador de Laravel',
'next' => 'Siguiente',
'finish' => 'Instalar',
/*
*
* Traducciones de la página principal.
*
*/
'welcome' => [
'title' => 'Bienvenido al instalador',
'message' => 'Bienvenido al asistente de configuración',
],
/*
*
* Tranducciones de la página de requisitos.
*
*/
'requirements' => [
'title' => 'Requisitos',
],
/*
*
* Traducciones de la pagina de permisos.
*
*/
'permissions' => [
'title' => 'Permisos',
],
/*
*
* Traducciones de la página de entorno.
*
*/
'environment' => [
'title' => 'Configuraciones del entorno',
'save' => 'Guardar archivo .env',
'success' => 'Los cambios en tu archivo .env han sido guardados.',
'errors' => 'No es posible crear el archivo .env, por favor intentalo manualmente.',
],
/*
*
* Traducciones de la página final.
*
*/
'final' => [
'title' => 'Finalizado.',
'finished' => 'La aplicación ha sido instalada con éxito!',
'exit' => 'Haz click aquí para salir.',
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laraveli installer',
'next' => 'Järgmine samm',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Tere tulemast Laraveli installerisse',
'message' => 'Tere tulemast installatsiooniviisardisse.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Nõuded',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Õigused',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Keskkonna seaded',
'save' => 'Salvesta .env',
'success' => 'Sinu .env faili seaded on salvestatud.',
'errors' => 'Ei saanud .env faili salvesta, palun loo see manuaalselt.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Lõpetatud',
'finished' => 'Laravel on edukalt installitud',
'exit' => 'Väljumiseks vajuta siia',
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'نصب کننده لاراول',
'next' => 'قدم بعدی',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'به نصب کننده خوش آمدید',
'message' => 'به جادوگر نصب خوش آمدید .',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'نیازمندی ها',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'مجوز های دسترسی',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'تنظیمات پیکربندی',
'save' => 'ذخیره کردن .env',
'success' => 'فایل .env برای شما ذخیره شد.',
'errors' => 'ذخیره کردن فایل .env امکان پذیر نیست، لطفا آن را به صورت دستی ایجاد کنید.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'تمام شد',
'finished' => 'اپلیکیشن با موفقیت نصب شد.',
'exit' => 'برای خروج اینجا را کلیک کنید',
],
];

View File

@ -0,0 +1,236 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Installateur de Laravel',
'next' => 'Suivant',
'back' => 'Précedent',
'finish' => 'Installer',
'forms' => [
'errorTitle' => 'Les erreurs suivantes sont survenues:',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Bienvenue dans linstallateur...',
'message' => 'Assistant d\'installation et de configuration facile.',
'next' => 'Vérifier les prérequis',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'Étape 1 | Prérequis du serveur',
'title' => 'Prérequis du serveur',
'next' => 'Vérifier les Permissions',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'Étape 2 | Permissions',
'title' => 'Permissions',
'next' => 'Configurer l\'Environment',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Étape 3 | Paramètres d\'environnement',
'title' => 'Paramètres d\'environnement',
'desc' => 'Veuillez sélectionner comment vous souhaitez configurer les applications <code>.env</code> file.',
'wizard-button' => 'Configuration de l\'assistant de formulaire',
'classic-button' => 'Éditeur de texte classique',
],
'wizard' => [
'templateTitle' => 'Étape 3 | Paramètres d\'environnement | Assistant guidé',
'title' => 'Assitant <code>.env</code> Guidé',
'tabs' => [
'environment' => 'Environnement',
'database' => 'Base de donnée',
'application' => 'Application',
],
'form' => [
'name_required' => 'Un nom d\'environnement est requis.',
'app_name_label' => 'App Name',
'app_name_placeholder' => 'App Name',
'app_environment_label' => 'App Environment',
'app_environment_label_local' => 'Local',
'app_environment_label_developement' => 'Development',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'Production',
'app_environment_label_other' => 'Other',
'app_environment_placeholder_other' => 'Entrez votre environnement...',
'app_debug_label' => 'App Debug',
'app_debug_label_true' => 'True',
'app_debug_label_false' => 'False',
'app_log_level_label' => 'App Log Level',
'app_log_level_label_debug' => 'debug',
'app_log_level_label_info' => 'info',
'app_log_level_label_notice' => 'notice',
'app_log_level_label_warning' => 'warning',
'app_log_level_label_error' => 'error',
'app_log_level_label_critical' => 'critical',
'app_log_level_label_alert' => 'alert',
'app_log_level_label_emergency' => 'emergency',
'app_url_label' => 'App Url',
'app_url_placeholder' => 'App Url',
'db_connection_label' => 'Database Connection',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Database Host',
'db_host_placeholder' => 'Database Host',
'db_port_label' => 'Database Port',
'db_port_placeholder' => 'Database Port',
'db_name_label' => 'Database Name',
'db_name_placeholder' => 'Database Name',
'db_username_label' => 'Database User Name',
'db_username_placeholder' => 'Database User Name',
'db_password_label' => 'Database Password',
'db_password_placeholder' => 'Database Password',
'app_tabs' => [
'more_info' => 'Plus d\'informations',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Configuration de la base de donnée',
'setup_application' => 'Configuration de l\'application',
'install' => 'Installer',
],
],
],
'classic' => [
'templateTitle' => 'Étape 3 | Paramètres d\'environnement | Editeur Classique',
'title' => 'Éditeur de texte classique',
'save' => 'Enregistrer .env',
'back' => 'Utiliser le formulaire',
'install' => 'Enregistrer et installer',
],
'success' => 'Vos paramètres de fichier .env ont été enregistrés.',
'errors' => 'Impossible de sauvegarder le fichier .env, veuillez le créer manuellement.',
],
'install' => 'Installer',
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Terminé',
'templateTitle' => 'Installation Terminé',
'finished' => 'Lapplication a été installée avec succès.',
'migration' => 'Migration &amp; Seed Console Output:',
'console' => 'Application Console Output:',
'log' => 'Installation Log Entry:',
'env' => 'Final .env File:',
'exit' => 'Cliquez ici pour quitter',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Mise à jour de Laravel',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'Bienvenue dans l\'updateur...',
'message' => 'Bienvenue dans le programme de mise à jour.',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'Aperçu',
'message' => 'Il y a 1 mise à jour.|Il y a :number mises à jour.',
'install_updates' => 'Installer la mise à jour',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Terminé',
'finished' => 'Lapplication a été mise à jour avec succès.',
'exit' => 'Cliquez ici pour quitter',
],
'log' => [
'success_message' => 'L\'installateur Laravel a été mis à jour avec succès le ',
],
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Εγκατάσταση Laravel',
'next' => 'Επόμενο',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Καλωσήρθαστε στο Installer',
'message' => 'Καλωσήρθατε στον οδηγό εγκατάστασης.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Απαιτήσεις συστήματος',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Δικαιώματα',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Ρυθμίσεις Περιβάλλοντος',
'save' => 'Αποθήκευση .env αρχείου',
'success' => 'Το αρχείο ρυθμίσεων .env έχει αποθηκευτεί με επιτυχία.',
'errors' => 'Το αρχείο ρυθμίσεων .env ΔΕΝ μπόρεσε να αποθηκευτεί με επιτυχία. Παρακαλώ δημιουργίστε το χειροκίνητα.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Ολοκληρώθηκε',
'finished' => 'Το πρόγραμμά σας εγκαταστάθηκε με επιτυχία.',
'exit' => 'Πατήστε εδώ για έξοδο.',
],
];

View File

@ -0,0 +1,246 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Installer',
'next' => 'Selanjutnya',
'back' => 'Kembali',
'finish' => 'Pasang',
'forms' => [
'errorTitle' => 'Terjadi galat sebagai berikut:',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'templateTitle' => 'Selamat Datang',
'title' => 'Laravel Installer',
'message' => 'Instalasi Mudah dan Persiapan Aplikasi',
'next' => 'Cek Kebutuhan',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'Langkah 1 | Kebutuhan Server',
'title' => 'Kebutuhan Server',
'next' => 'Cek Hak Akses',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'Langkah 2 | Hak Akses',
'title' => 'Hak Akses',
'next' => 'Konfigurasi Lingkungan',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Langkah 3 | Penyetelan Lingkungan',
'title' => 'Penyetelan Lingkungan',
'desc' => 'Silahkan pilih bagaimana Anda akan mengkofigurasi berkas <code>.env</code> aplikasi.',
'wizard-button' => 'Form Penyetelan Wizard',
'classic-button' => 'Classic Text Editor',
],
'wizard' => [
'templateTitle' => 'Langkah 3 | Penyetelan Lingkungan | Wizard Terpandu',
'title' => 'Wizard <code>.env</code> Terpandu',
'tabs' => [
'environment' => 'Lingkungan',
'database' => 'Basis Data',
'application' => 'Aplikasi',
],
'form' => [
'name_required' => 'Lingkungan aplikasi harus ditetapkan',
'app_name_label' => 'Nama Aplikasi',
'app_name_placeholder' => 'Nama Aplikasi',
'app_environment_label' => 'Lingkungan Aplikasi',
'app_environment_label_local' => 'Lokal',
'app_environment_label_developement' => 'Pengembangan',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'Produksi',
'app_environment_label_other' => 'Lainnya',
'app_environment_placeholder_other' => 'Masukan lingkungan...',
'app_debug_label' => 'Debug Aplikasi',
'app_debug_label_true' => 'Iya',
'app_debug_label_false' => 'Tidak',
'app_log_level_label' => 'Level Log Aplikasi',
'app_log_level_label_debug' => 'debug',
'app_log_level_label_info' => 'info',
'app_log_level_label_notice' => 'notice',
'app_log_level_label_warning' => 'warning',
'app_log_level_label_error' => 'error',
'app_log_level_label_critical' => 'critical',
'app_log_level_label_alert' => 'alert',
'app_log_level_label_emergency' => 'emergency',
'app_url_label' => 'URL Aplikasi',
'app_url_placeholder' => 'URL Aplikasi',
'db_connection_label' => 'Koneksi Basis Data',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Host Basis Data',
'db_host_placeholder' => 'Host Basis Data',
'db_port_label' => 'Port Basis Data',
'db_port_placeholder' => 'Port Basis Data',
'db_name_label' => 'Nama Basis Data',
'db_name_placeholder' => 'Nama Basis Data',
'db_username_label' => 'Pengguna Basis Data',
'db_username_placeholder' => 'Pengguna Basis Data',
'db_password_label' => 'Kata Sandi Basis Data',
'db_password_placeholder' => 'Kata Sandi Basis Data',
'app_tabs' => [
'more_info' => 'Informasi Lainnya',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Setel Basis Data',
'setup_application' => 'Setel Aplikasi',
'install' => 'Pasang',
],
],
],
'classic' => [
'templateTitle' => 'Langkah 3 | Penyetelan Lingkungan | Classic Editor',
'title' => 'Classic Environment Editor',
'save' => 'Simpan .env',
'back' => 'Gunakan Form Wizard',
'install' => 'Simpan dan Pasang',
],
'success' => 'Berkas penyetelan .env Anda telah disimpan.',
'errors' => 'Tidak bisa menyimpan berkas .env. Silahkan buat secara manual.',
],
'install' => 'Pasang',
/*
*
* Installed Log translations.
*
*/
'installed' => [
'success_log_message' => 'Laravel Installer berhasil DIPASANG pada ',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Instalasi Selesai',
'templateTitle' => 'Instalasi Selesai',
'finished' => 'Aplikasi telah berhasil dipasang.',
'migration' => 'Keluaran Migration &amp; Seed Console:',
'console' => 'Keluaran Application Console:',
'log' => 'Entri Log Aplikasi:',
'env' => 'Hasil akhir berkas .env:',
'exit' => 'Klik disini untuk keluar',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Updater',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'Selamat Datang di App Updater',
'message' => 'Selamat Datang di update wizard.',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'Tinjauan',
'message' => 'Ada 1 pembaruan.|Ada :number pembaruan.',
'install_updates' => 'Pasang Pembaruan',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Selesai',
'finished' => 'Basis Data Aplikasi telah berhasil diperbarui.',
'exit' => 'Klik disini untuk keluar',
],
'log' => [
'success_message' => 'Laravel Installer berhasil DIPERBARUI pada ',
],
],
];

View File

@ -0,0 +1,58 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Installer',
'next' => 'Passo successivo',
'finish' => 'Installa',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Benvenuto al programma di installazione',
'message' => 'Benvenuto alla configurazione guidata.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Requisiti',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Permessi',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Configurazione ambiente',
'save' => 'Salva .env',
'success' => 'La configurazione del file .env &egrave; stata salvata correttamente.',
'errors' => 'Impossibile salvare il file .env, per favore crealo manualmente.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Finito',
'finished' => 'L\'applicazione è stata configurata correttamente.',
'exit' => 'Clicca qui per uscire',
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Installer',
'next' => 'Volgende stap',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Welkom bij het installatie proces...',
'message' => 'Welkom bij de installatiewizard',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Vereisten',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Permissies',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Environment Settings',
'save' => '.env Opslaan',
'success' => 'Uw .env bestand is opgeslagen.',
'errors' => 'Het is niet mogelijk om een .env bestand aan te maken, maak a.u.b het bestand zelf aan.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Voltooid',
'finished' => 'Applicatie is succesvol geïnstalleerd.',
'exit' => 'Klik hier om af te sluiten.',
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Instalator',
'next' => 'Następny krok',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Instalacja Laravel',
'message' => 'Witaj w kreatorze instalacji.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Wymagania systemowe ',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Uprawnienia',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Ustawnienia środowiska',
'save' => 'Zapisz .env',
'success' => 'Plik .env został poprawnie zainstalowany.',
'errors' => 'Nie można zapisać pliku .env, Proszę utworzyć go ręcznie.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Instalacja zakończona',
'finished' => 'Aplikacja została poprawnie zainstalowana.',
'exit' => 'Kliknij aby zakończyć',
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Instalador Laravel',
'next' => 'Próximo Passo',
'finish' => 'Instalar',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Bem-vindo ao Instalador',
'message' => 'Bem-vindo ao assistente de configuração.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Requisitos',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Permissões',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Configurações de Ambiente',
'save' => 'Salvar .env',
'success' => 'Suas configurações de arquivo .env foram salvas.',
'errors' => 'Não foi possível salvar o arquivo .env, por favor crie-o manualmente.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Terminado',
'finished' => 'Aplicação foi instalada com sucesso',
'exit' => 'Clique aqui para sair',
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Instalação de Laravel',
'next' => 'Próximo Passo',
'finish' => 'Instalar',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Bem-vindo ao Instalador',
'message' => 'Bem-vindo ao assistente de configuração.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Requisitos',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Permissões',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Configurações de Ambiente',
'save' => 'Salvar .env',
'success' => 'As configurações de seu arquivo .env foram gravadas.',
'errors' => 'Não foi possível gravar o arquivo .env, por favor crie-o manualmente.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Terminado',
'finished' => 'Aplicação foi instalada com sucesso',
'exit' => 'Clique aqui para sair',
],
];

View File

@ -0,0 +1,63 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Procesul de instalare Laravel',
'next' => 'Pasul următor',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Bun venit în procesul de instalare...',
'message' => 'Bun venit în configurarea asistată.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Cerințe',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Permisiuni',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => 'Settări ale mediului',
'save' => 'Salvează fișier .env',
'success' => 'Setările tale au fost salvate în fișierul .env.',
'errors' => 'Nu am putut salva fișierul .env, Te rugăm să-l creezi manual.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Am terminat',
'finished' => 'Aplicația a fost instalată cu succes.',
'exit' => 'Click aici pentru a ieși',
],
];

View File

@ -0,0 +1,174 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Установка Laravel',
'next' => 'Следующий шаг',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => 'Установка Laravel',
'message' => 'Добро пожаловать в первоначальную настройку фреймворка Laravel.',
'next' => 'Следующий шаг',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => 'Необходимые модули',
'next' => 'Следующий шаг',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => 'Проверка прав на папках',
'next' => 'Следующий шаг',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Шаг 3 | Настройки среды',
'title' => 'Настройки среды',
'desc' => 'Выберите, как вы хотите настроить файл <code> .env </code>.',
'wizard-button' => 'Мастера форм',
'classic-button' => 'Редактор текста',
],
'wizard' => [
'templateTitle' => 'Шаг 3 | Настройки среды | Управляемый мастер',
'title' => 'Управляемый <code> .env </code> Мастер',
'tabs' => [
'environment' => 'Окружение',
'database' => 'База данных',
'application' => 'Приложение',
],
'form' => [
'name_required' => 'Требуется имя среды.',
'app_name_label' => 'Имя приложения',
'app_name_placeholder' => 'Имя приложения',
'app_environment_label' => 'Окружение приложения',
'app_environment_label_local' => 'Локальное',
'app_environment_label_developement' => 'Разработочное',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'Продакшн',
'app_environment_label_other' => 'Другое',
'app_environment_placeholder_other' => 'Введите свое окружение ...',
'app_debug_label' => 'Дебаг приложения',
'app_debug_label_true' => 'Да',
'app_debug_label_false' => 'Нет',
'app_log_level_label' => 'Уровень журнала логирования',
'app_log_level_label_debug' => 'debug',
'app_log_level_label_info' => 'info',
'app_log_level_label_notice' => 'notice',
'app_log_level_label_warning' => 'warning',
'app_log_level_label_error' => 'error',
'app_log_level_label_critical' => 'critical',
'app_log_level_label_alert' => 'alert',
'app_log_level_label_emergency' => 'emergency',
'app_url_label' => 'URL приложения',
'app_url_placeholder' => 'URL приложения',
'db_connection_label' => 'Подключение к базе данных',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Хост базы данных',
'db_host_placeholder' => 'Хост базы данных',
'db_port_label' => 'Порт базы данных',
'db_port_placeholder' => 'Порт базы данных',
'db_name_label' => 'Название базы данных',
'db_name_placeholder' => 'Название базы данных',
'db_username_label' => 'Имя пользователя базы данных',
'db_username_placeholder' => 'Имя пользователя базы данных',
'db_password_label' => 'Пароль базы данных',
'db_password_placeholder' => 'Пароль базы данных',
'app_tabs' => [
'more_info' => 'Больше информации',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Настройка базы данных',
'setup_application' => 'Настройка приложения',
'install' => 'Установить',
],
],
],
'classic' => [
'templateTitle' => 'Шаг 3 | Настройки среды | Классический редактор',
'title' => 'Классический редактор среды',
'save' => 'Сохранить .env',
'back' => 'Использовать мастер форм',
'install' => 'Сохранить и установить',
],
'title' => 'Настройки окружения',
'save' => 'Сохранить .env',
'success' => 'Настройки успешно сохранены в файле .env',
'errors' => 'Произошла ошибка при сохранении файла .env, пожалуйста, сохраните его вручную',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Готово',
'finished' => 'Приложение успешно настроено.',
'exit' => 'Нажмите для выхода',
],
];

View File

@ -0,0 +1,246 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'โปรแกรมติดตั้ง Laravel',
'next' => 'ขั้นตอนต่อไป',
'back' => 'ย้อนกลับ',
'finish' => 'ติดตั้ง',
'forms' => [
'errorTitle' => 'ข้อผิดพลาดต่อไปนี้เกิดขึ้น:',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'templateTitle' => 'ยินดีต้อนรับ',
'title' => 'โปรแกรมติดตั้ง Laravel',
'message' => 'วิซาร์ดการติดตั้งและติดตั้งง่าย',
'next' => 'ตรวจสอบข้อกำหนด',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'ขั้นตอนที่ 1 | ข้อกำหนดของเซิร์ฟเวอร์',
'title' => 'ข้อกำหนดของเซิร์ฟเวอร์',
'next' => 'ตรวจสอบการอนุญาต',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'ขั้นตอนที่ 2 | สิทธิ์',
'title' => 'สิทธิ์',
'next' => 'กำหนดค่าสภาพแวดล้อม',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'ขั้นตอนที่ 3 | การตั้งค่าสภาพแวดล้อม',
'title' => 'การตั้งค่าสภาพแวดล้อม',
'desc' => 'โปรดเลือกวิธีที่คุณต้องการกำหนดค่าไฟล์แอป <code> .env </code>',
'wizard-button' => 'การตั้งค่าตัวช่วยสร้างฟอร์ม',
'classic-button' => 'แก้ไขข้อความคลาสสิก',
],
'wizard' => [
'templateTitle' => 'ขั้นตอนที่ 3 | การตั้งค่าสภาพแวดล้อม | ตัวช่วยสร้างการแนะนำ',
'title' => 'วิซาร์ด <code> .env </code> ที่แนะนำ',
'tabs' => [
'environment' => 'สิ่งแวดล้อม',
'database' => 'ฐานข้อมูล',
'application' => 'แอพพลิเคชั่น',
],
'form' => [
'name_required' => 'ต้องระบุชื่อสภาพแวดล้อม',
'app_name_label' => 'ชื่อแอป',
'app_name_placeholder' => 'ชื่อแอป',
'app_environment_label' => 'สภาพแวดล้อมของแอป',
'app_environment_label_local' => 'ในประเทศ',
'app_environment_label_developement' => 'พัฒนาการ',
'app_environment_label_qa' => 'Qa',
'app_environment_label_production' => 'การผลิต',
'app_environment_label_other' => 'อื่น ๆ',
'app_environment_placeholder_other' => 'เข้าสู่สภาพแวดล้อมของคุณ ...',
'app_debug_label' => 'Debug แอป',
'app_debug_label_true' => 'จริง',
'app_debug_label_false' => 'เท็จ',
'app_log_level_label' => 'ระดับการบันทึกแอป',
'app_log_level_label_debug' => 'การแก้ปัญหา',
'app_log_level_label_info' => 'ข้อมูล',
'app_log_level_label_notice' => 'แจ้งให้ทราบ',
'app_log_level_label_warning' => 'การเตือน',
'app_log_level_label_error' => 'ความผิดพลาด',
'app_log_level_label_critical' => 'วิกฤติ',
'app_log_level_label_alert' => 'เตือนภัย',
'app_log_level_label_emergency' => 'กรณีฉุกเฉิน',
'app_url_label' => 'แอป URL',
'app_url_placeholder' => 'แอป URL',
'db_connection_label' => 'การเชื่อมต่อฐานข้อมูล',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'โฮสต์ฐานข้อมูล',
'db_host_placeholder' => 'โฮสต์ฐานข้อมูล',
'db_port_label' => 'พอร์ตฐานข้อมูล',
'db_port_placeholder' => 'พอร์ตฐานข้อมูล',
'db_name_label' => 'ชื่อฐานข้อมูล',
'db_name_placeholder' => 'ชื่อฐานข้อมูล',
'db_username_label' => 'ชื่อผู้ใช้ฐานข้อมูล',
'db_username_placeholder' => 'ชื่อผู้ใช้ฐานข้อมูล',
'db_password_label' => 'รหัสผ่านฐานข้อมูล',
'db_password_placeholder' => 'รหัสผ่านฐานข้อมูล',
'app_tabs' => [
'more_info' => 'ข้อมูลเพิ่มเติม',
'broadcasting_title' => 'Broadcasting, Caching, Session, &amp; Queue',
'broadcasting_label' => 'Broadcast Driver',
'broadcasting_placeholder' => 'Broadcast Driver',
'cache_label' => 'Cache Driver',
'cache_placeholder' => 'Cache Driver',
'session_label' => 'Session Driver',
'session_placeholder' => 'Session Driver',
'queue_label' => 'Queue Driver',
'queue_placeholder' => 'Queue Driver',
'redis_label' => 'Redis Driver',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Password',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Mail Driver',
'mail_driver_placeholder' => 'Mail Driver',
'mail_host_label' => 'Mail Host',
'mail_host_placeholder' => 'Mail Host',
'mail_port_label' => 'Mail Port',
'mail_port_placeholder' => 'Mail Port',
'mail_username_label' => 'Mail Username',
'mail_username_placeholder' => 'Mail Username',
'mail_password_label' => 'Mail Password',
'mail_password_placeholder' => 'Mail Password',
'mail_encryption_label' => 'Mail Encryption',
'mail_encryption_placeholder' => 'Mail Encryption',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'Pusher App Id',
'pusher_app_id_palceholder' => 'Pusher App Id',
'pusher_app_key_label' => 'Pusher App Key',
'pusher_app_key_palceholder' => 'Pusher App Key',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'ตั้งค่าฐานข้อมูล',
'setup_application' => 'แอปพลิเคชันติดตั้ง',
'install' => 'ติดตั้ง',
],
],
],
'classic' => [
'templateTitle' => 'ขั้นตอนที่ 3 | การตั้งค่าสภาพแวดล้อม | ตัวแก้ไขแบบคลาสสิก',
'title' => 'ตัวแก้ไขสภาพแวดล้อมแบบคลาสสิค',
'save' => 'บันทึก .env',
'back' => 'ใช้ตัวช่วยสร้างแบบฟอร์ม',
'install' => 'บันทึกและติดตั้ง',
],
'success' => 'ของคุณ .env บันทึกการตั้งค่าไฟล์แล้ว',
'errors' => 'ไม่สามารถบันทึก .env ไฟล์, โปรดสร้างด้วยตนเอง',
],
'install' => 'ติดตั้ง',
/*
*
* Installed Log translations.
*
*/
'installed' => [
'success_log_message' => 'ติดตั้ง Laravel สำเร็จติดตั้งแล้ว',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'การติดตั้งเสร็จสิ้น',
'templateTitle' => 'การติดตั้งเสร็จสิ้น',
'finished' => 'ติดตั้งแอปพลิเคชันสำเร็จแล้ว',
'migration' => 'การย้าย &amp; Seed Console Output:',
'console' => 'แอพพลิเคชันคอนโซลเอาท์พุท:',
'log' => 'บันทึกการติดตั้ง:',
'env' => 'ไฟล์. env สุดท้าย:',
'exit' => 'คลิกที่นี่เพื่อออก',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel Updater',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'ยินดีต้อนรับสู่ The Updater',
'message' => 'ยินดีต้อนรับสู่ตัวช่วยการอัพเดต',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'ภาพรวม',
'message' => 'มีการอัปเดต 1 รายการ | มี: อัปเดตตัวเลข',
'install_updates' => 'ติดตั้งการปรับปรุง',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'เสร็จ',
'finished' => 'แอพพลิเคชั่น อัปเดตฐานข้อมูลสำเร็จแล้ว',
'exit' => 'คลิกที่นี่เพื่อออก',
],
'log' => [
'success_message' => 'ติดตั้ง Laravel สำเร็จแล้วอัปเดตเมื่อ',
],
],
];

View File

@ -0,0 +1,245 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Kurulum',
'next' => 'Sonraki Adım',
'back' => 'Önceki Adım',
'finish' => 'Kur',
'forms' => [
'errorTitle' => 'Hatalar tespit edildi :',
],
/*
*
* Home page translations.
*
*/
'welcome' => [
'templateTitle' => 'Kurulum\'a Hoşgeldiniz',
'title' => 'Kurulum',
'message' => 'Kolay Kurulum Sihirbazı.',
'next' => 'Gereksinimleri Denetle',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'templateTitle' => 'Adım 1 | Sunucu Gereksinimleri',
'title' => 'Sunucu Gereksinimleri',
'next' => 'İzinleri Kontrol Et',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'templateTitle' => 'Adım 2 | İzinler',
'title' => 'İzinler',
'next' => 'Ortam ayarlarına geç',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'menu' => [
'templateTitle' => 'Adım 3 | Ortam Ayarları',
'title' => 'Ortam Ayarları',
'desc' => 'Lütfen uygulamanın <code> .env </code> dosyasını nasıl yapılandıracağınızı seçin.',
'wizard-button' => 'Form Sihirbazı Kurulumu ',
'classic-button' => 'Klasik Metin Editörü',
],
'wizard' => [
'templateTitle' => 'Adım 3 | Ortam Ayarları | Form sihirbazı',
'title' => 'Guided <code>.env</code> Wizard',
'tabs' => [
'environment' => 'Ortam',
'database' => 'Veritabanı',
'application' => 'Uygulama',
],
'form' => [
'name_required' => 'Bir ortam adı gerekiyor.',
'app_name_label' => 'Uygulama Adı',
'app_name_placeholder' => 'Uygulama Adı',
'app_environment_label' => 'Uygulama Ortamı',
'app_environment_label_local' => 'Yerel',
'app_environment_label_developement' => 'Geliştirme',
'app_environment_label_qa' => 'qa',
'app_environment_label_production' => 'Üretim',
'app_environment_label_other' => 'Diğer',
'app_environment_placeholder_other' => 'Çevrenizi girin ...',
'app_debug_label' => 'Uygulama Hataları Gösterme',
'app_debug_label_true' => 'Aktif',
'app_debug_label_false' => 'Pasif',
'app_log_level_label' => 'Uygulama Günlüğü Düzeyi',
'app_log_level_label_debug' => 'hata ayıklama',
'app_log_level_label_info' => 'bilgi',
'app_log_level_label_notice' => 'haber',
'app_log_level_label_warning' => 'uyarı',
'app_log_level_label_error' => 'hata',
'app_log_level_label_critical' => 'kritik',
'app_log_level_label_alert' => 'uyarı',
'app_log_level_label_emergency' => 'acil durum',
'app_url_label' => 'Uygulama URL\'si',
'app_url_placeholder' => 'Uygulama URL\'si',
'db_connection_label' => 'Veritabanı Bağlantısı',
'db_connection_label_mysql' => 'mysql',
'db_connection_label_sqlite' => 'sqlite',
'db_connection_label_pgsql' => 'pgsql',
'db_connection_label_sqlsrv' => 'sqlsrv',
'db_host_label' => 'Veritabanı Sunucusu',
'db_host_placeholder' => 'Veritabanı Sunucusu',
'db_port_label' => 'Veritabanı Bağlantı Noktası',
'db_port_placeholder' => 'Veritabanı Bağlantı Noktası',
'db_name_label' => 'Veritabanı Adı',
'db_name_placeholder' => 'Veritabanı Adı',
'db_username_label' => 'Veritabanı Kullanıcı Adı',
'db_username_placeholder' => 'Veritabanı Kullanıcı Adı',
'db_password_label' => 'Veritabanı Şifresi',
'db_password_placeholder' => 'Veritabanı Şifresi',
'app_tabs' => [
'more_info' => 'Daha Fazla Bilgi',
'broadcasting_title' => 'Yayıncılık, Önbellekleme, Oturum &amp; Kuyruk',
'broadcasting_label' => 'Yayıncı Sürücüsü',
'broadcasting_placeholder' => 'Yayıncı Sürücüsü',
'cache_label' => 'Önbellek Sürücüsü',
'cache_placeholder' => 'Önbellek Sürücüsü',
'session_label' => 'Oturum Sürücüsü',
'session_placeholder' => 'Oturum Sürücüsü',
'queue_label' => 'Kuyruk Sürücüsü',
'queue_placeholder' => 'Kuyruk Sürücüsü',
'redis_label' => 'Redis Sürücüsü',
'redis_host' => 'Redis Host',
'redis_password' => 'Redis Şifre',
'redis_port' => 'Redis Port',
'mail_label' => 'Mail',
'mail_driver_label' => 'Posta Sürücüsü',
'mail_driver_placeholder' => 'Posta Sürücüsü',
'mail_host_label' => 'Posta Sunucusu',
'mail_host_placeholder' => 'Posta Sunucusu',
'mail_port_label' => 'Posta Bağlantı Noktası',
'mail_port_placeholder' => 'Posta Bağlantı Noktası',
'mail_username_label' => 'Posta Kullanıcı Adı',
'mail_username_placeholder' => 'Posta Kullanıcı Adı',
'mail_password_label' => 'Posta Parolası',
'mail_password_placeholder' => 'Posta Parolası',
'mail_encryption_label' => 'Posta Güvenlik Türü',
'mail_encryption_placeholder' => 'Posta Güvenlik Türü',
'pusher_label' => 'Pusher',
'pusher_app_id_label' => 'İtici Uygulama Kimliği',
'pusher_app_id_palceholder' => 'İtici Uygulama Kimliği',
'pusher_app_key_label' => 'İtici Uygulama Anahtarı',
'pusher_app_key_palceholder' => 'İtici Uygulama Anahtarı',
'pusher_app_secret_label' => 'Pusher App Secret',
'pusher_app_secret_palceholder' => 'Pusher App Secret',
],
'buttons' => [
'setup_database' => 'Veritabanı Ayarları',
'setup_application' => 'Uygulama Ayarları',
'install' => 'Yükle',
],
],
],
'classic' => [
'templateTitle' => '3. Adım | Ortam Ayarları | Klasik Editör ',
'title' => 'Klasik Metin Editörü',
'save' => 'Kaydet (.env)',
'back' => 'Form Sihirbazını Kullan',
'install' => 'Yükle',
],
'success' => '.env dosyası ayarları kaydedildi.',
'errors' => '.env dosyasını kaydedemiyoruz, lütfen el ile oluşturun.',
],
'install' => 'Kurulum',
/*
*
* Installed Log translations.
*
*/
'installed' => [
'success_log_message' => 'Uygulama başarıyla KURULDU ',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Kurulum Bitti',
'templateTitle' => 'Kurulum Bitti',
'finished' => 'Uygulama başarıyla kuruldu.',
'migration' => 'Veritabanı Konsolu Çıktısı: ',
'console' => 'Uygulama Konsolu Çıktısı:',
'log' => 'Kurulum Günlüğü Girişi:',
'env' => 'Son .env Dosyası:',
'exit' => ıkmak için burayı tıklayın',
],
/*
*
* Update specific translations
*
*/
'updater' => [
/*
*
* Shared translations.
*
*/
'title' => 'Güncelleyici',
/*
*
* Welcome page translations for update feature.
*
*/
'welcome' => [
'title' => 'Güncelleyiciye Hoş Geldiniz',
'message' => 'Güncelleme sihirbazına hoş geldiniz.',
],
/*
*
* Welcome page translations for update feature.
*
*/
'overview' => [
'title' => 'Genel bakış',
'message' => '1 güncelleme var.| :number güncellemeleri var.',
'install_updates' => 'Güncellemeyi yükle',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => 'Tamamlandı',
'finished' => 'Uygulamanın veritabanını başarıyla güncelleştirildi.',
'exit' => ıkmak ve uygulamayı başlatmak için buraya tıklayın',
],
'log' => [
'success_message' => 'Uygulama GÜNCELLENDİ ',
],
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel安装程序',
'next' => '下一步',
'finish' => '安装',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => '欢迎来到Laravel安装程序',
'message' => '欢迎来到安装向导.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => '环境要求',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => '权限',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => '环境设置',
'save' => '保存 .env',
'success' => '.env 文件保存成功.',
'errors' => '无法保存 .env 文件, 请手动创建它.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => '完成',
'finished' => '应用已成功安装.',
'exit' => '点击退出',
],
];

View File

@ -0,0 +1,64 @@
<?php
return [
/*
*
* Shared translations.
*
*/
'title' => 'Laravel安裝程序',
'next' => '下一步',
'finish' => '安裝',
/*
*
* Home page translations.
*
*/
'welcome' => [
'title' => '歡迎來到Laravel安裝程序',
'message' => '歡迎來到安裝嚮導.',
],
/*
*
* Requirements page translations.
*
*/
'requirements' => [
'title' => '環境要求',
],
/*
*
* Permissions page translations.
*
*/
'permissions' => [
'title' => '權限',
],
/*
*
* Environment page translations.
*
*/
'environment' => [
'title' => '環境設置',
'save' => '保存 .env',
'success' => '.env 文件保存成功.',
'errors' => '無法保存 .env 文件, 請手動創建它.',
],
/*
*
* Final page translations.
*
*/
'final' => [
'title' => '完成',
'finished' => '應用已成功安裝.',
'exit' => '點擊退出',
],
];

View File

@ -0,0 +1,60 @@
<?php
namespace Bibhuti\Installer\Middleware;
use Closure;
use Redirect;
class canInstall
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Illuminate\Http\RedirectResponse|mixed
*/
public function handle($request, Closure $next)
{
if ($this->alreadyInstalled()) {
$installedRedirect = config('installer.installedAlreadyAction');
switch ($installedRedirect) {
case 'route':
$routeName = config('installer.installed.redirectOptions.route.name');
$data = config('installer.installed.redirectOptions.route.message');
return redirect()->route($routeName)->with(['data' => $data]);
break;
case 'abort':
abort(config('installer.installed.redirectOptions.abort.type'));
break;
case 'dump':
$dump = config('installer.installed.redirectOptions.dump.data');
dd($dump);
break;
case '404':
case 'default':
default:
abort(404);
break;
}
}
return $next($request);
}
/**
* If application is already installed.
*
* @return bool
*/
public function alreadyInstalled()
{
return file_exists(storage_path('installed'));
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace Bibhuti\Installer\Middleware;
use Closure;
class canUpdate
{
use \Bibhuti\Installer\Helpers\MigrationsHelper;
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$updateEnabled = filter_var(config('installer.updaterEnabled'), FILTER_VALIDATE_BOOLEAN);
switch ($updateEnabled) {
case true:
$canInstall = new canInstall;
// if the application has not been installed,
// redirect to the installer
if (!$canInstall->alreadyInstalled()) {
return redirect()->route('installer::welcome');
}
if ($this->alreadyUpdated()) {
abort(404);
}
break;
case false:
default:
abort(404);
break;
}
return $next($request);
}
/**
* If application is already updated.
*
* @return bool
*/
public function alreadyUpdated()
{
$migrations = $this->getMigrations();
$dbMigrations = $this->getExecutedMigrations();
// If the count of migrations and dbMigrations is equal,
// then the update as already been updated.
if (count($migrations) == count($dbMigrations)) {
return true;
}
// Continue, the app needs an update
return false;
}
}

View File

@ -0,0 +1,73 @@
<?php
namespace Bibhuti\Installer\Providers;
include_once __DIR__ . '/../Helpers/Function.php';
use Bibhuti\Installer\Middleware\canInstall;
use Bibhuti\Installer\Middleware\canUpdate;
use Illuminate\Routing\Router;
use Illuminate\Support\ServiceProvider;
class LaravelInstallerServiceProvider extends ServiceProvider
{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = false;
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->publishFiles();
$this->loadRoutesFrom(__DIR__ . '/../Routes/web.php');
// $this->app->singleton('helpers', function ($app) {
// return __DIR__ . '/../Helpers/functions.php';
// });
}
/**
* Bootstrap the application events.
*
* @param \Illuminate\Routing\Router $router
*/
public function boot(Router $router)
{
$this->loadViewsFrom(__DIR__ . '/../Views/', 'installer');
$router->middlewareGroup('install', [CanInstall::class]);
$router->middlewareGroup('update', [CanUpdate::class]);
}
/**
* Publish config file for the installer.
*
* @return void
*/
protected function publishFiles()
{
$this->publishes([
__DIR__ . '/../Config/installer.php' => base_path('config/installer.php'),
], 'installer');
$this->publishes([
__DIR__ . '/../assets' => public_path('installer'),
], 'installer');
$this->publishes([
__DIR__ . '/../Views' => base_path('resources/views/vendor/installer'),
], 'installer');
$this->publishes([
__DIR__ . '/../Lang' => base_path('resources/lang'),
], 'installer');
}
}

79
src/Routes/web.php Normal file
View File

@ -0,0 +1,79 @@
<?php
Route::group(['prefix' => 'install', 'as' => 'installer::', 'namespace' => 'Bibhuti\Installer\Controllers', 'middleware' => ['install', 'web']], function () {
Route::get('/', [
'as' => 'welcome',
'uses' => 'WelcomeController@welcome',
]);
Route::get('environment', [
'as' => 'environment',
'uses' => 'EnvironmentController@environmentMenu',
]);
Route::get('environment/wizard', [
'as' => 'environmentWizard',
'uses' => 'EnvironmentController@environmentWizard',
]);
Route::post('environment/saveWizard', [
'as' => 'environmentSaveWizard',
'uses' => 'EnvironmentController@saveWizard',
]);
Route::get('environment/classic', [
'as' => 'environmentClassic',
'uses' => 'EnvironmentController@environmentClassic',
]);
Route::post('environment/saveClassic', [
'as' => 'environmentSaveClassic',
'uses' => 'EnvironmentController@saveClassic',
]);
Route::get('requirements', [
'as' => 'requirements',
'uses' => 'RequirementsController@requirements',
]);
Route::get('permissions', [
'as' => 'permissions',
'uses' => 'PermissionsController@permissions',
]);
Route::get('database', [
'as' => 'database',
'uses' => 'DatabaseController@database',
]);
Route::get('final', [
'as' => 'final',
'uses' => 'FinalController@finish',
]);
});
Route::group(['prefix' => 'update', 'as' => 'LaravelUpdater::', 'namespace' => 'Bibhuti\Installer\Controllers', 'middleware' => 'web'], function () {
Route::group(['middleware' => 'update'], function () {
Route::get('/', [
'as' => 'welcome',
'uses' => 'UpdateController@welcome',
]);
Route::get('overview', [
'as' => 'overview',
'uses' => 'UpdateController@overview',
]);
Route::get('database', [
'as' => 'database',
'uses' => 'UpdateController@database',
]);
});
// This needs to be out of the middleware because right after the migration has been
// run, the middleware sends a 404.
Route::get('final', [
'as' => 'final',
'uses' => 'UpdateController@finish',
]);
});

View File

@ -0,0 +1,36 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.environment.classic.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-code fa-fw" aria-hidden="true"></i> {{ trans('installer_messages.environment.classic.title') }}
@endsection
@section('container')
<form method="post" action="{{ route('installer::environmentSaveClassic') }}">
{!! csrf_field() !!}
<textarea class="textarea" name="envConfig">{{ $envConfig }}</textarea>
<div class="buttons buttons--right">
<button class="button button--light" type="submit">
<i class="fa fa-floppy-o fa-fw" aria-hidden="true"></i>
{!! trans('installer_messages.environment.classic.save') !!}
</button>
</div>
</form>
@if (!isset($environment['errors']))
<div class="buttons-container">
<a class="button float-left" href="{{ route('installer::environmentWizard') }}">
<i class="fa fa-sliders fa-fw" aria-hidden="true"></i>
{!! trans('installer_messages.environment.classic.back') !!}
</a>
<a class="button float-right" href="{{ route('installer::database') }}">
<i class="fa fa-check fa-fw" aria-hidden="true"></i>
{!! trans('installer_messages.environment.classic.install') !!}
<i class="fa fa-angle-double-right fa-fw" aria-hidden="true"></i>
</a>
</div>
@endif
@endsection

View File

@ -0,0 +1,591 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.environment.wizard.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-magic fa-fw" aria-hidden="true"></i>
{!! trans('installer_messages.environment.wizard.title') !!}
@endsection
@section('container')
<div class="tabs tabs-full">
<input id="tab1" type="radio" name="tabs" class="tab-input" checked />
<label for="tab1" class="tab-label">
<i class="fa fa-cog fa-2x fa-fw" aria-hidden="true"></i>
<br />
{{ trans('installer_messages.environment.wizard.tabs.environment') }}
</label>
<input id="tab2" type="radio" name="tabs" class="tab-input" />
<label for="tab2" class="tab-label">
<i class="fa fa-database fa-2x fa-fw" aria-hidden="true"></i>
<br />
{{ trans('installer_messages.environment.wizard.tabs.database') }}
</label>
<input id="tab3" type="radio" name="tabs" class="tab-input" />
<label for="tab3" class="tab-label">
<i class="fa fa-cogs fa-2x fa-fw" aria-hidden="true"></i>
<br />
{{ trans('installer_messages.environment.wizard.tabs.application') }}
</label>
<form method="post" action="{{ route('installer::environmentSaveWizard') }}" class="tabs-wrap">
<div class="tab" id="tab1content">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group {{ $errors->has('app_name') ? ' has-error ' : '' }}">
<label for="app_name">
{{ trans('installer_messages.environment.wizard.form.app_name_label') }}
</label>
<input type="text" name="app_name" id="app_name" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.app_name_placeholder') }}" />
@if ($errors->has('app_name'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('app_name') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('environment') ? ' has-error ' : '' }}">
<label for="environment">
{{ trans('installer_messages.environment.wizard.form.app_environment_label') }}
</label>
<select name="environment" id="environment" onchange='checkEnvironment(this.value);'>
<option value="local" selected>
{{ trans('installer_messages.environment.wizard.form.app_environment_label_local') }}</option>
<option value="development">
{{ trans('installer_messages.environment.wizard.form.app_environment_label_developement') }}</option>
<option value="qa">{{ trans('installer_messages.environment.wizard.form.app_environment_label_qa') }}
</option>
<option value="production">
{{ trans('installer_messages.environment.wizard.form.app_environment_label_production') }}</option>
<option value="other">{{ trans('installer_messages.environment.wizard.form.app_environment_label_other') }}
</option>
</select>
<div id="environment_text_input" style="display: none;">
<input type="text" name="environment_custom" id="environment_custom"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_environment_placeholder_other') }}" />
</div>
@if ($errors->has('app_name'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('app_name') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('app_debug') ? ' has-error ' : '' }}">
<label for="app_debug">
{{ trans('installer_messages.environment.wizard.form.app_debug_label') }}
</label>
<label for="app_debug_true">
<input type="radio" name="app_debug" id="app_debug_true" value=true checked />
{{ trans('installer_messages.environment.wizard.form.app_debug_label_true') }}
</label>
<label for="app_debug_false">
<input type="radio" name="app_debug" id="app_debug_false" value=false />
{{ trans('installer_messages.environment.wizard.form.app_debug_label_false') }}
</label>
@if ($errors->has('app_debug'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('app_debug') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('app_log_level') ? ' has-error ' : '' }}">
<label for="app_log_level">
{{ trans('installer_messages.environment.wizard.form.app_log_level_label') }}
</label>
<select name="app_log_level" id="app_log_level">
<option value="debug" selected>
{{ trans('installer_messages.environment.wizard.form.app_log_level_label_debug') }}</option>
<option value="info">{{ trans('installer_messages.environment.wizard.form.app_log_level_label_info') }}
</option>
<option value="notice">{{ trans('installer_messages.environment.wizard.form.app_log_level_label_notice') }}
</option>
<option value="warning">{{ trans('installer_messages.environment.wizard.form.app_log_level_label_warning') }}
</option>
<option value="error">{{ trans('installer_messages.environment.wizard.form.app_log_level_label_error') }}
</option>
<option value="critical">
{{ trans('installer_messages.environment.wizard.form.app_log_level_label_critical') }}</option>
<option value="alert">{{ trans('installer_messages.environment.wizard.form.app_log_level_label_alert') }}
</option>
<option value="emergency">
{{ trans('installer_messages.environment.wizard.form.app_log_level_label_emergency') }}</option>
</select>
@if ($errors->has('app_log_level'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('app_log_level') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('app_url') ? ' has-error ' : '' }}">
<label for="app_url">
{{ trans('installer_messages.environment.wizard.form.app_url_label') }}
</label>
<input type="url" name="app_url" id="app_url" value="http://localhost"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_url_placeholder') }}" />
@if ($errors->has('app_url'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('app_url') }}
</span>
@endif
</div>
<div class="buttons">
<button class="button" onclick="showDatabaseSettings();return false">
{{ trans('installer_messages.environment.wizard.form.buttons.setup_database') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="tab" id="tab2content">
<div class="form-group {{ $errors->has('database_connection') ? ' has-error ' : '' }}">
<label for="database_connection">
{{ trans('installer_messages.environment.wizard.form.db_connection_label') }}
</label>
<select name="database_connection" id="database_connection">
<option value="mysql" selected>
{{ trans('installer_messages.environment.wizard.form.db_connection_label_mysql') }}</option>
<option value="sqlite">{{ trans('installer_messages.environment.wizard.form.db_connection_label_sqlite') }}
</option>
<option value="pgsql">{{ trans('installer_messages.environment.wizard.form.db_connection_label_pgsql') }}
</option>
<option value="sqlsrv">{{ trans('installer_messages.environment.wizard.form.db_connection_label_sqlsrv') }}
</option>
</select>
@if ($errors->has('database_connection'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_connection') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('database_hostname') ? ' has-error ' : '' }}">
<label for="database_hostname">
{{ trans('installer_messages.environment.wizard.form.db_host_label') }}
</label>
<input type="text" name="database_hostname" id="database_hostname" value="127.0.0.1"
placeholder="{{ trans('installer_messages.environment.wizard.form.db_host_placeholder') }}" />
@if ($errors->has('database_hostname'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_hostname') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('database_port') ? ' has-error ' : '' }}">
<label for="database_port">
{{ trans('installer_messages.environment.wizard.form.db_port_label') }}
</label>
<input type="number" name="database_port" id="database_port" value="3306"
placeholder="{{ trans('installer_messages.environment.wizard.form.db_port_placeholder') }}" />
@if ($errors->has('database_port'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_port') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('database_name') ? ' has-error ' : '' }}">
<label for="database_name">
{{ trans('installer_messages.environment.wizard.form.db_name_label') }}
</label>
<input type="text" name="database_name" id="database_name" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.db_name_placeholder') }}" />
@if ($errors->has('database_name'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_name') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('database_username') ? ' has-error ' : '' }}">
<label for="database_username">
{{ trans('installer_messages.environment.wizard.form.db_username_label') }}
</label>
<input type="text" name="database_username" id="database_username" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.db_username_placeholder') }}" />
@if ($errors->has('database_username'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_username') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('database_password') ? ' has-error ' : '' }}">
<label for="database_password">
{{ trans('installer_messages.environment.wizard.form.db_password_label') }}
</label>
<input type="password" name="database_password" id="database_password" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.db_password_placeholder') }}" />
@if ($errors->has('database_password'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('database_password') }}
</span>
@endif
</div>
<div class="buttons">
<button class="button" onclick="showApplicationSettings();return false">
{{ trans('installer_messages.environment.wizard.form.buttons.setup_application') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</button>
</div>
</div>
<div class="tab" id="tab3content">
<div class="block">
<input type="radio" name="appSettingsTabs" id="appSettingsTab1" value="null" checked />
<label for="appSettingsTab1">
<span>
{{ trans('installer_messages.environment.wizard.form.app_tabs.broadcasting_title') }}
</span>
</label>
<div class="info">
<div class="form-group {{ $errors->has('broadcast_driver') ? ' has-error ' : '' }}">
<label
for="broadcast_driver">{{ trans('installer_messages.environment.wizard.form.app_tabs.broadcasting_label') }}
<sup>
<a href="https://laravel.com/docs/5.4/broadcasting" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="broadcast_driver" id="broadcast_driver" value="log"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.broadcasting_placeholder') }}" />
@if ($errors->has('broadcast_driver'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('broadcast_driver') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('cache_driver') ? ' has-error ' : '' }}">
<label for="cache_driver">{{ trans('installer_messages.environment.wizard.form.app_tabs.cache_label') }}
<sup>
<a href="https://laravel.com/docs/5.4/cache" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="cache_driver" id="cache_driver" value="file"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.cache_placeholder') }}" />
@if ($errors->has('cache_driver'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('cache_driver') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('session_driver') ? ' has-error ' : '' }}">
<label
for="session_driver">{{ trans('installer_messages.environment.wizard.form.app_tabs.session_label') }}
<sup>
<a href="https://laravel.com/docs/5.4/session" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="session_driver" id="session_driver" value="file"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.session_placeholder') }}" />
@if ($errors->has('session_driver'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('session_driver') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('queue_driver') ? ' has-error ' : '' }}">
<label for="queue_driver">{{ trans('installer_messages.environment.wizard.form.app_tabs.queue_label') }}
<sup>
<a href="https://laravel.com/docs/5.4/queues" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="queue_driver" id="queue_driver" value="sync"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.queue_placeholder') }}" />
@if ($errors->has('queue_driver'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('queue_driver') }}
</span>
@endif
</div>
</div>
</div>
<div class="block">
<input type="radio" name="appSettingsTabs" id="appSettingsTab2" value="null" />
<label for="appSettingsTab2">
<span>
{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_label') }}
</span>
</label>
<div class="info">
<div class="form-group {{ $errors->has('redis_hostname') ? ' has-error ' : '' }}">
<label for="redis_hostname">
{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_host') }}
<sup>
<a href="https://laravel.com/docs/5.4/redis" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="redis_hostname" id="redis_hostname" value="127.0.0.1"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_host') }}" />
@if ($errors->has('redis_hostname'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('redis_hostname') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('redis_password') ? ' has-error ' : '' }}">
<label
for="redis_password">{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_password') }}</label>
<input type="password" name="redis_password" id="redis_password" value="null"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_password') }}" />
@if ($errors->has('redis_password'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('redis_password') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('redis_port') ? ' has-error ' : '' }}">
<label
for="redis_port">{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_port') }}</label>
<input type="number" name="redis_port" id="redis_port" value="6379"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.redis_port') }}" />
@if ($errors->has('redis_port'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('redis_port') }}
</span>
@endif
</div>
</div>
</div>
<div class="block">
<input type="radio" name="appSettingsTabs" id="appSettingsTab3" value="null" />
<label for="appSettingsTab3">
<span>
{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_label') }}
</span>
</label>
<div class="info">
<div class="form-group {{ $errors->has('mail_driver') ? ' has-error ' : '' }}">
<label for="mail_driver">
{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_driver_label') }}
<sup>
<a href="https://laravel.com/docs/5.4/mail" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="mail_driver" id="mail_driver" value="smtp"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_driver_placeholder') }}" />
@if ($errors->has('mail_driver'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_driver') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('mail_host') ? ' has-error ' : '' }}">
<label
for="mail_host">{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_host_label') }}</label>
<input type="text" name="mail_host" id="mail_host" value="smtp.mailtrap.io"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_host_placeholder') }}" />
@if ($errors->has('mail_host'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_host') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('mail_port') ? ' has-error ' : '' }}">
<label
for="mail_port">{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_port_label') }}</label>
<input type="number" name="mail_port" id="mail_port" value="2525"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_port_placeholder') }}" />
@if ($errors->has('mail_port'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_port') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('mail_username') ? ' has-error ' : '' }}">
<label
for="mail_username">{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_username_label') }}</label>
<input type="text" name="mail_username" id="mail_username" value="null"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_username_placeholder') }}" />
@if ($errors->has('mail_username'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_username') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('mail_password') ? ' has-error ' : '' }}">
<label
for="mail_password">{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_password_label') }}</label>
<input type="text" name="mail_password" id="mail_password" value="null"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_password_placeholder') }}" />
@if ($errors->has('mail_password'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_password') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('mail_encryption') ? ' has-error ' : '' }}">
<label
for="mail_encryption">{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_encryption_label') }}</label>
<input type="text" name="mail_encryption" id="mail_encryption" value="null"
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.mail_encryption_placeholder') }}" />
@if ($errors->has('mail_encryption'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('mail_encryption') }}
</span>
@endif
</div>
</div>
</div>
<div class="margin-bottom-2 block">
<input type="radio" name="appSettingsTabs" id="appSettingsTab4" value="null" />
<label for="appSettingsTab4">
<span>
{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_label') }}
</span>
</label>
<div class="info">
<div class="form-group {{ $errors->has('pusher_app_id') ? ' has-error ' : '' }}">
<label for="pusher_app_id">
{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_id_label') }}
<sup>
<a href="https://pusher.com/docs/server_api_guide" target="_blank"
title="{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}">
<i class="fa fa-info-circle fa-fw" aria-hidden="true"></i>
<span
class="sr-only">{{ trans('installer_messages.environment.wizard.form.app_tabs.more_info') }}</span>
</a>
</sup>
</label>
<input type="text" name="pusher_app_id" id="pusher_app_id" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_id_palceholder') }}" />
@if ($errors->has('pusher_app_id'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('pusher_app_id') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('pusher_app_key') ? ' has-error ' : '' }}">
<label
for="pusher_app_key">{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_key_label') }}</label>
<input type="text" name="pusher_app_key" id="pusher_app_key" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_key_palceholder') }}" />
@if ($errors->has('pusher_app_key'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('pusher_app_key') }}
</span>
@endif
</div>
<div class="form-group {{ $errors->has('pusher_app_secret') ? ' has-error ' : '' }}">
<label
for="pusher_app_secret">{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_secret_label') }}</label>
<input type="password" name="pusher_app_secret" id="pusher_app_secret" value=""
placeholder="{{ trans('installer_messages.environment.wizard.form.app_tabs.pusher_app_secret_palceholder') }}" />
@if ($errors->has('pusher_app_secret'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('pusher_app_secret') }}
</span>
@endif
</div>
</div>
</div>
<div class="buttons">
<button class="button" type="submit">
{{ trans('installer_messages.environment.wizard.form.buttons.install') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</button>
</div>
</div>
</form>
</div>
@endsection
@section('scripts')
<script type="text/javascript">
function checkEnvironment(val) {
var element = document.getElementById('environment_text_input');
if (val == 'other') {
element.style.display = 'block';
} else {
element.style.display = 'none';
}
}
function showDatabaseSettings() {
document.getElementById('tab2').checked = true;
}
function showApplicationSettings() {
document.getElementById('tab3').checked = true;
}
</script>
@endsection

View File

@ -0,0 +1,26 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.environment.menu.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-cog fa-fw" aria-hidden="true"></i>
{!! trans('installer_messages.environment.menu.title') !!}
@endsection
@section('container')
<p class="text-center">
{!! trans('installer_messages.environment.menu.desc') !!}
</p>
<div class="buttons">
<a href="{{ route('installer::environmentWizard') }}" class="button button-wizard">
<i class="fa fa-sliders fa-fw" aria-hidden="true"></i>
{{ trans('installer_messages.environment.menu.wizard-button') }}
</a>
<a href="{{ route('installer::environmentClassic') }}" class="button button-classic">
<i class="fa fa-code fa-fw" aria-hidden="true"></i>
{{ trans('installer_messages.environment.menu.classic-button') }}
</a>
</div>
@endsection

View File

@ -0,0 +1,30 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.final.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-flag-checkered fa-fw" aria-hidden="true"></i>
{{ trans('installer_messages.final.title') }}
@endsection
@section('container')
@if (session('message')['dbOutputLog'])
<p><strong><small>{{ trans('installer_messages.final.migration') }}</small></strong></p>
<pre><code>{{ session('message')['dbOutputLog'] }}</code></pre>
@endif
<p><strong><small>{{ trans('installer_messages.final.console') }}</small></strong></p>
<pre><code>{{ $finalMessages }}</code></pre>
<p><strong><small>{{ trans('installer_messages.final.log') }}</small></strong></p>
<pre><code>{{ $finalStatusMessage }}</code></pre>
<p><strong><small>{{ trans('installer_messages.final.env') }}</small></strong></p>
<pre><code>{{ $finalEnvFile }}</code></pre>
<div class="buttons">
<a href="{{ url('/') }}" class="button">{{ trans('installer_messages.final.exit') }}</a>
</div>
@endsection

View File

@ -0,0 +1,46 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@if (trim($__env->yieldContent('template_title')))@yield('template_title') | @endif {{ trans('installer_messages.updater.title') }}</title>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-16x16.png') }}" sizes="16x16"/>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-32x32.png') }}" sizes="32x32"/>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-96x96.png') }}" sizes="96x96"/>
<link href="{{ asset('installer/css/style.min.css') }}" rel="stylesheet"/>
@yield('style')
<script>
window.Laravel = <?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>
</script>
</head>
<body>
<div class="master">
<div class="box">
<div class="header">
<h1 class="header__title">@yield('title')</h1>
</div>
<ul class="step">
<li class="step__divider"></li>
<li class="step__item {{ isActive('LaravelUpdater::final') }}">
<i class="step__icon fa fa-database" aria-hidden="true"></i>
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('LaravelUpdater::overview') }}">
<i class="step__icon fa fa-reorder" aria-hidden="true"></i>
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('LaravelUpdater::welcome') }}">
<i class="step__icon fa fa-refresh" aria-hidden="true"></i>
</li>
<li class="step__divider"></li>
</ul>
<div class="main">
@yield('container')
</div>
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,137 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>
@if (trim($__env->yieldContent('template_title')))
@yield('template_title') |
@endif {{ trans('installer_messages.title') }}
</title>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-16x16.png') }}" sizes="16x16" />
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-32x32.png') }}" sizes="32x32" />
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon-96x96.png') }}" sizes="96x96" />
<link href="{{ asset('installer/css/style.min.css') }}" rel="stylesheet" />
@yield('style')
<script>
window.Laravel = <?php echo json_encode([
'csrfToken' => csrf_token(),
]); ?>
</script>
</head>
<body>
<div class="master">
<div class="box">
<div class="header">
<h1 class="header__title">@yield('title')</h1>
</div>
<ul class="step">
<li class="step__divider"></li>
<li class="step__item {{ isActive('installer::final') }}">
<i class="step__icon fa fa-server" aria-hidden="true"></i>
</li>
<li class="step__divider"></li>
<li
class="step__item {{ isActive('installer::environment') }} {{ isActive('installer::environmentWizard') }} {{ isActive('installer::environmentClassic') }}">
@if (Request::is('install/environment') ||
Request::is('install/environment/wizard') ||
Request::is('install/environment/classic'))
<a href="{{ route('installer::environment') }}">
<i class="step__icon fa fa-cog" aria-hidden="true"></i>
</a>
@else
<i class="step__icon fa fa-cog" aria-hidden="true"></i>
@endif
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('installer::permissions') }}">
@if (Request::is('install/permissions') ||
Request::is('install/environment') ||
Request::is('install/environment/wizard') ||
Request::is('install/environment/classic'))
<a href="{{ route('installer::permissions') }}">
<i class="step__icon fa fa-key" aria-hidden="true"></i>
</a>
@else
<i class="step__icon fa fa-key" aria-hidden="true"></i>
@endif
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('installer::requirements') }}">
@if (Request::is('install') ||
Request::is('install/requirements') ||
Request::is('install/permissions') ||
Request::is('install/environment') ||
Request::is('install/environment/wizard') ||
Request::is('install/environment/classic'))
<a href="{{ route('installer::requirements') }}">
<i class="step__icon fa fa-list" aria-hidden="true"></i>
</a>
@else
<i class="step__icon fa fa-list" aria-hidden="true"></i>
@endif
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('installer::welcome') }}">
@if (Request::is('install') ||
Request::is('install/requirements') ||
Request::is('install/permissions') ||
Request::is('install/environment') ||
Request::is('install/environment/wizard') ||
Request::is('install/environment/classic'))
<a href="{{ route('installer::welcome') }}">
<i class="step__icon fa fa-home" aria-hidden="true"></i>
</a>
@else
<i class="step__icon fa fa-home" aria-hidden="true"></i>
@endif
</li>
<li class="step__divider"></li>
</ul>
<div class="main">
@if (session('message'))
<p class="alert text-center">
<strong>
@if (is_array(session('message')))
{{ session('message')['message'] }}
@else
{{ session('message') }}
@endif
</strong>
</p>
@endif
@if (session()->has('errors'))
<div class="alert alert-danger" id="error_alert">
<button type="button" class="close" id="close_alert" data-dismiss="alert" aria-hidden="true">
<i class="fa fa-close" aria-hidden="true"></i>
</button>
<h4>
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ trans('installer_messages.forms.errorTitle') }}
</h4>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@yield('container')
</div>
</div>
</div>
@yield('scripts')
<script type="text/javascript">
var x = document.getElementById('error_alert');
var y = document.getElementById('close_alert');
y.onclick = function() {
x.style.display = "none";
};
</script>
</body>
</html>

View File

@ -0,0 +1,33 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.permissions.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-key fa-fw" aria-hidden="true"></i>
{{ trans('installer_messages.permissions.title') }}
@endsection
@section('container')
<ul class="list">
@foreach ($permissions['permissions'] as $permission)
<li class="list__item list__item--permissions {{ $permission['isSet'] ? 'success' : 'error' }}">
{{ $permission['folder'] }}
<span>
<i class="fa fa-fw fa-{{ $permission['isSet'] ? 'check-circle-o' : 'exclamation-circle' }}"></i>
{{ $permission['permission'] }}
</span>
</li>
@endforeach
</ul>
@if (!isset($permissions['errors']))
<div class="buttons">
<a href="{{ route('installer::environment') }}" class="button">
{{ trans('installer_messages.permissions.next') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</a>
</div>
@endif
@endsection

View File

@ -0,0 +1,51 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.requirements.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-list-ul fa-fw" aria-hidden="true"></i>
{{ trans('installer_messages.requirements.title') }}
@endsection
@section('container')
@foreach ($requirements['requirements'] as $type => $requirement)
<ul class="list">
<li class="list__item list__title {{ $phpSupportInfo['supported'] ? 'success' : 'error' }}">
<strong>{{ ucfirst($type) }}</strong>
@if ($type == 'php')
<strong>
<small>
(version {{ $phpSupportInfo['minimum'] }} required)
</small>
</strong>
<span class="float-right">
<strong>
{{ $phpSupportInfo['current'] }}
</strong>
<i class="fa fa-fw fa-{{ $phpSupportInfo['supported'] ? 'check-circle-o' : 'exclamation-circle' }} row-icon"
aria-hidden="true"></i>
</span>
@endif
</li>
@foreach ($requirements['requirements'][$type] as $extention => $enabled)
<li class="list__item {{ $enabled ? 'success' : 'error' }}">
{{ $extention }}
<i class="fa fa-fw fa-{{ $enabled ? 'check-circle-o' : 'exclamation-circle' }} row-icon" aria-hidden="true"></i>
</li>
@endforeach
</ul>
@endforeach
@if (!isset($requirements['errors']) && $phpSupportInfo['supported'])
<div class="buttons">
<a class="button" href="{{ route('installer::permissions') }}">
{{ trans('installer_messages.requirements.next') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</a>
</div>
@endif
@endsection

View File

@ -0,0 +1,9 @@
@extends('installer::.layouts.master-update')
@section('title', trans('installer_messages.updater.final.title'))
@section('container')
<p class="paragraph text-center">{{ session('message')['message'] }}</p>
<div class="buttons">
<a href="{{ url('/') }}" class="button">{{ trans('installer_messages.updater.final.exit') }}</a>
</div>
@stop

View File

@ -0,0 +1,12 @@
@extends('installer::.layouts.master-update')
@section('title', trans('installer_messages.updater.welcome.title'))
@section('container')
<p class="paragraph text-center">
{{ trans_choice('installer_messages.updater.overview.message', $numberOfUpdatesPending, ['number' => $numberOfUpdatesPending]) }}
</p>
<div class="buttons">
<a href="{{ route('LaravelUpdater::database') }}"
class="button">{{ trans('installer_messages.updater.overview.install_updates') }}</a>
</div>
@stop

View File

@ -0,0 +1,11 @@
@extends('installer::.layouts.master-update')
@section('title', trans('installer_messages.updater.welcome.title'))
@section('container')
<p class="paragraph text-center">
{{ trans('installer_messages.updater.welcome.message') }}
</p>
<div class="buttons">
<a href="{{ route('LaravelUpdater::overview') }}" class="button">{{ trans('installer_messages.next') }}</a>
</div>
@stop

View File

@ -0,0 +1,21 @@
@extends('installer::layouts.master')
@section('template_title')
{{ trans('installer_messages.welcome.templateTitle') }}
@endsection
@section('title')
{{ trans('installer_messages.welcome.title') }}
@endsection
@section('container')
<p class="text-center">
{{ trans('installer_messages.welcome.message') }}
</p>
<p class="text-center">
<a href="{{ route('installer::requirements') }}" class="button">
{{ trans('installer_messages.welcome.next') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</a>
</p>
@endsection

View File

@ -0,0 +1,46 @@
//colors
$color_0: #ff0
$color_1: #000
$color_2: silver
$color_3: #666
$color_4: #111
$color_5: #1d73a2
$color_6: #175c82
$color_7: rgba(0, 0, 0, .19)
$color_8: rgba(0, 0, 0, .23)
$color_9: #357295
$color_10: #fff
$color_11: #cacfd2
$color_12: #34a0db
$color_13: rgba(0, 0, 0, .12)
$color_14: rgba(0, 0, 0, .24)
$color_15: #2490cb
$color_16: #eee
$color_17: #222
$color_18: rgba(0, 0, 0, .16)
$color_19: #2ecc71
$color_20: #e74c3c
$color_21: #f5f5f5
$color_22: rgba(0, 0, 0, .2)
//fonts
$font_0: Ionicons
$font_1: sans-serif
$font_2: monospace
$font_3: Roboto
$font_4: Helvetica Neue
$font_5: Helvetica
$font_6: Arial
$font_7: Courier New
$font_8: Courier
$font_9: Lucida Sans Typewriter
$font_10: Lucida Typewriter
//urls
$url_0: url(https://fonts.googleapis.com/css?family=Roboto:400,300,500,700,900)
$url_1: url(../fonts/ionicons.eot?v=2.0.1)
$url_2: url(../fonts/ionicons.eot?v=2.0.1#iefix)
$url_3: url(../fonts/ionicons.ttf?v=2.0.1)
$url_4: url(../fonts/ionicons.woff?v=2.0.1)
$url_5: url(../fonts/ionicons.svg?v=2.0.1#Ionicons)
$url_6: url(../img/background.png)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,58 @@
//colors
$color_0: #ff0;
$color_1: #000;
$color_2: silver;
$color_3: #666;
$color_4: #111;
$color_5: #1d73a2;
$color_6: #175c82;
$color_7: rgba(0, 0, 0, .19);
$color_8: rgba(0, 0, 0, .23);
$color_9: #357295;
$color_10: #fff;
$color_11: #cacfd2;
$color_12: #34a0db;
$color_13: #3d657b;
$color_14: rgba(0, 0, 0, .12);
$color_15: rgba(0, 0, 0, .24);
$color_16: #2490cb;
$color_17: #eee;
$color_18: #222;
$color_19: rgba(0, 0, 0, .16);
$color_20: #2ecc71;
$color_21: #e74c3c;
$color_22: #f5f5f5;
$color_23: rgba(0, 0, 0, .2);
$color_24: #ff0000;
$color_25: #000000;
$color_26: red;
$color_27: #dddddd;
$color_28: #ddd;
$color_29: #333;
$color_30: #ffff00;
$color_31: #008000;
$color_32: darkgray;
$color_33: #008080;
$color_34: #144242;
$color_35: #a9a9a9;
$color_36: rgba(0, 0, 0, 0.1);
$color_37: #ccc;
$color_38: rgba(0, 0, 0, 0.3);
$color_39: #ffffff;
//fonts
$font_0: sans-serif;
$font_1: monospace;
$font_2: Roboto;
$font_3: Helvetica Neue;
$font_4: Helvetica;
$font_5: Arial;
$font_6: Courier New;
$font_7: Courier;
$font_8: Lucida Sans Typewriter;
$font_9: Lucida Typewriter;
$font_10: Ionicons;
//urls
$url_0: 'https://fonts.googleapis.com/css?family=Roboto:400,300,500,700,900';
$url_1: '../img/background.png';

View File

@ -0,0 +1,34 @@
// Spinning Icons
// --------------------------
.#{$fa-css-prefix}-spin {
-webkit-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}
.#{$fa-css-prefix}-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8);
}
@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}
@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}

View File

@ -0,0 +1,25 @@
// Bordered & Pulled
// -------------------------
.#{$fa-css-prefix}-border {
padding: .2em .25em .15em;
border: solid .08em $fa-border-color;
border-radius: .1em;
}
.#{$fa-css-prefix}-pull-left { float: left; }
.#{$fa-css-prefix}-pull-right { float: right; }
.#{$fa-css-prefix} {
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; }
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; }
}
/* Deprecated as of 4.4.0 */
.pull-right { float: right; }
.pull-left { float: left; }
.#{$fa-css-prefix} {
&.pull-left { margin-right: .3em; }
&.pull-right { margin-left: .3em; }
}

View File

@ -0,0 +1,12 @@
// Base Class Definition
// -------------------------
.#{$fa-css-prefix} {
display: inline-block;
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
font-size: inherit; // can't have font-size inherit on line above, so need to override
text-rendering: auto; // optimizelegibility throws things off #1094
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

View File

@ -0,0 +1,6 @@
// Fixed Width Icons
// -------------------------
.#{$fa-css-prefix}-fw {
width: (18em / 14);
text-align: center;
}

View File

@ -0,0 +1,789 @@
/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
readers do not read off random characters that represent icons */
.#{$fa-css-prefix}-glass:before { content: $fa-var-glass; }
.#{$fa-css-prefix}-music:before { content: $fa-var-music; }
.#{$fa-css-prefix}-search:before { content: $fa-var-search; }
.#{$fa-css-prefix}-envelope-o:before { content: $fa-var-envelope-o; }
.#{$fa-css-prefix}-heart:before { content: $fa-var-heart; }
.#{$fa-css-prefix}-star:before { content: $fa-var-star; }
.#{$fa-css-prefix}-star-o:before { content: $fa-var-star-o; }
.#{$fa-css-prefix}-user:before { content: $fa-var-user; }
.#{$fa-css-prefix}-film:before { content: $fa-var-film; }
.#{$fa-css-prefix}-th-large:before { content: $fa-var-th-large; }
.#{$fa-css-prefix}-th:before { content: $fa-var-th; }
.#{$fa-css-prefix}-th-list:before { content: $fa-var-th-list; }
.#{$fa-css-prefix}-check:before { content: $fa-var-check; }
.#{$fa-css-prefix}-remove:before,
.#{$fa-css-prefix}-close:before,
.#{$fa-css-prefix}-times:before { content: $fa-var-times; }
.#{$fa-css-prefix}-search-plus:before { content: $fa-var-search-plus; }
.#{$fa-css-prefix}-search-minus:before { content: $fa-var-search-minus; }
.#{$fa-css-prefix}-power-off:before { content: $fa-var-power-off; }
.#{$fa-css-prefix}-signal:before { content: $fa-var-signal; }
.#{$fa-css-prefix}-gear:before,
.#{$fa-css-prefix}-cog:before { content: $fa-var-cog; }
.#{$fa-css-prefix}-trash-o:before { content: $fa-var-trash-o; }
.#{$fa-css-prefix}-home:before { content: $fa-var-home; }
.#{$fa-css-prefix}-file-o:before { content: $fa-var-file-o; }
.#{$fa-css-prefix}-clock-o:before { content: $fa-var-clock-o; }
.#{$fa-css-prefix}-road:before { content: $fa-var-road; }
.#{$fa-css-prefix}-download:before { content: $fa-var-download; }
.#{$fa-css-prefix}-arrow-circle-o-down:before { content: $fa-var-arrow-circle-o-down; }
.#{$fa-css-prefix}-arrow-circle-o-up:before { content: $fa-var-arrow-circle-o-up; }
.#{$fa-css-prefix}-inbox:before { content: $fa-var-inbox; }
.#{$fa-css-prefix}-play-circle-o:before { content: $fa-var-play-circle-o; }
.#{$fa-css-prefix}-rotate-right:before,
.#{$fa-css-prefix}-repeat:before { content: $fa-var-repeat; }
.#{$fa-css-prefix}-refresh:before { content: $fa-var-refresh; }
.#{$fa-css-prefix}-list-alt:before { content: $fa-var-list-alt; }
.#{$fa-css-prefix}-lock:before { content: $fa-var-lock; }
.#{$fa-css-prefix}-flag:before { content: $fa-var-flag; }
.#{$fa-css-prefix}-headphones:before { content: $fa-var-headphones; }
.#{$fa-css-prefix}-volume-off:before { content: $fa-var-volume-off; }
.#{$fa-css-prefix}-volume-down:before { content: $fa-var-volume-down; }
.#{$fa-css-prefix}-volume-up:before { content: $fa-var-volume-up; }
.#{$fa-css-prefix}-qrcode:before { content: $fa-var-qrcode; }
.#{$fa-css-prefix}-barcode:before { content: $fa-var-barcode; }
.#{$fa-css-prefix}-tag:before { content: $fa-var-tag; }
.#{$fa-css-prefix}-tags:before { content: $fa-var-tags; }
.#{$fa-css-prefix}-book:before { content: $fa-var-book; }
.#{$fa-css-prefix}-bookmark:before { content: $fa-var-bookmark; }
.#{$fa-css-prefix}-print:before { content: $fa-var-print; }
.#{$fa-css-prefix}-camera:before { content: $fa-var-camera; }
.#{$fa-css-prefix}-font:before { content: $fa-var-font; }
.#{$fa-css-prefix}-bold:before { content: $fa-var-bold; }
.#{$fa-css-prefix}-italic:before { content: $fa-var-italic; }
.#{$fa-css-prefix}-text-height:before { content: $fa-var-text-height; }
.#{$fa-css-prefix}-text-width:before { content: $fa-var-text-width; }
.#{$fa-css-prefix}-align-left:before { content: $fa-var-align-left; }
.#{$fa-css-prefix}-align-center:before { content: $fa-var-align-center; }
.#{$fa-css-prefix}-align-right:before { content: $fa-var-align-right; }
.#{$fa-css-prefix}-align-justify:before { content: $fa-var-align-justify; }
.#{$fa-css-prefix}-list:before { content: $fa-var-list; }
.#{$fa-css-prefix}-dedent:before,
.#{$fa-css-prefix}-outdent:before { content: $fa-var-outdent; }
.#{$fa-css-prefix}-indent:before { content: $fa-var-indent; }
.#{$fa-css-prefix}-video-camera:before { content: $fa-var-video-camera; }
.#{$fa-css-prefix}-photo:before,
.#{$fa-css-prefix}-image:before,
.#{$fa-css-prefix}-picture-o:before { content: $fa-var-picture-o; }
.#{$fa-css-prefix}-pencil:before { content: $fa-var-pencil; }
.#{$fa-css-prefix}-map-marker:before { content: $fa-var-map-marker; }
.#{$fa-css-prefix}-adjust:before { content: $fa-var-adjust; }
.#{$fa-css-prefix}-tint:before { content: $fa-var-tint; }
.#{$fa-css-prefix}-edit:before,
.#{$fa-css-prefix}-pencil-square-o:before { content: $fa-var-pencil-square-o; }
.#{$fa-css-prefix}-share-square-o:before { content: $fa-var-share-square-o; }
.#{$fa-css-prefix}-check-square-o:before { content: $fa-var-check-square-o; }
.#{$fa-css-prefix}-arrows:before { content: $fa-var-arrows; }
.#{$fa-css-prefix}-step-backward:before { content: $fa-var-step-backward; }
.#{$fa-css-prefix}-fast-backward:before { content: $fa-var-fast-backward; }
.#{$fa-css-prefix}-backward:before { content: $fa-var-backward; }
.#{$fa-css-prefix}-play:before { content: $fa-var-play; }
.#{$fa-css-prefix}-pause:before { content: $fa-var-pause; }
.#{$fa-css-prefix}-stop:before { content: $fa-var-stop; }
.#{$fa-css-prefix}-forward:before { content: $fa-var-forward; }
.#{$fa-css-prefix}-fast-forward:before { content: $fa-var-fast-forward; }
.#{$fa-css-prefix}-step-forward:before { content: $fa-var-step-forward; }
.#{$fa-css-prefix}-eject:before { content: $fa-var-eject; }
.#{$fa-css-prefix}-chevron-left:before { content: $fa-var-chevron-left; }
.#{$fa-css-prefix}-chevron-right:before { content: $fa-var-chevron-right; }
.#{$fa-css-prefix}-plus-circle:before { content: $fa-var-plus-circle; }
.#{$fa-css-prefix}-minus-circle:before { content: $fa-var-minus-circle; }
.#{$fa-css-prefix}-times-circle:before { content: $fa-var-times-circle; }
.#{$fa-css-prefix}-check-circle:before { content: $fa-var-check-circle; }
.#{$fa-css-prefix}-question-circle:before { content: $fa-var-question-circle; }
.#{$fa-css-prefix}-info-circle:before { content: $fa-var-info-circle; }
.#{$fa-css-prefix}-crosshairs:before { content: $fa-var-crosshairs; }
.#{$fa-css-prefix}-times-circle-o:before { content: $fa-var-times-circle-o; }
.#{$fa-css-prefix}-check-circle-o:before { content: $fa-var-check-circle-o; }
.#{$fa-css-prefix}-ban:before { content: $fa-var-ban; }
.#{$fa-css-prefix}-arrow-left:before { content: $fa-var-arrow-left; }
.#{$fa-css-prefix}-arrow-right:before { content: $fa-var-arrow-right; }
.#{$fa-css-prefix}-arrow-up:before { content: $fa-var-arrow-up; }
.#{$fa-css-prefix}-arrow-down:before { content: $fa-var-arrow-down; }
.#{$fa-css-prefix}-mail-forward:before,
.#{$fa-css-prefix}-share:before { content: $fa-var-share; }
.#{$fa-css-prefix}-expand:before { content: $fa-var-expand; }
.#{$fa-css-prefix}-compress:before { content: $fa-var-compress; }
.#{$fa-css-prefix}-plus:before { content: $fa-var-plus; }
.#{$fa-css-prefix}-minus:before { content: $fa-var-minus; }
.#{$fa-css-prefix}-asterisk:before { content: $fa-var-asterisk; }
.#{$fa-css-prefix}-exclamation-circle:before { content: $fa-var-exclamation-circle; }
.#{$fa-css-prefix}-gift:before { content: $fa-var-gift; }
.#{$fa-css-prefix}-leaf:before { content: $fa-var-leaf; }
.#{$fa-css-prefix}-fire:before { content: $fa-var-fire; }
.#{$fa-css-prefix}-eye:before { content: $fa-var-eye; }
.#{$fa-css-prefix}-eye-slash:before { content: $fa-var-eye-slash; }
.#{$fa-css-prefix}-warning:before,
.#{$fa-css-prefix}-exclamation-triangle:before { content: $fa-var-exclamation-triangle; }
.#{$fa-css-prefix}-plane:before { content: $fa-var-plane; }
.#{$fa-css-prefix}-calendar:before { content: $fa-var-calendar; }
.#{$fa-css-prefix}-random:before { content: $fa-var-random; }
.#{$fa-css-prefix}-comment:before { content: $fa-var-comment; }
.#{$fa-css-prefix}-magnet:before { content: $fa-var-magnet; }
.#{$fa-css-prefix}-chevron-up:before { content: $fa-var-chevron-up; }
.#{$fa-css-prefix}-chevron-down:before { content: $fa-var-chevron-down; }
.#{$fa-css-prefix}-retweet:before { content: $fa-var-retweet; }
.#{$fa-css-prefix}-shopping-cart:before { content: $fa-var-shopping-cart; }
.#{$fa-css-prefix}-folder:before { content: $fa-var-folder; }
.#{$fa-css-prefix}-folder-open:before { content: $fa-var-folder-open; }
.#{$fa-css-prefix}-arrows-v:before { content: $fa-var-arrows-v; }
.#{$fa-css-prefix}-arrows-h:before { content: $fa-var-arrows-h; }
.#{$fa-css-prefix}-bar-chart-o:before,
.#{$fa-css-prefix}-bar-chart:before { content: $fa-var-bar-chart; }
.#{$fa-css-prefix}-twitter-square:before { content: $fa-var-twitter-square; }
.#{$fa-css-prefix}-facebook-square:before { content: $fa-var-facebook-square; }
.#{$fa-css-prefix}-camera-retro:before { content: $fa-var-camera-retro; }
.#{$fa-css-prefix}-key:before { content: $fa-var-key; }
.#{$fa-css-prefix}-gears:before,
.#{$fa-css-prefix}-cogs:before { content: $fa-var-cogs; }
.#{$fa-css-prefix}-comments:before { content: $fa-var-comments; }
.#{$fa-css-prefix}-thumbs-o-up:before { content: $fa-var-thumbs-o-up; }
.#{$fa-css-prefix}-thumbs-o-down:before { content: $fa-var-thumbs-o-down; }
.#{$fa-css-prefix}-star-half:before { content: $fa-var-star-half; }
.#{$fa-css-prefix}-heart-o:before { content: $fa-var-heart-o; }
.#{$fa-css-prefix}-sign-out:before { content: $fa-var-sign-out; }
.#{$fa-css-prefix}-linkedin-square:before { content: $fa-var-linkedin-square; }
.#{$fa-css-prefix}-thumb-tack:before { content: $fa-var-thumb-tack; }
.#{$fa-css-prefix}-external-link:before { content: $fa-var-external-link; }
.#{$fa-css-prefix}-sign-in:before { content: $fa-var-sign-in; }
.#{$fa-css-prefix}-trophy:before { content: $fa-var-trophy; }
.#{$fa-css-prefix}-github-square:before { content: $fa-var-github-square; }
.#{$fa-css-prefix}-upload:before { content: $fa-var-upload; }
.#{$fa-css-prefix}-lemon-o:before { content: $fa-var-lemon-o; }
.#{$fa-css-prefix}-phone:before { content: $fa-var-phone; }
.#{$fa-css-prefix}-square-o:before { content: $fa-var-square-o; }
.#{$fa-css-prefix}-bookmark-o:before { content: $fa-var-bookmark-o; }
.#{$fa-css-prefix}-phone-square:before { content: $fa-var-phone-square; }
.#{$fa-css-prefix}-twitter:before { content: $fa-var-twitter; }
.#{$fa-css-prefix}-facebook-f:before,
.#{$fa-css-prefix}-facebook:before { content: $fa-var-facebook; }
.#{$fa-css-prefix}-github:before { content: $fa-var-github; }
.#{$fa-css-prefix}-unlock:before { content: $fa-var-unlock; }
.#{$fa-css-prefix}-credit-card:before { content: $fa-var-credit-card; }
.#{$fa-css-prefix}-feed:before,
.#{$fa-css-prefix}-rss:before { content: $fa-var-rss; }
.#{$fa-css-prefix}-hdd-o:before { content: $fa-var-hdd-o; }
.#{$fa-css-prefix}-bullhorn:before { content: $fa-var-bullhorn; }
.#{$fa-css-prefix}-bell:before { content: $fa-var-bell; }
.#{$fa-css-prefix}-certificate:before { content: $fa-var-certificate; }
.#{$fa-css-prefix}-hand-o-right:before { content: $fa-var-hand-o-right; }
.#{$fa-css-prefix}-hand-o-left:before { content: $fa-var-hand-o-left; }
.#{$fa-css-prefix}-hand-o-up:before { content: $fa-var-hand-o-up; }
.#{$fa-css-prefix}-hand-o-down:before { content: $fa-var-hand-o-down; }
.#{$fa-css-prefix}-arrow-circle-left:before { content: $fa-var-arrow-circle-left; }
.#{$fa-css-prefix}-arrow-circle-right:before { content: $fa-var-arrow-circle-right; }
.#{$fa-css-prefix}-arrow-circle-up:before { content: $fa-var-arrow-circle-up; }
.#{$fa-css-prefix}-arrow-circle-down:before { content: $fa-var-arrow-circle-down; }
.#{$fa-css-prefix}-globe:before { content: $fa-var-globe; }
.#{$fa-css-prefix}-wrench:before { content: $fa-var-wrench; }
.#{$fa-css-prefix}-tasks:before { content: $fa-var-tasks; }
.#{$fa-css-prefix}-filter:before { content: $fa-var-filter; }
.#{$fa-css-prefix}-briefcase:before { content: $fa-var-briefcase; }
.#{$fa-css-prefix}-arrows-alt:before { content: $fa-var-arrows-alt; }
.#{$fa-css-prefix}-group:before,
.#{$fa-css-prefix}-users:before { content: $fa-var-users; }
.#{$fa-css-prefix}-chain:before,
.#{$fa-css-prefix}-link:before { content: $fa-var-link; }
.#{$fa-css-prefix}-cloud:before { content: $fa-var-cloud; }
.#{$fa-css-prefix}-flask:before { content: $fa-var-flask; }
.#{$fa-css-prefix}-cut:before,
.#{$fa-css-prefix}-scissors:before { content: $fa-var-scissors; }
.#{$fa-css-prefix}-copy:before,
.#{$fa-css-prefix}-files-o:before { content: $fa-var-files-o; }
.#{$fa-css-prefix}-paperclip:before { content: $fa-var-paperclip; }
.#{$fa-css-prefix}-save:before,
.#{$fa-css-prefix}-floppy-o:before { content: $fa-var-floppy-o; }
.#{$fa-css-prefix}-square:before { content: $fa-var-square; }
.#{$fa-css-prefix}-navicon:before,
.#{$fa-css-prefix}-reorder:before,
.#{$fa-css-prefix}-bars:before { content: $fa-var-bars; }
.#{$fa-css-prefix}-list-ul:before { content: $fa-var-list-ul; }
.#{$fa-css-prefix}-list-ol:before { content: $fa-var-list-ol; }
.#{$fa-css-prefix}-strikethrough:before { content: $fa-var-strikethrough; }
.#{$fa-css-prefix}-underline:before { content: $fa-var-underline; }
.#{$fa-css-prefix}-table:before { content: $fa-var-table; }
.#{$fa-css-prefix}-magic:before { content: $fa-var-magic; }
.#{$fa-css-prefix}-truck:before { content: $fa-var-truck; }
.#{$fa-css-prefix}-pinterest:before { content: $fa-var-pinterest; }
.#{$fa-css-prefix}-pinterest-square:before { content: $fa-var-pinterest-square; }
.#{$fa-css-prefix}-google-plus-square:before { content: $fa-var-google-plus-square; }
.#{$fa-css-prefix}-google-plus:before { content: $fa-var-google-plus; }
.#{$fa-css-prefix}-money:before { content: $fa-var-money; }
.#{$fa-css-prefix}-caret-down:before { content: $fa-var-caret-down; }
.#{$fa-css-prefix}-caret-up:before { content: $fa-var-caret-up; }
.#{$fa-css-prefix}-caret-left:before { content: $fa-var-caret-left; }
.#{$fa-css-prefix}-caret-right:before { content: $fa-var-caret-right; }
.#{$fa-css-prefix}-columns:before { content: $fa-var-columns; }
.#{$fa-css-prefix}-unsorted:before,
.#{$fa-css-prefix}-sort:before { content: $fa-var-sort; }
.#{$fa-css-prefix}-sort-down:before,
.#{$fa-css-prefix}-sort-desc:before { content: $fa-var-sort-desc; }
.#{$fa-css-prefix}-sort-up:before,
.#{$fa-css-prefix}-sort-asc:before { content: $fa-var-sort-asc; }
.#{$fa-css-prefix}-envelope:before { content: $fa-var-envelope; }
.#{$fa-css-prefix}-linkedin:before { content: $fa-var-linkedin; }
.#{$fa-css-prefix}-rotate-left:before,
.#{$fa-css-prefix}-undo:before { content: $fa-var-undo; }
.#{$fa-css-prefix}-legal:before,
.#{$fa-css-prefix}-gavel:before { content: $fa-var-gavel; }
.#{$fa-css-prefix}-dashboard:before,
.#{$fa-css-prefix}-tachometer:before { content: $fa-var-tachometer; }
.#{$fa-css-prefix}-comment-o:before { content: $fa-var-comment-o; }
.#{$fa-css-prefix}-comments-o:before { content: $fa-var-comments-o; }
.#{$fa-css-prefix}-flash:before,
.#{$fa-css-prefix}-bolt:before { content: $fa-var-bolt; }
.#{$fa-css-prefix}-sitemap:before { content: $fa-var-sitemap; }
.#{$fa-css-prefix}-umbrella:before { content: $fa-var-umbrella; }
.#{$fa-css-prefix}-paste:before,
.#{$fa-css-prefix}-clipboard:before { content: $fa-var-clipboard; }
.#{$fa-css-prefix}-lightbulb-o:before { content: $fa-var-lightbulb-o; }
.#{$fa-css-prefix}-exchange:before { content: $fa-var-exchange; }
.#{$fa-css-prefix}-cloud-download:before { content: $fa-var-cloud-download; }
.#{$fa-css-prefix}-cloud-upload:before { content: $fa-var-cloud-upload; }
.#{$fa-css-prefix}-user-md:before { content: $fa-var-user-md; }
.#{$fa-css-prefix}-stethoscope:before { content: $fa-var-stethoscope; }
.#{$fa-css-prefix}-suitcase:before { content: $fa-var-suitcase; }
.#{$fa-css-prefix}-bell-o:before { content: $fa-var-bell-o; }
.#{$fa-css-prefix}-coffee:before { content: $fa-var-coffee; }
.#{$fa-css-prefix}-cutlery:before { content: $fa-var-cutlery; }
.#{$fa-css-prefix}-file-text-o:before { content: $fa-var-file-text-o; }
.#{$fa-css-prefix}-building-o:before { content: $fa-var-building-o; }
.#{$fa-css-prefix}-hospital-o:before { content: $fa-var-hospital-o; }
.#{$fa-css-prefix}-ambulance:before { content: $fa-var-ambulance; }
.#{$fa-css-prefix}-medkit:before { content: $fa-var-medkit; }
.#{$fa-css-prefix}-fighter-jet:before { content: $fa-var-fighter-jet; }
.#{$fa-css-prefix}-beer:before { content: $fa-var-beer; }
.#{$fa-css-prefix}-h-square:before { content: $fa-var-h-square; }
.#{$fa-css-prefix}-plus-square:before { content: $fa-var-plus-square; }
.#{$fa-css-prefix}-angle-double-left:before { content: $fa-var-angle-double-left; }
.#{$fa-css-prefix}-angle-double-right:before { content: $fa-var-angle-double-right; }
.#{$fa-css-prefix}-angle-double-up:before { content: $fa-var-angle-double-up; }
.#{$fa-css-prefix}-angle-double-down:before { content: $fa-var-angle-double-down; }
.#{$fa-css-prefix}-angle-left:before { content: $fa-var-angle-left; }
.#{$fa-css-prefix}-angle-right:before { content: $fa-var-angle-right; }
.#{$fa-css-prefix}-angle-up:before { content: $fa-var-angle-up; }
.#{$fa-css-prefix}-angle-down:before { content: $fa-var-angle-down; }
.#{$fa-css-prefix}-desktop:before { content: $fa-var-desktop; }
.#{$fa-css-prefix}-laptop:before { content: $fa-var-laptop; }
.#{$fa-css-prefix}-tablet:before { content: $fa-var-tablet; }
.#{$fa-css-prefix}-mobile-phone:before,
.#{$fa-css-prefix}-mobile:before { content: $fa-var-mobile; }
.#{$fa-css-prefix}-circle-o:before { content: $fa-var-circle-o; }
.#{$fa-css-prefix}-quote-left:before { content: $fa-var-quote-left; }
.#{$fa-css-prefix}-quote-right:before { content: $fa-var-quote-right; }
.#{$fa-css-prefix}-spinner:before { content: $fa-var-spinner; }
.#{$fa-css-prefix}-circle:before { content: $fa-var-circle; }
.#{$fa-css-prefix}-mail-reply:before,
.#{$fa-css-prefix}-reply:before { content: $fa-var-reply; }
.#{$fa-css-prefix}-github-alt:before { content: $fa-var-github-alt; }
.#{$fa-css-prefix}-folder-o:before { content: $fa-var-folder-o; }
.#{$fa-css-prefix}-folder-open-o:before { content: $fa-var-folder-open-o; }
.#{$fa-css-prefix}-smile-o:before { content: $fa-var-smile-o; }
.#{$fa-css-prefix}-frown-o:before { content: $fa-var-frown-o; }
.#{$fa-css-prefix}-meh-o:before { content: $fa-var-meh-o; }
.#{$fa-css-prefix}-gamepad:before { content: $fa-var-gamepad; }
.#{$fa-css-prefix}-keyboard-o:before { content: $fa-var-keyboard-o; }
.#{$fa-css-prefix}-flag-o:before { content: $fa-var-flag-o; }
.#{$fa-css-prefix}-flag-checkered:before { content: $fa-var-flag-checkered; }
.#{$fa-css-prefix}-terminal:before { content: $fa-var-terminal; }
.#{$fa-css-prefix}-code:before { content: $fa-var-code; }
.#{$fa-css-prefix}-mail-reply-all:before,
.#{$fa-css-prefix}-reply-all:before { content: $fa-var-reply-all; }
.#{$fa-css-prefix}-star-half-empty:before,
.#{$fa-css-prefix}-star-half-full:before,
.#{$fa-css-prefix}-star-half-o:before { content: $fa-var-star-half-o; }
.#{$fa-css-prefix}-location-arrow:before { content: $fa-var-location-arrow; }
.#{$fa-css-prefix}-crop:before { content: $fa-var-crop; }
.#{$fa-css-prefix}-code-fork:before { content: $fa-var-code-fork; }
.#{$fa-css-prefix}-unlink:before,
.#{$fa-css-prefix}-chain-broken:before { content: $fa-var-chain-broken; }
.#{$fa-css-prefix}-question:before { content: $fa-var-question; }
.#{$fa-css-prefix}-info:before { content: $fa-var-info; }
.#{$fa-css-prefix}-exclamation:before { content: $fa-var-exclamation; }
.#{$fa-css-prefix}-superscript:before { content: $fa-var-superscript; }
.#{$fa-css-prefix}-subscript:before { content: $fa-var-subscript; }
.#{$fa-css-prefix}-eraser:before { content: $fa-var-eraser; }
.#{$fa-css-prefix}-puzzle-piece:before { content: $fa-var-puzzle-piece; }
.#{$fa-css-prefix}-microphone:before { content: $fa-var-microphone; }
.#{$fa-css-prefix}-microphone-slash:before { content: $fa-var-microphone-slash; }
.#{$fa-css-prefix}-shield:before { content: $fa-var-shield; }
.#{$fa-css-prefix}-calendar-o:before { content: $fa-var-calendar-o; }
.#{$fa-css-prefix}-fire-extinguisher:before { content: $fa-var-fire-extinguisher; }
.#{$fa-css-prefix}-rocket:before { content: $fa-var-rocket; }
.#{$fa-css-prefix}-maxcdn:before { content: $fa-var-maxcdn; }
.#{$fa-css-prefix}-chevron-circle-left:before { content: $fa-var-chevron-circle-left; }
.#{$fa-css-prefix}-chevron-circle-right:before { content: $fa-var-chevron-circle-right; }
.#{$fa-css-prefix}-chevron-circle-up:before { content: $fa-var-chevron-circle-up; }
.#{$fa-css-prefix}-chevron-circle-down:before { content: $fa-var-chevron-circle-down; }
.#{$fa-css-prefix}-html5:before { content: $fa-var-html5; }
.#{$fa-css-prefix}-css3:before { content: $fa-var-css3; }
.#{$fa-css-prefix}-anchor:before { content: $fa-var-anchor; }
.#{$fa-css-prefix}-unlock-alt:before { content: $fa-var-unlock-alt; }
.#{$fa-css-prefix}-bullseye:before { content: $fa-var-bullseye; }
.#{$fa-css-prefix}-ellipsis-h:before { content: $fa-var-ellipsis-h; }
.#{$fa-css-prefix}-ellipsis-v:before { content: $fa-var-ellipsis-v; }
.#{$fa-css-prefix}-rss-square:before { content: $fa-var-rss-square; }
.#{$fa-css-prefix}-play-circle:before { content: $fa-var-play-circle; }
.#{$fa-css-prefix}-ticket:before { content: $fa-var-ticket; }
.#{$fa-css-prefix}-minus-square:before { content: $fa-var-minus-square; }
.#{$fa-css-prefix}-minus-square-o:before { content: $fa-var-minus-square-o; }
.#{$fa-css-prefix}-level-up:before { content: $fa-var-level-up; }
.#{$fa-css-prefix}-level-down:before { content: $fa-var-level-down; }
.#{$fa-css-prefix}-check-square:before { content: $fa-var-check-square; }
.#{$fa-css-prefix}-pencil-square:before { content: $fa-var-pencil-square; }
.#{$fa-css-prefix}-external-link-square:before { content: $fa-var-external-link-square; }
.#{$fa-css-prefix}-share-square:before { content: $fa-var-share-square; }
.#{$fa-css-prefix}-compass:before { content: $fa-var-compass; }
.#{$fa-css-prefix}-toggle-down:before,
.#{$fa-css-prefix}-caret-square-o-down:before { content: $fa-var-caret-square-o-down; }
.#{$fa-css-prefix}-toggle-up:before,
.#{$fa-css-prefix}-caret-square-o-up:before { content: $fa-var-caret-square-o-up; }
.#{$fa-css-prefix}-toggle-right:before,
.#{$fa-css-prefix}-caret-square-o-right:before { content: $fa-var-caret-square-o-right; }
.#{$fa-css-prefix}-euro:before,
.#{$fa-css-prefix}-eur:before { content: $fa-var-eur; }
.#{$fa-css-prefix}-gbp:before { content: $fa-var-gbp; }
.#{$fa-css-prefix}-dollar:before,
.#{$fa-css-prefix}-usd:before { content: $fa-var-usd; }
.#{$fa-css-prefix}-rupee:before,
.#{$fa-css-prefix}-inr:before { content: $fa-var-inr; }
.#{$fa-css-prefix}-cny:before,
.#{$fa-css-prefix}-rmb:before,
.#{$fa-css-prefix}-yen:before,
.#{$fa-css-prefix}-jpy:before { content: $fa-var-jpy; }
.#{$fa-css-prefix}-ruble:before,
.#{$fa-css-prefix}-rouble:before,
.#{$fa-css-prefix}-rub:before { content: $fa-var-rub; }
.#{$fa-css-prefix}-won:before,
.#{$fa-css-prefix}-krw:before { content: $fa-var-krw; }
.#{$fa-css-prefix}-bitcoin:before,
.#{$fa-css-prefix}-btc:before { content: $fa-var-btc; }
.#{$fa-css-prefix}-file:before { content: $fa-var-file; }
.#{$fa-css-prefix}-file-text:before { content: $fa-var-file-text; }
.#{$fa-css-prefix}-sort-alpha-asc:before { content: $fa-var-sort-alpha-asc; }
.#{$fa-css-prefix}-sort-alpha-desc:before { content: $fa-var-sort-alpha-desc; }
.#{$fa-css-prefix}-sort-amount-asc:before { content: $fa-var-sort-amount-asc; }
.#{$fa-css-prefix}-sort-amount-desc:before { content: $fa-var-sort-amount-desc; }
.#{$fa-css-prefix}-sort-numeric-asc:before { content: $fa-var-sort-numeric-asc; }
.#{$fa-css-prefix}-sort-numeric-desc:before { content: $fa-var-sort-numeric-desc; }
.#{$fa-css-prefix}-thumbs-up:before { content: $fa-var-thumbs-up; }
.#{$fa-css-prefix}-thumbs-down:before { content: $fa-var-thumbs-down; }
.#{$fa-css-prefix}-youtube-square:before { content: $fa-var-youtube-square; }
.#{$fa-css-prefix}-youtube:before { content: $fa-var-youtube; }
.#{$fa-css-prefix}-xing:before { content: $fa-var-xing; }
.#{$fa-css-prefix}-xing-square:before { content: $fa-var-xing-square; }
.#{$fa-css-prefix}-youtube-play:before { content: $fa-var-youtube-play; }
.#{$fa-css-prefix}-dropbox:before { content: $fa-var-dropbox; }
.#{$fa-css-prefix}-stack-overflow:before { content: $fa-var-stack-overflow; }
.#{$fa-css-prefix}-instagram:before { content: $fa-var-instagram; }
.#{$fa-css-prefix}-flickr:before { content: $fa-var-flickr; }
.#{$fa-css-prefix}-adn:before { content: $fa-var-adn; }
.#{$fa-css-prefix}-bitbucket:before { content: $fa-var-bitbucket; }
.#{$fa-css-prefix}-bitbucket-square:before { content: $fa-var-bitbucket-square; }
.#{$fa-css-prefix}-tumblr:before { content: $fa-var-tumblr; }
.#{$fa-css-prefix}-tumblr-square:before { content: $fa-var-tumblr-square; }
.#{$fa-css-prefix}-long-arrow-down:before { content: $fa-var-long-arrow-down; }
.#{$fa-css-prefix}-long-arrow-up:before { content: $fa-var-long-arrow-up; }
.#{$fa-css-prefix}-long-arrow-left:before { content: $fa-var-long-arrow-left; }
.#{$fa-css-prefix}-long-arrow-right:before { content: $fa-var-long-arrow-right; }
.#{$fa-css-prefix}-apple:before { content: $fa-var-apple; }
.#{$fa-css-prefix}-windows:before { content: $fa-var-windows; }
.#{$fa-css-prefix}-android:before { content: $fa-var-android; }
.#{$fa-css-prefix}-linux:before { content: $fa-var-linux; }
.#{$fa-css-prefix}-dribbble:before { content: $fa-var-dribbble; }
.#{$fa-css-prefix}-skype:before { content: $fa-var-skype; }
.#{$fa-css-prefix}-foursquare:before { content: $fa-var-foursquare; }
.#{$fa-css-prefix}-trello:before { content: $fa-var-trello; }
.#{$fa-css-prefix}-female:before { content: $fa-var-female; }
.#{$fa-css-prefix}-male:before { content: $fa-var-male; }
.#{$fa-css-prefix}-gittip:before,
.#{$fa-css-prefix}-gratipay:before { content: $fa-var-gratipay; }
.#{$fa-css-prefix}-sun-o:before { content: $fa-var-sun-o; }
.#{$fa-css-prefix}-moon-o:before { content: $fa-var-moon-o; }
.#{$fa-css-prefix}-archive:before { content: $fa-var-archive; }
.#{$fa-css-prefix}-bug:before { content: $fa-var-bug; }
.#{$fa-css-prefix}-vk:before { content: $fa-var-vk; }
.#{$fa-css-prefix}-weibo:before { content: $fa-var-weibo; }
.#{$fa-css-prefix}-renren:before { content: $fa-var-renren; }
.#{$fa-css-prefix}-pagelines:before { content: $fa-var-pagelines; }
.#{$fa-css-prefix}-stack-exchange:before { content: $fa-var-stack-exchange; }
.#{$fa-css-prefix}-arrow-circle-o-right:before { content: $fa-var-arrow-circle-o-right; }
.#{$fa-css-prefix}-arrow-circle-o-left:before { content: $fa-var-arrow-circle-o-left; }
.#{$fa-css-prefix}-toggle-left:before,
.#{$fa-css-prefix}-caret-square-o-left:before { content: $fa-var-caret-square-o-left; }
.#{$fa-css-prefix}-dot-circle-o:before { content: $fa-var-dot-circle-o; }
.#{$fa-css-prefix}-wheelchair:before { content: $fa-var-wheelchair; }
.#{$fa-css-prefix}-vimeo-square:before { content: $fa-var-vimeo-square; }
.#{$fa-css-prefix}-turkish-lira:before,
.#{$fa-css-prefix}-try:before { content: $fa-var-try; }
.#{$fa-css-prefix}-plus-square-o:before { content: $fa-var-plus-square-o; }
.#{$fa-css-prefix}-space-shuttle:before { content: $fa-var-space-shuttle; }
.#{$fa-css-prefix}-slack:before { content: $fa-var-slack; }
.#{$fa-css-prefix}-envelope-square:before { content: $fa-var-envelope-square; }
.#{$fa-css-prefix}-wordpress:before { content: $fa-var-wordpress; }
.#{$fa-css-prefix}-openid:before { content: $fa-var-openid; }
.#{$fa-css-prefix}-institution:before,
.#{$fa-css-prefix}-bank:before,
.#{$fa-css-prefix}-university:before { content: $fa-var-university; }
.#{$fa-css-prefix}-mortar-board:before,
.#{$fa-css-prefix}-graduation-cap:before { content: $fa-var-graduation-cap; }
.#{$fa-css-prefix}-yahoo:before { content: $fa-var-yahoo; }
.#{$fa-css-prefix}-google:before { content: $fa-var-google; }
.#{$fa-css-prefix}-reddit:before { content: $fa-var-reddit; }
.#{$fa-css-prefix}-reddit-square:before { content: $fa-var-reddit-square; }
.#{$fa-css-prefix}-stumbleupon-circle:before { content: $fa-var-stumbleupon-circle; }
.#{$fa-css-prefix}-stumbleupon:before { content: $fa-var-stumbleupon; }
.#{$fa-css-prefix}-delicious:before { content: $fa-var-delicious; }
.#{$fa-css-prefix}-digg:before { content: $fa-var-digg; }
.#{$fa-css-prefix}-pied-piper-pp:before { content: $fa-var-pied-piper-pp; }
.#{$fa-css-prefix}-pied-piper-alt:before { content: $fa-var-pied-piper-alt; }
.#{$fa-css-prefix}-drupal:before { content: $fa-var-drupal; }
.#{$fa-css-prefix}-joomla:before { content: $fa-var-joomla; }
.#{$fa-css-prefix}-language:before { content: $fa-var-language; }
.#{$fa-css-prefix}-fax:before { content: $fa-var-fax; }
.#{$fa-css-prefix}-building:before { content: $fa-var-building; }
.#{$fa-css-prefix}-child:before { content: $fa-var-child; }
.#{$fa-css-prefix}-paw:before { content: $fa-var-paw; }
.#{$fa-css-prefix}-spoon:before { content: $fa-var-spoon; }
.#{$fa-css-prefix}-cube:before { content: $fa-var-cube; }
.#{$fa-css-prefix}-cubes:before { content: $fa-var-cubes; }
.#{$fa-css-prefix}-behance:before { content: $fa-var-behance; }
.#{$fa-css-prefix}-behance-square:before { content: $fa-var-behance-square; }
.#{$fa-css-prefix}-steam:before { content: $fa-var-steam; }
.#{$fa-css-prefix}-steam-square:before { content: $fa-var-steam-square; }
.#{$fa-css-prefix}-recycle:before { content: $fa-var-recycle; }
.#{$fa-css-prefix}-automobile:before,
.#{$fa-css-prefix}-car:before { content: $fa-var-car; }
.#{$fa-css-prefix}-cab:before,
.#{$fa-css-prefix}-taxi:before { content: $fa-var-taxi; }
.#{$fa-css-prefix}-tree:before { content: $fa-var-tree; }
.#{$fa-css-prefix}-spotify:before { content: $fa-var-spotify; }
.#{$fa-css-prefix}-deviantart:before { content: $fa-var-deviantart; }
.#{$fa-css-prefix}-soundcloud:before { content: $fa-var-soundcloud; }
.#{$fa-css-prefix}-database:before { content: $fa-var-database; }
.#{$fa-css-prefix}-file-pdf-o:before { content: $fa-var-file-pdf-o; }
.#{$fa-css-prefix}-file-word-o:before { content: $fa-var-file-word-o; }
.#{$fa-css-prefix}-file-excel-o:before { content: $fa-var-file-excel-o; }
.#{$fa-css-prefix}-file-powerpoint-o:before { content: $fa-var-file-powerpoint-o; }
.#{$fa-css-prefix}-file-photo-o:before,
.#{$fa-css-prefix}-file-picture-o:before,
.#{$fa-css-prefix}-file-image-o:before { content: $fa-var-file-image-o; }
.#{$fa-css-prefix}-file-zip-o:before,
.#{$fa-css-prefix}-file-archive-o:before { content: $fa-var-file-archive-o; }
.#{$fa-css-prefix}-file-sound-o:before,
.#{$fa-css-prefix}-file-audio-o:before { content: $fa-var-file-audio-o; }
.#{$fa-css-prefix}-file-movie-o:before,
.#{$fa-css-prefix}-file-video-o:before { content: $fa-var-file-video-o; }
.#{$fa-css-prefix}-file-code-o:before { content: $fa-var-file-code-o; }
.#{$fa-css-prefix}-vine:before { content: $fa-var-vine; }
.#{$fa-css-prefix}-codepen:before { content: $fa-var-codepen; }
.#{$fa-css-prefix}-jsfiddle:before { content: $fa-var-jsfiddle; }
.#{$fa-css-prefix}-life-bouy:before,
.#{$fa-css-prefix}-life-buoy:before,
.#{$fa-css-prefix}-life-saver:before,
.#{$fa-css-prefix}-support:before,
.#{$fa-css-prefix}-life-ring:before { content: $fa-var-life-ring; }
.#{$fa-css-prefix}-circle-o-notch:before { content: $fa-var-circle-o-notch; }
.#{$fa-css-prefix}-ra:before,
.#{$fa-css-prefix}-resistance:before,
.#{$fa-css-prefix}-rebel:before { content: $fa-var-rebel; }
.#{$fa-css-prefix}-ge:before,
.#{$fa-css-prefix}-empire:before { content: $fa-var-empire; }
.#{$fa-css-prefix}-git-square:before { content: $fa-var-git-square; }
.#{$fa-css-prefix}-git:before { content: $fa-var-git; }
.#{$fa-css-prefix}-y-combinator-square:before,
.#{$fa-css-prefix}-yc-square:before,
.#{$fa-css-prefix}-hacker-news:before { content: $fa-var-hacker-news; }
.#{$fa-css-prefix}-tencent-weibo:before { content: $fa-var-tencent-weibo; }
.#{$fa-css-prefix}-qq:before { content: $fa-var-qq; }
.#{$fa-css-prefix}-wechat:before,
.#{$fa-css-prefix}-weixin:before { content: $fa-var-weixin; }
.#{$fa-css-prefix}-send:before,
.#{$fa-css-prefix}-paper-plane:before { content: $fa-var-paper-plane; }
.#{$fa-css-prefix}-send-o:before,
.#{$fa-css-prefix}-paper-plane-o:before { content: $fa-var-paper-plane-o; }
.#{$fa-css-prefix}-history:before { content: $fa-var-history; }
.#{$fa-css-prefix}-circle-thin:before { content: $fa-var-circle-thin; }
.#{$fa-css-prefix}-header:before { content: $fa-var-header; }
.#{$fa-css-prefix}-paragraph:before { content: $fa-var-paragraph; }
.#{$fa-css-prefix}-sliders:before { content: $fa-var-sliders; }
.#{$fa-css-prefix}-share-alt:before { content: $fa-var-share-alt; }
.#{$fa-css-prefix}-share-alt-square:before { content: $fa-var-share-alt-square; }
.#{$fa-css-prefix}-bomb:before { content: $fa-var-bomb; }
.#{$fa-css-prefix}-soccer-ball-o:before,
.#{$fa-css-prefix}-futbol-o:before { content: $fa-var-futbol-o; }
.#{$fa-css-prefix}-tty:before { content: $fa-var-tty; }
.#{$fa-css-prefix}-binoculars:before { content: $fa-var-binoculars; }
.#{$fa-css-prefix}-plug:before { content: $fa-var-plug; }
.#{$fa-css-prefix}-slideshare:before { content: $fa-var-slideshare; }
.#{$fa-css-prefix}-twitch:before { content: $fa-var-twitch; }
.#{$fa-css-prefix}-yelp:before { content: $fa-var-yelp; }
.#{$fa-css-prefix}-newspaper-o:before { content: $fa-var-newspaper-o; }
.#{$fa-css-prefix}-wifi:before { content: $fa-var-wifi; }
.#{$fa-css-prefix}-calculator:before { content: $fa-var-calculator; }
.#{$fa-css-prefix}-paypal:before { content: $fa-var-paypal; }
.#{$fa-css-prefix}-google-wallet:before { content: $fa-var-google-wallet; }
.#{$fa-css-prefix}-cc-visa:before { content: $fa-var-cc-visa; }
.#{$fa-css-prefix}-cc-mastercard:before { content: $fa-var-cc-mastercard; }
.#{$fa-css-prefix}-cc-discover:before { content: $fa-var-cc-discover; }
.#{$fa-css-prefix}-cc-amex:before { content: $fa-var-cc-amex; }
.#{$fa-css-prefix}-cc-paypal:before { content: $fa-var-cc-paypal; }
.#{$fa-css-prefix}-cc-stripe:before { content: $fa-var-cc-stripe; }
.#{$fa-css-prefix}-bell-slash:before { content: $fa-var-bell-slash; }
.#{$fa-css-prefix}-bell-slash-o:before { content: $fa-var-bell-slash-o; }
.#{$fa-css-prefix}-trash:before { content: $fa-var-trash; }
.#{$fa-css-prefix}-copyright:before { content: $fa-var-copyright; }
.#{$fa-css-prefix}-at:before { content: $fa-var-at; }
.#{$fa-css-prefix}-eyedropper:before { content: $fa-var-eyedropper; }
.#{$fa-css-prefix}-paint-brush:before { content: $fa-var-paint-brush; }
.#{$fa-css-prefix}-birthday-cake:before { content: $fa-var-birthday-cake; }
.#{$fa-css-prefix}-area-chart:before { content: $fa-var-area-chart; }
.#{$fa-css-prefix}-pie-chart:before { content: $fa-var-pie-chart; }
.#{$fa-css-prefix}-line-chart:before { content: $fa-var-line-chart; }
.#{$fa-css-prefix}-lastfm:before { content: $fa-var-lastfm; }
.#{$fa-css-prefix}-lastfm-square:before { content: $fa-var-lastfm-square; }
.#{$fa-css-prefix}-toggle-off:before { content: $fa-var-toggle-off; }
.#{$fa-css-prefix}-toggle-on:before { content: $fa-var-toggle-on; }
.#{$fa-css-prefix}-bicycle:before { content: $fa-var-bicycle; }
.#{$fa-css-prefix}-bus:before { content: $fa-var-bus; }
.#{$fa-css-prefix}-ioxhost:before { content: $fa-var-ioxhost; }
.#{$fa-css-prefix}-angellist:before { content: $fa-var-angellist; }
.#{$fa-css-prefix}-cc:before { content: $fa-var-cc; }
.#{$fa-css-prefix}-shekel:before,
.#{$fa-css-prefix}-sheqel:before,
.#{$fa-css-prefix}-ils:before { content: $fa-var-ils; }
.#{$fa-css-prefix}-meanpath:before { content: $fa-var-meanpath; }
.#{$fa-css-prefix}-buysellads:before { content: $fa-var-buysellads; }
.#{$fa-css-prefix}-connectdevelop:before { content: $fa-var-connectdevelop; }
.#{$fa-css-prefix}-dashcube:before { content: $fa-var-dashcube; }
.#{$fa-css-prefix}-forumbee:before { content: $fa-var-forumbee; }
.#{$fa-css-prefix}-leanpub:before { content: $fa-var-leanpub; }
.#{$fa-css-prefix}-sellsy:before { content: $fa-var-sellsy; }
.#{$fa-css-prefix}-shirtsinbulk:before { content: $fa-var-shirtsinbulk; }
.#{$fa-css-prefix}-simplybuilt:before { content: $fa-var-simplybuilt; }
.#{$fa-css-prefix}-skyatlas:before { content: $fa-var-skyatlas; }
.#{$fa-css-prefix}-cart-plus:before { content: $fa-var-cart-plus; }
.#{$fa-css-prefix}-cart-arrow-down:before { content: $fa-var-cart-arrow-down; }
.#{$fa-css-prefix}-diamond:before { content: $fa-var-diamond; }
.#{$fa-css-prefix}-ship:before { content: $fa-var-ship; }
.#{$fa-css-prefix}-user-secret:before { content: $fa-var-user-secret; }
.#{$fa-css-prefix}-motorcycle:before { content: $fa-var-motorcycle; }
.#{$fa-css-prefix}-street-view:before { content: $fa-var-street-view; }
.#{$fa-css-prefix}-heartbeat:before { content: $fa-var-heartbeat; }
.#{$fa-css-prefix}-venus:before { content: $fa-var-venus; }
.#{$fa-css-prefix}-mars:before { content: $fa-var-mars; }
.#{$fa-css-prefix}-mercury:before { content: $fa-var-mercury; }
.#{$fa-css-prefix}-intersex:before,
.#{$fa-css-prefix}-transgender:before { content: $fa-var-transgender; }
.#{$fa-css-prefix}-transgender-alt:before { content: $fa-var-transgender-alt; }
.#{$fa-css-prefix}-venus-double:before { content: $fa-var-venus-double; }
.#{$fa-css-prefix}-mars-double:before { content: $fa-var-mars-double; }
.#{$fa-css-prefix}-venus-mars:before { content: $fa-var-venus-mars; }
.#{$fa-css-prefix}-mars-stroke:before { content: $fa-var-mars-stroke; }
.#{$fa-css-prefix}-mars-stroke-v:before { content: $fa-var-mars-stroke-v; }
.#{$fa-css-prefix}-mars-stroke-h:before { content: $fa-var-mars-stroke-h; }
.#{$fa-css-prefix}-neuter:before { content: $fa-var-neuter; }
.#{$fa-css-prefix}-genderless:before { content: $fa-var-genderless; }
.#{$fa-css-prefix}-facebook-official:before { content: $fa-var-facebook-official; }
.#{$fa-css-prefix}-pinterest-p:before { content: $fa-var-pinterest-p; }
.#{$fa-css-prefix}-whatsapp:before { content: $fa-var-whatsapp; }
.#{$fa-css-prefix}-server:before { content: $fa-var-server; }
.#{$fa-css-prefix}-user-plus:before { content: $fa-var-user-plus; }
.#{$fa-css-prefix}-user-times:before { content: $fa-var-user-times; }
.#{$fa-css-prefix}-hotel:before,
.#{$fa-css-prefix}-bed:before { content: $fa-var-bed; }
.#{$fa-css-prefix}-viacoin:before { content: $fa-var-viacoin; }
.#{$fa-css-prefix}-train:before { content: $fa-var-train; }
.#{$fa-css-prefix}-subway:before { content: $fa-var-subway; }
.#{$fa-css-prefix}-medium:before { content: $fa-var-medium; }
.#{$fa-css-prefix}-yc:before,
.#{$fa-css-prefix}-y-combinator:before { content: $fa-var-y-combinator; }
.#{$fa-css-prefix}-optin-monster:before { content: $fa-var-optin-monster; }
.#{$fa-css-prefix}-opencart:before { content: $fa-var-opencart; }
.#{$fa-css-prefix}-expeditedssl:before { content: $fa-var-expeditedssl; }
.#{$fa-css-prefix}-battery-4:before,
.#{$fa-css-prefix}-battery:before,
.#{$fa-css-prefix}-battery-full:before { content: $fa-var-battery-full; }
.#{$fa-css-prefix}-battery-3:before,
.#{$fa-css-prefix}-battery-three-quarters:before { content: $fa-var-battery-three-quarters; }
.#{$fa-css-prefix}-battery-2:before,
.#{$fa-css-prefix}-battery-half:before { content: $fa-var-battery-half; }
.#{$fa-css-prefix}-battery-1:before,
.#{$fa-css-prefix}-battery-quarter:before { content: $fa-var-battery-quarter; }
.#{$fa-css-prefix}-battery-0:before,
.#{$fa-css-prefix}-battery-empty:before { content: $fa-var-battery-empty; }
.#{$fa-css-prefix}-mouse-pointer:before { content: $fa-var-mouse-pointer; }
.#{$fa-css-prefix}-i-cursor:before { content: $fa-var-i-cursor; }
.#{$fa-css-prefix}-object-group:before { content: $fa-var-object-group; }
.#{$fa-css-prefix}-object-ungroup:before { content: $fa-var-object-ungroup; }
.#{$fa-css-prefix}-sticky-note:before { content: $fa-var-sticky-note; }
.#{$fa-css-prefix}-sticky-note-o:before { content: $fa-var-sticky-note-o; }
.#{$fa-css-prefix}-cc-jcb:before { content: $fa-var-cc-jcb; }
.#{$fa-css-prefix}-cc-diners-club:before { content: $fa-var-cc-diners-club; }
.#{$fa-css-prefix}-clone:before { content: $fa-var-clone; }
.#{$fa-css-prefix}-balance-scale:before { content: $fa-var-balance-scale; }
.#{$fa-css-prefix}-hourglass-o:before { content: $fa-var-hourglass-o; }
.#{$fa-css-prefix}-hourglass-1:before,
.#{$fa-css-prefix}-hourglass-start:before { content: $fa-var-hourglass-start; }
.#{$fa-css-prefix}-hourglass-2:before,
.#{$fa-css-prefix}-hourglass-half:before { content: $fa-var-hourglass-half; }
.#{$fa-css-prefix}-hourglass-3:before,
.#{$fa-css-prefix}-hourglass-end:before { content: $fa-var-hourglass-end; }
.#{$fa-css-prefix}-hourglass:before { content: $fa-var-hourglass; }
.#{$fa-css-prefix}-hand-grab-o:before,
.#{$fa-css-prefix}-hand-rock-o:before { content: $fa-var-hand-rock-o; }
.#{$fa-css-prefix}-hand-stop-o:before,
.#{$fa-css-prefix}-hand-paper-o:before { content: $fa-var-hand-paper-o; }
.#{$fa-css-prefix}-hand-scissors-o:before { content: $fa-var-hand-scissors-o; }
.#{$fa-css-prefix}-hand-lizard-o:before { content: $fa-var-hand-lizard-o; }
.#{$fa-css-prefix}-hand-spock-o:before { content: $fa-var-hand-spock-o; }
.#{$fa-css-prefix}-hand-pointer-o:before { content: $fa-var-hand-pointer-o; }
.#{$fa-css-prefix}-hand-peace-o:before { content: $fa-var-hand-peace-o; }
.#{$fa-css-prefix}-trademark:before { content: $fa-var-trademark; }
.#{$fa-css-prefix}-registered:before { content: $fa-var-registered; }
.#{$fa-css-prefix}-creative-commons:before { content: $fa-var-creative-commons; }
.#{$fa-css-prefix}-gg:before { content: $fa-var-gg; }
.#{$fa-css-prefix}-gg-circle:before { content: $fa-var-gg-circle; }
.#{$fa-css-prefix}-tripadvisor:before { content: $fa-var-tripadvisor; }
.#{$fa-css-prefix}-odnoklassniki:before { content: $fa-var-odnoklassniki; }
.#{$fa-css-prefix}-odnoklassniki-square:before { content: $fa-var-odnoklassniki-square; }
.#{$fa-css-prefix}-get-pocket:before { content: $fa-var-get-pocket; }
.#{$fa-css-prefix}-wikipedia-w:before { content: $fa-var-wikipedia-w; }
.#{$fa-css-prefix}-safari:before { content: $fa-var-safari; }
.#{$fa-css-prefix}-chrome:before { content: $fa-var-chrome; }
.#{$fa-css-prefix}-firefox:before { content: $fa-var-firefox; }
.#{$fa-css-prefix}-opera:before { content: $fa-var-opera; }
.#{$fa-css-prefix}-internet-explorer:before { content: $fa-var-internet-explorer; }
.#{$fa-css-prefix}-tv:before,
.#{$fa-css-prefix}-television:before { content: $fa-var-television; }
.#{$fa-css-prefix}-contao:before { content: $fa-var-contao; }
.#{$fa-css-prefix}-500px:before { content: $fa-var-500px; }
.#{$fa-css-prefix}-amazon:before { content: $fa-var-amazon; }
.#{$fa-css-prefix}-calendar-plus-o:before { content: $fa-var-calendar-plus-o; }
.#{$fa-css-prefix}-calendar-minus-o:before { content: $fa-var-calendar-minus-o; }
.#{$fa-css-prefix}-calendar-times-o:before { content: $fa-var-calendar-times-o; }
.#{$fa-css-prefix}-calendar-check-o:before { content: $fa-var-calendar-check-o; }
.#{$fa-css-prefix}-industry:before { content: $fa-var-industry; }
.#{$fa-css-prefix}-map-pin:before { content: $fa-var-map-pin; }
.#{$fa-css-prefix}-map-signs:before { content: $fa-var-map-signs; }
.#{$fa-css-prefix}-map-o:before { content: $fa-var-map-o; }
.#{$fa-css-prefix}-map:before { content: $fa-var-map; }
.#{$fa-css-prefix}-commenting:before { content: $fa-var-commenting; }
.#{$fa-css-prefix}-commenting-o:before { content: $fa-var-commenting-o; }
.#{$fa-css-prefix}-houzz:before { content: $fa-var-houzz; }
.#{$fa-css-prefix}-vimeo:before { content: $fa-var-vimeo; }
.#{$fa-css-prefix}-black-tie:before { content: $fa-var-black-tie; }
.#{$fa-css-prefix}-fonticons:before { content: $fa-var-fonticons; }
.#{$fa-css-prefix}-reddit-alien:before { content: $fa-var-reddit-alien; }
.#{$fa-css-prefix}-edge:before { content: $fa-var-edge; }
.#{$fa-css-prefix}-credit-card-alt:before { content: $fa-var-credit-card-alt; }
.#{$fa-css-prefix}-codiepie:before { content: $fa-var-codiepie; }
.#{$fa-css-prefix}-modx:before { content: $fa-var-modx; }
.#{$fa-css-prefix}-fort-awesome:before { content: $fa-var-fort-awesome; }
.#{$fa-css-prefix}-usb:before { content: $fa-var-usb; }
.#{$fa-css-prefix}-product-hunt:before { content: $fa-var-product-hunt; }
.#{$fa-css-prefix}-mixcloud:before { content: $fa-var-mixcloud; }
.#{$fa-css-prefix}-scribd:before { content: $fa-var-scribd; }
.#{$fa-css-prefix}-pause-circle:before { content: $fa-var-pause-circle; }
.#{$fa-css-prefix}-pause-circle-o:before { content: $fa-var-pause-circle-o; }
.#{$fa-css-prefix}-stop-circle:before { content: $fa-var-stop-circle; }
.#{$fa-css-prefix}-stop-circle-o:before { content: $fa-var-stop-circle-o; }
.#{$fa-css-prefix}-shopping-bag:before { content: $fa-var-shopping-bag; }
.#{$fa-css-prefix}-shopping-basket:before { content: $fa-var-shopping-basket; }
.#{$fa-css-prefix}-hashtag:before { content: $fa-var-hashtag; }
.#{$fa-css-prefix}-bluetooth:before { content: $fa-var-bluetooth; }
.#{$fa-css-prefix}-bluetooth-b:before { content: $fa-var-bluetooth-b; }
.#{$fa-css-prefix}-percent:before { content: $fa-var-percent; }
.#{$fa-css-prefix}-gitlab:before { content: $fa-var-gitlab; }
.#{$fa-css-prefix}-wpbeginner:before { content: $fa-var-wpbeginner; }
.#{$fa-css-prefix}-wpforms:before { content: $fa-var-wpforms; }
.#{$fa-css-prefix}-envira:before { content: $fa-var-envira; }
.#{$fa-css-prefix}-universal-access:before { content: $fa-var-universal-access; }
.#{$fa-css-prefix}-wheelchair-alt:before { content: $fa-var-wheelchair-alt; }
.#{$fa-css-prefix}-question-circle-o:before { content: $fa-var-question-circle-o; }
.#{$fa-css-prefix}-blind:before { content: $fa-var-blind; }
.#{$fa-css-prefix}-audio-description:before { content: $fa-var-audio-description; }
.#{$fa-css-prefix}-volume-control-phone:before { content: $fa-var-volume-control-phone; }
.#{$fa-css-prefix}-braille:before { content: $fa-var-braille; }
.#{$fa-css-prefix}-assistive-listening-systems:before { content: $fa-var-assistive-listening-systems; }
.#{$fa-css-prefix}-asl-interpreting:before,
.#{$fa-css-prefix}-american-sign-language-interpreting:before { content: $fa-var-american-sign-language-interpreting; }
.#{$fa-css-prefix}-deafness:before,
.#{$fa-css-prefix}-hard-of-hearing:before,
.#{$fa-css-prefix}-deaf:before { content: $fa-var-deaf; }
.#{$fa-css-prefix}-glide:before { content: $fa-var-glide; }
.#{$fa-css-prefix}-glide-g:before { content: $fa-var-glide-g; }
.#{$fa-css-prefix}-signing:before,
.#{$fa-css-prefix}-sign-language:before { content: $fa-var-sign-language; }
.#{$fa-css-prefix}-low-vision:before { content: $fa-var-low-vision; }
.#{$fa-css-prefix}-viadeo:before { content: $fa-var-viadeo; }
.#{$fa-css-prefix}-viadeo-square:before { content: $fa-var-viadeo-square; }
.#{$fa-css-prefix}-snapchat:before { content: $fa-var-snapchat; }
.#{$fa-css-prefix}-snapchat-ghost:before { content: $fa-var-snapchat-ghost; }
.#{$fa-css-prefix}-snapchat-square:before { content: $fa-var-snapchat-square; }
.#{$fa-css-prefix}-pied-piper:before { content: $fa-var-pied-piper; }
.#{$fa-css-prefix}-first-order:before { content: $fa-var-first-order; }
.#{$fa-css-prefix}-yoast:before { content: $fa-var-yoast; }
.#{$fa-css-prefix}-themeisle:before { content: $fa-var-themeisle; }
.#{$fa-css-prefix}-google-plus-circle:before,
.#{$fa-css-prefix}-google-plus-official:before { content: $fa-var-google-plus-official; }
.#{$fa-css-prefix}-fa:before,
.#{$fa-css-prefix}-font-awesome:before { content: $fa-var-font-awesome; }
.#{$fa-css-prefix}-handshake-o:before { content: $fa-var-handshake-o; }
.#{$fa-css-prefix}-envelope-open:before { content: $fa-var-envelope-open; }
.#{$fa-css-prefix}-envelope-open-o:before { content: $fa-var-envelope-open-o; }
.#{$fa-css-prefix}-linode:before { content: $fa-var-linode; }
.#{$fa-css-prefix}-address-book:before { content: $fa-var-address-book; }
.#{$fa-css-prefix}-address-book-o:before { content: $fa-var-address-book-o; }
.#{$fa-css-prefix}-vcard:before,
.#{$fa-css-prefix}-address-card:before { content: $fa-var-address-card; }
.#{$fa-css-prefix}-vcard-o:before,
.#{$fa-css-prefix}-address-card-o:before { content: $fa-var-address-card-o; }
.#{$fa-css-prefix}-user-circle:before { content: $fa-var-user-circle; }
.#{$fa-css-prefix}-user-circle-o:before { content: $fa-var-user-circle-o; }
.#{$fa-css-prefix}-user-o:before { content: $fa-var-user-o; }
.#{$fa-css-prefix}-id-badge:before { content: $fa-var-id-badge; }
.#{$fa-css-prefix}-drivers-license:before,
.#{$fa-css-prefix}-id-card:before { content: $fa-var-id-card; }
.#{$fa-css-prefix}-drivers-license-o:before,
.#{$fa-css-prefix}-id-card-o:before { content: $fa-var-id-card-o; }
.#{$fa-css-prefix}-quora:before { content: $fa-var-quora; }
.#{$fa-css-prefix}-free-code-camp:before { content: $fa-var-free-code-camp; }
.#{$fa-css-prefix}-telegram:before { content: $fa-var-telegram; }
.#{$fa-css-prefix}-thermometer-4:before,
.#{$fa-css-prefix}-thermometer:before,
.#{$fa-css-prefix}-thermometer-full:before { content: $fa-var-thermometer-full; }
.#{$fa-css-prefix}-thermometer-3:before,
.#{$fa-css-prefix}-thermometer-three-quarters:before { content: $fa-var-thermometer-three-quarters; }
.#{$fa-css-prefix}-thermometer-2:before,
.#{$fa-css-prefix}-thermometer-half:before { content: $fa-var-thermometer-half; }
.#{$fa-css-prefix}-thermometer-1:before,
.#{$fa-css-prefix}-thermometer-quarter:before { content: $fa-var-thermometer-quarter; }
.#{$fa-css-prefix}-thermometer-0:before,
.#{$fa-css-prefix}-thermometer-empty:before { content: $fa-var-thermometer-empty; }
.#{$fa-css-prefix}-shower:before { content: $fa-var-shower; }
.#{$fa-css-prefix}-bathtub:before,
.#{$fa-css-prefix}-s15:before,
.#{$fa-css-prefix}-bath:before { content: $fa-var-bath; }
.#{$fa-css-prefix}-podcast:before { content: $fa-var-podcast; }
.#{$fa-css-prefix}-window-maximize:before { content: $fa-var-window-maximize; }
.#{$fa-css-prefix}-window-minimize:before { content: $fa-var-window-minimize; }
.#{$fa-css-prefix}-window-restore:before { content: $fa-var-window-restore; }
.#{$fa-css-prefix}-times-rectangle:before,
.#{$fa-css-prefix}-window-close:before { content: $fa-var-window-close; }
.#{$fa-css-prefix}-times-rectangle-o:before,
.#{$fa-css-prefix}-window-close-o:before { content: $fa-var-window-close-o; }
.#{$fa-css-prefix}-bandcamp:before { content: $fa-var-bandcamp; }
.#{$fa-css-prefix}-grav:before { content: $fa-var-grav; }
.#{$fa-css-prefix}-etsy:before { content: $fa-var-etsy; }
.#{$fa-css-prefix}-imdb:before { content: $fa-var-imdb; }
.#{$fa-css-prefix}-ravelry:before { content: $fa-var-ravelry; }
.#{$fa-css-prefix}-eercast:before { content: $fa-var-eercast; }
.#{$fa-css-prefix}-microchip:before { content: $fa-var-microchip; }
.#{$fa-css-prefix}-snowflake-o:before { content: $fa-var-snowflake-o; }
.#{$fa-css-prefix}-superpowers:before { content: $fa-var-superpowers; }
.#{$fa-css-prefix}-wpexplorer:before { content: $fa-var-wpexplorer; }
.#{$fa-css-prefix}-meetup:before { content: $fa-var-meetup; }

View File

@ -0,0 +1,13 @@
// Icon Sizes
// -------------------------
/* makes the font 33% larger relative to the icon container */
.#{$fa-css-prefix}-lg {
font-size: (4em / 3);
line-height: (3em / 4);
vertical-align: -15%;
}
.#{$fa-css-prefix}-2x { font-size: 2em; }
.#{$fa-css-prefix}-3x { font-size: 3em; }
.#{$fa-css-prefix}-4x { font-size: 4em; }
.#{$fa-css-prefix}-5x { font-size: 5em; }

View File

@ -0,0 +1,19 @@
// List Icons
// -------------------------
.#{$fa-css-prefix}-ul {
padding-left: 0;
margin-left: $fa-li-width;
list-style-type: none;
> li { position: relative; }
}
.#{$fa-css-prefix}-li {
position: absolute;
left: -$fa-li-width;
width: $fa-li-width;
top: (2em / 14);
text-align: center;
&.#{$fa-css-prefix}-lg {
left: -$fa-li-width + (4em / 14);
}
}

View File

@ -0,0 +1,60 @@
// Mixins
// --------------------------
@mixin fa-icon() {
display: inline-block;
font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration
font-size: inherit; // can't have font-size inherit on line above, so need to override
text-rendering: auto; // optimizelegibility throws things off #1094
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
@mixin fa-icon-rotate($degrees, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})";
-webkit-transform: rotate($degrees);
-ms-transform: rotate($degrees);
transform: rotate($degrees);
}
@mixin fa-icon-flip($horiz, $vert, $rotation) {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)";
-webkit-transform: scale($horiz, $vert);
-ms-transform: scale($horiz, $vert);
transform: scale($horiz, $vert);
}
// Only display content to screen readers. A la Bootstrap 4.
//
// See: http://a11yproject.com/posts/how-to-hide-content/
@mixin sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0,0,0,0);
border: 0;
}
// Use in conjunction with .sr-only to only display content when it's focused.
//
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
//
// Credit: HTML5 Boilerplate
@mixin sr-only-focusable {
&:active,
&:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}
}

View File

@ -0,0 +1,15 @@
/* FONT PATH
* -------------------------- */
@font-face {
font-family: 'FontAwesome';
src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'),
url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
// src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
font-weight: normal;
font-style: normal;
}

View File

@ -0,0 +1,20 @@
// Rotated & Flipped Icons
// -------------------------
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
// Hook for IE8-9
// -------------------------
:root .#{$fa-css-prefix}-rotate-90,
:root .#{$fa-css-prefix}-rotate-180,
:root .#{$fa-css-prefix}-rotate-270,
:root .#{$fa-css-prefix}-flip-horizontal,
:root .#{$fa-css-prefix}-flip-vertical {
filter: none;
}

View File

@ -0,0 +1,5 @@
// Screen Readers
// -------------------------
.sr-only { @include sr-only(); }
.sr-only-focusable { @include sr-only-focusable(); }

View File

@ -0,0 +1,20 @@
// Stacked Icons
// -------------------------
.#{$fa-css-prefix}-stack {
position: relative;
display: inline-block;
width: 2em;
height: 2em;
line-height: 2em;
vertical-align: middle;
}
.#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
position: absolute;
left: 0;
width: 100%;
text-align: center;
}
.#{$fa-css-prefix}-stack-1x { line-height: inherit; }
.#{$fa-css-prefix}-stack-2x { font-size: 2em; }
.#{$fa-css-prefix}-inverse { color: $fa-inverse; }

View File

@ -0,0 +1,800 @@
// Variables
// --------------------------
$fa-font-path: "../fonts" !default;
$fa-font-size-base: 14px !default;
$fa-line-height-base: 1 !default;
//$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly
$fa-css-prefix: fa !default;
$fa-version: "4.7.0" !default;
$fa-border-color: #eee !default;
$fa-inverse: #fff !default;
$fa-li-width: (30em / 14) !default;
$fa-var-500px: "\f26e";
$fa-var-address-book: "\f2b9";
$fa-var-address-book-o: "\f2ba";
$fa-var-address-card: "\f2bb";
$fa-var-address-card-o: "\f2bc";
$fa-var-adjust: "\f042";
$fa-var-adn: "\f170";
$fa-var-align-center: "\f037";
$fa-var-align-justify: "\f039";
$fa-var-align-left: "\f036";
$fa-var-align-right: "\f038";
$fa-var-amazon: "\f270";
$fa-var-ambulance: "\f0f9";
$fa-var-american-sign-language-interpreting: "\f2a3";
$fa-var-anchor: "\f13d";
$fa-var-android: "\f17b";
$fa-var-angellist: "\f209";
$fa-var-angle-double-down: "\f103";
$fa-var-angle-double-left: "\f100";
$fa-var-angle-double-right: "\f101";
$fa-var-angle-double-up: "\f102";
$fa-var-angle-down: "\f107";
$fa-var-angle-left: "\f104";
$fa-var-angle-right: "\f105";
$fa-var-angle-up: "\f106";
$fa-var-apple: "\f179";
$fa-var-archive: "\f187";
$fa-var-area-chart: "\f1fe";
$fa-var-arrow-circle-down: "\f0ab";
$fa-var-arrow-circle-left: "\f0a8";
$fa-var-arrow-circle-o-down: "\f01a";
$fa-var-arrow-circle-o-left: "\f190";
$fa-var-arrow-circle-o-right: "\f18e";
$fa-var-arrow-circle-o-up: "\f01b";
$fa-var-arrow-circle-right: "\f0a9";
$fa-var-arrow-circle-up: "\f0aa";
$fa-var-arrow-down: "\f063";
$fa-var-arrow-left: "\f060";
$fa-var-arrow-right: "\f061";
$fa-var-arrow-up: "\f062";
$fa-var-arrows: "\f047";
$fa-var-arrows-alt: "\f0b2";
$fa-var-arrows-h: "\f07e";
$fa-var-arrows-v: "\f07d";
$fa-var-asl-interpreting: "\f2a3";
$fa-var-assistive-listening-systems: "\f2a2";
$fa-var-asterisk: "\f069";
$fa-var-at: "\f1fa";
$fa-var-audio-description: "\f29e";
$fa-var-automobile: "\f1b9";
$fa-var-backward: "\f04a";
$fa-var-balance-scale: "\f24e";
$fa-var-ban: "\f05e";
$fa-var-bandcamp: "\f2d5";
$fa-var-bank: "\f19c";
$fa-var-bar-chart: "\f080";
$fa-var-bar-chart-o: "\f080";
$fa-var-barcode: "\f02a";
$fa-var-bars: "\f0c9";
$fa-var-bath: "\f2cd";
$fa-var-bathtub: "\f2cd";
$fa-var-battery: "\f240";
$fa-var-battery-0: "\f244";
$fa-var-battery-1: "\f243";
$fa-var-battery-2: "\f242";
$fa-var-battery-3: "\f241";
$fa-var-battery-4: "\f240";
$fa-var-battery-empty: "\f244";
$fa-var-battery-full: "\f240";
$fa-var-battery-half: "\f242";
$fa-var-battery-quarter: "\f243";
$fa-var-battery-three-quarters: "\f241";
$fa-var-bed: "\f236";
$fa-var-beer: "\f0fc";
$fa-var-behance: "\f1b4";
$fa-var-behance-square: "\f1b5";
$fa-var-bell: "\f0f3";
$fa-var-bell-o: "\f0a2";
$fa-var-bell-slash: "\f1f6";
$fa-var-bell-slash-o: "\f1f7";
$fa-var-bicycle: "\f206";
$fa-var-binoculars: "\f1e5";
$fa-var-birthday-cake: "\f1fd";
$fa-var-bitbucket: "\f171";
$fa-var-bitbucket-square: "\f172";
$fa-var-bitcoin: "\f15a";
$fa-var-black-tie: "\f27e";
$fa-var-blind: "\f29d";
$fa-var-bluetooth: "\f293";
$fa-var-bluetooth-b: "\f294";
$fa-var-bold: "\f032";
$fa-var-bolt: "\f0e7";
$fa-var-bomb: "\f1e2";
$fa-var-book: "\f02d";
$fa-var-bookmark: "\f02e";
$fa-var-bookmark-o: "\f097";
$fa-var-braille: "\f2a1";
$fa-var-briefcase: "\f0b1";
$fa-var-btc: "\f15a";
$fa-var-bug: "\f188";
$fa-var-building: "\f1ad";
$fa-var-building-o: "\f0f7";
$fa-var-bullhorn: "\f0a1";
$fa-var-bullseye: "\f140";
$fa-var-bus: "\f207";
$fa-var-buysellads: "\f20d";
$fa-var-cab: "\f1ba";
$fa-var-calculator: "\f1ec";
$fa-var-calendar: "\f073";
$fa-var-calendar-check-o: "\f274";
$fa-var-calendar-minus-o: "\f272";
$fa-var-calendar-o: "\f133";
$fa-var-calendar-plus-o: "\f271";
$fa-var-calendar-times-o: "\f273";
$fa-var-camera: "\f030";
$fa-var-camera-retro: "\f083";
$fa-var-car: "\f1b9";
$fa-var-caret-down: "\f0d7";
$fa-var-caret-left: "\f0d9";
$fa-var-caret-right: "\f0da";
$fa-var-caret-square-o-down: "\f150";
$fa-var-caret-square-o-left: "\f191";
$fa-var-caret-square-o-right: "\f152";
$fa-var-caret-square-o-up: "\f151";
$fa-var-caret-up: "\f0d8";
$fa-var-cart-arrow-down: "\f218";
$fa-var-cart-plus: "\f217";
$fa-var-cc: "\f20a";
$fa-var-cc-amex: "\f1f3";
$fa-var-cc-diners-club: "\f24c";
$fa-var-cc-discover: "\f1f2";
$fa-var-cc-jcb: "\f24b";
$fa-var-cc-mastercard: "\f1f1";
$fa-var-cc-paypal: "\f1f4";
$fa-var-cc-stripe: "\f1f5";
$fa-var-cc-visa: "\f1f0";
$fa-var-certificate: "\f0a3";
$fa-var-chain: "\f0c1";
$fa-var-chain-broken: "\f127";
$fa-var-check: "\f00c";
$fa-var-check-circle: "\f058";
$fa-var-check-circle-o: "\f05d";
$fa-var-check-square: "\f14a";
$fa-var-check-square-o: "\f046";
$fa-var-chevron-circle-down: "\f13a";
$fa-var-chevron-circle-left: "\f137";
$fa-var-chevron-circle-right: "\f138";
$fa-var-chevron-circle-up: "\f139";
$fa-var-chevron-down: "\f078";
$fa-var-chevron-left: "\f053";
$fa-var-chevron-right: "\f054";
$fa-var-chevron-up: "\f077";
$fa-var-child: "\f1ae";
$fa-var-chrome: "\f268";
$fa-var-circle: "\f111";
$fa-var-circle-o: "\f10c";
$fa-var-circle-o-notch: "\f1ce";
$fa-var-circle-thin: "\f1db";
$fa-var-clipboard: "\f0ea";
$fa-var-clock-o: "\f017";
$fa-var-clone: "\f24d";
$fa-var-close: "\f00d";
$fa-var-cloud: "\f0c2";
$fa-var-cloud-download: "\f0ed";
$fa-var-cloud-upload: "\f0ee";
$fa-var-cny: "\f157";
$fa-var-code: "\f121";
$fa-var-code-fork: "\f126";
$fa-var-codepen: "\f1cb";
$fa-var-codiepie: "\f284";
$fa-var-coffee: "\f0f4";
$fa-var-cog: "\f013";
$fa-var-cogs: "\f085";
$fa-var-columns: "\f0db";
$fa-var-comment: "\f075";
$fa-var-comment-o: "\f0e5";
$fa-var-commenting: "\f27a";
$fa-var-commenting-o: "\f27b";
$fa-var-comments: "\f086";
$fa-var-comments-o: "\f0e6";
$fa-var-compass: "\f14e";
$fa-var-compress: "\f066";
$fa-var-connectdevelop: "\f20e";
$fa-var-contao: "\f26d";
$fa-var-copy: "\f0c5";
$fa-var-copyright: "\f1f9";
$fa-var-creative-commons: "\f25e";
$fa-var-credit-card: "\f09d";
$fa-var-credit-card-alt: "\f283";
$fa-var-crop: "\f125";
$fa-var-crosshairs: "\f05b";
$fa-var-css3: "\f13c";
$fa-var-cube: "\f1b2";
$fa-var-cubes: "\f1b3";
$fa-var-cut: "\f0c4";
$fa-var-cutlery: "\f0f5";
$fa-var-dashboard: "\f0e4";
$fa-var-dashcube: "\f210";
$fa-var-database: "\f1c0";
$fa-var-deaf: "\f2a4";
$fa-var-deafness: "\f2a4";
$fa-var-dedent: "\f03b";
$fa-var-delicious: "\f1a5";
$fa-var-desktop: "\f108";
$fa-var-deviantart: "\f1bd";
$fa-var-diamond: "\f219";
$fa-var-digg: "\f1a6";
$fa-var-dollar: "\f155";
$fa-var-dot-circle-o: "\f192";
$fa-var-download: "\f019";
$fa-var-dribbble: "\f17d";
$fa-var-drivers-license: "\f2c2";
$fa-var-drivers-license-o: "\f2c3";
$fa-var-dropbox: "\f16b";
$fa-var-drupal: "\f1a9";
$fa-var-edge: "\f282";
$fa-var-edit: "\f044";
$fa-var-eercast: "\f2da";
$fa-var-eject: "\f052";
$fa-var-ellipsis-h: "\f141";
$fa-var-ellipsis-v: "\f142";
$fa-var-empire: "\f1d1";
$fa-var-envelope: "\f0e0";
$fa-var-envelope-o: "\f003";
$fa-var-envelope-open: "\f2b6";
$fa-var-envelope-open-o: "\f2b7";
$fa-var-envelope-square: "\f199";
$fa-var-envira: "\f299";
$fa-var-eraser: "\f12d";
$fa-var-etsy: "\f2d7";
$fa-var-eur: "\f153";
$fa-var-euro: "\f153";
$fa-var-exchange: "\f0ec";
$fa-var-exclamation: "\f12a";
$fa-var-exclamation-circle: "\f06a";
$fa-var-exclamation-triangle: "\f071";
$fa-var-expand: "\f065";
$fa-var-expeditedssl: "\f23e";
$fa-var-external-link: "\f08e";
$fa-var-external-link-square: "\f14c";
$fa-var-eye: "\f06e";
$fa-var-eye-slash: "\f070";
$fa-var-eyedropper: "\f1fb";
$fa-var-fa: "\f2b4";
$fa-var-facebook: "\f09a";
$fa-var-facebook-f: "\f09a";
$fa-var-facebook-official: "\f230";
$fa-var-facebook-square: "\f082";
$fa-var-fast-backward: "\f049";
$fa-var-fast-forward: "\f050";
$fa-var-fax: "\f1ac";
$fa-var-feed: "\f09e";
$fa-var-female: "\f182";
$fa-var-fighter-jet: "\f0fb";
$fa-var-file: "\f15b";
$fa-var-file-archive-o: "\f1c6";
$fa-var-file-audio-o: "\f1c7";
$fa-var-file-code-o: "\f1c9";
$fa-var-file-excel-o: "\f1c3";
$fa-var-file-image-o: "\f1c5";
$fa-var-file-movie-o: "\f1c8";
$fa-var-file-o: "\f016";
$fa-var-file-pdf-o: "\f1c1";
$fa-var-file-photo-o: "\f1c5";
$fa-var-file-picture-o: "\f1c5";
$fa-var-file-powerpoint-o: "\f1c4";
$fa-var-file-sound-o: "\f1c7";
$fa-var-file-text: "\f15c";
$fa-var-file-text-o: "\f0f6";
$fa-var-file-video-o: "\f1c8";
$fa-var-file-word-o: "\f1c2";
$fa-var-file-zip-o: "\f1c6";
$fa-var-files-o: "\f0c5";
$fa-var-film: "\f008";
$fa-var-filter: "\f0b0";
$fa-var-fire: "\f06d";
$fa-var-fire-extinguisher: "\f134";
$fa-var-firefox: "\f269";
$fa-var-first-order: "\f2b0";
$fa-var-flag: "\f024";
$fa-var-flag-checkered: "\f11e";
$fa-var-flag-o: "\f11d";
$fa-var-flash: "\f0e7";
$fa-var-flask: "\f0c3";
$fa-var-flickr: "\f16e";
$fa-var-floppy-o: "\f0c7";
$fa-var-folder: "\f07b";
$fa-var-folder-o: "\f114";
$fa-var-folder-open: "\f07c";
$fa-var-folder-open-o: "\f115";
$fa-var-font: "\f031";
$fa-var-font-awesome: "\f2b4";
$fa-var-fonticons: "\f280";
$fa-var-fort-awesome: "\f286";
$fa-var-forumbee: "\f211";
$fa-var-forward: "\f04e";
$fa-var-foursquare: "\f180";
$fa-var-free-code-camp: "\f2c5";
$fa-var-frown-o: "\f119";
$fa-var-futbol-o: "\f1e3";
$fa-var-gamepad: "\f11b";
$fa-var-gavel: "\f0e3";
$fa-var-gbp: "\f154";
$fa-var-ge: "\f1d1";
$fa-var-gear: "\f013";
$fa-var-gears: "\f085";
$fa-var-genderless: "\f22d";
$fa-var-get-pocket: "\f265";
$fa-var-gg: "\f260";
$fa-var-gg-circle: "\f261";
$fa-var-gift: "\f06b";
$fa-var-git: "\f1d3";
$fa-var-git-square: "\f1d2";
$fa-var-github: "\f09b";
$fa-var-github-alt: "\f113";
$fa-var-github-square: "\f092";
$fa-var-gitlab: "\f296";
$fa-var-gittip: "\f184";
$fa-var-glass: "\f000";
$fa-var-glide: "\f2a5";
$fa-var-glide-g: "\f2a6";
$fa-var-globe: "\f0ac";
$fa-var-google: "\f1a0";
$fa-var-google-plus: "\f0d5";
$fa-var-google-plus-circle: "\f2b3";
$fa-var-google-plus-official: "\f2b3";
$fa-var-google-plus-square: "\f0d4";
$fa-var-google-wallet: "\f1ee";
$fa-var-graduation-cap: "\f19d";
$fa-var-gratipay: "\f184";
$fa-var-grav: "\f2d6";
$fa-var-group: "\f0c0";
$fa-var-h-square: "\f0fd";
$fa-var-hacker-news: "\f1d4";
$fa-var-hand-grab-o: "\f255";
$fa-var-hand-lizard-o: "\f258";
$fa-var-hand-o-down: "\f0a7";
$fa-var-hand-o-left: "\f0a5";
$fa-var-hand-o-right: "\f0a4";
$fa-var-hand-o-up: "\f0a6";
$fa-var-hand-paper-o: "\f256";
$fa-var-hand-peace-o: "\f25b";
$fa-var-hand-pointer-o: "\f25a";
$fa-var-hand-rock-o: "\f255";
$fa-var-hand-scissors-o: "\f257";
$fa-var-hand-spock-o: "\f259";
$fa-var-hand-stop-o: "\f256";
$fa-var-handshake-o: "\f2b5";
$fa-var-hard-of-hearing: "\f2a4";
$fa-var-hashtag: "\f292";
$fa-var-hdd-o: "\f0a0";
$fa-var-header: "\f1dc";
$fa-var-headphones: "\f025";
$fa-var-heart: "\f004";
$fa-var-heart-o: "\f08a";
$fa-var-heartbeat: "\f21e";
$fa-var-history: "\f1da";
$fa-var-home: "\f015";
$fa-var-hospital-o: "\f0f8";
$fa-var-hotel: "\f236";
$fa-var-hourglass: "\f254";
$fa-var-hourglass-1: "\f251";
$fa-var-hourglass-2: "\f252";
$fa-var-hourglass-3: "\f253";
$fa-var-hourglass-end: "\f253";
$fa-var-hourglass-half: "\f252";
$fa-var-hourglass-o: "\f250";
$fa-var-hourglass-start: "\f251";
$fa-var-houzz: "\f27c";
$fa-var-html5: "\f13b";
$fa-var-i-cursor: "\f246";
$fa-var-id-badge: "\f2c1";
$fa-var-id-card: "\f2c2";
$fa-var-id-card-o: "\f2c3";
$fa-var-ils: "\f20b";
$fa-var-image: "\f03e";
$fa-var-imdb: "\f2d8";
$fa-var-inbox: "\f01c";
$fa-var-indent: "\f03c";
$fa-var-industry: "\f275";
$fa-var-info: "\f129";
$fa-var-info-circle: "\f05a";
$fa-var-inr: "\f156";
$fa-var-instagram: "\f16d";
$fa-var-institution: "\f19c";
$fa-var-internet-explorer: "\f26b";
$fa-var-intersex: "\f224";
$fa-var-ioxhost: "\f208";
$fa-var-italic: "\f033";
$fa-var-joomla: "\f1aa";
$fa-var-jpy: "\f157";
$fa-var-jsfiddle: "\f1cc";
$fa-var-key: "\f084";
$fa-var-keyboard-o: "\f11c";
$fa-var-krw: "\f159";
$fa-var-language: "\f1ab";
$fa-var-laptop: "\f109";
$fa-var-lastfm: "\f202";
$fa-var-lastfm-square: "\f203";
$fa-var-leaf: "\f06c";
$fa-var-leanpub: "\f212";
$fa-var-legal: "\f0e3";
$fa-var-lemon-o: "\f094";
$fa-var-level-down: "\f149";
$fa-var-level-up: "\f148";
$fa-var-life-bouy: "\f1cd";
$fa-var-life-buoy: "\f1cd";
$fa-var-life-ring: "\f1cd";
$fa-var-life-saver: "\f1cd";
$fa-var-lightbulb-o: "\f0eb";
$fa-var-line-chart: "\f201";
$fa-var-link: "\f0c1";
$fa-var-linkedin: "\f0e1";
$fa-var-linkedin-square: "\f08c";
$fa-var-linode: "\f2b8";
$fa-var-linux: "\f17c";
$fa-var-list: "\f03a";
$fa-var-list-alt: "\f022";
$fa-var-list-ol: "\f0cb";
$fa-var-list-ul: "\f0ca";
$fa-var-location-arrow: "\f124";
$fa-var-lock: "\f023";
$fa-var-long-arrow-down: "\f175";
$fa-var-long-arrow-left: "\f177";
$fa-var-long-arrow-right: "\f178";
$fa-var-long-arrow-up: "\f176";
$fa-var-low-vision: "\f2a8";
$fa-var-magic: "\f0d0";
$fa-var-magnet: "\f076";
$fa-var-mail-forward: "\f064";
$fa-var-mail-reply: "\f112";
$fa-var-mail-reply-all: "\f122";
$fa-var-male: "\f183";
$fa-var-map: "\f279";
$fa-var-map-marker: "\f041";
$fa-var-map-o: "\f278";
$fa-var-map-pin: "\f276";
$fa-var-map-signs: "\f277";
$fa-var-mars: "\f222";
$fa-var-mars-double: "\f227";
$fa-var-mars-stroke: "\f229";
$fa-var-mars-stroke-h: "\f22b";
$fa-var-mars-stroke-v: "\f22a";
$fa-var-maxcdn: "\f136";
$fa-var-meanpath: "\f20c";
$fa-var-medium: "\f23a";
$fa-var-medkit: "\f0fa";
$fa-var-meetup: "\f2e0";
$fa-var-meh-o: "\f11a";
$fa-var-mercury: "\f223";
$fa-var-microchip: "\f2db";
$fa-var-microphone: "\f130";
$fa-var-microphone-slash: "\f131";
$fa-var-minus: "\f068";
$fa-var-minus-circle: "\f056";
$fa-var-minus-square: "\f146";
$fa-var-minus-square-o: "\f147";
$fa-var-mixcloud: "\f289";
$fa-var-mobile: "\f10b";
$fa-var-mobile-phone: "\f10b";
$fa-var-modx: "\f285";
$fa-var-money: "\f0d6";
$fa-var-moon-o: "\f186";
$fa-var-mortar-board: "\f19d";
$fa-var-motorcycle: "\f21c";
$fa-var-mouse-pointer: "\f245";
$fa-var-music: "\f001";
$fa-var-navicon: "\f0c9";
$fa-var-neuter: "\f22c";
$fa-var-newspaper-o: "\f1ea";
$fa-var-object-group: "\f247";
$fa-var-object-ungroup: "\f248";
$fa-var-odnoklassniki: "\f263";
$fa-var-odnoklassniki-square: "\f264";
$fa-var-opencart: "\f23d";
$fa-var-openid: "\f19b";
$fa-var-opera: "\f26a";
$fa-var-optin-monster: "\f23c";
$fa-var-outdent: "\f03b";
$fa-var-pagelines: "\f18c";
$fa-var-paint-brush: "\f1fc";
$fa-var-paper-plane: "\f1d8";
$fa-var-paper-plane-o: "\f1d9";
$fa-var-paperclip: "\f0c6";
$fa-var-paragraph: "\f1dd";
$fa-var-paste: "\f0ea";
$fa-var-pause: "\f04c";
$fa-var-pause-circle: "\f28b";
$fa-var-pause-circle-o: "\f28c";
$fa-var-paw: "\f1b0";
$fa-var-paypal: "\f1ed";
$fa-var-pencil: "\f040";
$fa-var-pencil-square: "\f14b";
$fa-var-pencil-square-o: "\f044";
$fa-var-percent: "\f295";
$fa-var-phone: "\f095";
$fa-var-phone-square: "\f098";
$fa-var-photo: "\f03e";
$fa-var-picture-o: "\f03e";
$fa-var-pie-chart: "\f200";
$fa-var-pied-piper: "\f2ae";
$fa-var-pied-piper-alt: "\f1a8";
$fa-var-pied-piper-pp: "\f1a7";
$fa-var-pinterest: "\f0d2";
$fa-var-pinterest-p: "\f231";
$fa-var-pinterest-square: "\f0d3";
$fa-var-plane: "\f072";
$fa-var-play: "\f04b";
$fa-var-play-circle: "\f144";
$fa-var-play-circle-o: "\f01d";
$fa-var-plug: "\f1e6";
$fa-var-plus: "\f067";
$fa-var-plus-circle: "\f055";
$fa-var-plus-square: "\f0fe";
$fa-var-plus-square-o: "\f196";
$fa-var-podcast: "\f2ce";
$fa-var-power-off: "\f011";
$fa-var-print: "\f02f";
$fa-var-product-hunt: "\f288";
$fa-var-puzzle-piece: "\f12e";
$fa-var-qq: "\f1d6";
$fa-var-qrcode: "\f029";
$fa-var-question: "\f128";
$fa-var-question-circle: "\f059";
$fa-var-question-circle-o: "\f29c";
$fa-var-quora: "\f2c4";
$fa-var-quote-left: "\f10d";
$fa-var-quote-right: "\f10e";
$fa-var-ra: "\f1d0";
$fa-var-random: "\f074";
$fa-var-ravelry: "\f2d9";
$fa-var-rebel: "\f1d0";
$fa-var-recycle: "\f1b8";
$fa-var-reddit: "\f1a1";
$fa-var-reddit-alien: "\f281";
$fa-var-reddit-square: "\f1a2";
$fa-var-refresh: "\f021";
$fa-var-registered: "\f25d";
$fa-var-remove: "\f00d";
$fa-var-renren: "\f18b";
$fa-var-reorder: "\f0c9";
$fa-var-repeat: "\f01e";
$fa-var-reply: "\f112";
$fa-var-reply-all: "\f122";
$fa-var-resistance: "\f1d0";
$fa-var-retweet: "\f079";
$fa-var-rmb: "\f157";
$fa-var-road: "\f018";
$fa-var-rocket: "\f135";
$fa-var-rotate-left: "\f0e2";
$fa-var-rotate-right: "\f01e";
$fa-var-rouble: "\f158";
$fa-var-rss: "\f09e";
$fa-var-rss-square: "\f143";
$fa-var-rub: "\f158";
$fa-var-ruble: "\f158";
$fa-var-rupee: "\f156";
$fa-var-s15: "\f2cd";
$fa-var-safari: "\f267";
$fa-var-save: "\f0c7";
$fa-var-scissors: "\f0c4";
$fa-var-scribd: "\f28a";
$fa-var-search: "\f002";
$fa-var-search-minus: "\f010";
$fa-var-search-plus: "\f00e";
$fa-var-sellsy: "\f213";
$fa-var-send: "\f1d8";
$fa-var-send-o: "\f1d9";
$fa-var-server: "\f233";
$fa-var-share: "\f064";
$fa-var-share-alt: "\f1e0";
$fa-var-share-alt-square: "\f1e1";
$fa-var-share-square: "\f14d";
$fa-var-share-square-o: "\f045";
$fa-var-shekel: "\f20b";
$fa-var-sheqel: "\f20b";
$fa-var-shield: "\f132";
$fa-var-ship: "\f21a";
$fa-var-shirtsinbulk: "\f214";
$fa-var-shopping-bag: "\f290";
$fa-var-shopping-basket: "\f291";
$fa-var-shopping-cart: "\f07a";
$fa-var-shower: "\f2cc";
$fa-var-sign-in: "\f090";
$fa-var-sign-language: "\f2a7";
$fa-var-sign-out: "\f08b";
$fa-var-signal: "\f012";
$fa-var-signing: "\f2a7";
$fa-var-simplybuilt: "\f215";
$fa-var-sitemap: "\f0e8";
$fa-var-skyatlas: "\f216";
$fa-var-skype: "\f17e";
$fa-var-slack: "\f198";
$fa-var-sliders: "\f1de";
$fa-var-slideshare: "\f1e7";
$fa-var-smile-o: "\f118";
$fa-var-snapchat: "\f2ab";
$fa-var-snapchat-ghost: "\f2ac";
$fa-var-snapchat-square: "\f2ad";
$fa-var-snowflake-o: "\f2dc";
$fa-var-soccer-ball-o: "\f1e3";
$fa-var-sort: "\f0dc";
$fa-var-sort-alpha-asc: "\f15d";
$fa-var-sort-alpha-desc: "\f15e";
$fa-var-sort-amount-asc: "\f160";
$fa-var-sort-amount-desc: "\f161";
$fa-var-sort-asc: "\f0de";
$fa-var-sort-desc: "\f0dd";
$fa-var-sort-down: "\f0dd";
$fa-var-sort-numeric-asc: "\f162";
$fa-var-sort-numeric-desc: "\f163";
$fa-var-sort-up: "\f0de";
$fa-var-soundcloud: "\f1be";
$fa-var-space-shuttle: "\f197";
$fa-var-spinner: "\f110";
$fa-var-spoon: "\f1b1";
$fa-var-spotify: "\f1bc";
$fa-var-square: "\f0c8";
$fa-var-square-o: "\f096";
$fa-var-stack-exchange: "\f18d";
$fa-var-stack-overflow: "\f16c";
$fa-var-star: "\f005";
$fa-var-star-half: "\f089";
$fa-var-star-half-empty: "\f123";
$fa-var-star-half-full: "\f123";
$fa-var-star-half-o: "\f123";
$fa-var-star-o: "\f006";
$fa-var-steam: "\f1b6";
$fa-var-steam-square: "\f1b7";
$fa-var-step-backward: "\f048";
$fa-var-step-forward: "\f051";
$fa-var-stethoscope: "\f0f1";
$fa-var-sticky-note: "\f249";
$fa-var-sticky-note-o: "\f24a";
$fa-var-stop: "\f04d";
$fa-var-stop-circle: "\f28d";
$fa-var-stop-circle-o: "\f28e";
$fa-var-street-view: "\f21d";
$fa-var-strikethrough: "\f0cc";
$fa-var-stumbleupon: "\f1a4";
$fa-var-stumbleupon-circle: "\f1a3";
$fa-var-subscript: "\f12c";
$fa-var-subway: "\f239";
$fa-var-suitcase: "\f0f2";
$fa-var-sun-o: "\f185";
$fa-var-superpowers: "\f2dd";
$fa-var-superscript: "\f12b";
$fa-var-support: "\f1cd";
$fa-var-table: "\f0ce";
$fa-var-tablet: "\f10a";
$fa-var-tachometer: "\f0e4";
$fa-var-tag: "\f02b";
$fa-var-tags: "\f02c";
$fa-var-tasks: "\f0ae";
$fa-var-taxi: "\f1ba";
$fa-var-telegram: "\f2c6";
$fa-var-television: "\f26c";
$fa-var-tencent-weibo: "\f1d5";
$fa-var-terminal: "\f120";
$fa-var-text-height: "\f034";
$fa-var-text-width: "\f035";
$fa-var-th: "\f00a";
$fa-var-th-large: "\f009";
$fa-var-th-list: "\f00b";
$fa-var-themeisle: "\f2b2";
$fa-var-thermometer: "\f2c7";
$fa-var-thermometer-0: "\f2cb";
$fa-var-thermometer-1: "\f2ca";
$fa-var-thermometer-2: "\f2c9";
$fa-var-thermometer-3: "\f2c8";
$fa-var-thermometer-4: "\f2c7";
$fa-var-thermometer-empty: "\f2cb";
$fa-var-thermometer-full: "\f2c7";
$fa-var-thermometer-half: "\f2c9";
$fa-var-thermometer-quarter: "\f2ca";
$fa-var-thermometer-three-quarters: "\f2c8";
$fa-var-thumb-tack: "\f08d";
$fa-var-thumbs-down: "\f165";
$fa-var-thumbs-o-down: "\f088";
$fa-var-thumbs-o-up: "\f087";
$fa-var-thumbs-up: "\f164";
$fa-var-ticket: "\f145";
$fa-var-times: "\f00d";
$fa-var-times-circle: "\f057";
$fa-var-times-circle-o: "\f05c";
$fa-var-times-rectangle: "\f2d3";
$fa-var-times-rectangle-o: "\f2d4";
$fa-var-tint: "\f043";
$fa-var-toggle-down: "\f150";
$fa-var-toggle-left: "\f191";
$fa-var-toggle-off: "\f204";
$fa-var-toggle-on: "\f205";
$fa-var-toggle-right: "\f152";
$fa-var-toggle-up: "\f151";
$fa-var-trademark: "\f25c";
$fa-var-train: "\f238";
$fa-var-transgender: "\f224";
$fa-var-transgender-alt: "\f225";
$fa-var-trash: "\f1f8";
$fa-var-trash-o: "\f014";
$fa-var-tree: "\f1bb";
$fa-var-trello: "\f181";
$fa-var-tripadvisor: "\f262";
$fa-var-trophy: "\f091";
$fa-var-truck: "\f0d1";
$fa-var-try: "\f195";
$fa-var-tty: "\f1e4";
$fa-var-tumblr: "\f173";
$fa-var-tumblr-square: "\f174";
$fa-var-turkish-lira: "\f195";
$fa-var-tv: "\f26c";
$fa-var-twitch: "\f1e8";
$fa-var-twitter: "\f099";
$fa-var-twitter-square: "\f081";
$fa-var-umbrella: "\f0e9";
$fa-var-underline: "\f0cd";
$fa-var-undo: "\f0e2";
$fa-var-universal-access: "\f29a";
$fa-var-university: "\f19c";
$fa-var-unlink: "\f127";
$fa-var-unlock: "\f09c";
$fa-var-unlock-alt: "\f13e";
$fa-var-unsorted: "\f0dc";
$fa-var-upload: "\f093";
$fa-var-usb: "\f287";
$fa-var-usd: "\f155";
$fa-var-user: "\f007";
$fa-var-user-circle: "\f2bd";
$fa-var-user-circle-o: "\f2be";
$fa-var-user-md: "\f0f0";
$fa-var-user-o: "\f2c0";
$fa-var-user-plus: "\f234";
$fa-var-user-secret: "\f21b";
$fa-var-user-times: "\f235";
$fa-var-users: "\f0c0";
$fa-var-vcard: "\f2bb";
$fa-var-vcard-o: "\f2bc";
$fa-var-venus: "\f221";
$fa-var-venus-double: "\f226";
$fa-var-venus-mars: "\f228";
$fa-var-viacoin: "\f237";
$fa-var-viadeo: "\f2a9";
$fa-var-viadeo-square: "\f2aa";
$fa-var-video-camera: "\f03d";
$fa-var-vimeo: "\f27d";
$fa-var-vimeo-square: "\f194";
$fa-var-vine: "\f1ca";
$fa-var-vk: "\f189";
$fa-var-volume-control-phone: "\f2a0";
$fa-var-volume-down: "\f027";
$fa-var-volume-off: "\f026";
$fa-var-volume-up: "\f028";
$fa-var-warning: "\f071";
$fa-var-wechat: "\f1d7";
$fa-var-weibo: "\f18a";
$fa-var-weixin: "\f1d7";
$fa-var-whatsapp: "\f232";
$fa-var-wheelchair: "\f193";
$fa-var-wheelchair-alt: "\f29b";
$fa-var-wifi: "\f1eb";
$fa-var-wikipedia-w: "\f266";
$fa-var-window-close: "\f2d3";
$fa-var-window-close-o: "\f2d4";
$fa-var-window-maximize: "\f2d0";
$fa-var-window-minimize: "\f2d1";
$fa-var-window-restore: "\f2d2";
$fa-var-windows: "\f17a";
$fa-var-won: "\f159";
$fa-var-wordpress: "\f19a";
$fa-var-wpbeginner: "\f297";
$fa-var-wpexplorer: "\f2de";
$fa-var-wpforms: "\f298";
$fa-var-wrench: "\f0ad";
$fa-var-xing: "\f168";
$fa-var-xing-square: "\f169";
$fa-var-y-combinator: "\f23b";
$fa-var-y-combinator-square: "\f1d4";
$fa-var-yahoo: "\f19e";
$fa-var-yc: "\f23b";
$fa-var-yc-square: "\f1d4";
$fa-var-yelp: "\f1e9";
$fa-var-yen: "\f157";
$fa-var-yoast: "\f2b1";
$fa-var-youtube: "\f167";
$fa-var-youtube-play: "\f16a";
$fa-var-youtube-square: "\f166";

View File

@ -0,0 +1,18 @@
/*!
* Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome
* License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
*/
@import "variables";
@import "mixins";
@import "path";
@import "core";
@import "larger";
@import "fixed-width";
@import "list";
@import "bordered-pulled";
@import "animated";
@import "rotated-flipped";
@import "stacked";
@import "icons";
@import "screen-reader";

File diff suppressed because it is too large Load Diff

4581
src/assets/css/style.css Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

6
src/assets/css/style.min.css vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
src/assets/img/pattern.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB