├── .env.example
├── .gitattributes
├── .gitignore
├── app
├── Console
│ ├── Commands
│ │ └── Inspire.php
│ └── Kernel.php
├── Events
│ └── Event.php
├── Exceptions
│ └── Handler.php
├── Http
│ ├── Controllers
│ │ ├── Auth
│ │ │ ├── AuthController.php
│ │ │ └── PasswordController.php
│ │ └── Controller.php
│ ├── Kernel.php
│ ├── Middleware
│ │ ├── Authenticate.php
│ │ ├── EncryptCookies.php
│ │ ├── RedirectIfAuthenticated.php
│ │ └── VerifyCsrfToken.php
│ ├── Requests
│ │ └── Request.php
│ └── routes.php
├── Jobs
│ └── Job.php
├── Listeners
│ └── .gitkeep
├── Providers
│ ├── AppServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
└── User.php
├── artisan
├── bootstrap
├── app.php
├── autoload.php
└── cache
│ └── .gitignore
├── bower.json
├── composer.json
├── composer.lock
├── config
├── app.php
├── auth.php
├── broadcasting.php
├── cache.php
├── compile.php
├── database.php
├── filesystems.php
├── mail.php
├── queue.php
├── services.php
├── session.php
└── view.php
├── database
├── .gitignore
├── factories
│ └── ModelFactory.php
├── migrations
│ ├── .gitkeep
│ ├── 2014_10_12_000000_create_users_table.php
│ └── 2014_10_12_100000_create_password_resets_table.php
└── seeds
│ ├── .gitkeep
│ ├── DatabaseSeeder.php
│ └── UserTableSeeder.php
├── gulpfile.js
├── package.json
├── phpspec.yml
├── phpunit.xml
├── public
├── .htaccess
├── assets
│ ├── css
│ │ ├── all.css
│ │ └── all.css.map
│ ├── fonts
│ │ ├── FontAwesome.otf
│ │ ├── LICENSE.txt
│ │ ├── Material-Design-Icons.eot
│ │ ├── Material-Design-Icons.svg
│ │ ├── Material-Design-Icons.ttf
│ │ ├── Material-Design-Icons.woff
│ │ ├── RobotoDraftBold.woff
│ │ ├── RobotoDraftBold.woff2
│ │ ├── RobotoDraftItalic.woff
│ │ ├── RobotoDraftItalic.woff2
│ │ ├── RobotoDraftMedium.woff
│ │ ├── RobotoDraftMedium.woff2
│ │ ├── RobotoDraftRegular.woff
│ │ ├── RobotoDraftRegular.woff2
│ │ ├── fontawesome-webfont.eot
│ │ ├── fontawesome-webfont.svg
│ │ ├── fontawesome-webfont.ttf
│ │ ├── fontawesome-webfont.woff
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ ├── js
│ │ ├── all.js
│ │ └── all.js.map
│ ├── svg-loaders
│ │ ├── audio.svg
│ │ ├── ball-triangle.svg
│ │ ├── bars.svg
│ │ ├── circles.svg
│ │ ├── grid.svg
│ │ ├── hearts.svg
│ │ ├── oval.svg
│ │ ├── puff.svg
│ │ ├── rings.svg
│ │ ├── spinning-circles.svg
│ │ ├── tail-spin.svg
│ │ └── three-dots.svg
│ └── vue
│ │ └── main.js
├── css
│ ├── app.css
│ └── app.css.map
├── favicon.ico
├── index.php
└── robots.txt
├── readme.md
├── resources
├── assets
│ ├── js
│ │ ├── app.vue
│ │ ├── components
│ │ │ ├── loader.vue
│ │ │ └── sidebar.vue
│ │ ├── main.js
│ │ ├── storage.js
│ │ └── views
│ │ │ ├── dashboard-view.vue
│ │ │ ├── login-view.vue
│ │ │ └── user-view.vue
│ └── less
│ │ ├── _colors.less
│ │ ├── custom.less
│ │ ├── material
│ │ ├── _alerts.less
│ │ ├── _buttons.less
│ │ ├── _cards.less
│ │ ├── _checkboxes.less
│ │ ├── _colors.less
│ │ ├── _dialogs.less
│ │ ├── _dividers.less
│ │ ├── _icons-material-design.less
│ │ ├── _icons.less
│ │ ├── _inputs.less
│ │ ├── _labels.less
│ │ ├── _lists.less
│ │ ├── _mixins-fullpalette.less
│ │ ├── _mixins.less
│ │ ├── _navbar.less
│ │ ├── _panels.less
│ │ ├── _plugin-dropdownjs.less
│ │ ├── _plugin-nouislider.less
│ │ ├── _plugin-selectize.less
│ │ ├── _plugin-snackbarjs.less
│ │ ├── _popups.less
│ │ ├── _progress.less
│ │ ├── _radios.less
│ │ ├── _shadows.less
│ │ ├── _tabs.less
│ │ ├── _togglebutton.less
│ │ ├── _variables.less
│ │ ├── _welljumbo.less
│ │ ├── material-fullpalette.less
│ │ ├── material.less
│ │ ├── ripples.less
│ │ └── roboto.less
│ │ └── sb
│ │ ├── mixins.less
│ │ ├── sb-admin-2.less
│ │ └── variables.less
├── lang
│ └── en
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
└── views
│ ├── errors
│ └── 503.blade.php
│ ├── home.blade.php
│ └── vendor
│ └── .gitkeep
├── server.php
├── storage
├── app
│ └── .gitignore
├── database.sqlite
├── framework
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── logs
│ └── .gitignore
└── tests
├── ExampleTest.php
└── TestCase.php
/.env.example:
--------------------------------------------------------------------------------
1 | APP_ENV=local
2 | APP_DEBUG=true
3 | APP_KEY=SomeRandomString
4 |
5 | DB_HOST=localhost
6 | DB_DATABASE=homestead
7 | DB_USERNAME=homestead
8 | DB_PASSWORD=secret
9 |
10 | CACHE_DRIVER=file
11 | SESSION_DRIVER=file
12 | QUEUE_DRIVER=sync
13 |
14 | MAIL_DRIVER=smtp
15 | MAIL_HOST=mailtrap.io
16 | MAIL_PORT=2525
17 | MAIL_USERNAME=null
18 | MAIL_PASSWORD=null
19 | MAIL_ENCRYPTION=null
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.less linguist-vendored
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /vendor
2 | /node_modules
3 | /bower_components
4 | .env
5 |
--------------------------------------------------------------------------------
/app/Console/Commands/Inspire.php:
--------------------------------------------------------------------------------
1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')
28 | ->hourly();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/Events/Event.php:
--------------------------------------------------------------------------------
1 | ajax())
45 | {
46 | return response()->json(['success' => false, 'message' => 'Record not found'], 404);
47 | }
48 | }
49 |
50 | return parent::render($request, $e);
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/AuthController.php:
--------------------------------------------------------------------------------
1 | middleware('guest', ['except' => 'getLogout']);
33 | }
34 |
35 | /**
36 | * Get a validator for an incoming registration request.
37 | *
38 | * @param array $data
39 | * @return \Illuminate\Contracts\Validation\Validator
40 | */
41 | protected function validator(array $data)
42 | {
43 | return Validator::make($data, [
44 | 'name' => 'required|max:255',
45 | 'email' => 'required|email|max:255|unique:users',
46 | 'password' => 'required|confirmed|min:6',
47 | ]);
48 | }
49 |
50 | /**
51 | * Create a new user instance after a valid registration.
52 | *
53 | * @param array $data
54 | * @return User
55 | */
56 | protected function create(array $data)
57 | {
58 | return User::create([
59 | 'name' => $data['name'],
60 | 'email' => $data['email'],
61 | 'password' => bcrypt($data['password']),
62 | ]);
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/PasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | \App\Http\Middleware\Authenticate::class,
30 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
31 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
32 | ];
33 | }
34 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | auth = $auth;
26 | }
27 |
28 | /**
29 | * Handle an incoming request.
30 | *
31 | * @param \Illuminate\Http\Request $request
32 | * @param \Closure $next
33 | * @return mixed
34 | */
35 | public function handle($request, Closure $next)
36 | {
37 | if ($this->auth->guest()) {
38 | if ($request->ajax()) {
39 | return response('Unauthorized.', 401);
40 | } else {
41 | return redirect()->guest('auth/login');
42 | }
43 | }
44 |
45 | return $next($request);
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/Http/Middleware/EncryptCookies.php:
--------------------------------------------------------------------------------
1 | auth = $auth;
26 | }
27 |
28 | /**
29 | * Handle an incoming request.
30 | *
31 | * @param \Illuminate\Http\Request $request
32 | * @param \Closure $next
33 | * @return mixed
34 | */
35 | public function handle($request, Closure $next)
36 | {
37 | if ($this->auth->check()) {
38 | return redirect('/home');
39 | }
40 |
41 | return $next($request);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/Http/Middleware/VerifyCsrfToken.php:
--------------------------------------------------------------------------------
1 | $request->get('email'), 'password' => $request->get('password')])) {
22 | return response()->json(['success' => true, 'message' => 'Login successfully performed'], 200);
23 | }
24 |
25 | return response()->json(['success' => false, 'message' => 'Unable to login'], 401);
26 | });
27 |
28 | Route::group(['middleware' => 'auth'], function() {
29 |
30 | post('logout', function()
31 | {
32 | Auth::logout();
33 | return response()->json(['success' => true, 'message' => 'You logout with success'], 200);
34 | });
35 |
36 | get('users', function() {
37 | $users = App\User::all();
38 |
39 | return response()->json(['success' => 'true', 'message' => 'Loading users', 'data' => ['users' => $users->toJson()]], 200);
40 | });
41 | });
42 |
--------------------------------------------------------------------------------
/app/Jobs/Job.php:
--------------------------------------------------------------------------------
1 | [
17 | 'App\Listeners\EventListener',
18 | ],
19 | ];
20 |
21 | /**
22 | * Register any other events for your application.
23 | *
24 | * @param \Illuminate\Contracts\Events\Dispatcher $events
25 | * @return void
26 | */
27 | public function boot(DispatcherContract $events)
28 | {
29 | parent::boot($events);
30 |
31 | //
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | group(['namespace' => $this->namespace], function ($router) {
41 | require app_path('Http/routes.php');
42 | });
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/User.php:
--------------------------------------------------------------------------------
1 | make(Illuminate\Contracts\Console\Kernel::class);
32 |
33 | $status = $kernel->handle(
34 | $input = new Symfony\Component\Console\Input\ArgvInput,
35 | new Symfony\Component\Console\Output\ConsoleOutput
36 | );
37 |
38 | /*
39 | |--------------------------------------------------------------------------
40 | | Shutdown The Application
41 | |--------------------------------------------------------------------------
42 | |
43 | | Once Artisan has finished running. We will fire off the shutdown events
44 | | so that any final work may be done by the application before we shut
45 | | down the process. This is the last thing to happen to the request.
46 | |
47 | */
48 |
49 | $kernel->terminate($input, $status);
50 |
51 | exit($status);
52 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/bootstrap/autoload.php:
--------------------------------------------------------------------------------
1 | =5.5.9",
9 | "laravel/framework": "5.1.*"
10 | },
11 | "require-dev": {
12 | "fzaninotto/faker": "~1.4",
13 | "mockery/mockery": "0.9.*",
14 | "phpunit/phpunit": "~4.0",
15 | "phpspec/phpspec": "~2.1"
16 | },
17 | "autoload": {
18 | "classmap": [
19 | "database"
20 | ],
21 | "psr-4": {
22 | "App\\": "app/"
23 | }
24 | },
25 | "autoload-dev": {
26 | "classmap": [
27 | "tests/TestCase.php"
28 | ]
29 | },
30 | "scripts": {
31 | "post-install-cmd": [
32 | "php artisan clear-compiled",
33 | "php artisan optimize"
34 | ],
35 | "post-update-cmd": [
36 | "php artisan clear-compiled",
37 | "php artisan optimize"
38 | ],
39 | "post-root-package-install": [
40 | "php -r \"copy('.env.example', '.env');\""
41 | ],
42 | "post-create-project-cmd": [
43 | "php artisan key:generate"
44 | ]
45 | },
46 | "config": {
47 | "preferred-install": "dist"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/config/app.php:
--------------------------------------------------------------------------------
1 | env('APP_DEBUG'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Application URL
21 | |--------------------------------------------------------------------------
22 | |
23 | | This URL is used by the console to properly generate URLs when using
24 | | the Artisan command line tool. You should set this to the root of
25 | | your application so that it is used when running Artisan tasks.
26 | |
27 | */
28 |
29 | 'url' => 'http://localhost',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Application Timezone
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may specify the default timezone for your application, which
37 | | will be used by the PHP date and date-time functions. We have gone
38 | | ahead and set this to a sensible default for you out of the box.
39 | |
40 | */
41 |
42 | 'timezone' => 'UTC',
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Application Locale Configuration
47 | |--------------------------------------------------------------------------
48 | |
49 | | The application locale determines the default locale that will be used
50 | | by the translation service provider. You are free to set this value
51 | | to any of the locales which will be supported by the application.
52 | |
53 | */
54 |
55 | 'locale' => 'en',
56 |
57 | /*
58 | |--------------------------------------------------------------------------
59 | | Application Fallback Locale
60 | |--------------------------------------------------------------------------
61 | |
62 | | The fallback locale determines the locale to use when the current one
63 | | is not available. You may change the value to correspond to any of
64 | | the language folders that are provided through your application.
65 | |
66 | */
67 |
68 | 'fallback_locale' => 'en',
69 |
70 | /*
71 | |--------------------------------------------------------------------------
72 | | Encryption Key
73 | |--------------------------------------------------------------------------
74 | |
75 | | This key is used by the Illuminate encrypter service and should be set
76 | | to a random, 32 character string, otherwise these encrypted strings
77 | | will not be safe. Please do this before deploying an application!
78 | |
79 | */
80 |
81 | 'key' => env('APP_KEY', 'SomeRandomString'),
82 |
83 | 'cipher' => 'AES-256-CBC',
84 |
85 | /*
86 | |--------------------------------------------------------------------------
87 | | Logging Configuration
88 | |--------------------------------------------------------------------------
89 | |
90 | | Here you may configure the log settings for your application. Out of
91 | | the box, Laravel uses the Monolog PHP logging library. This gives
92 | | you a variety of powerful log handlers / formatters to utilize.
93 | |
94 | | Available Settings: "single", "daily", "syslog", "errorlog"
95 | |
96 | */
97 |
98 | 'log' => 'single',
99 |
100 | /*
101 | |--------------------------------------------------------------------------
102 | | Autoloaded Service Providers
103 | |--------------------------------------------------------------------------
104 | |
105 | | The service providers listed here will be automatically loaded on the
106 | | request to your application. Feel free to add your own services to
107 | | this array to grant expanded functionality to your applications.
108 | |
109 | */
110 |
111 | 'providers' => [
112 |
113 | /*
114 | * Laravel Framework Service Providers...
115 | */
116 | Illuminate\Foundation\Providers\ArtisanServiceProvider::class,
117 | Illuminate\Auth\AuthServiceProvider::class,
118 | Illuminate\Broadcasting\BroadcastServiceProvider::class,
119 | Illuminate\Bus\BusServiceProvider::class,
120 | Illuminate\Cache\CacheServiceProvider::class,
121 | Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class,
122 | Illuminate\Routing\ControllerServiceProvider::class,
123 | Illuminate\Cookie\CookieServiceProvider::class,
124 | Illuminate\Database\DatabaseServiceProvider::class,
125 | Illuminate\Encryption\EncryptionServiceProvider::class,
126 | Illuminate\Filesystem\FilesystemServiceProvider::class,
127 | Illuminate\Foundation\Providers\FoundationServiceProvider::class,
128 | Illuminate\Hashing\HashServiceProvider::class,
129 | Illuminate\Mail\MailServiceProvider::class,
130 | Illuminate\Pagination\PaginationServiceProvider::class,
131 | Illuminate\Pipeline\PipelineServiceProvider::class,
132 | Illuminate\Queue\QueueServiceProvider::class,
133 | Illuminate\Redis\RedisServiceProvider::class,
134 | Illuminate\Auth\Passwords\PasswordResetServiceProvider::class,
135 | Illuminate\Session\SessionServiceProvider::class,
136 | Illuminate\Translation\TranslationServiceProvider::class,
137 | Illuminate\Validation\ValidationServiceProvider::class,
138 | Illuminate\View\ViewServiceProvider::class,
139 |
140 | /*
141 | * Application Service Providers...
142 | */
143 | App\Providers\AppServiceProvider::class,
144 | App\Providers\EventServiceProvider::class,
145 | App\Providers\RouteServiceProvider::class,
146 |
147 | ],
148 |
149 | /*
150 | |--------------------------------------------------------------------------
151 | | Class Aliases
152 | |--------------------------------------------------------------------------
153 | |
154 | | This array of class aliases will be registered when this application
155 | | is started. However, feel free to register as many as you wish as
156 | | the aliases are "lazy" loaded so they don't hinder performance.
157 | |
158 | */
159 |
160 | 'aliases' => [
161 |
162 | 'App' => Illuminate\Support\Facades\App::class,
163 | 'Artisan' => Illuminate\Support\Facades\Artisan::class,
164 | 'Auth' => Illuminate\Support\Facades\Auth::class,
165 | 'Blade' => Illuminate\Support\Facades\Blade::class,
166 | 'Bus' => Illuminate\Support\Facades\Bus::class,
167 | 'Cache' => Illuminate\Support\Facades\Cache::class,
168 | 'Config' => Illuminate\Support\Facades\Config::class,
169 | 'Cookie' => Illuminate\Support\Facades\Cookie::class,
170 | 'Crypt' => Illuminate\Support\Facades\Crypt::class,
171 | 'DB' => Illuminate\Support\Facades\DB::class,
172 | 'Eloquent' => Illuminate\Database\Eloquent\Model::class,
173 | 'Event' => Illuminate\Support\Facades\Event::class,
174 | 'File' => Illuminate\Support\Facades\File::class,
175 | 'Hash' => Illuminate\Support\Facades\Hash::class,
176 | 'Input' => Illuminate\Support\Facades\Input::class,
177 | 'Inspiring' => Illuminate\Foundation\Inspiring::class,
178 | 'Lang' => Illuminate\Support\Facades\Lang::class,
179 | 'Log' => Illuminate\Support\Facades\Log::class,
180 | 'Mail' => Illuminate\Support\Facades\Mail::class,
181 | 'Password' => Illuminate\Support\Facades\Password::class,
182 | 'Queue' => Illuminate\Support\Facades\Queue::class,
183 | 'Redirect' => Illuminate\Support\Facades\Redirect::class,
184 | 'Redis' => Illuminate\Support\Facades\Redis::class,
185 | 'Request' => Illuminate\Support\Facades\Request::class,
186 | 'Response' => Illuminate\Support\Facades\Response::class,
187 | 'Route' => Illuminate\Support\Facades\Route::class,
188 | 'Schema' => Illuminate\Support\Facades\Schema::class,
189 | 'Session' => Illuminate\Support\Facades\Session::class,
190 | 'Storage' => Illuminate\Support\Facades\Storage::class,
191 | 'URL' => Illuminate\Support\Facades\URL::class,
192 | 'Validator' => Illuminate\Support\Facades\Validator::class,
193 | 'View' => Illuminate\Support\Facades\View::class,
194 |
195 | ],
196 |
197 | ];
198 |
--------------------------------------------------------------------------------
/config/auth.php:
--------------------------------------------------------------------------------
1 | 'eloquent',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Authentication Model
23 | |--------------------------------------------------------------------------
24 | |
25 | | When using the "Eloquent" authentication driver, we need to know which
26 | | Eloquent model should be used to retrieve your users. Of course, it
27 | | is often just the "User" model but you may use whatever you like.
28 | |
29 | */
30 |
31 | 'model' => App\User::class,
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Authentication Table
36 | |--------------------------------------------------------------------------
37 | |
38 | | When using the "Database" authentication driver, we need to know which
39 | | table should be used to retrieve your users. We have chosen a basic
40 | | default value but you may easily change it to any table you like.
41 | |
42 | */
43 |
44 | 'table' => 'users',
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Password Reset Settings
49 | |--------------------------------------------------------------------------
50 | |
51 | | Here you may set the options for resetting passwords including the view
52 | | that is your password reset e-mail. You can also set the name of the
53 | | table that maintains all of the reset tokens for your application.
54 | |
55 | | The expire time is the number of minutes that the reset token should be
56 | | considered valid. This security feature keeps tokens short-lived so
57 | | they have less time to be guessed. You may change this as needed.
58 | |
59 | */
60 |
61 | 'password' => [
62 | 'email' => 'emails.password',
63 | 'table' => 'password_resets',
64 | 'expire' => 60,
65 | ],
66 |
67 | ];
68 |
--------------------------------------------------------------------------------
/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'pusher'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Broadcast Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may define all of the broadcast connections that will be used
24 | | to broadcast events to other systems or over websockets. Samples of
25 | | each available type of connection are provided inside this array.
26 | |
27 | */
28 |
29 | 'connections' => [
30 |
31 | 'pusher' => [
32 | 'driver' => 'pusher',
33 | 'key' => env('PUSHER_KEY'),
34 | 'secret' => env('PUSHER_SECRET'),
35 | 'app_id' => env('PUSHER_APP_ID'),
36 | ],
37 |
38 | 'redis' => [
39 | 'driver' => 'redis',
40 | 'connection' => 'default',
41 | ],
42 |
43 | 'log' => [
44 | 'driver' => 'log',
45 | ],
46 |
47 | ],
48 |
49 | ];
50 |
--------------------------------------------------------------------------------
/config/cache.php:
--------------------------------------------------------------------------------
1 | env('CACHE_DRIVER', 'file'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Cache Stores
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may define all of the cache "stores" for your application as
24 | | well as their drivers. You may even define multiple stores for the
25 | | same cache driver to group types of items stored in your caches.
26 | |
27 | */
28 |
29 | 'stores' => [
30 |
31 | 'apc' => [
32 | 'driver' => 'apc',
33 | ],
34 |
35 | 'array' => [
36 | 'driver' => 'array',
37 | ],
38 |
39 | 'database' => [
40 | 'driver' => 'database',
41 | 'table' => 'cache',
42 | 'connection' => null,
43 | ],
44 |
45 | 'file' => [
46 | 'driver' => 'file',
47 | 'path' => storage_path('framework/cache'),
48 | ],
49 |
50 | 'memcached' => [
51 | 'driver' => 'memcached',
52 | 'servers' => [
53 | [
54 | 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100,
55 | ],
56 | ],
57 | ],
58 |
59 | 'redis' => [
60 | 'driver' => 'redis',
61 | 'connection' => 'default',
62 | ],
63 |
64 | ],
65 |
66 | /*
67 | |--------------------------------------------------------------------------
68 | | Cache Key Prefix
69 | |--------------------------------------------------------------------------
70 | |
71 | | When utilizing a RAM based store such as APC or Memcached, there might
72 | | be other applications utilizing the same cache. So, we'll specify a
73 | | value to get prefixed to all our keys so we can avoid collisions.
74 | |
75 | */
76 |
77 | 'prefix' => 'laravel',
78 |
79 | ];
80 |
--------------------------------------------------------------------------------
/config/compile.php:
--------------------------------------------------------------------------------
1 | [
17 | //
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled File Providers
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may list service providers which define a "compiles" function
26 | | that returns additional files that should be compiled, providing an
27 | | easy way to get common files from any packages you are utilizing.
28 | |
29 | */
30 |
31 | 'providers' => [
32 | //
33 | ],
34 |
35 | ];
36 |
--------------------------------------------------------------------------------
/config/database.php:
--------------------------------------------------------------------------------
1 | PDO::FETCH_CLASS,
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Database Connection Name
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may specify which of the database connections below you wish
24 | | to use as your default connection for all database work. Of course
25 | | you may use many connections at once using the Database library.
26 | |
27 | */
28 |
29 | 'default' => env('DB_CONNECTION', 'sqlite'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Database Connections
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here are each of the database connections setup for your application.
37 | | Of course, examples of configuring each database platform that is
38 | | supported by Laravel is shown below to make development simple.
39 | |
40 | |
41 | | All database work in Laravel is done through the PHP PDO facilities
42 | | so make sure you have the driver for your particular database of
43 | | choice installed on your machine before you begin development.
44 | |
45 | */
46 |
47 | 'connections' => [
48 |
49 | 'sqlite' => [
50 | 'driver' => 'sqlite',
51 | 'database' => storage_path('database.sqlite'),
52 | 'prefix' => '',
53 | ],
54 |
55 | 'mysql' => [
56 | 'driver' => 'mysql',
57 | 'host' => env('DB_HOST', 'localhost'),
58 | 'database' => env('DB_DATABASE', 'forge'),
59 | 'username' => env('DB_USERNAME', 'forge'),
60 | 'password' => env('DB_PASSWORD', ''),
61 | 'charset' => 'utf8',
62 | 'collation' => 'utf8_unicode_ci',
63 | 'prefix' => '',
64 | 'strict' => false,
65 | ],
66 |
67 | 'pgsql' => [
68 | 'driver' => 'pgsql',
69 | 'host' => env('DB_HOST', 'localhost'),
70 | 'database' => env('DB_DATABASE', 'forge'),
71 | 'username' => env('DB_USERNAME', 'forge'),
72 | 'password' => env('DB_PASSWORD', ''),
73 | 'charset' => 'utf8',
74 | 'prefix' => '',
75 | 'schema' => 'public',
76 | ],
77 |
78 | 'sqlsrv' => [
79 | 'driver' => 'sqlsrv',
80 | 'host' => env('DB_HOST', 'localhost'),
81 | 'database' => env('DB_DATABASE', 'forge'),
82 | 'username' => env('DB_USERNAME', 'forge'),
83 | 'password' => env('DB_PASSWORD', ''),
84 | 'charset' => 'utf8',
85 | 'prefix' => '',
86 | ],
87 |
88 | ],
89 |
90 | /*
91 | |--------------------------------------------------------------------------
92 | | Migration Repository Table
93 | |--------------------------------------------------------------------------
94 | |
95 | | This table keeps track of all the migrations that have already run for
96 | | your application. Using this information, we can determine which of
97 | | the migrations on disk haven't actually been run in the database.
98 | |
99 | */
100 |
101 | 'migrations' => 'migrations',
102 |
103 | /*
104 | |--------------------------------------------------------------------------
105 | | Redis Databases
106 | |--------------------------------------------------------------------------
107 | |
108 | | Redis is an open source, fast, and advanced key-value store that also
109 | | provides a richer set of commands than a typical key-value systems
110 | | such as APC or Memcached. Laravel makes it easy to dig right in.
111 | |
112 | */
113 |
114 | 'redis' => [
115 |
116 | 'cluster' => false,
117 |
118 | 'default' => [
119 | 'host' => '127.0.0.1',
120 | 'port' => 6379,
121 | 'database' => 0,
122 | ],
123 |
124 | ],
125 |
126 | ];
127 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | 'local',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Default Cloud Filesystem Disk
23 | |--------------------------------------------------------------------------
24 | |
25 | | Many applications store files both locally and in the cloud. For this
26 | | reason, you may specify a default "cloud" driver here. This driver
27 | | will be bound as the Cloud disk implementation in the container.
28 | |
29 | */
30 |
31 | 'cloud' => 's3',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Filesystem Disks
36 | |--------------------------------------------------------------------------
37 | |
38 | | Here you may configure as many filesystem "disks" as you wish, and you
39 | | may even configure multiple disks of the same driver. Defaults have
40 | | been setup for each driver as an example of the required options.
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'ftp' => [
52 | 'driver' => 'ftp',
53 | 'host' => 'ftp.example.com',
54 | 'username' => 'your-username',
55 | 'password' => 'your-password',
56 |
57 | // Optional FTP Settings...
58 | // 'port' => 21,
59 | // 'root' => '',
60 | // 'passive' => true,
61 | // 'ssl' => true,
62 | // 'timeout' => 30,
63 | ],
64 |
65 | 's3' => [
66 | 'driver' => 's3',
67 | 'key' => 'your-key',
68 | 'secret' => 'your-secret',
69 | 'region' => 'your-region',
70 | 'bucket' => 'your-bucket',
71 | ],
72 |
73 | 'rackspace' => [
74 | 'driver' => 'rackspace',
75 | 'username' => 'your-username',
76 | 'key' => 'your-key',
77 | 'container' => 'your-container',
78 | 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
79 | 'region' => 'IAD',
80 | 'url_type' => 'publicURL',
81 | ],
82 |
83 | ],
84 |
85 | ];
86 |
--------------------------------------------------------------------------------
/config/mail.php:
--------------------------------------------------------------------------------
1 | env('MAIL_DRIVER', 'smtp'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | SMTP Host Address
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may provide the host address of the SMTP server used by your
26 | | applications. A default option is provided that is compatible with
27 | | the Mailgun mail service which will provide reliable deliveries.
28 | |
29 | */
30 |
31 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | SMTP Host Port
36 | |--------------------------------------------------------------------------
37 | |
38 | | This is the SMTP port used by your application to deliver e-mails to
39 | | users of the application. Like the host we have set this value to
40 | | stay compatible with the Mailgun e-mail application by default.
41 | |
42 | */
43 |
44 | 'port' => env('MAIL_PORT', 587),
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Global "From" Address
49 | |--------------------------------------------------------------------------
50 | |
51 | | You may wish for all e-mails sent by your application to be sent from
52 | | the same address. Here, you may specify a name and address that is
53 | | used globally for all e-mails that are sent by your application.
54 | |
55 | */
56 |
57 | 'from' => ['address' => null, 'name' => null],
58 |
59 | /*
60 | |--------------------------------------------------------------------------
61 | | E-Mail Encryption Protocol
62 | |--------------------------------------------------------------------------
63 | |
64 | | Here you may specify the encryption protocol that should be used when
65 | | the application send e-mail messages. A sensible default using the
66 | | transport layer security protocol should provide great security.
67 | |
68 | */
69 |
70 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'),
71 |
72 | /*
73 | |--------------------------------------------------------------------------
74 | | SMTP Server Username
75 | |--------------------------------------------------------------------------
76 | |
77 | | If your SMTP server requires a username for authentication, you should
78 | | set it here. This will get used to authenticate with your server on
79 | | connection. You may also set the "password" value below this one.
80 | |
81 | */
82 |
83 | 'username' => env('MAIL_USERNAME'),
84 |
85 | /*
86 | |--------------------------------------------------------------------------
87 | | SMTP Server Password
88 | |--------------------------------------------------------------------------
89 | |
90 | | Here you may set the password required by your SMTP server to send out
91 | | messages from your application. This will be given to the server on
92 | | connection so that the application will be able to send messages.
93 | |
94 | */
95 |
96 | 'password' => env('MAIL_PASSWORD'),
97 |
98 | /*
99 | |--------------------------------------------------------------------------
100 | | Sendmail System Path
101 | |--------------------------------------------------------------------------
102 | |
103 | | When using the "sendmail" driver to send e-mails, we will need to know
104 | | the path to where Sendmail lives on this server. A default path has
105 | | been provided here, which will work well on most of your systems.
106 | |
107 | */
108 |
109 | 'sendmail' => '/usr/sbin/sendmail -bs',
110 |
111 | /*
112 | |--------------------------------------------------------------------------
113 | | Mail "Pretend"
114 | |--------------------------------------------------------------------------
115 | |
116 | | When this option is enabled, e-mail will not actually be sent over the
117 | | web and will instead be written to your application's logs files so
118 | | you may inspect the message. This is great for local development.
119 | |
120 | */
121 |
122 | 'pretend' => false,
123 |
124 | ];
125 |
--------------------------------------------------------------------------------
/config/queue.php:
--------------------------------------------------------------------------------
1 | env('QUEUE_DRIVER', 'sync'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Queue Connections
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may configure the connection information for each server that
27 | | is used by your application. A default configuration has been added
28 | | for each back-end shipped with Laravel. You are free to add more.
29 | |
30 | */
31 |
32 | 'connections' => [
33 |
34 | 'sync' => [
35 | 'driver' => 'sync',
36 | ],
37 |
38 | 'database' => [
39 | 'driver' => 'database',
40 | 'table' => 'jobs',
41 | 'queue' => 'default',
42 | 'expire' => 60,
43 | ],
44 |
45 | 'beanstalkd' => [
46 | 'driver' => 'beanstalkd',
47 | 'host' => 'localhost',
48 | 'queue' => 'default',
49 | 'ttr' => 60,
50 | ],
51 |
52 | 'sqs' => [
53 | 'driver' => 'sqs',
54 | 'key' => 'your-public-key',
55 | 'secret' => 'your-secret-key',
56 | 'queue' => 'your-queue-url',
57 | 'region' => 'us-east-1',
58 | ],
59 |
60 | 'iron' => [
61 | 'driver' => 'iron',
62 | 'host' => 'mq-aws-us-east-1.iron.io',
63 | 'token' => 'your-token',
64 | 'project' => 'your-project-id',
65 | 'queue' => 'your-queue-name',
66 | 'encrypt' => true,
67 | ],
68 |
69 | 'redis' => [
70 | 'driver' => 'redis',
71 | 'connection' => 'default',
72 | 'queue' => 'default',
73 | 'expire' => 60,
74 | ],
75 |
76 | ],
77 |
78 | /*
79 | |--------------------------------------------------------------------------
80 | | Failed Queue Jobs
81 | |--------------------------------------------------------------------------
82 | |
83 | | These options configure the behavior of failed queue job logging so you
84 | | can control which database and table are used to store the jobs that
85 | | have failed. You may change them to any database / table you wish.
86 | |
87 | */
88 |
89 | 'failed' => [
90 | 'database' => 'mysql', 'table' => 'failed_jobs',
91 | ],
92 |
93 | ];
94 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => '',
19 | 'secret' => '',
20 | ],
21 |
22 | 'mandrill' => [
23 | 'secret' => '',
24 | ],
25 |
26 | 'ses' => [
27 | 'key' => '',
28 | 'secret' => '',
29 | 'region' => 'us-east-1',
30 | ],
31 |
32 | 'stripe' => [
33 | 'model' => App\User::class,
34 | 'key' => '',
35 | 'secret' => '',
36 | ],
37 |
38 | ];
39 |
--------------------------------------------------------------------------------
/config/session.php:
--------------------------------------------------------------------------------
1 | env('SESSION_DRIVER', 'file'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Session Lifetime
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may specify the number of minutes that you wish the session
27 | | to be allowed to remain idle before it expires. If you want them
28 | | to immediately expire on the browser closing, set that option.
29 | |
30 | */
31 |
32 | 'lifetime' => 120,
33 |
34 | 'expire_on_close' => false,
35 |
36 | /*
37 | |--------------------------------------------------------------------------
38 | | Session Encryption
39 | |--------------------------------------------------------------------------
40 | |
41 | | This option allows you to easily specify that all of your session data
42 | | should be encrypted before it is stored. All encryption will be run
43 | | automatically by Laravel and you can use the Session like normal.
44 | |
45 | */
46 |
47 | 'encrypt' => false,
48 |
49 | /*
50 | |--------------------------------------------------------------------------
51 | | Session File Location
52 | |--------------------------------------------------------------------------
53 | |
54 | | When using the native session driver, we need a location where session
55 | | files may be stored. A default has been set for you but a different
56 | | location may be specified. This is only needed for file sessions.
57 | |
58 | */
59 |
60 | 'files' => storage_path('framework/sessions'),
61 |
62 | /*
63 | |--------------------------------------------------------------------------
64 | | Session Database Connection
65 | |--------------------------------------------------------------------------
66 | |
67 | | When using the "database" or "redis" session drivers, you may specify a
68 | | connection that should be used to manage these sessions. This should
69 | | correspond to a connection in your database configuration options.
70 | |
71 | */
72 |
73 | 'connection' => null,
74 |
75 | /*
76 | |--------------------------------------------------------------------------
77 | | Session Database Table
78 | |--------------------------------------------------------------------------
79 | |
80 | | When using the "database" session driver, you may specify the table we
81 | | should use to manage the sessions. Of course, a sensible default is
82 | | provided for you; however, you are free to change this as needed.
83 | |
84 | */
85 |
86 | 'table' => 'sessions',
87 |
88 | /*
89 | |--------------------------------------------------------------------------
90 | | Session Sweeping Lottery
91 | |--------------------------------------------------------------------------
92 | |
93 | | Some session drivers must manually sweep their storage location to get
94 | | rid of old sessions from storage. Here are the chances that it will
95 | | happen on a given request. By default, the odds are 2 out of 100.
96 | |
97 | */
98 |
99 | 'lottery' => [2, 100],
100 |
101 | /*
102 | |--------------------------------------------------------------------------
103 | | Session Cookie Name
104 | |--------------------------------------------------------------------------
105 | |
106 | | Here you may change the name of the cookie used to identify a session
107 | | instance by ID. The name specified here will get used every time a
108 | | new session cookie is created by the framework for every driver.
109 | |
110 | */
111 |
112 | 'cookie' => 'laravel_session',
113 |
114 | /*
115 | |--------------------------------------------------------------------------
116 | | Session Cookie Path
117 | |--------------------------------------------------------------------------
118 | |
119 | | The session cookie path determines the path for which the cookie will
120 | | be regarded as available. Typically, this will be the root path of
121 | | your application but you are free to change this when necessary.
122 | |
123 | */
124 |
125 | 'path' => '/',
126 |
127 | /*
128 | |--------------------------------------------------------------------------
129 | | Session Cookie Domain
130 | |--------------------------------------------------------------------------
131 | |
132 | | Here you may change the domain of the cookie used to identify a session
133 | | in your application. This will determine which domains the cookie is
134 | | available to in your application. A sensible default has been set.
135 | |
136 | */
137 |
138 | 'domain' => null,
139 |
140 | /*
141 | |--------------------------------------------------------------------------
142 | | HTTPS Only Cookies
143 | |--------------------------------------------------------------------------
144 | |
145 | | By setting this option to true, session cookies will only be sent back
146 | | to the server if the browser has a HTTPS connection. This will keep
147 | | the cookie from being sent to you if it can not be done securely.
148 | |
149 | */
150 |
151 | 'secure' => false,
152 |
153 | ];
154 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | realpath(base_path('resources/views')),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => realpath(storage_path('framework/views')),
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/database/factories/ModelFactory.php:
--------------------------------------------------------------------------------
1 | define(App\User::class, function ($faker) {
15 | return [
16 | 'name' => $faker->name,
17 | 'email' => $faker->email,
18 | 'password' => str_random(10),
19 | 'remember_token' => str_random(10),
20 | ];
21 | });
22 |
--------------------------------------------------------------------------------
/database/migrations/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/database/migrations/.gitkeep
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
17 | $table->string('name');
18 | $table->string('email')->unique();
19 | $table->string('password', 60);
20 | $table->rememberToken();
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::drop('users');
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
17 | $table->string('token')->index();
18 | $table->timestamp('created_at');
19 | });
20 | }
21 |
22 | /**
23 | * Reverse the migrations.
24 | *
25 | * @return void
26 | */
27 | public function down()
28 | {
29 | Schema::drop('password_resets');
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/database/seeds/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/database/seeds/.gitkeep
--------------------------------------------------------------------------------
/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call('UserTableSeeder');
18 |
19 | Model::reguard();
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/database/seeds/UserTableSeeder.php:
--------------------------------------------------------------------------------
1 | truncate();
16 |
17 | User::create(['name' => 'John Doe', 'email' => 'john@doe.com', 'password' => bcrypt('secret')]);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var elixir = require('laravel-elixir');
2 | var vueify = require('laravel-elixir-browserify').init("vueify");
3 |
4 | /*
5 | |--------------------------------------------------------------------------
6 | | Elixir Asset Management
7 | |--------------------------------------------------------------------------
8 | |
9 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks
10 | | for your Laravel application. By default, we are compiling the Less
11 | | file for our application, as well as publishing vendor resources.
12 | |
13 | */
14 |
15 | elixir(function(mix) {
16 |
17 | mix.vueify('main.js', {insertGlobals: true, transform: "vueify", output: "public/assets/vue",});
18 |
19 | mix.copy('bower_components/startbootstrap-sb-admin-2/less', 'resources/assets/less/sb');
20 | mix.copy('bower_components/bootstrap-material-design/less', 'resources/assets/less/material');
21 | mix.copy('bower_components/bootstrap-material-design/dist/fonts', 'public/assets/fonts');
22 | mix.copy('bower_components/font-awesome/fonts', 'public/assets/fonts');
23 | mix.copy('bower_components/bootstrap/dist/fonts', 'public/assets/fonts');
24 | mix.copy('bower_components/svg-loaders/svg-loaders', 'public/assets/svg-loaders');
25 |
26 | mix.less('custom.less');
27 |
28 | mix.styles([
29 | 'bower_components/bootstrap/dist/css/bootstrap.min.css',
30 | 'bower_components/font-awesome/css/font-awesome.min.css',
31 | 'bower_components/snackbarjs/dist/snackbar.min.css',
32 | 'bower_components/metisMenu/dist/metisMenu.min.css',
33 | 'bower_components/startbootstrap-sb-admin-2/dist/css/timeline.css',
34 | 'bower_components/startbootstrap-sb-admin-2/dist/css/sb-admin-2.css',
35 | 'public/css/app.css'
36 | ], 'public/assets/css', './');
37 |
38 | mix.scripts([
39 | 'bower_components/jquery/dist/jquery.min.js',
40 | 'bower_components/underscore/underscore-min.js',
41 | 'bower_components/bootstrap/dist/js/bootstrap.min.js',
42 | 'bower_components/moment/moment.js',
43 | 'bower_components/moment/locale/pt-br.js',
44 | 'bower_components/bootstrap-material-design/dist/js/ripples.min.js',
45 | 'bower_components/bootstrap-material-design/dist/js/material.min.js',
46 | 'bower_components/snackbarjs/dist/snackbar.min.js',
47 | 'bower_components/metisMenu/dist/metisMenu.js',
48 | 'bower_components/startbootstrap-sb-admin-2/dist/js/sb-admin-2.js'
49 | ], 'public/assets/js', './');
50 | });
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "devDependencies": {
4 | "gulp": "^3.8.8",
5 | "laravel-elixir": "^2.0.0"
6 | },
7 | "dependencies": {
8 | "director": "^1.2.8",
9 | "insert-css": "^0.2.0",
10 | "laravel-elixir-browserify": "^0.8.1",
11 | "less": "^2.5.1",
12 | "vue": "^0.12.1",
13 | "vue-resource": "^0.1.3",
14 | "vueify": "^1.1.5"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/phpspec.yml:
--------------------------------------------------------------------------------
1 | suites:
2 | main:
3 | namespace: App
4 | psr4_prefix: App
5 | src_path: app
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 | ./tests/
15 |
16 |
17 |
18 |
19 | app/
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Redirect Trailing Slashes...
9 | RewriteRule ^(.*)/$ /$1 [L,R=301]
10 |
11 | # Handle Front Controller...
12 | RewriteCond %{REQUEST_FILENAME} !-d
13 | RewriteCond %{REQUEST_FILENAME} !-f
14 | RewriteRule ^ index.php [L]
15 |
16 |
--------------------------------------------------------------------------------
/public/assets/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/public/assets/fonts/Material-Design-Icons.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/Material-Design-Icons.eot
--------------------------------------------------------------------------------
/public/assets/fonts/Material-Design-Icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/Material-Design-Icons.ttf
--------------------------------------------------------------------------------
/public/assets/fonts/Material-Design-Icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/Material-Design-Icons.woff
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftBold.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftBold.woff
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftBold.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftBold.woff2
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftItalic.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftItalic.woff
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftItalic.woff2
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftMedium.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftMedium.woff
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftMedium.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftMedium.woff2
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftRegular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftRegular.woff
--------------------------------------------------------------------------------
/public/assets/fonts/RobotoDraftRegular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/RobotoDraftRegular.woff2
--------------------------------------------------------------------------------
/public/assets/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/public/assets/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/public/assets/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/public/assets/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/assets/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/assets/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/public/assets/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/assets/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/public/assets/svg-loaders/audio.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/ball-triangle.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/bars.svg:
--------------------------------------------------------------------------------
1 |
53 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/circles.svg:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/grid.svg:
--------------------------------------------------------------------------------
1 |
57 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/hearts.svg:
--------------------------------------------------------------------------------
1 |
2 |
19 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/oval.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/puff.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/rings.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/spinning-circles.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/tail-spin.svg:
--------------------------------------------------------------------------------
1 |
2 |
33 |
--------------------------------------------------------------------------------
/public/assets/svg-loaders/three-dots.svg:
--------------------------------------------------------------------------------
1 |
2 |
34 |
--------------------------------------------------------------------------------
/public/css/app.css:
--------------------------------------------------------------------------------
1 | .no-padding {
2 | padding: 0;
3 | }
4 | .no-padding-top {
5 | padding-top: 0;
6 | }
7 | .no-margin-top {
8 | margin-top: 0;
9 | }
10 | .no-margin {
11 | margin: 0 !important;
12 | }
13 | #snackbar-container {
14 | right: 20px;
15 | top: 20px;
16 | left: initial;
17 | bottom: initial;
18 | }
19 | .snackbar {
20 | background-color: #323232;
21 | color: rgba(255, 255, 255, 0.84);
22 | font-size: 14px;
23 | border-radius: 2px;
24 | box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12);
25 | height: 0;
26 | transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;
27 | transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;
28 | -webkit-transform: translateY(200%);
29 | transform: translateY(200%);
30 | }
31 | .snackbar.snackbar-opened {
32 | opacity: 1;
33 | padding: 14px 15px;
34 | margin-bottom: 20px;
35 | height: auto;
36 | transition: -webkit-transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;
37 | transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;
38 | -webkit-transform: none;
39 | transform: none;
40 | }
41 | .snackbar.toast {
42 | border-radius: 200px;
43 | }
44 |
45 | /*# sourceMappingURL=app.css.map */
--------------------------------------------------------------------------------
/public/css/app.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["custom.less","custom.css"],"names":[],"mappings":"AAEA;EACI,YAAA;ECDH;ADID;EACI,gBAAA;ECFH;ADKD;EACI,eAAA;ECHH;ADMD;EACI,sBAAA;ECJH;ADOD;EACE,aAAA;EACA,WAAA;EACA,eAAA;EACA,iBAAA;ECLD;ADQD;EACI,2BAAA;EACA,kCAAA;EACA,iBAAA;EACA,oBAAA;EACA,8EAAA;EACA,WAAA;EACA,yIAAA;EACA,iIAAA;EACA,qCAAA;EAEA,6BAAA;ECNH;ADSD;EAEI,YAAA;EACA,oBAAA;EACA,qBAAA;EACA,cAAA;EACA,kHAAA;EACA,0GAAA;EACA,yBAAA;EAEA,iBAAA;ECRH;ADWD;EACI,sBAAA;ECTH","file":"app.css","sourcesContent":["@import \"_colors.less\";\n \n.no-padding {\n padding: 0;\n}\n \n.no-padding-top {\n padding-top: 0;\n}\n \n.no-margin-top {\n margin-top: 0;\n}\n \n.no-margin {\n margin: 0 !important;\n}\n\n#snackbar-container {\n right: 20px;\n top: 20px;\n left: initial;\n bottom: initial;\n}\n\n.snackbar {\n background-color: #323232;\n color: rgba(255,255,255,.84);\n font-size: 14px;\n border-radius: 2px;\n box-shadow: 0 1px 6px 0 rgba(0,0,0,.12),0 1px 6px 0 rgba(0,0,0,.12);\n height: 0;\n transition: -webkit-transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,padding 0 linear .2s,height 0 linear .2s;\n transition: transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,padding 0 linear .2s,height 0 linear .2s;\n -webkit-transform: translateY(200%);\n -ms-transform: translateY(200%);\n transform: translateY(200%);\n}\n\n.snackbar.snackbar-opened {\n height: auto;\n opacity: 1;\n padding: 14px 15px;\n margin-bottom: 20px;\n height: auto;\n transition: -webkit-transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,height 0 linear .2s;\n transition: transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,height 0 linear .2s;\n -webkit-transform: none;\n -ms-transform: none;\n transform: none;\n}\n\n.snackbar.toast {\n border-radius: 200px;\n}",null],"sourceRoot":"/source/"}
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/public/favicon.ico
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | /*
11 | |--------------------------------------------------------------------------
12 | | Register The Auto Loader
13 | |--------------------------------------------------------------------------
14 | |
15 | | Composer provides a convenient, automatically generated class loader for
16 | | our application. We just need to utilize it! We'll simply require it
17 | | into the script here so that we don't have to worry about manual
18 | | loading any of our classes later on. It feels nice to relax.
19 | |
20 | */
21 |
22 | require __DIR__.'/../bootstrap/autoload.php';
23 |
24 | /*
25 | |--------------------------------------------------------------------------
26 | | Turn On The Lights
27 | |--------------------------------------------------------------------------
28 | |
29 | | We need to illuminate PHP development, so let us turn on the lights.
30 | | This bootstraps the framework and gets it ready for use, then it
31 | | will load up this application so that we can run it and send
32 | | the responses back to the browser and delight our users.
33 | |
34 | */
35 |
36 | $app = require_once __DIR__.'/../bootstrap/app.php';
37 |
38 | /*
39 | |--------------------------------------------------------------------------
40 | | Run The Application
41 | |--------------------------------------------------------------------------
42 | |
43 | | Once we have the application, we can handle the incoming request
44 | | through the kernel, and send the associated response back to
45 | | the client's browser allowing them to enjoy the creative
46 | | and wonderful application we have prepared for them.
47 | |
48 | */
49 |
50 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
51 |
52 | $response = $kernel->handle(
53 | $request = Illuminate\Http\Request::capture()
54 | );
55 |
56 | $response->send();
57 |
58 | $kernel->terminate($request, $response);
59 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | ## Laravel + Vue.js Basic Boilerplate
2 |
3 | I created this repository in an attempt to create a basic boilerplate for a simple dashboard using Laravel + Vue.js and of course to help me understand and practice Vue.js.
4 |
5 | This is the first time I am using Vue, and is also the first time I create a repository on Github, suggestions are most welcome, and I hope to count on your collaboration.
6 |
7 | ### Installation
8 |
9 | ```sh
10 | $ git clone https://github.com/kuroski/Laravel-Vue-Boilerplate.git
11 | $ cd Laravel-Vue-Boilerplate
12 | $ cp .env.example .env
13 | $ composer update
14 | $ php artisan key:generate
15 | $ touch storage/database.sqlite
16 | $ [sudo] npm install
17 | $ bower install (if not work use "sudo bower install --allow-root")
18 | $ php artisan migrate
19 | $ php artisan db:seed
20 | $ gulp
21 | $ php artisan serve
22 | ```
23 |
24 | **Or use Homestead xD**
25 |
26 | Login: john@doe.com
27 | Password: secret
28 |
29 | ### Introduction
30 |
31 | Everything was done the way to use the Vue as quickly as possible, so I'm using sqlite and php artisan serve to speed up.
32 |
33 | An extension was installed for the elixir browserify in order to use the **Vueify:**
34 |
35 | > Browserify transform for single-file Vue components
36 |
37 | 1. In **./gulpfile.js** I'm just compressing all the necessary assets and I am using the extension of browserify to transform our **./resources/assets/js/main.js** script.
38 |
39 | 2. In the **./app/Http/routes.php** file we just have the login and logout basic routes, and our root.
40 |
41 | 3. On **./resources/views/home.blade.php** whe have our master view, I am importing all the assets and putting the application root node ```
```
42 |
43 | 4. All the Vue stuff is in the **./resources/assets/js** folder.
44 |
45 | ### Vue Stuff
46 |
47 | I'm using the vue-resource package for requests to the backend.
48 | And I'm using the director for routes.
49 |
50 | ```
51 | // main.js
52 |
53 | var Vue = require('vue')
54 |
55 | // Import vue-resource and configure to use the csrf token in all requests, in which I put him in a meta tag in home.blade.php
56 | var Resource = require('vue-resource')
57 | Vue.use(Resource)
58 | Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('value');
59 |
60 | // Define our routes
61 | var Router = require('director').Router
62 | var app = new Vue(require('./app.vue'))
63 | var router = new Router()
64 |
65 | router.on('login', function (page) {
66 | window.scrollTo(0, 0)
67 | app.view = 'login-view'
68 | })
69 |
70 | router.on('dashboard', function (page) {
71 | window.scrollTo(0, 0)
72 | app.view = 'dashboard-view'
73 | })
74 |
75 | router.configure({
76 | notfound: function () {
77 | router.setRoute('dashboard')
78 | },
79 |
80 | after: function() {
81 | // Check if the user is logged for each request
82 | var route = window.location.hash.slice(2)
83 |
84 | if (route != 'login' && !app.isLoggedIn)
85 | window.location = "#/login"
86 | }
87 | })
88 |
89 | router.init('login')
90 | ```
91 |
92 | **storage.js** is just a helper to save localStorage variables
93 |
94 | ```
95 | // app.vue
96 | ```
97 |
98 | ### Todo's
99 |
100 | - [x] Finish all the basic structure (Basic routes + Main view + Gulp + Bower + Basic dashboard layout)
101 | - [x] Create the basic login system
102 | - [x] Logging out
103 | - [x] Fade transition between components
104 | - [x] Create a page load indicator
105 | - [ ] Finish Readme
106 | - [ ] Create a session on the dashboard for managing users
107 | - [ ] Check the application security
108 | - [ ] Make load indicator animation
109 | - [ ] Learn how to use TDD with Vue
110 | - [ ] Improve the backend (The way it is now is faster to do, so then I have to improve everything)
111 | - [ ] Optimize all
112 | - [ ] **Build a branch or a new repo of this dashboard using API + token authentication (jwt-auth)**
113 |
114 | ### References
115 |
116 | [FezVrasta/bootstrap-material-design] - Material design theme for Bootstrap 3
117 |
118 | [IronSummitMedia/startbootstrap-sb-admin-2] - A free, open source, Bootstrap admin theme created by Start Bootstrap
119 |
120 | [vuejs/vue-resource] - Resource component for Vue.js
121 |
122 | [vuejs/vueify] - Browserify transform for single-file Vue components
123 |
124 | [vuejs/vue-hackernews] - HackerNews clone with Vue.js
125 |
126 | [flatiron/director] - A tiny and isomorphic URL router for JavaScript
127 |
128 | [skrajewski/laravel-elixir-browserify] - Laravel Elixir Browserify Extension
129 |
130 | [The Vast World of Vue.js] - **Laracasts Serie =DD**
131 |
132 | [Vue.js] - Vue.js official website / documentation / api
133 |
134 | [Laravel] - Laravel official website / documentation / api
135 |
136 | [FezVrasta/snackbarjs] - Create Material Design snackbars and toasts with ease.
137 |
138 | [jashkenas/underscore] - JavaScript's utility _ belt
139 |
140 | License
141 | ----
142 |
143 | MIT
144 |
145 | [FezVrasta/bootstrap-material-design]:https://github.com/FezVrasta/bootstrap-material-design
146 | [IronSummitMedia/startbootstrap-sb-admin-2]:https://github.com/IronSummitMedia/startbootstrap-sb-admin-2
147 | [vuejs/vue-resource]:https://github.com/vuejs/vue-resource
148 | [vuejs/vueify]:https://github.com/vuejs/vueify
149 | [vuejs/vue-hackernews]:https://github.com/vuejs/vue-hackernews
150 | [flatiron/director]:https://github.com/flatiron/director
151 | [skrajewski/laravel-elixir-browserify]:https://github.com/skrajewski/laravel-elixir-browserify
152 | [The Vast World of Vue.js]:https://laracasts.com/series/learning-vuejs
153 | [Vue.js]:http://vuejs.org/
154 | [Laravel]:http://laravel.com/docs/5.1
155 | [FezVrasta/snackbarjs]:https://github.com/FezVrasta/snackbarjs
156 | [jashkenas/underscore]:https://github.com/jashkenas/underscore
157 |
--------------------------------------------------------------------------------
/resources/assets/js/app.vue:
--------------------------------------------------------------------------------
1 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
26 |
27 |
28 | {{$data | json 4}}
29 |
30 |
31 |
--------------------------------------------------------------------------------
/resources/assets/js/components/loader.vue:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |

26 | Loading...
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/resources/assets/js/components/sidebar.vue:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/resources/assets/js/main.js:
--------------------------------------------------------------------------------
1 | var Vue = require('vue')
2 |
3 | /**
4 | * Resource default configurations
5 | */
6 |
7 | var Resource = require('vue-resource')
8 | Vue.use(Resource)
9 | Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('value');
10 | Vue.http.options.beforeSend = function() {
11 | app.$broadcast('loading:show')
12 |
13 | setTimeout(function(){ app.$broadcast('loading:hide') }, 2000);
14 | }
15 |
16 | /**
17 | * Routes
18 | */
19 |
20 | var Router = require('director').Router
21 | var app = new Vue(require('./app.vue'))
22 | var router = new Router()
23 |
24 | router.on('login', function (page) {
25 | window.scrollTo(0, 0)
26 | app.view = 'login-view'
27 | })
28 |
29 | router.on('dashboard', function (page) {
30 | window.scrollTo(0, 0)
31 | app.view = 'dashboard-view'
32 | })
33 |
34 | router.on('users', function (page) {
35 | window.scrollTo(0, 0)
36 | app.view = 'user-view'
37 | })
38 |
39 | router.configure({
40 | notfound: function () {
41 | router.setRoute('dashboard')
42 | },
43 |
44 | after: function() {
45 | var route = window.location.hash.slice(2)
46 |
47 | if (route != 'login' && !app.isLoggedIn)
48 | window.location = "#/login"
49 | }
50 | })
51 |
52 | router.init('login')
53 |
--------------------------------------------------------------------------------
/resources/assets/js/storage.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | fetchArray: function(key){
3 | if(localStorage.getItem(key)){
4 | return JSON.parse(localStorage.getItem(key));
5 | }
6 |
7 | return [];
8 | },
9 |
10 | saveArray: function(key, value){
11 | localStorage.setItem(key, JSON.stringify(value));
12 | }
13 | }
--------------------------------------------------------------------------------
/resources/assets/js/views/dashboard-view.vue:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/resources/assets/js/views/login-view.vue:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Credentials
11 |
12 |
28 |
29 |
30 |
31 |
32 | {{$data | json 4}}
33 |
34 |
35 |
--------------------------------------------------------------------------------
/resources/assets/js/views/user-view.vue:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | -
14 | Name:{{ name }}
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/resources/assets/less/_colors.less:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/resources/assets/less/_colors.less
--------------------------------------------------------------------------------
/resources/assets/less/custom.less:
--------------------------------------------------------------------------------
1 | @import "_colors.less";
2 |
3 | .no-padding {
4 | padding: 0;
5 | }
6 |
7 | .no-padding-top {
8 | padding-top: 0;
9 | }
10 |
11 | .no-margin-top {
12 | margin-top: 0;
13 | }
14 |
15 | .no-margin {
16 | margin: 0 !important;
17 | }
18 |
19 | #snackbar-container {
20 | right: 20px;
21 | top: 20px;
22 | left: initial;
23 | bottom: initial;
24 | }
25 |
26 | .snackbar {
27 | background-color: #323232;
28 | color: rgba(255,255,255,.84);
29 | font-size: 14px;
30 | border-radius: 2px;
31 | box-shadow: 0 1px 6px 0 rgba(0,0,0,.12),0 1px 6px 0 rgba(0,0,0,.12);
32 | height: 0;
33 | transition: -webkit-transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,padding 0 linear .2s,height 0 linear .2s;
34 | transition: transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,padding 0 linear .2s,height 0 linear .2s;
35 | -webkit-transform: translateY(200%);
36 | -ms-transform: translateY(200%);
37 | transform: translateY(200%);
38 | }
39 |
40 | .snackbar.snackbar-opened {
41 | height: auto;
42 | opacity: 1;
43 | padding: 14px 15px;
44 | margin-bottom: 20px;
45 | height: auto;
46 | transition: -webkit-transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,height 0 linear .2s;
47 | transition: transform .2s ease-in-out,opacity .2s ease-in,height 0 linear .2s,height 0 linear .2s;
48 | -webkit-transform: none;
49 | -ms-transform: none;
50 | transform: none;
51 | }
52 |
53 | .snackbar.toast {
54 | border-radius: 200px;
55 | }
--------------------------------------------------------------------------------
/resources/assets/less/material/_alerts.less:
--------------------------------------------------------------------------------
1 | .alert {
2 | border: 0px;
3 | border-radius: 0;
4 |
5 | .generic-variations(~"", @darkbg-text, {
6 | background-color: @material-color;
7 | color: @text-color;
8 |
9 | a, .alert-link {
10 | color: @text-color;
11 | }
12 | });
13 |
14 | &-info, &-danger, &-warning, &-success {
15 | color: @darkbg-text;
16 | }
17 |
18 | &-default {
19 | a, .alert-link {
20 | color: @lightbg-text;
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_buttons.less:
--------------------------------------------------------------------------------
1 | .btn {
2 | position: relative;
3 | padding: 8px 30px;
4 | border: 0;
5 | margin: 10px 1px;
6 | cursor: pointer;
7 | border-radius: 2px;
8 | text-transform: uppercase;
9 | text-decoration: none;
10 | color: @darkbg-text;
11 |
12 | &:hover:not(.btn-link):not(.btn-flat):not(.btn-fab) {
13 | .shadow-z-1();
14 | }
15 | &:active:not(.btn-link):not(.btn-flat):not(.btn-fab) {
16 | .shadow-z-1-hover();
17 | }
18 | transition: background-color 0.2s ease, box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
19 | outline: none !important;
20 |
21 |
22 | .variations(~".btn-flat:not(.btn-link)", color, @lightbg-text);
23 |
24 | .background-variations(~":not(.btn-link):not(.btn-flat)", @btn-default);
25 |
26 | // BTN hover effect
27 | .generic-variations(~":hover:not(.btn-link):not(.btn-flat)", @btn-default, {
28 | background-color: contrast(@material-color, darken(@material-color, 4%), lighten(@material-color, 4%), @contrast-factor);
29 | });
30 | // BTN active effect
31 | .generic-variations(~":active:not(.btn-link):not(.btn-flat)", @btn-default, {
32 | background-color: contrast(@material-color, darken(@material-color, 6%), lighten(@material-color, 6%), @contrast-factor);
33 | });
34 | // BTN .active effect
35 | .generic-variations(~".active:not(.btn-link):not(.btn-flat)", @btn-default, {
36 | background-color: contrast(@material-color, darken(@material-color, 6%), lighten(@material-color, 6%), @contrast-factor);
37 | });
38 | // BTN flat hover effect
39 | .generic-variations(~".btn-flat:hover:not(.btn-ink)", @btn-default, {
40 | background-color: fade(@material-color, 20%);
41 | });
42 |
43 | }
44 |
45 | .btn {
46 | &.btn-flat {
47 | background: none;
48 | box-shadow: none;
49 | font-weight: 500;
50 | &:disabled {
51 | color: @text-disabled !important;
52 | }
53 | }
54 |
55 | // Size variations
56 | &.btn-sm {
57 | padding: 5px 20px;
58 | }
59 | &.btn-xs {
60 | padding: 4px 15px;
61 | font-size: 10px;
62 | }
63 |
64 | &.btn-raised {
65 | .btn-shadow();
66 | }
67 |
68 | &.btn-fab {
69 | margin: 0;
70 | padding: 15px;
71 | font-size: 26px;
72 | width: 56px;
73 | height: 56px;
74 | &, &:hover, &:active {
75 | .variations(~"", background-color, transparent);
76 | }
77 | &, &:hover {
78 | .shadow-z-1();
79 | }
80 | &:active {
81 | .shadow-z-1-hover();
82 | }
83 | &, .ripple-wrapper {
84 | border-radius: 100%;
85 | }
86 | &.btn-fab-mini {
87 | width: 40px;
88 | height: 40px;
89 | padding: 13px;
90 | font-size: 15px;
91 | }
92 | i {
93 | position: relative;
94 | top: -5px;
95 | }
96 | }
97 | }
98 |
99 | // This is needed to style buttons which has not a variation suffix (they must be stiled as btn-default)
100 | .btn-link, .btn:not([class*="btn-"]), .btn-default {
101 | color: @lightbg-text;
102 | &:hover {
103 | color: @lightbg-text;
104 | }
105 | }
106 | .btn:not([class*="btn-"]), .btn-default, .btn-flat:not(.btn-link) {
107 | &:hover, &.active {
108 | background-color: rgba(255,255,255,0.5);
109 | }
110 | }
111 | .open > .dropdown-toggle.btn {
112 | .variations(~"", background-color, @btn-default);
113 | }
114 | .btn-group .btn+.btn, .btn-group .btn+.btn-group, .btn-group .btn-group+.btn, .btn-group .btn-group+.btn-group {
115 | margin-left: 0;
116 | }
117 | .btn-group, .btn-group-vertical {
118 | position: relative;
119 | border-radius: 2px;
120 | margin: 10px 1px;
121 |
122 | .btn-shadow();
123 | &.open .dropdown-toggle {
124 | box-shadow: none;
125 | }
126 | &.btn-group-raised {
127 | .btn-shadow();
128 | }
129 | .btn, .btn:active, .btn-group {
130 | box-shadow: none !important;
131 | margin: 0;
132 | }
133 | }
134 | .btn-group-flat {
135 | box-shadow: none !important;
136 | }
137 |
138 | .btn-shadow() {
139 | .shadow-z-1();
140 | transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);
141 | &:active:not(.btn-link) {
142 | .shadow-z-1-hover();
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_cards.less:
--------------------------------------------------------------------------------
1 | .card {
2 |
3 | /***** Make height equal to width (http://stackoverflow.com/a/6615994) ****/
4 |
5 | display: inline-block;
6 | position: relative;
7 | width: 100%;
8 | .card-height-indicator {
9 | margin-top: 100%;
10 | }
11 | .card-content {
12 | position: absolute;
13 | top: 0;
14 | bottom: 0;
15 | left: 0;
16 | right: 0;
17 | }
18 |
19 | /**************************************************************************/
20 |
21 |
22 | border-radius: 2px;
23 | color: @card-body-text;
24 | background: @card-body-background;
25 |
26 | .shadow-z-2();
27 |
28 | .card-image {
29 | height: 60%;
30 | position: relative;
31 | overflow: hidden;
32 | img {
33 | width: 100%;
34 | height: 100%;
35 | border-top-left-radius: 2px;
36 | border-top-right-radius: 2px;
37 | pointer-events: none;
38 | }
39 | .card-image-headline {
40 | position: absolute;
41 | bottom: 16px;
42 | left: 18px;
43 | color: @card-image-headline;
44 | font-size: 2em;
45 | }
46 | }
47 |
48 | .card-body {
49 | height: 30%;
50 | padding: 18px;
51 | }
52 |
53 | .card-footer {
54 | height: 10%;
55 | padding: 18px;
56 | button {
57 | margin: 0 !important;
58 | position: relative;
59 | bottom: 25px;
60 | width: auto;
61 | &:first-child {
62 | left: -15px;
63 | }
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_checkboxes.less:
--------------------------------------------------------------------------------
1 | .form-horizontal .checkbox {
2 | padding-top: 20px;
3 | }
4 | .checkbox {
5 | transform: translateZ(0); // Force 3d rendering
6 | label {
7 | cursor: pointer;
8 | padding-left: 0; // Reset for Bootstrap rule
9 | }
10 |
11 | // Hide native checkbox
12 | input[type=checkbox] {
13 | opacity: 0;
14 | position: absolute;
15 | margin: 0;
16 | z-index: -1;
17 | width: 0;
18 | height: 0;
19 | overflow: hidden;
20 | left: 0;
21 | pointer-events: none;
22 | }
23 |
24 | .checkbox-material {
25 | vertical-align: middle;
26 | position: relative;
27 | top: 3px;
28 | &:before {
29 | display: block;
30 | position: absolute;
31 | left: 0;
32 | content: "";
33 | background-color: rgba(0,0,0,.84);
34 | height: @checkbox-size;
35 | width: @checkbox-size;
36 | border-radius: 100%;
37 | z-index: 1;
38 | opacity: 0;
39 | margin: 0;
40 | transform: scale3d(2.3, 2.3, 1);
41 | }
42 |
43 | .check {
44 | position: relative;
45 | display: inline-block;
46 | width: @checkbox-size;
47 | height: @checkbox-size;
48 | border: 2px solid;
49 | border-radius: 2px;
50 | overflow: hidden;
51 | z-index: 1;
52 | }
53 | .check:before {
54 | position: absolute;
55 | content: "";
56 | transform: rotate(45deg);
57 | display: block;
58 | margin-top: -4px;
59 | margin-left: 6px;
60 | width: 0;
61 | height: 0;
62 | box-shadow:
63 | 0 0 0 0,
64 | 0 0 0 0,
65 | 0 0 0 0,
66 | 0 0 0 0,
67 | 0 0 0 0,
68 | 0 0 0 0,
69 | 0 0 0 0 inset;
70 | animation: checkbox-off @checkbox-animation-check forwards;
71 | }
72 | }
73 |
74 | input[type=checkbox]:focus + .checkbox-material .check:after {
75 | opacity: 0.2;
76 | }
77 | input[type=checkbox]:checked + .checkbox-material .check:before {
78 | box-shadow:
79 | 0 0 0 10px,
80 | 10px -10px 0 10px,
81 | 32px 0px 0 20px,
82 | 0px 32px 0 20px,
83 | -5px 5px 0 10px,
84 | 20px -12px 0 11px;
85 | animation: checkbox-on @checkbox-animation-check forwards;
86 | }
87 |
88 | input[type=checkbox]:not(:checked) + .checkbox-material:before {
89 | animation: rippleOff @checkbox-animation-ripple;
90 | }
91 | input[type=checkbox]:checked + .checkbox-material:before {
92 | animation: rippleOn @checkbox-animation-ripple;
93 | }
94 |
95 | // Ripple effect on click
96 | input[type=checkbox]:not(:checked) + .checkbox-material .check:after {
97 | animation: rippleOff @checkbox-animation-ripple forwards;
98 | }
99 | input[type=checkbox]:checked + .checkbox-material .check:after {
100 | animation: rippleOn @checkbox-animation-ripple forwards;
101 | }
102 |
103 | // Style for disabled inputs
104 | input[type=checkbox][disabled]:not(:checked) ~ .checkbox-material .check:before,
105 | input[type=checkbox][disabled] + .circle {
106 | opacity: 0.5;
107 | }
108 | input[type=checkbox][disabled] + .checkbox-material .check:after {
109 | background-color: @lightbg-text;
110 | transform: rotate(-45deg);
111 | }
112 |
113 | .variations(~" input[type=checkbox]:checked + .checkbox-material .check:after", background-color, @success);
114 | .variations(~" input[type=checkbox]:checked + .checkbox-material .check:before", color, #4caf50);
115 | .variations(~" input[type=checkbox]:checked + .checkbox-material .check", color, #4caf50);
116 | }
117 |
118 |
119 | @keyframes checkbox-on {
120 | 0% {
121 | box-shadow:
122 | 0 0 0 10px,
123 | 10px -10px 0 10px,
124 | 32px 0px 0 20px,
125 | 0px 32px 0 20px,
126 | -5px 5px 0 10px,
127 | 15px 2px 0 11px;
128 | }
129 | 50% {
130 | box-shadow:
131 | 0 0 0 10px,
132 | 10px -10px 0 10px,
133 | 32px 0px 0 20px,
134 | 0px 32px 0 20px,
135 | -5px 5px 0 10px,
136 | 20px 2px 0 11px;
137 | }
138 | 100% {
139 | box-shadow:
140 | 0 0 0 10px,
141 | 10px -10px 0 10px,
142 | 32px 0px 0 20px,
143 | 0px 32px 0 20px,
144 | -5px 5px 0 10px,
145 | 20px -12px 0 11px;
146 | }
147 | }
148 | @keyframes checkbox-off {
149 | 0% {
150 | box-shadow:
151 | 0 0 0 10px,
152 | 10px -10px 0 10px,
153 | 32px 0px 0 20px,
154 | 0px 32px 0 20px,
155 | -5px 5px 0 10px,
156 | 20px -12px 0 11px,
157 | 0 0 0 0 inset;
158 | }
159 |
160 | 25% {
161 | box-shadow:
162 | 0 0 0 10px,
163 | 10px -10px 0 10px,
164 | 32px 0px 0 20px,
165 | 0px 32px 0 20px,
166 | -5px 5px 0 10px,
167 | 20px -12px 0 11px,
168 | 0 0 0 0 inset;
169 | }
170 | 50% {
171 | transform: rotate(45deg);
172 | margin-top: -4px;
173 | margin-left: 6px;
174 | width: 0px;
175 | height: 0px;
176 | box-shadow:
177 | 0 0 0 10px,
178 | 10px -10px 0 10px,
179 | 32px 0px 0 20px,
180 | 0px 32px 0 20px,
181 | -5px 5px 0 10px,
182 | 15px 2px 0 11px,
183 | 0 0 0 0 inset;
184 | }
185 | 51% {
186 | transform: rotate(0deg);
187 | margin-top: -2px;
188 | margin-left: -2px;
189 | width: 20px;
190 | height: 20px;
191 | box-shadow:
192 | 0 0 0 0,
193 | 0 0 0 0,
194 | 0 0 0 0,
195 | 0 0 0 0,
196 | 0 0 0 0,
197 | 0 0 0 0,
198 | 0px 0px 0 10px inset;
199 | }
200 | 100% {
201 | transform: rotate(0deg);
202 | margin-top: -2px;
203 | margin-left: -2px;
204 | width: 20px;
205 | height: 20px;
206 | box-shadow:
207 | 0 0 0 0,
208 | 0 0 0 0,
209 | 0 0 0 0,
210 | 0 0 0 0,
211 | 0 0 0 0,
212 | 0 0 0 0,
213 | 0px 0px 0 0px inset;
214 | }
215 | }
216 | @keyframes rippleOn {
217 | 0% {
218 | opacity: 0;
219 | }
220 | 50% {
221 | opacity: 0.2;
222 | }
223 | 100% {
224 | opacity: 0;
225 | }
226 | }
227 | @keyframes rippleOff {
228 | 0% {
229 | opacity: 0;
230 | }
231 | 50% {
232 | opacity: 0.2;
233 | }
234 | 100% {
235 | opacity: 0;
236 | }
237 | }
238 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_dialogs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Modals
3 | // Material Design element Dialogs
4 | // --------------------------------------------------
5 | .modal-content {
6 | .shadow-z-5();
7 | border-radius: 2px;
8 | border: none;
9 | // Modal header
10 | // Top section of the modal w/ title and dismiss
11 | .modal-header {
12 | border-bottom: none;
13 | padding-top: 24px;
14 | padding-right: 24px;
15 | padding-bottom: 0px;
16 | padding-left: 24px;
17 | }
18 | // Modal body
19 | // Where all modal content resides (sibling of .modal-header and .modal-footer)
20 | .modal-body {
21 | padding-top: 0px;
22 | padding-right: 24px;
23 | padding-bottom: 16px;
24 | padding-left: 24px;
25 | }
26 | // Footer (for actions)
27 | .modal-footer {
28 | border-top: none;
29 | padding: 7px;
30 | button {
31 | margin: 0;
32 | padding-left: 16px;
33 | padding-right: 16px;
34 | width: auto;
35 | &.pull-left {
36 | padding-left: 5px;
37 | padding-right: 5px;
38 | position: relative;
39 | left: -5px;
40 | }
41 | }
42 | button+button {
43 | margin-bottom: 16px;
44 | }
45 | }
46 | .modal-body + .modal-footer {
47 | padding-top: 0;
48 | }
49 | }
50 | .modal-backdrop {
51 | background: rgba(0,0,0,0.3);
52 | }
53 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_dividers.less:
--------------------------------------------------------------------------------
1 | hr {
2 | &.on-dark {
3 | color: lighten(@black, 10%);
4 | }
5 |
6 | &.on-light {
7 | color: lighten(@white, 10%);
8 | }
9 |
10 | @media (-webkit-min-device-pixel-ratio: 0.75),
11 | (min--moz-device-pixel-ratio: 0.75),
12 | (-o-device-pixel-ratio: 3/4),
13 | (min-device-pixel-ratio: 0.75),
14 | (min-resolution: 0.75dppx),
15 | (min-resolution: 120dpi), {
16 | height:0.75px;
17 | }
18 |
19 | @media (-webkit-min-device-pixel-ratio: 1),
20 | (min--moz-device-pixel-ratio: 1),
21 | (-o-device-pixel-ratio: 1),
22 | (min-device-pixel-ratio: 1),
23 | (min-resolution: 1dppx),
24 | (min-resolution: 160dpi) {
25 | height:1px;
26 | }
27 | @media (-webkit-min-device-pixel-ratio: 1.33),
28 | (min--moz-device-pixel-ratio: 1.33),
29 | (-o-device-pixel-ratio: 133/100),
30 | (min-device-pixel-ratio: 1.33),
31 | (min-resolution: 1.33dppx),
32 | (min-resolution: 213dpi) {
33 | height:1.333px;
34 | }
35 | @media (-webkit-min-device-pixel-ratio: 1.5),
36 | (min--moz-device-pixel-ratio: 1.5),
37 | (-o-device-pixel-ratio: 3/2),
38 | (min-device-pixel-ratio: 1.5),
39 | (min-resolution: 1.5dppx),
40 | (min-resolution: 240dpi) {
41 | height:1.5px;
42 | }
43 |
44 | @media (-webkit-min-device-pixel-ratio: 2),
45 | (min--moz-device-pixel-ratio: 2),
46 | (-o-device-pixel-ratio: 2/1),
47 | (min-device-pixel-ratio: 2),
48 | (min-resolution: 2dppx),
49 | (min-resolution: 380dpi) {
50 | height:2px;
51 | }
52 |
53 | @media (-webkit-min-device-pixel-ratio: 3),
54 | (min--moz-device-pixel-ratio: 3),
55 | (-o-device-pixel-ratio: 3/1),
56 | (min-device-pixel-ratio: 3),
57 | (min-resolution: 3dppx),
58 | (min-resolution: 480dpi) {
59 | height:3px;
60 | }
61 |
62 | @media (-webkit-min-device-pixel-ratio: 4),
63 | (min--moz-device-pixel-ratio: 4),
64 | (-o-device-pixel-ratio: 4/1),
65 | (min-device-pixel-ratio: 3),
66 | (min-resolution: 4dppx),
67 | (min-resolution: 640dpi) {
68 | height:4px;
69 | }
70 |
71 | }
72 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_icons.less:
--------------------------------------------------------------------------------
1 | .mdi, icon {
2 | .variations(~"", color, @lightbg-text);
3 | line-height: inherit;
4 | vertical-align: bottom;
5 | }
6 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_inputs.less:
--------------------------------------------------------------------------------
1 | fieldset[disabled] .form-control, .form-control-wrapper .form-control, .form-control {
2 | &, &:focus, &.focus {
3 | &:not(textarea) {
4 | height: 28px;
5 | }
6 | padding: 0;
7 | float: none;
8 | border: 0;
9 | box-shadow: none;
10 | border-radius: 0;
11 | &:disabled {
12 | border-style: dashed;
13 | border-bottom: 1px solid #757575;
14 | }
15 | }
16 | }
17 |
18 | select[multiple].form-control {
19 | &, &:focus, &.focus {
20 | height: 85px;
21 | }
22 | }
23 |
24 | .form-control {
25 | border: 0;
26 | background-image: linear-gradient(@primary, @primary), linear-gradient(@input-underline-color, @input-underline-color);
27 | background-size: 0 2px, 100% 1px;
28 | background-repeat: no-repeat;
29 | background-position: center bottom, center calc(~"100% - 1px");
30 | background-color: transparent;
31 | background-color: rgba(0,0,0,0);
32 | }
33 | .form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
34 | background-color: transparent;
35 | background-color: rgba(0,0,0,0);
36 | }
37 | fieldset[disabled] .form-control:disabled, .form-control-wrapper .form-control:disabled, .form-control:disabled, fieldset[disabled] .form-control:focus:disabled, .form-control-wrapper .form-control:focus:disabled, .form-control:focus:disabled, fieldset[disabled] .form-control.focus:disabled, .form-control-wrapper .form-control.focus:disabled, .form-control.focus:disabled {
38 | border: 0;
39 | }
40 |
41 | .form-control:focus, .form-control.focus {
42 | outline: none;
43 | background-image: linear-gradient(@primary, @primary), linear-gradient(@input-underline-color, @input-underline-color);
44 | animation: input-highlight 0.5s forwards;
45 | box-shadow: none;
46 | background-size: 0 2px, 100% 1px;
47 | }
48 |
49 |
50 | .form-control-wrapper {
51 | position: relative;
52 |
53 | .floating-label {
54 | color: #7E7E7E;
55 | font-size: 14px;
56 | position: absolute;
57 | pointer-events: none;
58 | left: 0px;
59 | top: 5px;
60 | transition: 0.2s ease all;
61 | opacity: 0;
62 | }
63 | .form-control:focus ~ .floating-label,
64 | .form-control:not(.empty) ~ .floating-label {
65 | top: -10px;
66 | font-size: 10px;
67 | opacity: 1;
68 | }
69 | .form-control:focus ~ .floating-label {
70 | color: @primary;
71 | }
72 | .form-control:not(.empty):invalid ~ .floating-label, .form-control.focus:invalid ~ .floating-label {
73 | color: @input-danger;
74 | }
75 | .form-control:focus ~ .material-input:after, .form-control.focus ~ .material-input:after {
76 | background-color: @input-default;
77 | }
78 | .form-control:invalid {
79 | background-image: linear-gradient(@input-danger, @input-danger), linear-gradient(@input-underline-color, @input-underline-color);
80 | }
81 | .form-control.empty ~ .floating-label {
82 | opacity: 1;
83 | }
84 | textarea { resize: none; }
85 | textarea ~ .form-control-highlight {
86 | margin-top: -11px;
87 | }
88 |
89 | // Hints
90 | .hint {
91 | position: absolute;
92 | font-size: 80%;
93 | display: none;
94 | }
95 | .form-control:focus ~ .hint, .form-control.focus ~ .hint {
96 | display: block;
97 | }
98 |
99 | select ~ .material-input:after {
100 | display: none;
101 | }
102 |
103 | // Fix for OS X
104 | select {
105 | appearance: none;
106 | }
107 |
108 | }
109 |
110 | .form-group {
111 | &.has-warning {
112 | .form-control {
113 | box-shadow: none;
114 | }
115 | .material-input:focus, .form-control:focus, .form-control.focus {
116 | background-image: linear-gradient(@input-warning, @input-warning), linear-gradient(@input-underline-color, @input-underline-color);
117 | box-shadow: none;
118 | }
119 | .control-label, input.form-control:focus ~ .floating-label {
120 | color: @input-warning;
121 | }
122 | }
123 | &.has-error {
124 | .form-control {
125 | box-shadow: none;
126 | }
127 | .material-input:focus, .form-control:focus, .form-control.focus {
128 | background-image: linear-gradient(@input-danger, @input-danger), linear-gradient(@input-underline-color, @input-underline-color);
129 | box-shadow: none;
130 | }
131 | .control-label, input.form-control:focus ~ .floating-label {
132 | color: @input-danger;
133 | }
134 | }
135 | &.has-success {
136 | .form-control {
137 | box-shadow: none;
138 | }
139 | .material-input:focus, .form-control:focus, .form-control.focus {
140 | background-image: linear-gradient(@input-success, @input-success), linear-gradient(@input-underline-color, @input-underline-color);
141 | box-shadow: none;
142 | }
143 | .control-label, input.form-control:focus ~ .floating-label {
144 | color: @input-success;
145 | }
146 | }
147 | &.has-info {
148 | .form-control {
149 | box-shadow: none;
150 | }
151 | .material-input:focus, .form-control:focus, .form-control.focus {
152 | background-image: linear-gradient(@input-info, @input-info), linear-gradient(@input-underline-color, @input-underline-color);
153 | box-shadow: none;
154 | }
155 | .control-label, input.form-control:focus ~ .floating-label {
156 | color: @input-info;
157 | }
158 | }
159 | .generic-variations(~" .form-control:focus", @primary, {
160 | background-image: linear-gradient(@material-color, @material-color), linear-gradient(@input-underline-color, @input-underline-color);
161 | });
162 | .generic-variations(~" .form-control.focus", @primary, {
163 | background-image: linear-gradient(@material-color, @material-color), linear-gradient(@input-underline-color, @input-underline-color);
164 | });
165 | .variations(~" .control-label", color, @lightbg-text);
166 | .variations(~" input.form-control:focus ~ .floating-label", color, @input-default);
167 |
168 | }
169 |
170 | .input-group {
171 | .form-control-wrapper {
172 | .form-control {
173 | float: none;
174 | }
175 | margin-right: 5px;
176 | margin-left: 5px;
177 | }
178 | .input-group-addon {
179 | border: 0;
180 | background: transparent;
181 | }
182 | .input-group-btn .btn {
183 | border-radius: 4px;
184 | margin: 0;
185 | }
186 | }
187 |
188 | select.form-control {
189 | border: 0;
190 | box-shadow: none;
191 | border-radius: 0;
192 | &:focus, &.focus {
193 | box-shadow: none;
194 | border-color: #757575;
195 | }
196 | }
197 |
198 | @keyframes input-highlight {
199 | 0% {
200 | background-size: 0 2px, 100% 1px;
201 | }
202 |
203 | 100% {
204 | background-size: 100% 2px, 100% 1px;
205 | }
206 | }
207 |
208 | // Input files (kinda hack)
209 | .form-control-wrapper input[type=file] {
210 | opacity: 0;
211 | position: absolute;
212 | top: 0;
213 | right: 0;
214 | bottom: 0;
215 | left: 0;
216 | width: 100%;
217 | height: 100%;
218 | z-index: 100;
219 | }
220 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_labels.less:
--------------------------------------------------------------------------------
1 | .label {
2 | border-radius: 1px;
3 | .variations(~"", background-color, @grey);
4 | }
5 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_lists.less:
--------------------------------------------------------------------------------
1 | .list-group {
2 | border-radius: 0;
3 | .list-group-item {
4 | background-color: transparent;
5 | overflow: hidden;
6 | border: 0;
7 | border-radius: 0;
8 | padding: 0 16px;
9 | &.baseline {
10 | border-bottom: 1px solid #cecece;
11 | &:last-child {
12 | border-bottom: none;
13 | }
14 | }
15 | .row-picture, .row-action-primary {
16 | float: left;
17 | display: inline-block;
18 | padding-right: 16px;
19 | img, i, label {
20 | display: block;
21 | width: 56px;
22 | height: 56px;
23 | }
24 | img {
25 | background: rgba(0,0,0,0.1);
26 | padding: 1px;
27 | &.circle {
28 | border-radius: 100%;
29 | }
30 | }
31 | i {
32 | background: rgba(0,0,0,0.25);
33 | border-radius: 100%;
34 | text-align: center;
35 | line-height: 56px;
36 | font-size: 20px;
37 | color: white;
38 | }
39 | label {
40 | margin-left: 7px;
41 | margin-right: -7px;
42 | margin-top: 5px;
43 | margin-bottom: -5px;
44 | .checkbox-material {
45 | left: -10px;
46 | }
47 | }
48 | }
49 | .row-content {
50 | display: inline-block;
51 | width: ~"calc(100% - 92px)";
52 | min-height: 66px;
53 | .action-secondary {
54 | position: absolute;
55 | right: 16px;
56 | top: 16px;
57 | i {
58 | font-size: 20px;
59 | color: rgba(0,0,0,0.25);
60 | cursor: pointer;
61 | }
62 | }
63 | .action-secondary ~ * {
64 | max-width: ~"calc(100% - 30px)";
65 | }
66 | .least-content {
67 | position: absolute;
68 | right: 16px;
69 | top: 0px;
70 | color: rgba(0,0,0,0.54);
71 | font-size: 14px;
72 | }
73 | }
74 | .list-group-item-heading {
75 | color: rgba(0, 0, 0, 0.77);
76 | font-size: 20px;
77 | line-height: 29px;
78 | }
79 | }
80 | .list-group-item.active {
81 | &:hover, &:focus {
82 | background: rgba(0,0,0,.15);
83 | outline: 10px solid rgba(0,0,0,.15);
84 | }
85 | .list-group-item-heading, .list-group-item-text {
86 | color: @lightbg-text;
87 | }
88 |
89 | }
90 | .list-group-separator {
91 | clear: both;
92 | overflow: hidden;
93 | margin-top: 10px;
94 | margin-bottom: 10px;
95 | &:before {
96 | content: "";
97 | width: ~"calc(100% - 90px)";
98 | border-bottom: 1px solid rgba(0,0,0,0.1);
99 | float: right;
100 | }
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_mixins-fullpalette.less:
--------------------------------------------------------------------------------
1 | // usage: .variations(~" .check", color, transparent);
2 | .variations(@extra, @property, @default) {
3 | .generic-variations(@extra, @default, {
4 | @{property}: @material-color;
5 | });
6 | }
7 |
8 | .background-variations(@extra, @default) {
9 | .generic-variations(@extra, @default, {
10 | background-color: @material-color;
11 | color: @text-color;
12 | & when (@material-color = @btn-default) {
13 | color: @lightbg-text;
14 | }
15 | });
16 | }
17 |
18 | .text-variations(@extra, @default) {
19 | .generic-variations(@extra, @default, {
20 | color: @material-color;
21 | });
22 | }
23 |
24 | //
25 | // To use this mixin you should pass a function as final parameter to define
26 | // the style. In that definition you can use the following variables to define it.
27 | //
28 | // @material-color-name ---> "red", "green", "indigo" ...
29 | // @material-color-full-name ---> "red", "green-50", "indigo-400" ...
30 | // @material-color ---> #f44336, #e8f5e9, #5c6bc0 ...
31 | // @text-color ---> rgba(255,255,255,0.84), rgba(0,0,0,0.84), rgba(255,255,255,0.84) ...
32 | //
33 |
34 | .generic-variations(@extra, @default, @func) {
35 |
36 | @contrast-factor: 40%;
37 |
38 | // bootstrap styles
39 | &@{extra}, &-default@{extra} {
40 | @material-color-name: "default";
41 | @material-color-full-name: @material-color-name;
42 | @material-color: @default;
43 | @text-color: @darkbg-text;
44 | @func();
45 | }
46 | &-black@{extra} {
47 | @material-color-name: "black";
48 | @material-color-full-name: @material-color-name;
49 | @material-color: @black;
50 | @text-color: @darkbg-text;
51 | @func();
52 | }
53 | &-white@{extra} {
54 | @material-color-name: "white";
55 | @material-color-full-name: @material-color-name;
56 | @material-color: @white;
57 | @text-color: @lightbg-text;
58 | @func();
59 | }
60 | &-inverse@{extra} {
61 | @material-color-name: "inverse";
62 | @material-color-full-name: @material-color-name;
63 | @material-color: @inverse;
64 | @text-color: contrast(@inverse, @lightbg-text, @darkbg-text, @contrast-factor);
65 | @func();
66 | }
67 | &-primary@{extra} {
68 | @material-color-name: "primary";
69 | @material-color-full-name: @material-color-name;
70 | @material-color: @primary;
71 | @text-color: @darkbg-text;
72 | @func();
73 | }
74 | &-success@{extra} {
75 | @material-color-name: "success";
76 | @material-color-full-name: @material-color-name;
77 | @material-color: @success;
78 | @text-color: @darkbg-text;
79 | @func();
80 | }
81 | &-info@{extra} {
82 | @material-color-name: "info";
83 | @material-color-full-name: @material-color-name;
84 | @material-color: @info;
85 | @text-color: @darkbg-text;
86 | @func();
87 | }
88 | &-warning@{extra} {
89 | @material-color-name: "warning";
90 | @material-color-full-name: @material-color-name;
91 | @material-color: @warning;
92 | @text-color: @darkbg-text;
93 | @func();
94 | }
95 | &-danger@{extra} {
96 | @material-color-name: "danger";
97 | @material-color-full-name: @material-color-name;
98 | @material-color: @danger;
99 | @text-color: @darkbg-text;
100 | @func();
101 | }
102 |
103 | // given a color build multiples dephs
104 | .generic-variations-factory(@material-color-name) {
105 |
106 | // given a color and its deph build css
107 | .generic-variations-factory-deep(@material-color-number) {
108 |
109 | &-material-@{material-color-name}@{material-color-number}@{extra} {
110 | @material-color-full-name: "@{material-color-name}@{material-color-number}";
111 | @material-color: @@material-color-full-name;
112 | @text-color: contrast(@material-color, @lightbg-text, @darkbg-text, @contrast-factor);
113 | @func();
114 | }
115 |
116 | }
117 |
118 | .generic-variations-factory-deep(~"");
119 | .generic-variations-factory-deep(~"-50");
120 | .generic-variations-factory-deep(~"-100");
121 | .generic-variations-factory-deep(~"-200");
122 | .generic-variations-factory-deep(~"-300");
123 | .generic-variations-factory-deep(~"-400");
124 | .generic-variations-factory-deep(~"-500");
125 | .generic-variations-factory-deep(~"-600");
126 | .generic-variations-factory-deep(~"-700");
127 | .generic-variations-factory-deep(~"-800");
128 | .generic-variations-factory-deep(~"-900");
129 | .generic-variations-factory-deep(~"-A100");
130 | .generic-variations-factory-deep(~"-A200");
131 | .generic-variations-factory-deep(~"-A400");
132 | .generic-variations-factory-deep(~"-A700");
133 | }
134 |
135 | .generic-variations-factory(~"red");
136 | .generic-variations-factory(~"pink");
137 | .generic-variations-factory(~"purple");
138 | .generic-variations-factory(~"deep-purple");
139 | .generic-variations-factory(~"indigo");
140 | .generic-variations-factory(~"blue");
141 | .generic-variations-factory(~"light-blue");
142 | .generic-variations-factory(~"cyan");
143 | .generic-variations-factory(~"teal");
144 | .generic-variations-factory(~"green");
145 | .generic-variations-factory(~"light-green");
146 | .generic-variations-factory(~"lime");
147 | .generic-variations-factory(~"yellow");
148 | .generic-variations-factory(~"amber");
149 | .generic-variations-factory(~"orange");
150 | .generic-variations-factory(~"deep-orange");
151 | .generic-variations-factory(~"brown");
152 | .generic-variations-factory(~"grey");
153 | .generic-variations-factory(~"blue-grey");
154 |
155 | }
156 |
157 |
158 | @all-variations: ~"-default, -primary, -info, -success, -warning, -danger";
159 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_mixins.less:
--------------------------------------------------------------------------------
1 | // usage: .variations(~" .check", color, transparent);
2 | .variations(@extra, @property, @default) {
3 | .generic-variations(@extra, @default, {
4 | @{property}: @material-color;
5 | });
6 | }
7 |
8 | .background-variations(@extra, @default) {
9 | .generic-variations(@extra, @default, {
10 | background-color: @material-color;
11 | color: @text-color;
12 | & when (@material-color = @btn-default) {
13 | color: @lightbg-text;
14 | }
15 | });
16 | }
17 |
18 | .text-variations(@extra, @default) {
19 | .generic-variations(@extra, @default, {
20 | color: @material-color;
21 | });
22 | }
23 |
24 | //
25 | // To use this mixin you should pass a function as final parameter to define
26 | // the style. In that definition you can use the following variables to define it.
27 | //
28 | // @material-color-name ---> "red", "green", "indigo" ...
29 | // @material-color-full-name ---> "red", "green-50", "indigo-400" ...
30 | // @material-color ---> #f44336, #e8f5e9, #5c6bc0 ...
31 | // @text-color ---> rgba(255,255,255,0.84), rgba(0,0,0,0.84), rgba(255,255,255,0.84) ...
32 | //
33 |
34 |
35 | .generic-variations(@extra, @default, @func) {
36 |
37 | @contrast-factor: 40%;
38 |
39 | // bootstrap styles
40 | &@{extra}, &-default@{extra} {
41 | @material-color-name: "default";
42 | @material-color-full-name: @material-color-name;
43 | @material-color: @default;
44 | @text-color: @darkbg-text;
45 | @func();
46 | }
47 | &-black@{extra} {
48 | @material-color-name: "black";
49 | @material-color-full-name: @material-color-name;
50 | @material-color: @black;
51 | @text-color: @darkbg-text;
52 | @func();
53 | }
54 | &-white@{extra} {
55 | @material-color-name: "white";
56 | @material-color-full-name: @material-color-name;
57 | @material-color: @white;
58 | @text-color: @lightbg-text;
59 | @func();
60 | }
61 | &-inverse@{extra} {
62 | @material-color-name: "inverse";
63 | @material-color-full-name: @material-color-name;
64 | @material-color: @inverse;
65 | @text-color: contrast(@inverse, @lightbg-text, @darkbg-text, @contrast-factor);
66 | @func();
67 | }
68 | &-primary@{extra} {
69 | @material-color-name: "primary";
70 | @material-color-full-name: @material-color-name;
71 | @material-color: @primary;
72 | @text-color: @darkbg-text;
73 | @func();
74 | }
75 | &-success@{extra} {
76 | @material-color-name: "success";
77 | @material-color-full-name: @material-color-name;
78 | @material-color: @success;
79 | @text-color: @darkbg-text;
80 | @func();
81 | }
82 | &-info@{extra} {
83 | @material-color-name: "info";
84 | @material-color-full-name: @material-color-name;
85 | @material-color: @info;
86 | @text-color: @darkbg-text;
87 | @func();
88 | }
89 | &-warning@{extra} {
90 | @material-color-name: "warning";
91 | @material-color-full-name: @material-color-name;
92 | @material-color: @warning;
93 | @text-color: @darkbg-text;
94 | @func();
95 | }
96 | &-danger@{extra} {
97 | @material-color-name: "danger";
98 | @material-color-full-name: @material-color-name;
99 | @material-color: @danger;
100 | @text-color: @darkbg-text;
101 | @func();
102 | }
103 |
104 | // given a color build multiples dephs
105 | .generic-variations-factory(@material-color-name) {
106 |
107 | // given a color and its deph build css
108 | .generic-variations-factory-deep(@material-color-number) {
109 |
110 | &-material-@{material-color-name}@{material-color-number}@{extra} {
111 | @material-color-full-name: "@{material-color-name}@{material-color-number}";
112 | @material-color: @@material-color-full-name;
113 | @text-color: contrast(@material-color, @lightbg-text, @darkbg-text, @contrast-factor);
114 | @func();
115 | }
116 |
117 | }
118 |
119 | .generic-variations-factory-deep(~"");
120 | }
121 |
122 | .generic-variations-factory(~"red");
123 | .generic-variations-factory(~"pink");
124 | .generic-variations-factory(~"purple");
125 | .generic-variations-factory(~"deep-purple");
126 | .generic-variations-factory(~"indigo");
127 | .generic-variations-factory(~"blue");
128 | .generic-variations-factory(~"light-blue");
129 | .generic-variations-factory(~"cyan");
130 | .generic-variations-factory(~"teal");
131 | .generic-variations-factory(~"green");
132 | .generic-variations-factory(~"light-green");
133 | .generic-variations-factory(~"lime");
134 | .generic-variations-factory(~"yellow");
135 | .generic-variations-factory(~"amber");
136 | .generic-variations-factory(~"orange");
137 | .generic-variations-factory(~"deep-orange");
138 | .generic-variations-factory(~"brown");
139 | .generic-variations-factory(~"grey");
140 | .generic-variations-factory(~"blue-grey");
141 |
142 | }
143 |
144 |
145 | @all-variations: ~"-default, -primary, -info, -success, -warning, -danger";
146 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_navbar.less:
--------------------------------------------------------------------------------
1 | .navbar {
2 | background-color: @primary;
3 | border: 0;
4 | border-radius: 0;
5 |
6 | .navbar-brand {
7 | position: relative;
8 | height: 60px;
9 | line-height: 30px;
10 | color: inherit;
11 | &:hover,
12 | &:focus {
13 | color: inherit;
14 | background-color: transparent;
15 | }
16 | }
17 |
18 | .navbar-text {
19 | color: inherit;
20 | margin-top: 20px;
21 | margin-bottom: 20px;
22 | }
23 |
24 | .navbar-nav {
25 | > li > a {
26 | color: inherit;
27 | padding-top: 20px;
28 | padding-bottom: 20px;
29 |
30 | &:hover,
31 | &:focus {
32 | color: inherit;
33 | background-color: transparent;
34 | }
35 | }
36 | > .active > a {
37 | &,
38 | &:hover,
39 | &:focus {
40 | color: inherit;
41 | background-color: rgba(255, 255, 255, 0.1);
42 | }
43 | }
44 | > .disabled > a {
45 | &,
46 | &:hover,
47 | &:focus {
48 | color: inherit;
49 | background-color: transparent;
50 | opacity: 0.9;
51 | }
52 | }
53 | }
54 |
55 | // Darken the responsive nav toggle
56 | .navbar-toggle {
57 | border: 0;
58 | &:hover,
59 | &:focus {
60 | background-color: transparent;
61 | }
62 | .icon-bar {
63 | background-color: inherit;
64 | border: 1px solid;
65 | }
66 | }
67 |
68 | .navbar-default .navbar-toggle,
69 | .navbar-inverse .navbar-toggle {
70 | border-color: transparent;
71 | }
72 |
73 | .navbar-collapse,
74 | .navbar-form {
75 | border-color: rgba(0,0,0,0.1);
76 | }
77 |
78 | // Dropdowns
79 | .navbar-nav {
80 | > .open > a {
81 | &,
82 | &:hover,
83 | &:focus {
84 | background-color: transparent;
85 | color: inherit;
86 | }
87 | }
88 |
89 | @media (max-width: 767px) {
90 | .navbar-text {
91 | color: inherit;
92 | margin-top: 15px;
93 | margin-bottom: 15px;
94 | }
95 |
96 | // Dropdowns get custom display
97 | .open .dropdown-menu {
98 | > .dropdown-header {
99 | border: 0;
100 | color: inherit;
101 | }
102 | .divider {
103 | border-bottom: 1px solid;
104 | opacity: 0.08;
105 | }
106 | > li > a {
107 | color: inherit;
108 | &:hover,
109 | &:focus {
110 | color: inherit;
111 | background-color: transparent;
112 | }
113 | }
114 | > .active > a {
115 | &,
116 | &:hover,
117 | &:focus {
118 | color: inherit;
119 | background-color: transparent;
120 | }
121 | }
122 | > .disabled > a {
123 | &,
124 | &:hover,
125 | &:focus {
126 | color: inherit;
127 | background-color: transparent;
128 | }
129 | }
130 | }
131 | }
132 | }
133 |
134 | .navbar-link {
135 | color: inherit;
136 | &:hover {
137 | color: inherit;
138 | }
139 | }
140 |
141 | .btn-link {
142 | color: inherit;
143 | &:hover,
144 | &:focus {
145 | color: inherit;
146 | }
147 | &[disabled],
148 | fieldset[disabled] & {
149 | &:hover,
150 | &:focus {
151 | color: inherit;
152 | }
153 | }
154 | }
155 |
156 | .navbar-form {
157 | margin-top: 16px;
158 | .form-control-wrapper .form-control, .form-control {
159 | border-color: inherit;
160 | color: inherit;
161 | }
162 | .form-control-wrapper {
163 | .material-input:before, input:focus ~ .material-input:after {
164 | background-color: inherit;
165 | }
166 | }
167 | }
168 |
169 | .generic-variations(~".navbar", @primary, {
170 | background-color: @material-color;
171 | color: @text-color;
172 | // deeply defined to override welljumbo class without !impotant need
173 | .navbar-form .form-control-wrapper input.form-control::placeholder, .navbar-form input.form-control::placeholder {
174 | color: @text-color;
175 | }
176 | .dropdown-menu {
177 | li > a {
178 | &:hover,
179 | &:focus {
180 | color: @material-color;
181 | }
182 | }
183 | .active > a {
184 | &:hover,
185 | &:focus {
186 | color: @text-color;
187 | }
188 | background-color: @material-color;
189 | color: @text-color;
190 | }
191 | }
192 | });
193 |
194 | &-inverse {
195 | background-color: @indigo;
196 | }
197 |
198 | @media (max-width: 1199px) {
199 |
200 | .navbar-brand {
201 | height: 50px;
202 | padding: 10px 15px;
203 | }
204 | .navbar-form {
205 | margin-top: 10px;
206 | }
207 |
208 | .navbar-nav > li > a {
209 | padding-top: 15px;
210 | padding-bottom: 15px;
211 | }
212 | }
213 | }
214 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_panels.less:
--------------------------------------------------------------------------------
1 | .panel {
2 | border-radius: 2px;
3 | border: 0;
4 |
5 | .variations(~" > .panel-heading", background-color, @grey-200);
6 | .shadow-z-1;
7 | }
8 |
9 |
10 | [class*="panel-"] > .panel-heading {
11 | color: @darkbg-text;
12 | border: 0;
13 | }
14 | .panel-default, .panel:not([class*="panel-"]) {
15 | > .panel-heading {
16 | color: @lightbg-text;
17 | }
18 | }
19 | .panel-footer {
20 | background-color: @grey-200;
21 | }
22 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_plugin-dropdownjs.less:
--------------------------------------------------------------------------------
1 | .dropdownjs:after {
2 | right: 5px;
3 | top: 3px;
4 | font-size: 25px;
5 | position: absolute;
6 | content: "\e894";
7 | font-family: "Material-Design-Icons";
8 | speak: none;
9 | font-style: normal;
10 | font-weight: normal;
11 | font-variant: normal;
12 | text-transform: none;
13 | line-height: 1;
14 | -webkit-font-smoothing: antialiased;
15 | -moz-osx-font-smoothing: grayscale;
16 | pointer-events: none;
17 | color: #757575;
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_plugin-nouislider.less:
--------------------------------------------------------------------------------
1 | .noUi-target,
2 | .noUi-target * {
3 | -webkit-touch-callout: none;
4 | -ms-touch-action: none;
5 | user-select: none;
6 | box-sizing: border-box;
7 | }
8 | .noUi-base {
9 | width: 100%;
10 | height: 100%;
11 | position: relative;
12 | }
13 | .noUi-origin {
14 | position: absolute;
15 | right: 0;
16 | top: 0;
17 | left: 0;
18 | bottom: 0;
19 | }
20 | .noUi-handle {
21 | position: relative;
22 | z-index: 1;
23 | box-sizing: border-box;
24 | }
25 | .noUi-stacking .noUi-handle {
26 | z-index: 10;
27 | }
28 | .noUi-stacking + .noUi-origin {
29 | *z-index: -1;
30 | }
31 | .noUi-state-tap .noUi-origin {
32 | transition: left 0.3s, top 0.3s;
33 | }
34 | .noUi-state-drag * {
35 | cursor: inherit !important;
36 | }
37 | .noUi-horizontal {
38 | height: 10px;
39 | }
40 | .noUi-handle {
41 | box-sizing: border-box;
42 | width: 12px;
43 | height: 12px;
44 | left: -10px;
45 | top: -5px;
46 | cursor: ew-resize;
47 | border-radius: 100%;
48 | transition: all 0.2s ease-out;
49 | border: 1px solid;
50 | }
51 | .noUi-vertical .noUi-handle {
52 | margin-left: 5px;
53 | cursor: ns-resize;
54 | }
55 | .noUi-horizontal.noUi-extended {
56 | padding: 0 15px;
57 | }
58 | .noUi-horizontal.noUi-extended .noUi-origin {
59 | right: -15px;
60 | }
61 | .noUi-background {
62 | height: 2px;
63 | margin: 20px 0;
64 | }
65 | .noUi-origin {
66 | margin: 0;
67 | border-radius: 0;
68 | height: 2px;
69 | background: #c8c8c8;
70 | &[style^="left: 0"] .noUi-handle {
71 | background-color: #fff;
72 | border: 2px solid #c8c8c8;
73 | &.noUi-active {
74 | border-width: 1px;
75 | }
76 | }
77 | }
78 | .noUi-target {
79 | border-radius: 2px;
80 | }
81 | .noUi-horizontal {
82 | height: 2px;
83 | margin: 15px 0;
84 | }
85 | .noUi-vertical {
86 | height: 100%;
87 | width: 2px;
88 | margin: 0 15px;
89 | display: inline-block;
90 | }
91 | .noUi-handle.noUi-active {
92 | transform: scale3d(2.5, 2.5, 1);
93 | }
94 | [disabled].noUi-slider{
95 | opacity: 0.5;
96 | }
97 | [disabled] .noUi-handle {
98 | cursor: not-allowed;
99 | }
100 |
101 | .slider {
102 | background: #c8c8c8;
103 | }
104 |
105 | .slider {
106 | .variations(~".noUi-connect", background-color, @primary);
107 | .variations(~" .noUi-connect", background-color, @primary);
108 | .variations(~" .noUi-handle", background-color, @primary);
109 | .variations(~" .noUi-handle", border-color, @primary);
110 | }
111 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_plugin-selectize.less:
--------------------------------------------------------------------------------
1 | // Support for Selectize plugin
2 | // http://brianreavis.github.io/selectize.js/
3 |
4 | .selectize-control.single, .selectize-control.multi {
5 | padding: 0;
6 | .selectize-input, .selectize-input.input-active {
7 |
8 | cursor: text;
9 | background: transparent;
10 | box-shadow: none;
11 | border: 0;
12 | padding: 0;
13 | height: 100%;
14 | font-size: 14px;
15 | line-height: 30px;
16 | .has-items {
17 | padding: 0;
18 | }
19 | &:after {
20 | right: 5px;
21 | position: absolute;
22 | font-size: 7px;
23 | content: "\e894";
24 | font-family: "Material-Design-Icons";
25 | speak: none;
26 | font-style: normal;
27 | font-weight: normal;
28 | font-variant: normal;
29 | text-transform: none;
30 | line-height: 4;
31 | -webkit-font-smoothing: antialiased;
32 | -moz-osx-font-smoothing: grayscale;
33 | }
34 | input {
35 | font-size: 14px;
36 | outline: 0px;
37 | border: 0px;
38 | background: transparent;
39 | }
40 | &.floating-label-fix input {
41 | opacity: 0;
42 | }
43 | > div, > .item {
44 | display: inline-block;
45 | margin: 0 8px 3px 0;
46 | padding: 0;
47 | background: transparent;
48 | border: 0;
49 | &:after {
50 | content: ",";
51 | }
52 | &:last-of-type:after {
53 | content: "";
54 | }
55 | &.active {
56 | font-weight: bold;
57 | background: transparent;
58 | border: 0;
59 | }
60 | }
61 | }
62 | .selectize-dropdown {
63 | position: absolute;
64 | z-index: 1000;
65 | border: 0;
66 | width: 100% !important;
67 | left: 0 !important;
68 | height: auto;
69 | background-color: #FFF;
70 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24);
71 | border-radius: 2px;
72 | padding: 0;
73 | margin-top: 3px;
74 | .active {
75 | background-color: inherit;
76 | }
77 | .highlight {
78 | background-color: #d5d8ff;
79 | }
80 | .selected, .selected.active {
81 | background-color: #EEEEEE;
82 | }
83 | [data-selectable], .optgroup-header {
84 | padding: 10px 20px;
85 | cursor: pointer;
86 | }
87 | }
88 | .dropdown-active ~ .selectize-dropdown {
89 | display: block;
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_plugin-snackbarjs.less:
--------------------------------------------------------------------------------
1 | // Support for SnackbarJS plugin
2 | // https://github.com/FezVrasta/snackbarjs
3 |
4 | .snackbar {
5 | // Style
6 | background-color: #323232;
7 | color: @darkbg-text;
8 | font-size: 14px;
9 | border-radius: 2px;
10 | .shadow-z-1;
11 |
12 | // Animation
13 | height: 0;
14 | transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, padding 0 linear 0.2s, height 0 linear 0.2s;
15 | transform: translateY(200%);
16 | }
17 |
18 | .snackbar.snackbar-opened {
19 | // Style
20 | padding: 14px 15px;
21 | margin-bottom: 20px;
22 |
23 | // Animation
24 | height: auto;
25 | transition: transform 0.2s ease-in-out, opacity 0.2s ease-in, height 0 linear 0.2s, height 0 linear 0.2s;
26 | transform: none;
27 | }
28 |
29 | // Variations
30 | .snackbar.toast {
31 | border-radius: 200px;
32 | }
33 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_popups.less:
--------------------------------------------------------------------------------
1 | .popover, .tooltip-inner {
2 | color: @popover-color;
3 | line-height: 1em;
4 | background: @popover-background;
5 | border: none;
6 | border-radius: @material-border-radius;
7 | .shadow-z-1();
8 | }
9 |
10 | .tooltip, .tooltip.in {
11 | opacity: 1;
12 | }
13 |
14 | .popover, .tooltip {
15 | .arrow, .tooltip-arrow {
16 | display: none;
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_progress.less:
--------------------------------------------------------------------------------
1 | .progress {
2 | height: 4px;
3 | border-radius: 0;
4 | box-shadow: none;
5 | background: #c8c8c8;
6 | .progress-bar {
7 | box-shadow: none;
8 | .variations(~"", background-color, @primary);
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_radios.less:
--------------------------------------------------------------------------------
1 | .form-horizontal .radio {
2 | margin-bottom: 10px;
3 | }
4 | .radio {
5 | label {
6 | cursor: pointer;
7 | padding-left: 45px;
8 | position: relative;
9 | span {
10 | display: block;
11 | position: absolute;
12 | left: 10px;
13 | top: 2px;
14 | transition-duration: 0.2s;
15 | }
16 | .circle {
17 | border: 2px solid @lightbg-text;
18 | height: 15px;
19 | width: 15px;
20 | border-radius: 100%;
21 | }
22 | .check {
23 | height: 15px;
24 | width: 15px;
25 | border-radius: 100%;
26 | background-color: @radio-default;
27 | transform: scale3d(0, 0, 0);
28 | }
29 | .check:after {
30 | display: block;
31 | position: absolute;
32 | content: "";
33 | background-color: @lightbg-text;
34 | left: -18px;
35 | top: -18px;
36 | height: 50px;
37 | width: 50px;
38 | border-radius: 100%;
39 | z-index: 1;
40 | opacity: 0;
41 | margin: 0;
42 | transform: scale3d(1.5, 1.5, 1);
43 | }
44 | input[type=radio]:not(:checked) ~ .check:after {
45 | animation: rippleOff 500ms;
46 | }
47 | input[type=radio]:checked ~ .check:after {
48 | animation: rippleOn 500ms;
49 | }
50 |
51 | }
52 | .variations(~" input[type=radio]:checked ~ .check", background-color, @radio-default);
53 | .variations(~" input[type=radio]:checked ~ .circle", border-color, @radio-default);
54 |
55 | input[type=radio][disabled] ~ .check,
56 | input[type=radio][disabled] ~ .circle {
57 | opacity: 0.5;
58 | }
59 |
60 | input[type=radio] {
61 | opacity: 0;
62 | height: 0;
63 | width: 0;
64 | overflow: hidden;
65 | }
66 | input[type=radio]:checked ~ .check {
67 | transform: scale3d(0.55, 0.55, 1);
68 | }
69 | input[type=radio][disabled] ~ .circle {
70 | border-color: @lightbg-text;
71 | }
72 | input[type=radio][disabled] ~ .check {
73 | background-color: @lightbg-text;
74 | }
75 |
76 | }
77 |
78 | @keyframes rippleOn {
79 | 0% {
80 | opacity: 0;
81 | }
82 | 50% {
83 | opacity: 0.2;
84 | }
85 | 100% {
86 | opacity: 0;
87 | }
88 | }
89 |
90 | @keyframes rippleOff {
91 | 0% {
92 | opacity: 0;
93 | }
94 | 50% {
95 | opacity: 0.2;
96 | }
97 | 100% {
98 | opacity: 0;
99 | }
100 | }
101 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_shadows.less:
--------------------------------------------------------------------------------
1 | .shadow-z-1 {
2 | box-shadow:
3 | 0 1px 6px 0 rgba(0, 0, 0, 0.12),
4 | 0 1px 6px 0 rgba(0, 0, 0, 0.12);
5 | }
6 |
7 | .shadow-z-1-hover {
8 | box-shadow:
9 | 0 5px 11px 0 rgba(0, 0, 0, 0.18),
10 | 0 4px 15px 0 rgba(0, 0, 0, 0.15);
11 | }
12 |
13 | .shadow-z-2 {
14 | box-shadow:
15 | 0 8px 17px 0 rgba(0, 0, 0, 0.2),
16 | 0 6px 20px 0 rgba(0, 0, 0, 0.19);
17 | }
18 |
19 | .shadow-z-3 {
20 | box-shadow:
21 | 0 12px 15px 0 rgba(0, 0, 0, 0.24),
22 | 0 17px 50px 0 rgba(0, 0, 0, 0.19);
23 | }
24 |
25 | .shadow-z-4 {
26 | box-shadow:
27 | 0 16px 28px 0 rgba(0, 0, 0, 0.22),
28 | 0 25px 55px 0 rgba(0, 0, 0, 0.21);
29 | }
30 |
31 | .shadow-z-5 {
32 | box-shadow:
33 | 0 27px 24px 0 rgba(0, 0, 0, 0.2),
34 | 0 40px 77px 0 rgba(0, 0, 0, 0.22);
35 | }
36 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_tabs.less:
--------------------------------------------------------------------------------
1 | .nav-tabs {
2 | background: @primary;
3 | > li {
4 | > a {
5 | color: #FFFFFF;
6 | border: 0;
7 | margin: 0;
8 | &:hover {
9 | background-color: transparent;
10 | border: 0;
11 | }
12 | }
13 | & > a, & > a:hover, & > a:focus {
14 | background-color: transparent !important;
15 | border: 0 !important;
16 | color: #FFFFFF !important;
17 | font-weight: 500;
18 | }
19 | &.disabled > a, &.disabled > a:hover {
20 | color: rgba(255,255,255,0.5);
21 | }
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_togglebutton.less:
--------------------------------------------------------------------------------
1 | .togglebutton {
2 | vertical-align: middle;
3 | &, label, input, .toggle {
4 | user-select: none;
5 | }
6 | label {
7 | font-weight: 400;
8 | cursor: pointer;
9 | // Hide original checkbox
10 | input[type=checkbox] {
11 | opacity: 0;
12 | width: 0;
13 | height:0;
14 | }
15 | // Switch bg off and disabled
16 | .toggle,
17 | input[type=checkbox][disabled] + .toggle {
18 | content: "";
19 | display: inline-block;
20 | width: 30px;
21 | height: 15px;
22 | background-color: rgba(80, 80, 80, 0.7);
23 | border-radius: 15px;
24 | margin-right: 10px;
25 | transition: background 0.3s ease;
26 | vertical-align: middle;
27 | }
28 | // Handle off
29 | .toggle:after {
30 | content: "";
31 | display: inline-block;
32 | width: 20px;
33 | height: 20px;
34 | background-color: #F1F1F1;
35 | border-radius: 20px;
36 | position: relative;
37 | box-shadow: 0 1px 3px 1px rgba(0,0,0,0.4);
38 | left: -5px;
39 | top: -2px;
40 | transition: left 0.3s ease, background 0.3s ease, box-shadow 0.1s ease;
41 | }
42 | // Handle disabled
43 | input[type=checkbox][disabled] + .toggle:after,
44 | input[type=checkbox][disabled]:checked + .toggle:after{
45 | background-color: #BDBDBD;
46 | }
47 | // Ripple off and disabled
48 | input[type=checkbox] + .toggle:active:after,
49 | input[type=checkbox][disabled] + .toggle:active:after {
50 | box-shadow: 0 1px 3px 1px rgba(0,0,0,0.4), 0 0 0 15px rgba(0, 0, 0, 0.1);
51 | }
52 | input[type=checkbox]:checked + .toggle:after {
53 | left: 15px;
54 | }
55 | }
56 |
57 | // Switch bg on
58 | .generic-variations(~" label input[type=checkbox]:checked + .toggle", @primary, {
59 | background-color: fade(@material-color, 50%);
60 | });
61 | // Handle on
62 | .variations(~" label input[type=checkbox]:checked + .toggle:after", background-color, @primary);
63 | // Ripple on
64 | .generic-variations(~" label input[type=checkbox]:checked + .toggle:active:after", @primary, {
65 | box-shadow: 0 1px 3px 1px rgba(0,0,0,0.4), 0 0 0 15px fade(@material-color, 10%);
66 | });
67 | }
68 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_variables.less:
--------------------------------------------------------------------------------
1 | // material icons path
2 | @material-font-path: "../fonts";
3 |
4 | // Bootstrap shades
5 | @primary: @teal;
6 | @success: @green;
7 | @info: @light-blue;
8 | @warning: @deep-orange;
9 | @danger: @red;
10 |
11 | @brand-primary: @primary;
12 | @brand-success: @success;
13 | @brand-danger: @danger;
14 | @brand-warning: @warning;
15 | @brand-info: @info;
16 |
17 | // Typography elements for Material
18 | @darkbg-text: rgba(255,255,255,0.84);
19 | @lightbg-text: rgba(0,0,0,0.84);
20 | @icon-color: rgba(0,0,0,0.5);
21 |
22 |
23 | // Bootstrap variables
24 | @body-bg: #EEEEEE;
25 |
26 | @btn-default: transparent;
27 | @btn-default-text: @lightbg-text;
28 |
29 | @btn-primary: @primary;
30 | @btn-primary-text: @darkbg-text;
31 |
32 | @btn-success: @success;
33 | @btn-success-text: @darkbg-text;
34 |
35 | @btn-info: @info;
36 | @btn-info-text: @darkbg-text;
37 |
38 | @btn-warning: @warning;
39 | @btn-warning-text: @darkbg-text;
40 |
41 | @btn-danger: @danger;
42 | @btn-danger-text: @darkbg-text;
43 |
44 | @input-unchecked: rgba(137, 137, 137, 0.3);
45 | @input-checked: rgba(15, 157, 88, 0.3);
46 |
47 | @radio-default: @lightbg-text;
48 | @radio-primary: @primary;
49 | @radio-success: @success;
50 | @radio-info: @info;
51 | @radio-warning: @warning;
52 | @radio-danger: @danger;
53 |
54 | @input-danger: @danger;
55 | @input-default: @primary;
56 | @input-warning: @warning;
57 | @input-success: @success;
58 | @input-info: @info;
59 |
60 | @alert-success: @success;
61 | @alert-info: @info;
62 | @alert-warning: @warning;
63 | @alert-danger: @danger;
64 |
65 | @progress-success: @success;
66 | @progress-info: @info;
67 | @progress-warning: @warning;
68 | @progress-danger: @danger;
69 |
70 | // Global Material variables
71 | @material-border-radius: 2px;
72 | @input-underline-color: #D2D2D2;
73 |
74 | // Card
75 | @card-body-text: @lightbg-text;
76 | @card-body-background: #fff;
77 | @card-image-headline: #fff;
78 |
79 | @text-disabled: #a8a8a8;
80 | @background-disabled: #eaeaea;
81 |
82 | // Checkboxes
83 | @checkbox-size: 20px;
84 | @checkbox-animation-ripple: 500ms;
85 | @checkbox-animation-check: 0.3s;
86 |
87 | // Popovers and Popups
88 | @popover-background: rgba(101, 101, 101, 0.9);
89 | @popover-color: #ececec;
90 |
--------------------------------------------------------------------------------
/resources/assets/less/material/_welljumbo.less:
--------------------------------------------------------------------------------
1 | body, .container, .container-fluid {
2 |
3 | .well, .well:not([class^="well well-material-"]) {
4 | &, .form-control {
5 | color: @lightbg-text;
6 | }
7 | .floating-label {
8 | color: #7e7e7e;
9 | }
10 | .form-control {
11 | &::-webkit-input-placeholder {
12 | color: #7e7e7e;
13 | }
14 | &::-moz-placeholder {
15 | color: #7e7e7e;
16 | opacity: 1;
17 | }
18 | &:-ms-input-placeholder {
19 | color: #7e7e7e;
20 | }
21 | }
22 | .option, .create {
23 | color: @lightbg-text;
24 | }
25 | }
26 | .well.well-sm {
27 | padding: 10px;
28 | }
29 | .well.well-lg {
30 | padding: 26px;
31 | }
32 |
33 | [class^="well well-material-"] {
34 | &, .form-control, .floating-label {
35 | color: @darkbg-text;
36 | }
37 | .form-control {
38 | border-bottom-color: @darkbg-text;
39 | &::-webkit-input-placeholder {
40 | color: @darkbg-text;
41 | }
42 | &::-moz-placeholder {
43 | color: @darkbg-text;
44 | opacity: 1;
45 | }
46 | &:-ms-input-placeholder {
47 | color: @darkbg-text;
48 | }
49 | }
50 | // Rule to fix selectize plugin
51 | .option, .create {
52 | color: @lightbg-text;
53 | }
54 | }
55 |
56 | .well, .jumbotron {
57 |
58 | background-color: #fff;
59 | padding: 19px;
60 | margin-bottom: 20px;
61 | .shadow-z-2();
62 | border-radius: 2px;
63 | border: 0;
64 | p {
65 | font-weight: 300;
66 | }
67 |
68 | .variations(~"", background-color, #FFF);
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/resources/assets/less/material/material-fullpalette.less:
--------------------------------------------------------------------------------
1 | @import "material.less";
2 | @import "_mixins-fullpalette.less";
3 |
--------------------------------------------------------------------------------
/resources/assets/less/material/material.less:
--------------------------------------------------------------------------------
1 | @import "_variables.less";
2 | @import "_colors.less";
3 | @import "_mixins.less";
4 | @import "_icons-material-design.less";
5 |
6 | body {
7 | background-color: @body-bg;
8 | &.inverse {
9 | background: #333333;
10 | &, .form-control {
11 | color: @darkbg-text;
12 | }
13 | .modal,
14 | .panel-default,
15 | .card {
16 | &,
17 | .form-control {
18 | background-color: initial;
19 | color: initial;
20 | }
21 | }
22 |
23 | }
24 | }
25 |
26 |
27 | body, h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4 {
28 | font-family: "RobotoDraft", "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif;
29 | font-weight: 300;
30 | }
31 |
32 | h5, h6{
33 | font-weight: 400;
34 | }
35 |
36 | a, a:hover, a:focus {
37 | color: @primary;
38 | }
39 |
40 | // Well and Jumbotrons
41 | @import "_welljumbo.less";
42 |
43 | // Buttons
44 | @import "_buttons.less";
45 |
46 | // Checkboxes
47 | @import "_checkboxes.less";
48 |
49 | // Toggle buttons
50 | @import "_togglebutton.less";
51 |
52 | // Radios
53 | @import "_radios.less";
54 |
55 | // Text inputs
56 | @import "_inputs.less";
57 |
58 | legend {
59 | border-bottom: 0;
60 | }
61 |
62 | // Lists
63 | @import "_lists.less";
64 |
65 | // Navbar
66 | @import "_navbar.less";
67 |
68 | .dropdown-menu {
69 | border: 0;
70 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26);
71 | .divider {
72 | background-color: rgba(229, 229, 229, 0.12);
73 | }
74 | li {
75 | overflow: hidden;
76 | position: relative;
77 | a:hover {
78 | background-color: transparent;
79 | color: @primary;
80 | }
81 | }
82 | .variations(~" li a:hover", color, @primary);
83 | }
84 |
85 | // Alerts
86 | @import "_alerts.less";
87 |
88 | // Progress bar
89 | @import "_progress.less";
90 |
91 | // Typography
92 | .text-warning {
93 | color: @btn-warning;
94 | }
95 | .text-primary {
96 | color: @btn-primary;
97 | }
98 | .text-danger {
99 | color: @btn-danger;
100 | }
101 | .text-success {
102 | color: @btn-success;
103 | }
104 | .text-info {
105 | color: @btn-info;
106 | }
107 |
108 | @import "_tabs.less";
109 |
110 | @import "_popups.less";
111 |
112 | @import "_icons.less";
113 |
114 | @import "_cards.less";
115 |
116 | @import "_dialogs.less";
117 |
118 | @import "_labels.less";
119 |
120 | @import "_panels.less";
121 |
122 | @import "_dividers.less";
123 |
124 | // Prevent highlight on mobile
125 | * {
126 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
127 | -webkit-tap-highlight-color: transparent;
128 | &:focus {
129 | outline: 0;
130 | }
131 | }
132 |
133 |
134 | // External plugins
135 | @import "_plugin-snackbarjs.less";
136 | @import "_plugin-nouislider.less";
137 | @import "_plugin-selectize.less";
138 | @import "_plugin-dropdownjs.less";
139 |
140 | // Material shadows
141 | // Place them on bottom of stylesheet to increase the importance of it and override other same-specificity selectors
142 | @import "_shadows.less";
143 |
--------------------------------------------------------------------------------
/resources/assets/less/material/ripples.less:
--------------------------------------------------------------------------------
1 | .withripple {
2 | position: relative;
3 | }
4 | .ripple-wrapper {
5 | position: absolute;
6 | top: 0;
7 | left: 0;
8 | z-index: 1;
9 | width: 100%;
10 | height: 100%;
11 | overflow: hidden;
12 | border-radius: inherit;
13 | pointer-events: none;
14 | }
15 | .ripple {
16 | position: absolute;
17 | width: 20px;
18 | height: 20px;
19 | margin-left: -10px;
20 | margin-top: -10px;
21 | border-radius: 100%;
22 | background-color: rgba(0,0,0,0.05);
23 | transform: scale(1);
24 | transform-origin: 50%;
25 | opacity: 0;
26 | pointer-events: none;
27 | }
28 | .ripple.ripple-on {
29 | transition: opacity 0.15s ease-in 0s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1) 0.1s;
30 | opacity: 0.1;
31 | }
32 | .ripple.ripple-out {
33 | transition: opacity 0.1s linear 0s !important;
34 | opacity: 0;
35 | }
36 |
--------------------------------------------------------------------------------
/resources/assets/less/material/roboto.less:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'RobotoDraft';
3 | font-style: normal;
4 | font-weight: 400;
5 | //src: local('RobotoDraft'), local('RobotoDraft-Regular'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/robotodraft/v1/0xES5Sl_v6oyT7dAKuoni4gp9Q8gbYrhqGlRav_IXfk.woff2) format('woff2'), url(https://fonts.gstatic.com/s/robotodraft/v1/0xES5Sl_v6oyT7dAKuoni7rIa-7acMAeDBVuclsi6Gc.woff) format('woff');
6 | src: local('RobotoDraft'),
7 | local('RobotoDraft-Regular'),
8 | local('Roboto-Regular'),
9 | url(../fonts/RobotoDraftRegular.woff2) format('woff2'),
10 | url(../fonts/RobotoDraftRegular.woff) format('woff');
11 | }
12 |
13 | @font-face {
14 | font-family: 'RobotoDraft';
15 | font-style: normal;
16 | font-weight: 500;
17 | //src: local('RobotoDraft Medium'), local('RobotoDraft-Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwXJuJo8UJJfpGKt7pXjBv4s.woff2) format('woff2'), url(https://fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwaTA90I55Xt7owhZwpPnMsc.woff) format('woff');
18 | src: local('RobotoDraft Medium'),
19 | local('RobotoDraft-Medium'),
20 | local('Roboto-Medium'),
21 | url(../fonts/RobotoDraftMedium.woff2) format('woff2'),
22 | url(../fonts/RobotoDraftMedium.woff) format('woff');
23 | }
24 |
25 | @font-face {
26 | font-family: 'RobotoDraft';
27 | font-style: normal;
28 | font-weight: 700;
29 | //src: local('RobotoDraft Bold'), local('RobotoDraft-Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-Vwf79_ZuUxCigM2DespTnFaw.woff2) format('woff2'), url(https://fonts.gstatic.com/s/robotodraft/v1/u0_CMoUf3y3-4Ss4ci-VwRbnBKKEOwRKgsHDreGcocg.woff) format('woff');
30 | src: local('RobotoDraft Bold'),
31 | local('RobotoDraft-Bold'),
32 | local('Roboto-Bold'),
33 | url(../fonts/RobotoDraftBold.woff2) format('woff2'),
34 | url(../fonts/RobotoDraftBold.woff) format('woff');
35 | }
36 |
37 | @font-face {
38 | font-family: 'RobotoDraft';
39 | font-style: italic;
40 | font-weight: 400;
41 | //src: local('RobotoDraft Italic'), local('RobotoDraft-Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/robotodraft/v1/er-TIW55l9KWsTS1x9bTfgeOulFbQKHxPa89BaxZzA0.woff2) format('woff2'), url(https://fonts.gstatic.com/s/robotodraft/v1/er-TIW55l9KWsTS1x9bTfoo3ZslTYfJv0R05CazkwN8.woff) format('woff');
42 | src: local('RobotoDraft Italic'),
43 | local('RobotoDraft-Italic'),
44 | local('Roboto-Italic'),
45 | url(../fonts/RobotoDraftItalic.woff2) format('woff2'),
46 | url(../fonts/RobotoDraftItalic.woff) format('woff');
47 | }
48 |
--------------------------------------------------------------------------------
/resources/assets/less/sb/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 |
--------------------------------------------------------------------------------
/resources/assets/less/sb/sb-admin-2.less:
--------------------------------------------------------------------------------
1 | @import "variables.less";
2 | @import "mixins.less";
3 |
4 | // Global Styles
5 |
6 | body {
7 | background-color: @gray-lightest;
8 | }
9 |
10 | // Wrappers
11 |
12 | #wrapper {
13 | width: 100%;
14 | }
15 |
16 | #page-wrapper {
17 | padding: 0 15px;
18 | min-height: 568px;
19 | background-color: white;
20 | }
21 |
22 | @media(min-width:768px) {
23 | #page-wrapper {
24 | position: inherit;
25 | margin: 0 0 0 250px;
26 | padding: 0 30px;
27 | border-left: 1px solid darken(@gray-lightest, 6.5%);
28 | }
29 | }
30 |
31 | // Navigation
32 |
33 | // --Topbar
34 |
35 | .navbar-top-links {
36 | margin-right: 0;
37 | }
38 |
39 | .navbar-top-links li {
40 | display: inline-block;
41 | }
42 |
43 | .navbar-top-links li:last-child {
44 | margin-right: 15px;
45 | }
46 |
47 | .navbar-top-links li a {
48 | padding: 15px;
49 | min-height: 50px;
50 | }
51 |
52 | .navbar-top-links .dropdown-menu li {
53 | display: block;
54 | }
55 |
56 | .navbar-top-links .dropdown-menu li:last-child {
57 | margin-right: 0;
58 | }
59 |
60 | .navbar-top-links .dropdown-menu li a {
61 | padding: 3px 20px;
62 | min-height: 0;
63 | }
64 |
65 | .navbar-top-links .dropdown-menu li a div {
66 | white-space: normal;
67 | }
68 |
69 | .navbar-top-links .dropdown-messages,
70 | .navbar-top-links .dropdown-tasks,
71 | .navbar-top-links .dropdown-alerts {
72 | width: 310px;
73 | min-width: 0;
74 | }
75 |
76 | .navbar-top-links .dropdown-messages {
77 | margin-left: 5px;
78 | }
79 |
80 | .navbar-top-links .dropdown-tasks {
81 | margin-left: -59px;
82 | }
83 |
84 | .navbar-top-links .dropdown-alerts {
85 | margin-left: -123px;
86 | }
87 |
88 | .navbar-top-links .dropdown-user {
89 | right: 0;
90 | left: auto;
91 | }
92 |
93 | // --Sidebar
94 |
95 | .sidebar {
96 | .sidebar-nav.navbar-collapse {
97 | padding-left: 0;
98 | padding-right: 0;
99 | }
100 | }
101 |
102 | .sidebar .sidebar-search {
103 | padding: 15px;
104 | }
105 |
106 | .sidebar ul li {
107 | border-bottom: 1px solid darken(@gray-lightest, 6.5%);
108 | a {
109 | &.active {
110 | background-color: @gray-lighter;
111 | }
112 | }
113 | }
114 |
115 | .sidebar .arrow {
116 | float: right;
117 | }
118 |
119 | .sidebar .fa.arrow:before {
120 | content: "\f104";
121 | }
122 |
123 | .sidebar .active > a > .fa.arrow:before {
124 | content: "\f107";
125 | }
126 |
127 | .sidebar .nav-second-level li,
128 | .sidebar .nav-third-level li {
129 | border-bottom: none !important;
130 | }
131 |
132 | .sidebar .nav-second-level li a {
133 | padding-left: 37px;
134 | }
135 |
136 | .sidebar .nav-third-level li a {
137 | padding-left: 52px;
138 | }
139 |
140 | @media(min-width:768px) {
141 | .sidebar {
142 | z-index: 1;
143 | position: absolute;
144 | width: 250px;
145 | margin-top: 51px;
146 | }
147 |
148 | .navbar-top-links .dropdown-messages,
149 | .navbar-top-links .dropdown-tasks,
150 | .navbar-top-links .dropdown-alerts {
151 | margin-left: auto;
152 | }
153 | }
154 |
155 | // Buttons
156 |
157 | .btn-outline {
158 | color: inherit;
159 | background-color: transparent;
160 | transition: all .5s;
161 | }
162 |
163 | .btn-primary.btn-outline {
164 | color: @brand-primary;
165 | }
166 |
167 | .btn-success.btn-outline {
168 | color: @brand-success;
169 | }
170 |
171 | .btn-info.btn-outline {
172 | color: @brand-info;
173 | }
174 |
175 | .btn-warning.btn-outline {
176 | color: @brand-warning;
177 | }
178 |
179 | .btn-danger.btn-outline {
180 | color: @brand-danger;
181 | }
182 |
183 | .btn-primary.btn-outline:hover,
184 | .btn-success.btn-outline:hover,
185 | .btn-info.btn-outline:hover,
186 | .btn-warning.btn-outline:hover,
187 | .btn-danger.btn-outline:hover {
188 | color: white;
189 | }
190 |
191 | // Chat Widget
192 |
193 | .chat {
194 | margin: 0;
195 | padding: 0;
196 | list-style: none;
197 | }
198 |
199 | .chat li {
200 | margin-bottom: 10px;
201 | padding-bottom: 5px;
202 | border-bottom: 1px dotted @gray-light;
203 | }
204 |
205 | .chat li.left .chat-body {
206 | margin-left: 60px;
207 | }
208 |
209 | .chat li.right .chat-body {
210 | margin-right: 60px;
211 | }
212 |
213 | .chat li .chat-body p {
214 | margin: 0;
215 | }
216 |
217 | .panel .slidedown .glyphicon,
218 | .chat .glyphicon {
219 | margin-right: 5px;
220 | }
221 |
222 | .chat-panel .panel-body {
223 | height: 350px;
224 | overflow-y: scroll;
225 | }
226 |
227 | // Login Page
228 |
229 | .login-panel {
230 | margin-top: 25%;
231 | }
232 |
233 | // Flot Charts Containers
234 |
235 | .flot-chart {
236 | display: block;
237 | height: 400px;
238 | }
239 |
240 | .flot-chart-content {
241 | width: 100%;
242 | height: 100%;
243 | }
244 |
245 | // DataTables Overrides
246 |
247 | table.dataTable thead .sorting,
248 | table.dataTable thead .sorting_asc,
249 | table.dataTable thead .sorting_desc,
250 | table.dataTable thead .sorting_asc_disabled,
251 | table.dataTable thead .sorting_desc_disabled {
252 | background: transparent;
253 | }
254 |
255 | table.dataTable thead .sorting_asc:after {
256 | content: "\f0de";
257 | float: right;
258 | font-family: fontawesome;
259 | }
260 |
261 | table.dataTable thead .sorting_desc:after {
262 | content: "\f0dd";
263 | float: right;
264 | font-family: fontawesome;
265 | }
266 |
267 | table.dataTable thead .sorting:after {
268 | content: "\f0dc";
269 | float: right;
270 | font-family: fontawesome;
271 | color: rgba(50,50,50,.5);
272 | }
273 |
274 | // Circle Buttons
275 |
276 | .btn-circle {
277 | width: 30px;
278 | height: 30px;
279 | padding: 6px 0;
280 | border-radius: 15px;
281 | text-align: center;
282 | font-size: 12px;
283 | line-height: 1.428571429;
284 | }
285 |
286 | .btn-circle.btn-lg {
287 | width: 50px;
288 | height: 50px;
289 | padding: 10px 16px;
290 | border-radius: 25px;
291 | font-size: 18px;
292 | line-height: 1.33;
293 | }
294 |
295 | .btn-circle.btn-xl {
296 | width: 70px;
297 | height: 70px;
298 | padding: 10px 16px;
299 | border-radius: 35px;
300 | font-size: 24px;
301 | line-height: 1.33;
302 | }
303 |
304 | // Grid Demo Elements
305 |
306 | .show-grid [class^="col-"] {
307 | padding-top: 10px;
308 | padding-bottom: 10px;
309 | border: 1px solid #ddd;
310 | background-color: #eee !important;
311 | }
312 |
313 | .show-grid {
314 | margin: 15px 0;
315 | }
316 |
317 | // Custom Colored Panels
318 |
319 | .huge {
320 | font-size: 40px;
321 | }
322 |
323 | .panel-green {
324 | border-color: @brand-success;
325 | .panel-heading {
326 | border-color: @brand-success;
327 | color: white;
328 | background-color: @brand-success;
329 | }
330 | a {
331 | color: @brand-success;
332 | &:hover {
333 | color: darken(@brand-success, 15%);
334 | }
335 | }
336 | }
337 |
338 | .panel-red {
339 | border-color: @brand-danger;
340 | .panel-heading {
341 | border-color: @brand-danger;
342 | color: white;
343 | background-color: @brand-danger;
344 | }
345 | a {
346 | color: @brand-danger;
347 | &:hover {
348 | color: darken(@brand-danger, 15%);
349 | }
350 | }
351 | }
352 |
353 | .panel-yellow {
354 | border-color: @brand-warning;
355 | .panel-heading {
356 | border-color: @brand-warning;
357 | color: white;
358 | background-color: @brand-warning;
359 | }
360 | a {
361 | color: @brand-warning;
362 | &:hover {
363 | color: darken(@brand-warning, 15%);
364 | }
365 | }
366 | }
367 |
--------------------------------------------------------------------------------
/resources/assets/less/sb/variables.less:
--------------------------------------------------------------------------------
1 | // Variables
2 |
3 | @gray-darker: lighten(#000, 13.5%);
4 | @gray-dark: lighten(#000, 20%);
5 | @gray: lighten(#000, 33.5%);
6 | @gray-light: lighten(#000, 60%);
7 | @gray-lighter: lighten(#000, 93.5%);
8 | @gray-lightest: lighten(#000, 97.25%);
9 | @brand-primary: #428bca;
10 | @brand-success: #5cb85c;
11 | @brand-info: #5bc0de;
12 | @brand-warning: #f0ad4e;
13 | @brand-danger: #d9534f;
14 |
15 |
--------------------------------------------------------------------------------
/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Passwords must be at least six characters and match the confirmation.',
17 | 'user' => "We can't find a user with that e-mail address.",
18 | 'token' => 'This password reset token is invalid.',
19 | 'sent' => 'We have e-mailed your password reset link!',
20 | 'reset' => 'Your password has been reset!',
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/resources/lang/en/validation.php:
--------------------------------------------------------------------------------
1 | 'The :attribute must be accepted.',
17 | 'active_url' => 'The :attribute is not a valid URL.',
18 | 'after' => 'The :attribute must be a date after :date.',
19 | 'alpha' => 'The :attribute may only contain letters.',
20 | 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
21 | 'alpha_num' => 'The :attribute may only contain letters and numbers.',
22 | 'array' => 'The :attribute must be an array.',
23 | 'before' => 'The :attribute must be a date before :date.',
24 | 'between' => [
25 | 'numeric' => 'The :attribute must be between :min and :max.',
26 | 'file' => 'The :attribute must be between :min and :max kilobytes.',
27 | 'string' => 'The :attribute must be between :min and :max characters.',
28 | 'array' => 'The :attribute must have between :min and :max items.',
29 | ],
30 | 'boolean' => 'The :attribute field must be true or false.',
31 | 'confirmed' => 'The :attribute confirmation does not match.',
32 | 'date' => 'The :attribute is not a valid date.',
33 | 'date_format' => 'The :attribute does not match the format :format.',
34 | 'different' => 'The :attribute and :other must be different.',
35 | 'digits' => 'The :attribute must be :digits digits.',
36 | 'digits_between' => 'The :attribute must be between :min and :max digits.',
37 | 'email' => 'The :attribute must be a valid email address.',
38 | 'filled' => 'The :attribute field is required.',
39 | 'exists' => 'The selected :attribute is invalid.',
40 | 'image' => 'The :attribute must be an image.',
41 | 'in' => 'The selected :attribute is invalid.',
42 | 'integer' => 'The :attribute must be an integer.',
43 | 'ip' => 'The :attribute must be a valid IP address.',
44 | 'max' => [
45 | 'numeric' => 'The :attribute may not be greater than :max.',
46 | 'file' => 'The :attribute may not be greater than :max kilobytes.',
47 | 'string' => 'The :attribute may not be greater than :max characters.',
48 | 'array' => 'The :attribute may not have more than :max items.',
49 | ],
50 | 'mimes' => 'The :attribute must be a file of type: :values.',
51 | 'min' => [
52 | 'numeric' => 'The :attribute must be at least :min.',
53 | 'file' => 'The :attribute must be at least :min kilobytes.',
54 | 'string' => 'The :attribute must be at least :min characters.',
55 | 'array' => 'The :attribute must have at least :min items.',
56 | ],
57 | 'not_in' => 'The selected :attribute is invalid.',
58 | 'numeric' => 'The :attribute must be a number.',
59 | 'regex' => 'The :attribute format is invalid.',
60 | 'required' => 'The :attribute field is required.',
61 | 'required_if' => 'The :attribute field is required when :other is :value.',
62 | 'required_with' => 'The :attribute field is required when :values is present.',
63 | 'required_with_all' => 'The :attribute field is required when :values is present.',
64 | 'required_without' => 'The :attribute field is required when :values is not present.',
65 | 'required_without_all' => 'The :attribute field is required when none of :values are present.',
66 | 'same' => 'The :attribute and :other must match.',
67 | 'size' => [
68 | 'numeric' => 'The :attribute must be :size.',
69 | 'file' => 'The :attribute must be :size kilobytes.',
70 | 'string' => 'The :attribute must be :size characters.',
71 | 'array' => 'The :attribute must contain :size items.',
72 | ],
73 | 'timezone' => 'The :attribute must be a valid zone.',
74 | 'unique' => 'The :attribute has already been taken.',
75 | 'url' => 'The :attribute format is invalid.',
76 |
77 | /*
78 | |--------------------------------------------------------------------------
79 | | Custom Validation Language Lines
80 | |--------------------------------------------------------------------------
81 | |
82 | | Here you may specify custom validation messages for attributes using the
83 | | convention "attribute.rule" to name the lines. This makes it quick to
84 | | specify a specific custom language line for a given attribute rule.
85 | |
86 | */
87 |
88 | 'custom' => [
89 | 'attribute-name' => [
90 | 'rule-name' => 'custom-message',
91 | ],
92 | ],
93 |
94 | /*
95 | |--------------------------------------------------------------------------
96 | | Custom Validation Attributes
97 | |--------------------------------------------------------------------------
98 | |
99 | | The following language lines are used to swap attribute place-holders
100 | | with something more reader friendly such as E-Mail Address instead
101 | | of "email". This simply helps us make messages a little cleaner.
102 | |
103 | */
104 |
105 | 'attributes' => [],
106 |
107 | ];
108 |
--------------------------------------------------------------------------------
/resources/views/errors/503.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Be right back.
5 |
6 |
7 |
8 |
39 |
40 |
41 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/resources/views/home.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | Vue
14 |
15 |
16 |
17 |
18 |
19 |
20 |
24 |
25 |
26 |
27 |
28 |
29 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/resources/views/vendor/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/resources/views/vendor/.gitkeep
--------------------------------------------------------------------------------
/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' and file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/storage/database.sqlite:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kuroski/Laravel-Vue-Boilerplate/69609a9aacab8874ae12d1ec57d1235117974fc2/storage/database.sqlite
--------------------------------------------------------------------------------
/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | routes.php
3 | compiled.php
4 | services.json
5 | events.scanned.php
6 | routes.scanned.php
7 | down
8 |
--------------------------------------------------------------------------------
/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
--------------------------------------------------------------------------------
/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/tests/ExampleTest.php:
--------------------------------------------------------------------------------
1 | visit('/')
17 | ->see('Laravel 5');
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
22 |
23 | return $app;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------