├── .env.example ├── .gitattributes ├── .gitignore ├── .gitignore.bak ├── app ├── Classes │ ├── DeleteCrud.php │ └── DeleteVueCrud.php ├── Console │ └── Kernel.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── Auth │ │ │ ├── ForgotPasswordController.php │ │ │ ├── LoginController.php │ │ │ ├── RegisterController.php │ │ │ └── ResetPasswordController.php │ │ ├── Controller.php │ │ ├── VueCrudController.php │ │ └── VueCrudController2 .php │ ├── Kernel.php │ ├── Middleware │ │ ├── EncryptCookies.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ └── VerifyCsrfToken.php │ └── Requests │ │ ├── Request.php │ │ └── VueCrudRequest.php ├── Jobs │ ├── Job.php │ └── VueCrudSaveJob.php ├── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ └── RouteServiceProvider.php ├── User.php └── VueCrud.php ├── artisan ├── bootstrap ├── app.php ├── autoload.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── database.php ├── filesystems.php ├── mail.php ├── queue.php ├── services.php ├── session.php └── view.php ├── database ├── .gitignore ├── factories │ └── ModelFactory.php ├── migrations │ └── 2017_04_07_144522_vue_crud.php └── seeds │ └── DatabaseSeeder.php ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── assets │ ├── css │ │ ├── animate.min.css │ │ ├── app.css │ │ ├── bootstrap.min.css │ │ ├── demo.css │ │ ├── emptypage.css │ │ ├── font-awesome.min.css │ │ ├── font-awesome.min.css.bak │ │ ├── hint.css │ │ ├── paper-dashboard.css │ │ └── themify-icons.css │ ├── fonts │ │ ├── T-qN9Yh40TTJeenUALkjgg.woff2 │ │ ├── fontawesome-webfont(1).eot │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── themify.eot │ │ ├── themify.svg │ │ ├── themify.ttf │ │ ├── themify.woff │ │ └── z6c3Zzm51I2zB_Gi7146Bg.woff2 │ ├── images │ │ ├── arrowup.gif │ │ ├── btnclose.jpg │ │ ├── btnclose.png │ │ ├── btnclose2.png │ │ ├── deleteicon1.jpg │ │ ├── editicon1.jpg │ │ ├── facebook.png │ │ ├── icongallery1.jpg │ │ ├── icongallery2.jpg │ │ ├── iconmessage_1.jpg │ │ ├── iconmessage_2.jpg │ │ ├── loadings │ │ │ ├── loading-balls.svg │ │ │ ├── loading-bars.svg │ │ │ ├── loading-bubbles.svg │ │ │ ├── loading-bubbles3.svg │ │ │ ├── loading-cubes.svg │ │ │ ├── loading-cylon-red.svg │ │ │ ├── loading-cylon.svg │ │ │ ├── loading-spin.svg │ │ │ ├── loading-spin.svg.bak │ │ │ ├── loading-spinning-bubbles.svg │ │ │ └── loading-spokes.svg │ │ ├── logo.jpg │ │ ├── select-arrow.jpg │ │ └── select-arrow.png │ └── scripts │ │ ├── bootstrap │ │ ├── bootstrap-checkbox-radio.js │ │ ├── bootstrap-notify.js │ │ └── bootstrap.min.js │ │ └── jquery-1.9.0.min.js ├── favicon.ico ├── index.php ├── robots.txt └── web.config ├── readme.md ├── readme.md.bak ├── resources ├── assets │ ├── js │ │ ├── app.js │ │ ├── bootstrap.js │ │ └── components │ │ │ └── Example.vue │ └── sass │ │ ├── _variables.scss │ │ └── app.scss ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php └── views │ ├── display_all_post_category.blade.php │ ├── errors.blade.php │ ├── flash.blade.php │ ├── layout │ └── template.blade.php │ ├── vue_crud.blade.php │ └── welcome.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── server.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── CreatesApplication.php ├── Feature │ └── ExampleTest.php ├── TestCase.php └── Unit │ └── ExampleTest.php ├── webpack.mix.js └── yarn.lock /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_LOG_LEVEL=debug 6 | APP_URL=http://localhost 7 | 8 | DB_CONNECTION=mysql 9 | DB_HOST=127.0.0.1 10 | DB_PORT=3306 11 | DB_DATABASE=homestead 12 | DB_USERNAME=homestead 13 | DB_PASSWORD=secret 14 | 15 | BROADCAST_DRIVER=log 16 | CACHE_DRIVER=file 17 | SESSION_DRIVER=file 18 | QUEUE_DRIVER=sync 19 | 20 | REDIS_HOST=127.0.0.1 21 | REDIS_PASSWORD=null 22 | REDIS_PORT=6379 23 | 24 | MAIL_DRIVER=smtp 25 | MAIL_HOST=smtp.mailtrap.io 26 | MAIL_PORT=2525 27 | MAIL_USERNAME=null 28 | MAIL_PASSWORD=null 29 | MAIL_ENCRYPTION=null 30 | 31 | PUSHER_APP_ID= 32 | PUSHER_APP_KEY= 33 | PUSHER_APP_SECRET= 34 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | /.idea 7 | /.vagrant 8 | Homestead.json 9 | Homestead.yaml 10 | .env 11 | 12 | 13 | /vendor 14 | /node_modules 15 | /public/storage 16 | Homestead.yaml 17 | Homestead.json 18 | .env 19 | -------------------------------------------------------------------------------- /.gitignore.bak: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | /.idea 7 | /.vagrant 8 | Homestead.json 9 | Homestead.yaml 10 | .env 11 | -------------------------------------------------------------------------------- /app/Classes/DeleteCrud.php: -------------------------------------------------------------------------------- 1 | item_to_delete = $item_to_delete; 19 | 20 | } 21 | 22 | // delete a massage category and those messages inside 23 | public function deleteItem() 24 | { 25 | $index = []; 26 | 27 | foreach($this->item_to_delete as $deleteItem) { 28 | 29 | $obj = json_decode($deleteItem); 30 | 31 | // Select where ID separeted 32 | $delete = VueCrud::where('id', $obj->id)->first(); 33 | 34 | // delete 35 | $this->delete_all($delete); 36 | // push index into index 37 | array_push($index , $obj->index); 38 | 39 | 40 | } 41 | 42 | return $index; 43 | 44 | } 45 | 46 | 47 | 48 | 49 | /********************************************************************************** 50 | DELETE ALL PHOTOS 51 | ***********************************************************************************/ 52 | protected function delete_all($item){ 53 | 54 | //delete the image 55 | $item->delete(); 56 | 57 | 58 | } 59 | 60 | 61 | 62 | 63 | 64 | } -------------------------------------------------------------------------------- /app/Classes/DeleteVueCrud.php: -------------------------------------------------------------------------------- 1 | item_to_delete = $item_to_delete; 17 | 18 | } 19 | 20 | // delete a massage category and those messages inside 21 | public function deleteItem() 22 | { 23 | $index = []; 24 | 25 | foreach($this->item_to_delete as $deleteItem) { 26 | 27 | $obj = json_decode($deleteItem); 28 | 29 | // Select where ID separeted 30 | $item = VueCrud::where('id', $obj->id)->first(); 31 | 32 | // delete the page 33 | $item->delete(); 34 | 35 | // push index into index 36 | array_push($index , $obj->index); 37 | 38 | 39 | } 40 | 41 | return $index; 42 | 43 | } 44 | 45 | 46 | 47 | 48 | 49 | 50 | } -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire') 28 | // ->hourly(); 29 | } 30 | 31 | /** 32 | * Register the Closure based commands for the application. 33 | * 34 | * @return void 35 | */ 36 | protected function commands() 37 | { 38 | require base_path('routes/console.php'); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 60 | return response()->json(['error' => 'Unauthenticated.'], 401); 61 | } 62 | 63 | return redirect()->guest(route('login')); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ForgotPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/LoginController.php: -------------------------------------------------------------------------------- 1 | middleware('guest', ['except' => 'logout']); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/RegisterController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 40 | } 41 | 42 | /** 43 | * Get a validator for an incoming registration request. 44 | * 45 | * @param array $data 46 | * @return \Illuminate\Contracts\Validation\Validator 47 | */ 48 | protected function validator(array $data) 49 | { 50 | return Validator::make($data, [ 51 | 'name' => 'required|max:255', 52 | 'email' => 'required|email|max:255|unique:users', 53 | 'password' => 'required|min:6|confirmed', 54 | ]); 55 | } 56 | 57 | /** 58 | * Create a new user instance after a valid registration. 59 | * 60 | * @param array $data 61 | * @return User 62 | */ 63 | protected function create(array $data) 64 | { 65 | return User::create([ 66 | 'name' => $data['name'], 67 | 'email' => $data['email'], 68 | 'password' => bcrypt($data['password']), 69 | ]); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/ResetPasswordController.php: -------------------------------------------------------------------------------- 1 | middleware('guest'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | latest()->paginate(6); 50 | 51 | 52 | $response = [ 53 | 'pagination' => [ 54 | 'total' => $items->total(), 55 | 'per_page' => $items->perPage(), 56 | 'current_page' => $items->currentPage(), 57 | 'last_page' => $items->lastPage(), 58 | 'from' => $items->firstItem(), 59 | 'to' => $items->lastItem() 60 | ], 61 | 'data' => $items 62 | ]; 63 | 64 | 65 | return response()->json($response); 66 | 67 | } 68 | 69 | 70 | /********************************************************************************** 71 | STORE 72 | ***********************************************************************************/ 73 | public function store(VueCrudRequest $request) 74 | { 75 | 76 | /* validation */ 77 | $crud = new VueCrud() ; 78 | 79 | // Dispatch a Job 80 | $new_content = $this->dispatch(new VueCrudSaveJob("create" , $crud , $request)); 81 | 82 | 83 | return response()->json([$new_content]); 84 | 85 | 86 | } 87 | 88 | 89 | 90 | /********************************************************************************** 91 | UPDATE 92 | ***********************************************************************************/ 93 | public function update(Request $request) 94 | { 95 | 96 | /* validation */ 97 | $crud = VueCrud::findOrFail(json_decode($request['id'])); 98 | 99 | // Dispatch a Job 100 | $new_content= $this->dispatch(new VueCrudSaveJob("update" , $crud , $request)); 101 | 102 | 103 | return response()->json($new_content); 104 | 105 | 106 | 107 | } 108 | 109 | 110 | /********************************************************************************** 111 | DELETE 112 | ***********************************************************************************/ 113 | public function delete(Request $request) 114 | { 115 | 116 | $value = $request['value']; 117 | 118 | /********************************************************************************** 119 | * check if the post is a single post or a multiple post , if is a single post delete only 120 | * one Item , if not , delete multiple Itens 121 | * 122 | ***********************************************************************************/ 123 | $itemsToRemove = (new DeleteCrud($value))->deleteItem(); 124 | 125 | 126 | return response()->json(['index' => $itemsToRemove]); 127 | } 128 | } 129 | -------------------------------------------------------------------------------- /app/Http/Controllers/VueCrudController2 .php: -------------------------------------------------------------------------------- 1 | latest()->with('countProducts')->paginate($this->items_per_page); 48 | 49 | 50 | $response = [ 51 | 'pagination' => [ 52 | 'total' => $items->total(), 53 | 'per_page' => $items->perPage(), 54 | 'current_page' => $items->currentPage(), 55 | 'last_page' => $items->lastPage(), 56 | 'from' => $items->firstItem(), 57 | 'to' => $items->lastItem() 58 | ], 59 | 'data' => $items 60 | ]; 61 | 62 | 63 | return response()->json($response); 64 | 65 | } 66 | 67 | 68 | 69 | 70 | /********************************************************************************** 71 | STORE 72 | ***********************************************************************************/ 73 | public function store(VueCrudRequest $request) 74 | { 75 | 76 | /* validation */ 77 | $post_category = new VueCrud() ; 78 | 79 | // Dispatch a Job 80 | $new_content = $this->dispatch(new VueCrudSaveJob("create" , $post_category , $request , $this->user)); 81 | 82 | 83 | return response()->json([$new_content]); 84 | 85 | 86 | 87 | } 88 | 89 | 90 | 91 | /********************************************************************************** 92 | EDIT ITEM 93 | ***********************************************************************************/ 94 | public function edit(VueCrudRequest $request) 95 | { 96 | 97 | 98 | $post_category = VueCrud::findOrFail($request['postId']); 99 | /* $post_category->fill($request->all()) ; */ 100 | 101 | $msg = $this->dispatch(new VueCrudSaveJob("update" , $post_category , $request , $this->user)); 102 | 103 | return response()->json([ 'success' => true , 'new_content' => 'title_'.$msg['title'] ], 200); 104 | 105 | 106 | 107 | } 108 | 109 | /********************************************************************************** 110 | UPDATE 111 | ***********************************************************************************/ 112 | public function update(Request $request) 113 | { 114 | 115 | /* validation */ 116 | $post_category = ProductCategory::findOrFail(json_decode($request['id'])); 117 | 118 | // Dispatch a Job 119 | $new_content= $this->dispatch(new ProductCategorySaveJob("update" , $post_category , $request , $this->user)); 120 | 121 | 122 | return response()->json($new_content); 123 | 124 | 125 | 126 | } 127 | 128 | 129 | /********************************************************************************** 130 | DELETE 131 | ***********************************************************************************/ 132 | public function delete(Request $request) 133 | { 134 | 135 | $value = $request['value']; 136 | 137 | /********************************************************************************** 138 | * check if the post is a single post or a multiple post , if is a single post delete only 139 | * one Item , if not , delete multiple Itens 140 | * 141 | ***********************************************************************************/ 142 | $itemsToRemove = (new DeleteProducCategory($value))->deleteItem(); 143 | 144 | 145 | return response()->json(['index' => $itemsToRemove]); 146 | } 147 | } 148 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 30 | \App\Http\Middleware\EncryptCookies::class, 31 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 32 | \Illuminate\Session\Middleware\StartSession::class, 33 | // \Illuminate\Session\Middleware\AuthenticateSession::class, 34 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 35 | \App\Http\Middleware\VerifyCsrfToken::class, 36 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 37 | ], 38 | 39 | 'api' => [ 40 | 'throttle:60,1', 41 | 'bindings', 42 | ], 43 | ]; 44 | 45 | /** 46 | * The application's route middleware. 47 | * 48 | * These middleware may be assigned to groups or used individually. 49 | * 50 | * @var array 51 | */ 52 | protected $routeMiddleware = [ 53 | 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 54 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 55 | 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 56 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 57 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 58 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 59 | ]; 60 | } 61 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | check()) { 21 | return redirect('/home'); 22 | } 23 | 24 | return $next($request); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | all(); 12 | 13 | // if is not an array , so json_decode() 14 | foreach ($data as $key => $form_items) { 15 | 16 | if(! is_array($form_items)){ 17 | $data[$key] = json_decode($form_items); 18 | }else{ 19 | $data[$key] = $form_items; 20 | } 21 | 22 | } 23 | 24 | return $data; 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/Http/Requests/VueCrudRequest.php: -------------------------------------------------------------------------------- 1 | 'required|min:3|max:250' , 28 | 'sub_title' => 'required|min:3|max:250' , 29 | 'description' => 'required' 30 | ]; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Jobs/Job.php: -------------------------------------------------------------------------------- 1 | action = $action; 24 | $this->vueCrud = $vueCrud; 25 | $this->vueCrudRequest = $vueCrudRequest; 26 | } 27 | 28 | /** 29 | * Execute the job. 30 | * 31 | * @return void 32 | */ 33 | public function handle() 34 | { 35 | 36 | $this->vueCrud->title = json_decode($this->vueCrudRequest['title']); 37 | $this->vueCrud->sub_title = json_decode($this->vueCrudRequest['sub_title']); 38 | $this->vueCrud->description = json_decode($this->vueCrudRequest['description']); 39 | 40 | //create 41 | $this->vueCrud->save(); 42 | 43 | return $this->action != "create" ? $this->updateTable() : $this->createTable(); 44 | } 45 | 46 | /********************************************************************************** 47 | CREATE TABLE 48 | ***********************************************************************************/ 49 | protected function createTable(){ 50 | // select last post by this user 51 | $last_post = VueCrud::getLastCreated($this->vueCrud->user_id); 52 | return ['id' => $last_post->id , 'title' => $last_post->title , 'sub_title' => $last_post->sub_title]; 53 | } 54 | 55 | /********************************************************************************** 56 | UPDATE TABLE 57 | ***********************************************************************************/ 58 | protected function updateTable(){ 59 | 60 | 61 | return ['index' => json_decode($this->vueCrudRequest['index']) , 'title' => json_decode($this->vueCrudRequest['title']) , 'sub_title' => json_decode($this->vueCrudRequest['sub_title']) ]; 62 | } 63 | } 64 | 65 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'App\Listeners\EventListener', 18 | ], 19 | ]; 20 | 21 | /** 22 | * Register any events for your application. 23 | * 24 | * @return void 25 | */ 26 | public function boot() 27 | { 28 | parent::boot(); 29 | 30 | // 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/Providers/RouteServiceProvider.php: -------------------------------------------------------------------------------- 1 | mapApiRoutes(); 39 | 40 | $this->mapWebRoutes(); 41 | 42 | // 43 | } 44 | 45 | /** 46 | * Define the "web" routes for the application. 47 | * 48 | * These routes all receive session state, CSRF protection, etc. 49 | * 50 | * @return void 51 | */ 52 | protected function mapWebRoutes() 53 | { 54 | Route::middleware('web') 55 | ->namespace($this->namespace) 56 | ->group(base_path('routes/web.php')); 57 | } 58 | 59 | /** 60 | * Define the "api" routes for the application. 61 | * 62 | * These routes are typically stateless. 63 | * 64 | * @return void 65 | */ 66 | protected function mapApiRoutes() 67 | { 68 | Route::prefix('api') 69 | ->middleware('api') 70 | ->namespace($this->namespace) 71 | ->group(base_path('routes/api.php')); 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/User.php: -------------------------------------------------------------------------------- 1 | first(); 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | 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.6.4", 9 | "laravel/framework": "5.4.*", 10 | "laravel/tinker": "~1.0" 11 | }, 12 | "require-dev": { 13 | "fzaninotto/faker": "~1.4", 14 | "mockery/mockery": "0.9.*", 15 | "phpunit/phpunit": "~5.7" 16 | }, 17 | "autoload": { 18 | "classmap": [ 19 | "database" 20 | ], 21 | "psr-4": { 22 | "App\\": "app/" 23 | } 24 | }, 25 | "autoload-dev": { 26 | "psr-4": { 27 | "Tests\\": "tests/" 28 | } 29 | }, 30 | "scripts": { 31 | "post-root-package-install": [ 32 | "php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 33 | ], 34 | "post-create-project-cmd": [ 35 | "php artisan key:generate" 36 | ], 37 | "post-install-cmd": [ 38 | "Illuminate\\Foundation\\ComposerScripts::postInstall", 39 | "php artisan optimize" 40 | ], 41 | "post-update-cmd": [ 42 | "Illuminate\\Foundation\\ComposerScripts::postUpdate", 43 | "php artisan optimize" 44 | ] 45 | }, 46 | "config": { 47 | "preferred-install": "dist", 48 | "sort-packages": true, 49 | "optimize-autoloader": true 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /config/app.php: -------------------------------------------------------------------------------- 1 | env('APP_NAME', 'Laravel'), 16 | 17 | /* 18 | |-------------------------------------------------------------------------- 19 | | Application Environment 20 | |-------------------------------------------------------------------------- 21 | | 22 | | This value determines the "environment" your application is currently 23 | | running in. This may determine how you prefer to configure various 24 | | services your application utilizes. Set this in your ".env" file. 25 | | 26 | */ 27 | 28 | 'env' => env('APP_ENV', 'production'), 29 | 30 | /* 31 | |-------------------------------------------------------------------------- 32 | | Application Debug Mode 33 | |-------------------------------------------------------------------------- 34 | | 35 | | When your application is in debug mode, detailed error messages with 36 | | stack traces will be shown on every error that occurs within your 37 | | application. If disabled, a simple generic error page is shown. 38 | | 39 | */ 40 | 41 | 'debug' => env('APP_DEBUG', false), 42 | 43 | /* 44 | |-------------------------------------------------------------------------- 45 | | Application URL 46 | |-------------------------------------------------------------------------- 47 | | 48 | | This URL is used by the console to properly generate URLs when using 49 | | the Artisan command line tool. You should set this to the root of 50 | | your application so that it is used when running Artisan tasks. 51 | | 52 | */ 53 | 54 | 'url' => env('APP_URL', 'http://localhost'), 55 | 56 | /* 57 | |-------------------------------------------------------------------------- 58 | | Application Timezone 59 | |-------------------------------------------------------------------------- 60 | | 61 | | Here you may specify the default timezone for your application, which 62 | | will be used by the PHP date and date-time functions. We have gone 63 | | ahead and set this to a sensible default for you out of the box. 64 | | 65 | */ 66 | 67 | 'timezone' => 'UTC', 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Application Locale Configuration 72 | |-------------------------------------------------------------------------- 73 | | 74 | | The application locale determines the default locale that will be used 75 | | by the translation service provider. You are free to set this value 76 | | to any of the locales which will be supported by the application. 77 | | 78 | */ 79 | 80 | 'locale' => 'en', 81 | 82 | /* 83 | |-------------------------------------------------------------------------- 84 | | Application Fallback Locale 85 | |-------------------------------------------------------------------------- 86 | | 87 | | The fallback locale determines the locale to use when the current one 88 | | is not available. You may change the value to correspond to any of 89 | | the language folders that are provided through your application. 90 | | 91 | */ 92 | 93 | 'fallback_locale' => 'en', 94 | 95 | /* 96 | |-------------------------------------------------------------------------- 97 | | Encryption Key 98 | |-------------------------------------------------------------------------- 99 | | 100 | | This key is used by the Illuminate encrypter service and should be set 101 | | to a random, 32 character string, otherwise these encrypted strings 102 | | will not be safe. Please do this before deploying an application! 103 | | 104 | */ 105 | 106 | 'key' => env('APP_KEY'), 107 | 108 | 'cipher' => 'AES-256-CBC', 109 | 110 | /* 111 | |-------------------------------------------------------------------------- 112 | | Logging Configuration 113 | |-------------------------------------------------------------------------- 114 | | 115 | | Here you may configure the log settings for your application. Out of 116 | | the box, Laravel uses the Monolog PHP logging library. This gives 117 | | you a variety of powerful log handlers / formatters to utilize. 118 | | 119 | | Available Settings: "single", "daily", "syslog", "errorlog" 120 | | 121 | */ 122 | 123 | 'log' => env('APP_LOG', 'single'), 124 | 125 | 'log_level' => env('APP_LOG_LEVEL', 'debug'), 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Autoloaded Service Providers 130 | |-------------------------------------------------------------------------- 131 | | 132 | | The service providers listed here will be automatically loaded on the 133 | | request to your application. Feel free to add your own services to 134 | | this array to grant expanded functionality to your applications. 135 | | 136 | */ 137 | 138 | 'providers' => [ 139 | 140 | /* 141 | * Laravel Framework Service Providers... 142 | */ 143 | Illuminate\Auth\AuthServiceProvider::class, 144 | Illuminate\Broadcasting\BroadcastServiceProvider::class, 145 | Illuminate\Bus\BusServiceProvider::class, 146 | Illuminate\Cache\CacheServiceProvider::class, 147 | Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 148 | Illuminate\Cookie\CookieServiceProvider::class, 149 | Illuminate\Database\DatabaseServiceProvider::class, 150 | Illuminate\Encryption\EncryptionServiceProvider::class, 151 | Illuminate\Filesystem\FilesystemServiceProvider::class, 152 | Illuminate\Foundation\Providers\FoundationServiceProvider::class, 153 | Illuminate\Hashing\HashServiceProvider::class, 154 | Illuminate\Mail\MailServiceProvider::class, 155 | Illuminate\Notifications\NotificationServiceProvider::class, 156 | Illuminate\Pagination\PaginationServiceProvider::class, 157 | Illuminate\Pipeline\PipelineServiceProvider::class, 158 | Illuminate\Queue\QueueServiceProvider::class, 159 | Illuminate\Redis\RedisServiceProvider::class, 160 | Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 161 | Illuminate\Session\SessionServiceProvider::class, 162 | Illuminate\Translation\TranslationServiceProvider::class, 163 | Illuminate\Validation\ValidationServiceProvider::class, 164 | Illuminate\View\ViewServiceProvider::class, 165 | 166 | /* 167 | * Package Service Providers... 168 | */ 169 | Laravel\Tinker\TinkerServiceProvider::class, 170 | 171 | /* 172 | * Application Service Providers... 173 | */ 174 | App\Providers\AppServiceProvider::class, 175 | App\Providers\AuthServiceProvider::class, 176 | // App\Providers\BroadcastServiceProvider::class, 177 | App\Providers\EventServiceProvider::class, 178 | App\Providers\RouteServiceProvider::class, 179 | 180 | ], 181 | 182 | /* 183 | |-------------------------------------------------------------------------- 184 | | Class Aliases 185 | |-------------------------------------------------------------------------- 186 | | 187 | | This array of class aliases will be registered when this application 188 | | is started. However, feel free to register as many as you wish as 189 | | the aliases are "lazy" loaded so they don't hinder performance. 190 | | 191 | */ 192 | 193 | 'aliases' => [ 194 | 195 | 'App' => Illuminate\Support\Facades\App::class, 196 | 'Artisan' => Illuminate\Support\Facades\Artisan::class, 197 | 'Auth' => Illuminate\Support\Facades\Auth::class, 198 | 'Blade' => Illuminate\Support\Facades\Blade::class, 199 | 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 200 | 'Bus' => Illuminate\Support\Facades\Bus::class, 201 | 'Cache' => Illuminate\Support\Facades\Cache::class, 202 | 'Config' => Illuminate\Support\Facades\Config::class, 203 | 'Cookie' => Illuminate\Support\Facades\Cookie::class, 204 | 'Crypt' => Illuminate\Support\Facades\Crypt::class, 205 | 'DB' => Illuminate\Support\Facades\DB::class, 206 | 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 207 | 'Event' => Illuminate\Support\Facades\Event::class, 208 | 'File' => Illuminate\Support\Facades\File::class, 209 | 'Gate' => Illuminate\Support\Facades\Gate::class, 210 | 'Hash' => Illuminate\Support\Facades\Hash::class, 211 | 'Lang' => Illuminate\Support\Facades\Lang::class, 212 | 'Log' => Illuminate\Support\Facades\Log::class, 213 | 'Mail' => Illuminate\Support\Facades\Mail::class, 214 | 'Notification' => Illuminate\Support\Facades\Notification::class, 215 | 'Password' => Illuminate\Support\Facades\Password::class, 216 | 'Queue' => Illuminate\Support\Facades\Queue::class, 217 | 'Redirect' => Illuminate\Support\Facades\Redirect::class, 218 | 'Redis' => Illuminate\Support\Facades\Redis::class, 219 | 'Request' => Illuminate\Support\Facades\Request::class, 220 | 'Response' => Illuminate\Support\Facades\Response::class, 221 | 'Route' => Illuminate\Support\Facades\Route::class, 222 | 'Schema' => Illuminate\Support\Facades\Schema::class, 223 | 'Session' => Illuminate\Support\Facades\Session::class, 224 | 'Storage' => Illuminate\Support\Facades\Storage::class, 225 | 'URL' => Illuminate\Support\Facades\URL::class, 226 | 'Validator' => Illuminate\Support\Facades\Validator::class, 227 | 'View' => Illuminate\Support\Facades\View::class, 228 | 229 | ], 230 | 231 | ]; 232 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => 'web', 18 | 'passwords' => 'users', 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | here which uses session storage and the Eloquent user provider. 29 | | 30 | | All authentication drivers have a user provider. This defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | mechanisms used by this application to persist your user's data. 33 | | 34 | | Supported: "session", "token" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | 44 | 'api' => [ 45 | 'driver' => 'token', 46 | 'provider' => 'users', 47 | ], 48 | ], 49 | 50 | /* 51 | |-------------------------------------------------------------------------- 52 | | User Providers 53 | |-------------------------------------------------------------------------- 54 | | 55 | | All authentication drivers have a user provider. This defines how the 56 | | users are actually retrieved out of your database or other storage 57 | | mechanisms used by this application to persist your user's data. 58 | | 59 | | If you have multiple user tables or models you may configure multiple 60 | | sources which represent each model / table. These sources may then 61 | | be assigned to any extra authentication guards you have defined. 62 | | 63 | | Supported: "database", "eloquent" 64 | | 65 | */ 66 | 67 | 'providers' => [ 68 | 'users' => [ 69 | 'driver' => 'eloquent', 70 | 'model' => App\User::class, 71 | ], 72 | 73 | // 'users' => [ 74 | // 'driver' => 'database', 75 | // 'table' => 'users', 76 | // ], 77 | ], 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Resetting Passwords 82 | |-------------------------------------------------------------------------- 83 | | 84 | | You may specify multiple password reset configurations if you have more 85 | | than one user table or model in the application and you want to have 86 | | separate password reset settings based on the specific user types. 87 | | 88 | | The expire time is the number of minutes that the reset token should be 89 | | considered valid. This security feature keeps tokens short-lived so 90 | | they have less time to be guessed. You may change this as needed. 91 | | 92 | */ 93 | 94 | 'passwords' => [ 95 | 'users' => [ 96 | 'provider' => 'users', 97 | 'table' => 'password_resets', 98 | 'expire' => 60, 99 | ], 100 | ], 101 | 102 | ]; 103 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_APP_KEY'), 36 | 'secret' => env('PUSHER_APP_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | // 40 | ], 41 | ], 42 | 43 | 'redis' => [ 44 | 'driver' => 'redis', 45 | 'connection' => 'default', 46 | ], 47 | 48 | 'log' => [ 49 | 'driver' => 'log', 50 | ], 51 | 52 | 'null' => [ 53 | 'driver' => 'null', 54 | ], 55 | 56 | ], 57 | 58 | ]; 59 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Cache Stores 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the cache "stores" for your application as 26 | | well as their drivers. You may even define multiple stores for the 27 | | same cache driver to group types of items stored in your caches. 28 | | 29 | */ 30 | 31 | 'stores' => [ 32 | 33 | 'apc' => [ 34 | 'driver' => 'apc', 35 | ], 36 | 37 | 'array' => [ 38 | 'driver' => 'array', 39 | ], 40 | 41 | 'database' => [ 42 | 'driver' => 'database', 43 | 'table' => 'cache', 44 | 'connection' => null, 45 | ], 46 | 47 | 'file' => [ 48 | 'driver' => 'file', 49 | 'path' => storage_path('framework/cache/data'), 50 | ], 51 | 52 | 'memcached' => [ 53 | 'driver' => 'memcached', 54 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 55 | 'sasl' => [ 56 | env('MEMCACHED_USERNAME'), 57 | env('MEMCACHED_PASSWORD'), 58 | ], 59 | 'options' => [ 60 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 61 | ], 62 | 'servers' => [ 63 | [ 64 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 65 | 'port' => env('MEMCACHED_PORT', 11211), 66 | 'weight' => 100, 67 | ], 68 | ], 69 | ], 70 | 71 | 'redis' => [ 72 | 'driver' => 'redis', 73 | 'connection' => 'default', 74 | ], 75 | 76 | ], 77 | 78 | /* 79 | |-------------------------------------------------------------------------- 80 | | Cache Key Prefix 81 | |-------------------------------------------------------------------------- 82 | | 83 | | When utilizing a RAM based store such as APC or Memcached, there might 84 | | be other applications utilizing the same cache. So, we'll specify a 85 | | value to get prefixed to all our keys so we can avoid collisions. 86 | | 87 | */ 88 | 89 | 'prefix' => 'laravel', 90 | 91 | ]; 92 | -------------------------------------------------------------------------------- /config/database.php: -------------------------------------------------------------------------------- 1 | env('DB_CONNECTION', 'mysql'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Database Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here are each of the database connections setup for your application. 24 | | Of course, examples of configuring each database platform that is 25 | | supported by Laravel is shown below to make development simple. 26 | | 27 | | 28 | | All database work in Laravel is done through the PHP PDO facilities 29 | | so make sure you have the driver for your particular database of 30 | | choice installed on your machine before you begin development. 31 | | 32 | */ 33 | 34 | 'connections' => [ 35 | 36 | 'sqlite' => [ 37 | 'driver' => 'sqlite', 38 | 'database' => env('DB_DATABASE', database_path('database.sqlite')), 39 | 'prefix' => '', 40 | ], 41 | 42 | 'mysql' => [ 43 | 'driver' => 'mysql', 44 | 'host' => env('DB_HOST', '127.0.0.1'), 45 | 'port' => env('DB_PORT', '3306'), 46 | 'database' => env('DB_DATABASE', 'forge'), 47 | 'username' => env('DB_USERNAME', 'forge'), 48 | 'password' => env('DB_PASSWORD', ''), 49 | 'unix_socket' => env('DB_SOCKET', ''), 50 | 'charset' => 'utf8', 51 | 'collation' => 'utf8_unicode_ci', 52 | 'prefix' => '', 53 | 'strict' => false, 54 | 'engine' => null, 55 | ], 56 | 57 | 'pgsql' => [ 58 | 'driver' => 'pgsql', 59 | 'host' => env('DB_HOST', '127.0.0.1'), 60 | 'port' => env('DB_PORT', '5432'), 61 | 'database' => env('DB_DATABASE', 'forge'), 62 | 'username' => env('DB_USERNAME', 'forge'), 63 | 'password' => env('DB_PASSWORD', ''), 64 | 'charset' => 'utf8', 65 | 'prefix' => '', 66 | 'schema' => 'public', 67 | 'sslmode' => 'prefer', 68 | ], 69 | 70 | ], 71 | 72 | /* 73 | |-------------------------------------------------------------------------- 74 | | Migration Repository Table 75 | |-------------------------------------------------------------------------- 76 | | 77 | | This table keeps track of all the migrations that have already run for 78 | | your application. Using this information, we can determine which of 79 | | the migrations on disk haven't actually been run in the database. 80 | | 81 | */ 82 | 83 | 'migrations' => 'migrations', 84 | 85 | /* 86 | |-------------------------------------------------------------------------- 87 | | Redis Databases 88 | |-------------------------------------------------------------------------- 89 | | 90 | | Redis is an open source, fast, and advanced key-value store that also 91 | | provides a richer set of commands than a typical key-value systems 92 | | such as APC or Memcached. Laravel makes it easy to dig right in. 93 | | 94 | */ 95 | 96 | 'redis' => [ 97 | 98 | 'client' => 'predis', 99 | 100 | 'default' => [ 101 | 'host' => env('REDIS_HOST', '127.0.0.1'), 102 | 'password' => env('REDIS_PASSWORD', null), 103 | 'port' => env('REDIS_PORT', 6379), 104 | 'database' => 0, 105 | ], 106 | 107 | ], 108 | 109 | ]; 110 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | 'local', 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Cloud Filesystem Disk 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Many applications store files both locally and in the cloud. For this 24 | | reason, you may specify a default "cloud" driver here. This driver 25 | | will be bound as the Cloud disk implementation in the container. 26 | | 27 | */ 28 | 29 | 'cloud' => 's3', 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Filesystem Disks 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here you may configure as many filesystem "disks" as you wish, and you 37 | | may even configure multiple disks of the same driver. Defaults have 38 | | been setup for each driver as an example of the required options. 39 | | 40 | | Supported Drivers: "local", "ftp", "s3", "rackspace" 41 | | 42 | */ 43 | 44 | 'disks' => [ 45 | 46 | 'local' => [ 47 | 'driver' => 'local', 48 | 'root' => storage_path('app'), 49 | ], 50 | 51 | 'public' => [ 52 | 'driver' => 'local', 53 | 'root' => storage_path('app/public'), 54 | 'url' => env('APP_URL').'/storage', 55 | 'visibility' => 'public', 56 | ], 57 | 58 | 's3' => [ 59 | 'driver' => 's3', 60 | 'key' => env('AWS_KEY'), 61 | 'secret' => env('AWS_SECRET'), 62 | 'region' => env('AWS_REGION'), 63 | 'bucket' => env('AWS_BUCKET'), 64 | ], 65 | 66 | ], 67 | 68 | ]; 69 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_DRIVER', 'smtp'), 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | SMTP Host Address 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Here you may provide the host address of the SMTP server used by your 27 | | applications. A default option is provided that is compatible with 28 | | the Mailgun mail service which will provide reliable deliveries. 29 | | 30 | */ 31 | 32 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 33 | 34 | /* 35 | |-------------------------------------------------------------------------- 36 | | SMTP Host Port 37 | |-------------------------------------------------------------------------- 38 | | 39 | | This is the SMTP port used by your application to deliver e-mails to 40 | | users of the application. Like the host we have set this value to 41 | | stay compatible with the Mailgun e-mail application by default. 42 | | 43 | */ 44 | 45 | 'port' => env('MAIL_PORT', 587), 46 | 47 | /* 48 | |-------------------------------------------------------------------------- 49 | | Global "From" Address 50 | |-------------------------------------------------------------------------- 51 | | 52 | | You may wish for all e-mails sent by your application to be sent from 53 | | the same address. Here, you may specify a name and address that is 54 | | used globally for all e-mails that are sent by your application. 55 | | 56 | */ 57 | 58 | 'from' => [ 59 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 60 | 'name' => env('MAIL_FROM_NAME', 'Example'), 61 | ], 62 | 63 | /* 64 | |-------------------------------------------------------------------------- 65 | | E-Mail Encryption Protocol 66 | |-------------------------------------------------------------------------- 67 | | 68 | | Here you may specify the encryption protocol that should be used when 69 | | the application send e-mail messages. A sensible default using the 70 | | transport layer security protocol should provide great security. 71 | | 72 | */ 73 | 74 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 75 | 76 | /* 77 | |-------------------------------------------------------------------------- 78 | | SMTP Server Username 79 | |-------------------------------------------------------------------------- 80 | | 81 | | If your SMTP server requires a username for authentication, you should 82 | | set it here. This will get used to authenticate with your server on 83 | | connection. You may also set the "password" value below this one. 84 | | 85 | */ 86 | 87 | 'username' => env('MAIL_USERNAME'), 88 | 89 | 'password' => env('MAIL_PASSWORD'), 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Sendmail System Path 94 | |-------------------------------------------------------------------------- 95 | | 96 | | When using the "sendmail" driver to send e-mails, we will need to know 97 | | the path to where Sendmail lives on this server. A default path has 98 | | been provided here, which will work well on most of your systems. 99 | | 100 | */ 101 | 102 | 'sendmail' => '/usr/sbin/sendmail -bs', 103 | 104 | /* 105 | |-------------------------------------------------------------------------- 106 | | Markdown Mail Settings 107 | |-------------------------------------------------------------------------- 108 | | 109 | | If you are using Markdown based email rendering, you may configure your 110 | | theme and component paths here, allowing you to customize the design 111 | | of the emails. Or, you may simply stick with the Laravel defaults! 112 | | 113 | */ 114 | 115 | 'markdown' => [ 116 | 'theme' => 'default', 117 | 118 | 'paths' => [ 119 | resource_path('views/vendor/mail'), 120 | ], 121 | ], 122 | 123 | ]; 124 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_DRIVER', 'sync'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Queue Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may configure the connection information for each server that 26 | | is used by your application. A default configuration has been added 27 | | for each back-end shipped with Laravel. You are free to add more. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'table' => 'jobs', 40 | 'queue' => 'default', 41 | 'retry_after' => 90, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => 'localhost', 47 | 'queue' => 'default', 48 | 'retry_after' => 90, 49 | ], 50 | 51 | 'sqs' => [ 52 | 'driver' => 'sqs', 53 | 'key' => 'your-public-key', 54 | 'secret' => 'your-secret-key', 55 | 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', 56 | 'queue' => 'your-queue-name', 57 | 'region' => 'us-east-1', 58 | ], 59 | 60 | 'redis' => [ 61 | 'driver' => 'redis', 62 | 'connection' => 'default', 63 | 'queue' => 'default', 64 | 'retry_after' => 90, 65 | ], 66 | 67 | ], 68 | 69 | /* 70 | |-------------------------------------------------------------------------- 71 | | Failed Queue Jobs 72 | |-------------------------------------------------------------------------- 73 | | 74 | | These options configure the behavior of failed queue job logging so you 75 | | can control which database and table are used to store the jobs that 76 | | have failed. You may change them to any database / table you wish. 77 | | 78 | */ 79 | 80 | 'failed' => [ 81 | 'database' => env('DB_CONNECTION', 'mysql'), 82 | 'table' => 'failed_jobs', 83 | ], 84 | 85 | ]; 86 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | ], 21 | 22 | 'ses' => [ 23 | 'key' => env('SES_KEY'), 24 | 'secret' => env('SES_SECRET'), 25 | 'region' => 'us-east-1', 26 | ], 27 | 28 | 'sparkpost' => [ 29 | 'secret' => env('SPARKPOST_SECRET'), 30 | ], 31 | 32 | 'stripe' => [ 33 | 'model' => App\User::class, 34 | 'key' => env('STRIPE_KEY'), 35 | 'secret' => env('STRIPE_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 Cache Store 91 | |-------------------------------------------------------------------------- 92 | | 93 | | When using the "apc" or "memcached" session drivers, you may specify a 94 | | cache store that should be used for these sessions. This value must 95 | | correspond with one of the application's configured cache stores. 96 | | 97 | */ 98 | 99 | 'store' => null, 100 | 101 | /* 102 | |-------------------------------------------------------------------------- 103 | | Session Sweeping Lottery 104 | |-------------------------------------------------------------------------- 105 | | 106 | | Some session drivers must manually sweep their storage location to get 107 | | rid of old sessions from storage. Here are the chances that it will 108 | | happen on a given request. By default, the odds are 2 out of 100. 109 | | 110 | */ 111 | 112 | 'lottery' => [2, 100], 113 | 114 | /* 115 | |-------------------------------------------------------------------------- 116 | | Session Cookie Name 117 | |-------------------------------------------------------------------------- 118 | | 119 | | Here you may change the name of the cookie used to identify a session 120 | | instance by ID. The name specified here will get used every time a 121 | | new session cookie is created by the framework for every driver. 122 | | 123 | */ 124 | 125 | 'cookie' => 'laravel_session', 126 | 127 | /* 128 | |-------------------------------------------------------------------------- 129 | | Session Cookie Path 130 | |-------------------------------------------------------------------------- 131 | | 132 | | The session cookie path determines the path for which the cookie will 133 | | be regarded as available. Typically, this will be the root path of 134 | | your application but you are free to change this when necessary. 135 | | 136 | */ 137 | 138 | 'path' => '/', 139 | 140 | /* 141 | |-------------------------------------------------------------------------- 142 | | Session Cookie Domain 143 | |-------------------------------------------------------------------------- 144 | | 145 | | Here you may change the domain of the cookie used to identify a session 146 | | in your application. This will determine which domains the cookie is 147 | | available to in your application. A sensible default has been set. 148 | | 149 | */ 150 | 151 | 'domain' => env('SESSION_DOMAIN', null), 152 | 153 | /* 154 | |-------------------------------------------------------------------------- 155 | | HTTPS Only Cookies 156 | |-------------------------------------------------------------------------- 157 | | 158 | | By setting this option to true, session cookies will only be sent back 159 | | to the server if the browser has a HTTPS connection. This will keep 160 | | the cookie from being sent to you if it can not be done securely. 161 | | 162 | */ 163 | 164 | 'secure' => env('SESSION_SECURE_COOKIE', false), 165 | 166 | /* 167 | |-------------------------------------------------------------------------- 168 | | HTTP Access Only 169 | |-------------------------------------------------------------------------- 170 | | 171 | | Setting this value to true will prevent JavaScript from accessing the 172 | | value of the cookie and the cookie will only be accessible through 173 | | the HTTP protocol. You are free to modify this option if needed. 174 | | 175 | */ 176 | 177 | 'http_only' => true, 178 | 179 | ]; 180 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('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\Generator $faker) { 16 | static $password; 17 | 18 | return [ 19 | 'name' => $faker->name, 20 | 'email' => $faker->unique()->safeEmail, 21 | 'password' => $password ?: $password = bcrypt('secret'), 22 | 'remember_token' => str_random(10), 23 | ]; 24 | }); 25 | -------------------------------------------------------------------------------- /database/migrations/2017_04_07_144522_vue_crud.php: -------------------------------------------------------------------------------- 1 | increments('id'); 18 | 19 | $table->string('title', 255)->unique(); 20 | $table->string('sub_title', 255); 21 | 22 | /* google key word */ 23 | $table->text('description'); 24 | 25 | $table->timestamps(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('vue_crud'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/seeds/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call(UsersTableSeeder::class); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 7 | "watch-poll": "npm run watch -- --watch-poll", 8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", 9 | "prod": "npm run production", 10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 11 | }, 12 | "devDependencies": { 13 | "axios": "^0.15.3", 14 | "bootstrap-sass": "^3.3.7", 15 | "cross-env": "^3.2.3", 16 | "jquery": "^3.1.1", 17 | "laravel-mix": "0.*", 18 | "lodash": "^4.17.4", 19 | "vue": "^2.1.10" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | ./tests/Feature 14 | 15 | 16 | 17 | ./tests/Unit 18 | 19 | 20 | 21 | 22 | ./app 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Redirect Trailing Slashes If Not A Folder... 9 | RewriteCond %{REQUEST_FILENAME} !-d 10 | RewriteRule ^(.*)/$ /$1 [L,R=301] 11 | 12 | # Handle Front Controller... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_FILENAME} !-f 15 | RewriteRule ^ index.php [L] 16 | 17 | # Handle Authorization Header 18 | RewriteCond %{HTTP:Authorization} . 19 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 20 | 21 | -------------------------------------------------------------------------------- /public/assets/css/emptypage.css: -------------------------------------------------------------------------------- 1 | /* General overwrite */ 2 | body { 3 | color: #66615b; 4 | font-size: 14px; 5 | font-family: 'Muli', Arial, sans-serif; 6 | } 7 | body .wrapper { 8 | min-height: 100vh; 9 | position: relative; 10 | } 11 | 12 | html, body{margin:0;padding:0;} 13 | 14 | h3.title_v_1 { color:#3ba6ca;size:17px;} 15 | 16 | h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6, p, .navbar, .brand, a, .td-name, td { 17 | -moz-osx-font-smoothing: grayscale; 18 | -webkit-font-smoothing: antialiased; 19 | font-family: 'Muli', "Helvetica", Arial, sans-serif; 20 | } 21 | 22 | h1, .h1, h2, .h2, h3, .h3, h4, .h4 { 23 | font-weight: 400; 24 | margin: 30px 0 15px; 25 | } 26 | 27 | h1, .h1 { 28 | font-size: 3.2em; 29 | } 30 | 31 | h2, .h2 { 32 | font-size: 2.6em; 33 | } 34 | 35 | h3, .h3 { 36 | font-size: 1.825em; 37 | line-height: 1.4; 38 | margin: 20px 0 10px; 39 | } 40 | 41 | h4, .h4 { 42 | font-size: 1.5em; 43 | font-weight: 600; 44 | line-height: 1.2em; 45 | } 46 | 47 | h5, .h5 { 48 | font-size: 1.25em; 49 | font-weight: 400; 50 | line-height: 1.4em; 51 | margin-bottom: 15px; 52 | } 53 | 54 | h6, .h6 { 55 | font-size: 0.9em; 56 | font-weight: 600; 57 | text-transform: uppercase; 58 | } 59 | 60 | p { 61 | font-size: 14px; 62 | line-height: 1.2em; 63 | } 64 | 65 | h1 small, h2 small, h3 small, h4 small, h5 small, h6 small, .h1 small, .h2 small, .h3 small, .h4 small, .h5 small, .h6 small, h1 .small, h2 .small, h3 .small, h4 .small, h5 .small, h6 .small, .h1 .small, .h2 .small, .h3 .small, .h4 .small, .h5 .small, .h6 .small { 66 | color: #9A9A9A; 67 | font-weight: 300; 68 | line-height: 1.4em; 69 | } 70 | 71 | h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { 72 | font-size: 60%; 73 | } 74 | 75 | .title-uppercase { 76 | text-transform: uppercase; 77 | } 78 | 79 | blockquote { 80 | font-style: italic; 81 | } 82 | 83 | blockquote small { 84 | font-style: normal; 85 | } 86 | 87 | .text-muted { 88 | color: #DDDDDD; 89 | } 90 | 91 | .text-primary, .text-primary:hover { 92 | color: #427C89; 93 | } 94 | 95 | .text-info, .text-info:hover { 96 | color: #3091B2; 97 | } 98 | 99 | .text-success, .text-success:hover { 100 | color: #42A084; 101 | } 102 | 103 | .text-warning, .text-warning:hover { 104 | color: #BB992F; 105 | } 106 | 107 | .text-danger, .text-danger:hover { 108 | color: #B33C12; 109 | } 110 | 111 | .glyphicon { 112 | line-height: 1; 113 | } 114 | 115 | strong { 116 | color: #403D39; 117 | } 118 | 119 | .icon-primary { 120 | color: #7A9E9F; 121 | } 122 | 123 | .icon-info { 124 | color: #68B3C8; 125 | } 126 | 127 | .icon-success { 128 | color: #7AC29A; 129 | } 130 | 131 | .icon-warning { 132 | color: #F3BB45; 133 | } 134 | 135 | .icon-danger { 136 | color: #EB5E28; 137 | } 138 | 139 | .chart-legend .text-primary, .chart-legend .text-primary:hover { 140 | color: #7A9E9F; 141 | } 142 | .chart-legend .text-info, .chart-legend .text-info:hover { 143 | color: #68B3C8; 144 | } 145 | .chart-legend .text-success, .chart-legend .text-success:hover { 146 | color: #7AC29A; 147 | } 148 | .chart-legend .text-warning, .chart-legend .text-warning:hover { 149 | color: #F3BB45; 150 | } 151 | .chart-legend .text-danger, .chart-legend .text-danger:hover { 152 | color: #EB5E28; 153 | } 154 | 155 | 156 | a { 157 | color: #68B3C8; 158 | } 159 | a:hover, a:focus { 160 | color: #3091B2; 161 | text-decoration: none; 162 | } 163 | 164 | a:focus, a:active, 165 | button::-moz-focus-inner, 166 | input::-moz-focus-inner, 167 | select::-moz-focus-inner, 168 | input[type="file"] > input[type="button"]::-moz-focus-inner { 169 | outline: 0 !important; 170 | } 171 | 172 | .ui-slider-handle:focus, 173 | .navbar-toggle, 174 | input:focus, 175 | button:focus { 176 | outline: 0 !important; 177 | } 178 | -------------------------------------------------------------------------------- /public/assets/css/hint.css: -------------------------------------------------------------------------------- 1 | /*! Hint.css - v2.3.1 - 2016-06-05 2 | * http://kushagragour.in/lab/hint/ 3 | * Copyright (c) 2016 Kushagra Gour; Licensed */ 4 | 5 | /*-------------------------------------* HINT.css - A CSS tooltip library 6 | \*-------------------------------------*/ 7 | /** 8 | * HINT.css is a tooltip library made in pure CSS. 9 | * 10 | * Source: https://github.com/chinchang/hint.css 11 | * Demo: http://kushagragour.in/lab/hint/ 12 | * 13 | * Release under The MIT License 14 | * 15 | */ 16 | /** 17 | * source: hint-core.scss 18 | * 19 | * Defines the basic styling for the tooltip. 20 | * Each tooltip is made of 2 parts: 21 | * 1) body (:after) 22 | * 2) arrow (:before) 23 | * 24 | * Classes added: 25 | * 1) hint 26 | */ 27 | [class*="hint--"] { 28 | position: relative; 29 | display: inline-block; 30 | /** 31 | * tooltip arrow 32 | */ 33 | /** 34 | * tooltip body 35 | */ } 36 | [class*="hint--"]:before, [class*="hint--"]:after { 37 | position: absolute; 38 | -webkit-transform: translate3d(0, 0, 0); 39 | -moz-transform: translate3d(0, 0, 0); 40 | transform: translate3d(0, 0, 0); 41 | visibility: hidden; 42 | opacity: 0; 43 | z-index: 1000000; 44 | pointer-events: none; 45 | -webkit-transition: 0.3s ease; 46 | -moz-transition: 0.3s ease; 47 | transition: 0.3s ease; 48 | -webkit-transition-delay: 0ms; 49 | -moz-transition-delay: 0ms; 50 | transition-delay: 0ms; } 51 | [class*="hint--"]:hover:before, [class*="hint--"]:hover:after { 52 | visibility: visible; 53 | opacity: 1; } 54 | [class*="hint--"]:hover:before, [class*="hint--"]:hover:after { 55 | -webkit-transition-delay: 100ms; 56 | -moz-transition-delay: 100ms; 57 | transition-delay: 100ms; } 58 | [class*="hint--"]:before { 59 | content: ''; 60 | position: absolute; 61 | background: transparent; 62 | border: 6px solid transparent; 63 | z-index: 1000001; } 64 | [class*="hint--"]:after { 65 | background: #383838; 66 | color: white; 67 | padding: 8px 10px; 68 | font-size: 12px; 69 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 70 | line-height: 12px; 71 | white-space: nowrap; } 72 | [class*="hint--"][aria-label]:after { 73 | content: attr(aria-label); } 74 | [class*="hint--"][data-hint]:after { 75 | content: attr(data-hint); } 76 | 77 | [aria-label='']:before, [aria-label='']:after, 78 | [data-hint='']:before, 79 | [data-hint='']:after { 80 | display: none !important; } 81 | 82 | /** 83 | * source: hint-position.scss 84 | * 85 | * Defines the positoning logic for the tooltips. 86 | * 87 | * Classes added: 88 | * 1) hint--top 89 | * 2) hint--bottom 90 | * 3) hint--left 91 | * 4) hint--right 92 | */ 93 | /** 94 | * set default color for tooltip arrows 95 | */ 96 | .hint--top-left:before { 97 | border-top-color: #383838; } 98 | 99 | .hint--top-right:before { 100 | border-top-color: #383838; } 101 | 102 | .hint--top:before { 103 | border-top-color: #383838; } 104 | 105 | .hint--bottom-left:before { 106 | border-bottom-color: #383838; } 107 | 108 | .hint--bottom-right:before { 109 | border-bottom-color: #383838; } 110 | 111 | .hint--bottom:before { 112 | border-bottom-color: #383838; } 113 | 114 | .hint--left:before { 115 | border-left-color: #383838; } 116 | 117 | .hint--right:before { 118 | border-right-color: #383838; } 119 | 120 | /** 121 | * top tooltip 122 | */ 123 | .hint--top:before { 124 | margin-bottom: -11px; } 125 | 126 | .hint--top:before, .hint--top:after { 127 | bottom: 100%; 128 | left: 50%; } 129 | 130 | .hint--top:before { 131 | left: calc(50% - 6px); } 132 | 133 | .hint--top:after { 134 | -webkit-transform: translateX(-50%); 135 | -moz-transform: translateX(-50%); 136 | transform: translateX(-50%); } 137 | 138 | .hint--top:hover:before { 139 | -webkit-transform: translateY(-8px); 140 | -moz-transform: translateY(-8px); 141 | transform: translateY(-8px); } 142 | 143 | .hint--top:hover:after { 144 | -webkit-transform: translateX(-50%) translateY(-8px); 145 | -moz-transform: translateX(-50%) translateY(-8px); 146 | transform: translateX(-50%) translateY(-8px); } 147 | 148 | /** 149 | * bottom tooltip 150 | */ 151 | .hint--bottom:before { 152 | margin-top: -11px; } 153 | 154 | .hint--bottom:before, .hint--bottom:after { 155 | top: 100%; 156 | left: 50%; } 157 | 158 | .hint--bottom:before { 159 | left: calc(50% - 6px); } 160 | 161 | .hint--bottom:after { 162 | -webkit-transform: translateX(-50%); 163 | -moz-transform: translateX(-50%); 164 | transform: translateX(-50%); } 165 | 166 | .hint--bottom:hover:before { 167 | -webkit-transform: translateY(8px); 168 | -moz-transform: translateY(8px); 169 | transform: translateY(8px); } 170 | 171 | .hint--bottom:hover:after { 172 | -webkit-transform: translateX(-50%) translateY(8px); 173 | -moz-transform: translateX(-50%) translateY(8px); 174 | transform: translateX(-50%) translateY(8px); } 175 | 176 | /** 177 | * right tooltip 178 | */ 179 | .hint--right:before { 180 | margin-left: -11px; 181 | margin-bottom: -6px; } 182 | 183 | .hint--right:after { 184 | margin-bottom: -14px; } 185 | 186 | .hint--right:before, .hint--right:after { 187 | left: 100%; 188 | bottom: 50%; } 189 | 190 | .hint--right:hover:before { 191 | -webkit-transform: translateX(8px); 192 | -moz-transform: translateX(8px); 193 | transform: translateX(8px); } 194 | 195 | .hint--right:hover:after { 196 | -webkit-transform: translateX(8px); 197 | -moz-transform: translateX(8px); 198 | transform: translateX(8px); } 199 | 200 | /** 201 | * left tooltip 202 | */ 203 | .hint--left:before { 204 | margin-right: -11px; 205 | margin-bottom: -6px; } 206 | 207 | .hint--left:after { 208 | margin-bottom: -14px; } 209 | 210 | .hint--left:before, .hint--left:after { 211 | right: 100%; 212 | bottom: 50%; } 213 | 214 | .hint--left:hover:before { 215 | -webkit-transform: translateX(-8px); 216 | -moz-transform: translateX(-8px); 217 | transform: translateX(-8px); } 218 | 219 | .hint--left:hover:after { 220 | -webkit-transform: translateX(-8px); 221 | -moz-transform: translateX(-8px); 222 | transform: translateX(-8px); } 223 | 224 | /** 225 | * top-left tooltip 226 | */ 227 | .hint--top-left:before { 228 | margin-bottom: -11px; } 229 | 230 | .hint--top-left:before, .hint--top-left:after { 231 | bottom: 100%; 232 | left: 50%; } 233 | 234 | .hint--top-left:before { 235 | left: calc(50% - 6px); } 236 | 237 | .hint--top-left:after { 238 | -webkit-transform: translateX(-100%); 239 | -moz-transform: translateX(-100%); 240 | transform: translateX(-100%); } 241 | 242 | .hint--top-left:after { 243 | margin-left: 12px; } 244 | 245 | .hint--top-left:hover:before { 246 | -webkit-transform: translateY(-8px); 247 | -moz-transform: translateY(-8px); 248 | transform: translateY(-8px); } 249 | 250 | .hint--top-left:hover:after { 251 | -webkit-transform: translateX(-100%) translateY(-8px); 252 | -moz-transform: translateX(-100%) translateY(-8px); 253 | transform: translateX(-100%) translateY(-8px); } 254 | 255 | /** 256 | * top-right tooltip 257 | */ 258 | .hint--top-right:before { 259 | margin-bottom: -11px; } 260 | 261 | .hint--top-right:before, .hint--top-right:after { 262 | bottom: 100%; 263 | left: 50%; } 264 | 265 | .hint--top-right:before { 266 | left: calc(50% - 6px); } 267 | 268 | .hint--top-right:after { 269 | -webkit-transform: translateX(0); 270 | -moz-transform: translateX(0); 271 | transform: translateX(0); } 272 | 273 | .hint--top-right:after { 274 | margin-left: -12px; } 275 | 276 | .hint--top-right:hover:before { 277 | -webkit-transform: translateY(-8px); 278 | -moz-transform: translateY(-8px); 279 | transform: translateY(-8px); } 280 | 281 | .hint--top-right:hover:after { 282 | -webkit-transform: translateY(-8px); 283 | -moz-transform: translateY(-8px); 284 | transform: translateY(-8px); } 285 | 286 | /** 287 | * bottom-left tooltip 288 | */ 289 | .hint--bottom-left:before { 290 | margin-top: -11px; } 291 | 292 | .hint--bottom-left:before, .hint--bottom-left:after { 293 | top: 100%; 294 | left: 50%; } 295 | 296 | .hint--bottom-left:before { 297 | left: calc(50% - 6px); } 298 | 299 | .hint--bottom-left:after { 300 | -webkit-transform: translateX(-100%); 301 | -moz-transform: translateX(-100%); 302 | transform: translateX(-100%); } 303 | 304 | .hint--bottom-left:after { 305 | margin-left: 12px; } 306 | 307 | .hint--bottom-left:hover:before { 308 | -webkit-transform: translateY(8px); 309 | -moz-transform: translateY(8px); 310 | transform: translateY(8px); } 311 | 312 | .hint--bottom-left:hover:after { 313 | -webkit-transform: translateX(-100%) translateY(8px); 314 | -moz-transform: translateX(-100%) translateY(8px); 315 | transform: translateX(-100%) translateY(8px); } 316 | 317 | /** 318 | * bottom-right tooltip 319 | */ 320 | .hint--bottom-right:before { 321 | margin-top: -11px; } 322 | 323 | .hint--bottom-right:before, .hint--bottom-right:after { 324 | top: 100%; 325 | left: 50%; } 326 | 327 | .hint--bottom-right:before { 328 | left: calc(50% - 6px); } 329 | 330 | .hint--bottom-right:after { 331 | -webkit-transform: translateX(0); 332 | -moz-transform: translateX(0); 333 | transform: translateX(0); } 334 | 335 | .hint--bottom-right:after { 336 | margin-left: -12px; } 337 | 338 | .hint--bottom-right:hover:before { 339 | -webkit-transform: translateY(8px); 340 | -moz-transform: translateY(8px); 341 | transform: translateY(8px); } 342 | 343 | .hint--bottom-right:hover:after { 344 | -webkit-transform: translateY(8px); 345 | -moz-transform: translateY(8px); 346 | transform: translateY(8px); } 347 | 348 | /** 349 | * source: hint-sizes.scss 350 | * 351 | * Defines width restricted tooltips that can span 352 | * across multiple lines. 353 | * 354 | * Classes added: 355 | * 1) hint--small 356 | * 2) hint--medium 357 | * 3) hint--large 358 | * 359 | */ 360 | .hint--small:after, 361 | .hint--medium:after, 362 | .hint--large:after { 363 | white-space: normal; 364 | line-height: 1.4em; } 365 | 366 | .hint--small:after { 367 | width: 80px; } 368 | 369 | .hint--medium:after { 370 | width: 150px; } 371 | 372 | .hint--large:after { 373 | width: 300px; } 374 | 375 | /** 376 | * source: hint-theme.scss 377 | * 378 | * Defines basic theme for tooltips. 379 | * 380 | */ 381 | [class*="hint--"] { 382 | /** 383 | * tooltip body 384 | */ } 385 | [class*="hint--"]:after { 386 | text-shadow: 0 -1px 0px black; 387 | box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3); } 388 | 389 | /** 390 | * source: hint-color-types.scss 391 | * 392 | * Contains tooltips of various types based on color differences. 393 | * 394 | * Classes added: 395 | * 1) hint--error 396 | * 2) hint--warning 397 | * 3) hint--info 398 | * 4) hint--success 399 | * 400 | */ 401 | /** 402 | * Error 403 | */ 404 | .hint--error:after { 405 | background-color: #b34e4d; 406 | text-shadow: 0 -1px 0px #592726; } 407 | 408 | .hint--error.hint--top-left:before { 409 | border-top-color: #b34e4d; } 410 | 411 | .hint--error.hint--top-right:before { 412 | border-top-color: #b34e4d; } 413 | 414 | .hint--error.hint--top:before { 415 | border-top-color: #b34e4d; } 416 | 417 | .hint--error.hint--bottom-left:before { 418 | border-bottom-color: #b34e4d; } 419 | 420 | .hint--error.hint--bottom-right:before { 421 | border-bottom-color: #b34e4d; } 422 | 423 | .hint--error.hint--bottom:before { 424 | border-bottom-color: #b34e4d; } 425 | 426 | .hint--error.hint--left:before { 427 | border-left-color: #b34e4d; } 428 | 429 | .hint--error.hint--right:before { 430 | border-right-color: #b34e4d; } 431 | 432 | /** 433 | * Warning 434 | */ 435 | .hint--warning:after { 436 | background-color: #c09854; 437 | text-shadow: 0 -1px 0px #6c5328; } 438 | 439 | .hint--warning.hint--top-left:before { 440 | border-top-color: #c09854; } 441 | 442 | .hint--warning.hint--top-right:before { 443 | border-top-color: #c09854; } 444 | 445 | .hint--warning.hint--top:before { 446 | border-top-color: #c09854; } 447 | 448 | .hint--warning.hint--bottom-left:before { 449 | border-bottom-color: #c09854; } 450 | 451 | .hint--warning.hint--bottom-right:before { 452 | border-bottom-color: #c09854; } 453 | 454 | .hint--warning.hint--bottom:before { 455 | border-bottom-color: #c09854; } 456 | 457 | .hint--warning.hint--left:before { 458 | border-left-color: #c09854; } 459 | 460 | .hint--warning.hint--right:before { 461 | border-right-color: #c09854; } 462 | 463 | /** 464 | * Info 465 | */ 466 | .hint--info:after { 467 | background-color: #3986ac; 468 | text-shadow: 0 -1px 0px #1a3c4d; } 469 | 470 | .hint--info.hint--top-left:before { 471 | border-top-color: #3986ac; } 472 | 473 | .hint--info.hint--top-right:before { 474 | border-top-color: #3986ac; } 475 | 476 | .hint--info.hint--top:before { 477 | border-top-color: #3986ac; } 478 | 479 | .hint--info.hint--bottom-left:before { 480 | border-bottom-color: #3986ac; } 481 | 482 | .hint--info.hint--bottom-right:before { 483 | border-bottom-color: #3986ac; } 484 | 485 | .hint--info.hint--bottom:before { 486 | border-bottom-color: #3986ac; } 487 | 488 | .hint--info.hint--left:before { 489 | border-left-color: #3986ac; } 490 | 491 | .hint--info.hint--right:before { 492 | border-right-color: #3986ac; } 493 | 494 | /** 495 | * Success 496 | */ 497 | .hint--success:after { 498 | background-color: #458746; 499 | text-shadow: 0 -1px 0px #1a321a; } 500 | 501 | .hint--success.hint--top-left:before { 502 | border-top-color: #458746; } 503 | 504 | .hint--success.hint--top-right:before { 505 | border-top-color: #458746; } 506 | 507 | .hint--success.hint--top:before { 508 | border-top-color: #458746; } 509 | 510 | .hint--success.hint--bottom-left:before { 511 | border-bottom-color: #458746; } 512 | 513 | .hint--success.hint--bottom-right:before { 514 | border-bottom-color: #458746; } 515 | 516 | .hint--success.hint--bottom:before { 517 | border-bottom-color: #458746; } 518 | 519 | .hint--success.hint--left:before { 520 | border-left-color: #458746; } 521 | 522 | .hint--success.hint--right:before { 523 | border-right-color: #458746; } 524 | 525 | /** 526 | * source: hint-always.scss 527 | * 528 | * Defines a persisted tooltip which shows always. 529 | * 530 | * Classes added: 531 | * 1) hint--always 532 | * 533 | */ 534 | .hint--always:after, .hint--always:before { 535 | opacity: 1; 536 | visibility: visible; } 537 | 538 | .hint--always.hint--top:before { 539 | -webkit-transform: translateY(-8px); 540 | -moz-transform: translateY(-8px); 541 | transform: translateY(-8px); } 542 | 543 | .hint--always.hint--top:after { 544 | -webkit-transform: translateX(-50%) translateY(-8px); 545 | -moz-transform: translateX(-50%) translateY(-8px); 546 | transform: translateX(-50%) translateY(-8px); } 547 | 548 | .hint--always.hint--top-left:before { 549 | -webkit-transform: translateY(-8px); 550 | -moz-transform: translateY(-8px); 551 | transform: translateY(-8px); } 552 | 553 | .hint--always.hint--top-left:after { 554 | -webkit-transform: translateX(-100%) translateY(-8px); 555 | -moz-transform: translateX(-100%) translateY(-8px); 556 | transform: translateX(-100%) translateY(-8px); } 557 | 558 | .hint--always.hint--top-right:before { 559 | -webkit-transform: translateY(-8px); 560 | -moz-transform: translateY(-8px); 561 | transform: translateY(-8px); } 562 | 563 | .hint--always.hint--top-right:after { 564 | -webkit-transform: translateY(-8px); 565 | -moz-transform: translateY(-8px); 566 | transform: translateY(-8px); } 567 | 568 | .hint--always.hint--bottom:before { 569 | -webkit-transform: translateY(8px); 570 | -moz-transform: translateY(8px); 571 | transform: translateY(8px); } 572 | 573 | .hint--always.hint--bottom:after { 574 | -webkit-transform: translateX(-50%) translateY(8px); 575 | -moz-transform: translateX(-50%) translateY(8px); 576 | transform: translateX(-50%) translateY(8px); } 577 | 578 | .hint--always.hint--bottom-left:before { 579 | -webkit-transform: translateY(8px); 580 | -moz-transform: translateY(8px); 581 | transform: translateY(8px); } 582 | 583 | .hint--always.hint--bottom-left:after { 584 | -webkit-transform: translateX(-100%) translateY(8px); 585 | -moz-transform: translateX(-100%) translateY(8px); 586 | transform: translateX(-100%) translateY(8px); } 587 | 588 | .hint--always.hint--bottom-right:before { 589 | -webkit-transform: translateY(8px); 590 | -moz-transform: translateY(8px); 591 | transform: translateY(8px); } 592 | 593 | .hint--always.hint--bottom-right:after { 594 | -webkit-transform: translateY(8px); 595 | -moz-transform: translateY(8px); 596 | transform: translateY(8px); } 597 | 598 | .hint--always.hint--left:before { 599 | -webkit-transform: translateX(-8px); 600 | -moz-transform: translateX(-8px); 601 | transform: translateX(-8px); } 602 | 603 | .hint--always.hint--left:after { 604 | -webkit-transform: translateX(-8px); 605 | -moz-transform: translateX(-8px); 606 | transform: translateX(-8px); } 607 | 608 | .hint--always.hint--right:before { 609 | -webkit-transform: translateX(8px); 610 | -moz-transform: translateX(8px); 611 | transform: translateX(8px); } 612 | 613 | .hint--always.hint--right:after { 614 | -webkit-transform: translateX(8px); 615 | -moz-transform: translateX(8px); 616 | transform: translateX(8px); } 617 | 618 | /** 619 | * source: hint-rounded.scss 620 | * 621 | * Defines rounded corner tooltips. 622 | * 623 | * Classes added: 624 | * 1) hint--rounded 625 | * 626 | */ 627 | .hint--rounded:after { 628 | border-radius: 4px; } 629 | 630 | /** 631 | * source: hint-effects.scss 632 | * 633 | * Defines various transition effects for the tooltips. 634 | * 635 | * Classes added: 636 | * 1) hint--no-animate 637 | * 2) hint--bounce 638 | * 639 | */ 640 | .hint--no-animate:before, .hint--no-animate:after { 641 | -webkit-transition-duration: 0ms; 642 | -moz-transition-duration: 0ms; 643 | transition-duration: 0ms; } 644 | 645 | .hint--bounce:before, .hint--bounce:after { 646 | -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); 647 | -moz-transition: opacity 0.3s ease, visibility 0.3s ease, -moz-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); 648 | transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24); } 649 | -------------------------------------------------------------------------------- /public/assets/css/themify-icons.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'themify'; 3 | src:url('../fonts/themify.eot?-fvbane'); 4 | src:url('../fonts/themify.eot?#iefix-fvbane') format('embedded-opentype'), 5 | url('../fonts/themify.woff?-fvbane') format('woff'), 6 | url('../fonts/themify.ttf?-fvbane') format('truetype'), 7 | url('../fonts/themify.svg?-fvbane#themify') format('svg'); 8 | font-weight: normal; 9 | font-style: normal; 10 | } 11 | 12 | [class^="ti-"], [class*=" ti-"] { 13 | font-family: 'themify'; 14 | speak: none; 15 | font-style: normal; 16 | font-weight: bold; 17 | font-variant: normal; 18 | text-transform: none; 19 | line-height: 1.42857; 20 | 21 | /* Better Font Rendering =========== */ 22 | -webkit-font-smoothing: antialiased; 23 | -moz-osx-font-smoothing: grayscale; 24 | } 25 | 26 | .ti-wand:before { 27 | content: "\e600"; 28 | } 29 | .ti-volume:before { 30 | content: "\e601"; 31 | } 32 | .ti-user:before { 33 | content: "\e602"; 34 | } 35 | .ti-unlock:before { 36 | content: "\e603"; 37 | } 38 | .ti-unlink:before { 39 | content: "\e604"; 40 | } 41 | .ti-trash:before { 42 | content: "\e605"; 43 | } 44 | .ti-thought:before { 45 | content: "\e606"; 46 | } 47 | .ti-target:before { 48 | content: "\e607"; 49 | } 50 | .ti-tag:before { 51 | content: "\e608"; 52 | } 53 | .ti-tablet:before { 54 | content: "\e609"; 55 | } 56 | .ti-star:before { 57 | content: "\e60a"; 58 | } 59 | .ti-spray:before { 60 | content: "\e60b"; 61 | } 62 | .ti-signal:before { 63 | content: "\e60c"; 64 | } 65 | .ti-shopping-cart:before { 66 | content: "\e60d"; 67 | } 68 | .ti-shopping-cart-full:before { 69 | content: "\e60e"; 70 | } 71 | .ti-settings:before { 72 | content: "\e60f"; 73 | } 74 | .ti-search:before { 75 | content: "\e610"; 76 | } 77 | .ti-zoom-in:before { 78 | content: "\e611"; 79 | } 80 | .ti-zoom-out:before { 81 | content: "\e612"; 82 | } 83 | .ti-cut:before { 84 | content: "\e613"; 85 | } 86 | .ti-ruler:before { 87 | content: "\e614"; 88 | } 89 | .ti-ruler-pencil:before { 90 | content: "\e615"; 91 | } 92 | .ti-ruler-alt:before { 93 | content: "\e616"; 94 | } 95 | .ti-bookmark:before { 96 | content: "\e617"; 97 | } 98 | .ti-bookmark-alt:before { 99 | content: "\e618"; 100 | } 101 | .ti-reload:before { 102 | content: "\e619"; 103 | } 104 | .ti-plus:before { 105 | content: "\e61a"; 106 | } 107 | .ti-pin:before { 108 | content: "\e61b"; 109 | } 110 | .ti-pencil:before { 111 | content: "\e61c"; 112 | } 113 | .ti-pencil-alt:before { 114 | content: "\e61d"; 115 | } 116 | .ti-paint-roller:before { 117 | content: "\e61e"; 118 | } 119 | .ti-paint-bucket:before { 120 | content: "\e61f"; 121 | } 122 | .ti-na:before { 123 | content: "\e620"; 124 | } 125 | .ti-mobile:before { 126 | content: "\e621"; 127 | } 128 | .ti-minus:before { 129 | content: "\e622"; 130 | } 131 | .ti-medall:before { 132 | content: "\e623"; 133 | } 134 | .ti-medall-alt:before { 135 | content: "\e624"; 136 | } 137 | .ti-marker:before { 138 | content: "\e625"; 139 | } 140 | .ti-marker-alt:before { 141 | content: "\e626"; 142 | } 143 | .ti-arrow-up:before { 144 | content: "\e627"; 145 | } 146 | .ti-arrow-right:before { 147 | content: "\e628"; 148 | } 149 | .ti-arrow-left:before { 150 | content: "\e629"; 151 | } 152 | .ti-arrow-down:before { 153 | content: "\e62a"; 154 | } 155 | .ti-lock:before { 156 | content: "\e62b"; 157 | } 158 | .ti-location-arrow:before { 159 | content: "\e62c"; 160 | } 161 | .ti-link:before { 162 | content: "\e62d"; 163 | } 164 | .ti-layout:before { 165 | content: "\e62e"; 166 | } 167 | .ti-layers:before { 168 | content: "\e62f"; 169 | } 170 | .ti-layers-alt:before { 171 | content: "\e630"; 172 | } 173 | .ti-key:before { 174 | content: "\e631"; 175 | } 176 | .ti-import:before { 177 | content: "\e632"; 178 | } 179 | .ti-image:before { 180 | content: "\e633"; 181 | } 182 | .ti-heart:before { 183 | content: "\e634"; 184 | } 185 | .ti-heart-broken:before { 186 | content: "\e635"; 187 | } 188 | .ti-hand-stop:before { 189 | content: "\e636"; 190 | } 191 | .ti-hand-open:before { 192 | content: "\e637"; 193 | } 194 | .ti-hand-drag:before { 195 | content: "\e638"; 196 | } 197 | .ti-folder:before { 198 | content: "\e639"; 199 | } 200 | .ti-flag:before { 201 | content: "\e63a"; 202 | } 203 | .ti-flag-alt:before { 204 | content: "\e63b"; 205 | } 206 | .ti-flag-alt-2:before { 207 | content: "\e63c"; 208 | } 209 | .ti-eye:before { 210 | content: "\e63d"; 211 | } 212 | .ti-export:before { 213 | content: "\e63e"; 214 | } 215 | .ti-exchange-vertical:before { 216 | content: "\e63f"; 217 | } 218 | .ti-desktop:before { 219 | content: "\e640"; 220 | } 221 | .ti-cup:before { 222 | content: "\e641"; 223 | } 224 | .ti-crown:before { 225 | content: "\e642"; 226 | } 227 | .ti-comments:before { 228 | content: "\e643"; 229 | } 230 | .ti-comment:before { 231 | content: "\e644"; 232 | } 233 | .ti-comment-alt:before { 234 | content: "\e645"; 235 | } 236 | .ti-close:before { 237 | content: "\e646"; 238 | } 239 | .ti-clip:before { 240 | content: "\e647"; 241 | } 242 | .ti-angle-up:before { 243 | content: "\e648"; 244 | } 245 | .ti-angle-right:before { 246 | content: "\e649"; 247 | } 248 | .ti-angle-left:before { 249 | content: "\e64a"; 250 | } 251 | .ti-angle-down:before { 252 | content: "\e64b"; 253 | } 254 | .ti-check:before { 255 | content: "\e64c"; 256 | } 257 | .ti-check-box:before { 258 | content: "\e64d"; 259 | } 260 | .ti-camera:before { 261 | content: "\e64e"; 262 | } 263 | .ti-announcement:before { 264 | content: "\e64f"; 265 | } 266 | .ti-brush:before { 267 | content: "\e650"; 268 | } 269 | .ti-briefcase:before { 270 | content: "\e651"; 271 | } 272 | .ti-bolt:before { 273 | content: "\e652"; 274 | } 275 | .ti-bolt-alt:before { 276 | content: "\e653"; 277 | } 278 | .ti-blackboard:before { 279 | content: "\e654"; 280 | } 281 | .ti-bag:before { 282 | content: "\e655"; 283 | } 284 | .ti-move:before { 285 | content: "\e656"; 286 | } 287 | .ti-arrows-vertical:before { 288 | content: "\e657"; 289 | } 290 | .ti-arrows-horizontal:before { 291 | content: "\e658"; 292 | } 293 | .ti-fullscreen:before { 294 | content: "\e659"; 295 | } 296 | .ti-arrow-top-right:before { 297 | content: "\e65a"; 298 | } 299 | .ti-arrow-top-left:before { 300 | content: "\e65b"; 301 | } 302 | .ti-arrow-circle-up:before { 303 | content: "\e65c"; 304 | } 305 | .ti-arrow-circle-right:before { 306 | content: "\e65d"; 307 | } 308 | .ti-arrow-circle-left:before { 309 | content: "\e65e"; 310 | } 311 | .ti-arrow-circle-down:before { 312 | content: "\e65f"; 313 | } 314 | .ti-angle-double-up:before { 315 | content: "\e660"; 316 | } 317 | .ti-angle-double-right:before { 318 | content: "\e661"; 319 | } 320 | .ti-angle-double-left:before { 321 | content: "\e662"; 322 | } 323 | .ti-angle-double-down:before { 324 | content: "\e663"; 325 | } 326 | .ti-zip:before { 327 | content: "\e664"; 328 | } 329 | .ti-world:before { 330 | content: "\e665"; 331 | } 332 | .ti-wheelchair:before { 333 | content: "\e666"; 334 | } 335 | .ti-view-list:before { 336 | content: "\e667"; 337 | } 338 | .ti-view-list-alt:before { 339 | content: "\e668"; 340 | } 341 | .ti-view-grid:before { 342 | content: "\e669"; 343 | } 344 | .ti-uppercase:before { 345 | content: "\e66a"; 346 | } 347 | .ti-upload:before { 348 | content: "\e66b"; 349 | } 350 | .ti-underline:before { 351 | content: "\e66c"; 352 | } 353 | .ti-truck:before { 354 | content: "\e66d"; 355 | } 356 | .ti-timer:before { 357 | content: "\e66e"; 358 | } 359 | .ti-ticket:before { 360 | content: "\e66f"; 361 | } 362 | .ti-thumb-up:before { 363 | content: "\e670"; 364 | } 365 | .ti-thumb-down:before { 366 | content: "\e671"; 367 | } 368 | .ti-text:before { 369 | content: "\e672"; 370 | } 371 | .ti-stats-up:before { 372 | content: "\e673"; 373 | } 374 | .ti-stats-down:before { 375 | content: "\e674"; 376 | } 377 | .ti-split-v:before { 378 | content: "\e675"; 379 | } 380 | .ti-split-h:before { 381 | content: "\e676"; 382 | } 383 | .ti-smallcap:before { 384 | content: "\e677"; 385 | } 386 | .ti-shine:before { 387 | content: "\e678"; 388 | } 389 | .ti-shift-right:before { 390 | content: "\e679"; 391 | } 392 | .ti-shift-left:before { 393 | content: "\e67a"; 394 | } 395 | .ti-shield:before { 396 | content: "\e67b"; 397 | } 398 | .ti-notepad:before { 399 | content: "\e67c"; 400 | } 401 | .ti-server:before { 402 | content: "\e67d"; 403 | } 404 | .ti-quote-right:before { 405 | content: "\e67e"; 406 | } 407 | .ti-quote-left:before { 408 | content: "\e67f"; 409 | } 410 | .ti-pulse:before { 411 | content: "\e680"; 412 | } 413 | .ti-printer:before { 414 | content: "\e681"; 415 | } 416 | .ti-power-off:before { 417 | content: "\e682"; 418 | } 419 | .ti-plug:before { 420 | content: "\e683"; 421 | } 422 | .ti-pie-chart:before { 423 | content: "\e684"; 424 | } 425 | .ti-paragraph:before { 426 | content: "\e685"; 427 | } 428 | .ti-panel:before { 429 | content: "\e686"; 430 | } 431 | .ti-package:before { 432 | content: "\e687"; 433 | } 434 | .ti-music:before { 435 | content: "\e688"; 436 | } 437 | .ti-music-alt:before { 438 | content: "\e689"; 439 | } 440 | .ti-mouse:before { 441 | content: "\e68a"; 442 | } 443 | .ti-mouse-alt:before { 444 | content: "\e68b"; 445 | } 446 | .ti-money:before { 447 | content: "\e68c"; 448 | } 449 | .ti-microphone:before { 450 | content: "\e68d"; 451 | } 452 | .ti-menu:before { 453 | content: "\e68e"; 454 | } 455 | .ti-menu-alt:before { 456 | content: "\e68f"; 457 | } 458 | .ti-map:before { 459 | content: "\e690"; 460 | } 461 | .ti-map-alt:before { 462 | content: "\e691"; 463 | } 464 | .ti-loop:before { 465 | content: "\e692"; 466 | } 467 | .ti-location-pin:before { 468 | content: "\e693"; 469 | } 470 | .ti-list:before { 471 | content: "\e694"; 472 | } 473 | .ti-light-bulb:before { 474 | content: "\e695"; 475 | } 476 | .ti-Italic:before { 477 | content: "\e696"; 478 | } 479 | .ti-info:before { 480 | content: "\e697"; 481 | } 482 | .ti-infinite:before { 483 | content: "\e698"; 484 | } 485 | .ti-id-badge:before { 486 | content: "\e699"; 487 | } 488 | .ti-hummer:before { 489 | content: "\e69a"; 490 | } 491 | .ti-home:before { 492 | content: "\e69b"; 493 | } 494 | .ti-help:before { 495 | content: "\e69c"; 496 | } 497 | .ti-headphone:before { 498 | content: "\e69d"; 499 | } 500 | .ti-harddrives:before { 501 | content: "\e69e"; 502 | } 503 | .ti-harddrive:before { 504 | content: "\e69f"; 505 | } 506 | .ti-gift:before { 507 | content: "\e6a0"; 508 | } 509 | .ti-game:before { 510 | content: "\e6a1"; 511 | } 512 | .ti-filter:before { 513 | content: "\e6a2"; 514 | } 515 | .ti-files:before { 516 | content: "\e6a3"; 517 | } 518 | .ti-file:before { 519 | content: "\e6a4"; 520 | } 521 | .ti-eraser:before { 522 | content: "\e6a5"; 523 | } 524 | .ti-envelope:before { 525 | content: "\e6a6"; 526 | } 527 | .ti-download:before { 528 | content: "\e6a7"; 529 | } 530 | .ti-direction:before { 531 | content: "\e6a8"; 532 | } 533 | .ti-direction-alt:before { 534 | content: "\e6a9"; 535 | } 536 | .ti-dashboard:before { 537 | content: "\e6aa"; 538 | } 539 | .ti-control-stop:before { 540 | content: "\e6ab"; 541 | } 542 | .ti-control-shuffle:before { 543 | content: "\e6ac"; 544 | } 545 | .ti-control-play:before { 546 | content: "\e6ad"; 547 | } 548 | .ti-control-pause:before { 549 | content: "\e6ae"; 550 | } 551 | .ti-control-forward:before { 552 | content: "\e6af"; 553 | } 554 | .ti-control-backward:before { 555 | content: "\e6b0"; 556 | } 557 | .ti-cloud:before { 558 | content: "\e6b1"; 559 | } 560 | .ti-cloud-up:before { 561 | content: "\e6b2"; 562 | } 563 | .ti-cloud-down:before { 564 | content: "\e6b3"; 565 | } 566 | .ti-clipboard:before { 567 | content: "\e6b4"; 568 | } 569 | .ti-car:before { 570 | content: "\e6b5"; 571 | } 572 | .ti-calendar:before { 573 | content: "\e6b6"; 574 | } 575 | .ti-book:before { 576 | content: "\e6b7"; 577 | } 578 | .ti-bell:before { 579 | content: "\e6b8"; 580 | } 581 | .ti-basketball:before { 582 | content: "\e6b9"; 583 | } 584 | .ti-bar-chart:before { 585 | content: "\e6ba"; 586 | } 587 | .ti-bar-chart-alt:before { 588 | content: "\e6bb"; 589 | } 590 | .ti-back-right:before { 591 | content: "\e6bc"; 592 | } 593 | .ti-back-left:before { 594 | content: "\e6bd"; 595 | } 596 | .ti-arrows-corner:before { 597 | content: "\e6be"; 598 | } 599 | .ti-archive:before { 600 | content: "\e6bf"; 601 | } 602 | .ti-anchor:before { 603 | content: "\e6c0"; 604 | } 605 | .ti-align-right:before { 606 | content: "\e6c1"; 607 | } 608 | .ti-align-left:before { 609 | content: "\e6c2"; 610 | } 611 | .ti-align-justify:before { 612 | content: "\e6c3"; 613 | } 614 | .ti-align-center:before { 615 | content: "\e6c4"; 616 | } 617 | .ti-alert:before { 618 | content: "\e6c5"; 619 | } 620 | .ti-alarm-clock:before { 621 | content: "\e6c6"; 622 | } 623 | .ti-agenda:before { 624 | content: "\e6c7"; 625 | } 626 | .ti-write:before { 627 | content: "\e6c8"; 628 | } 629 | .ti-window:before { 630 | content: "\e6c9"; 631 | } 632 | .ti-widgetized:before { 633 | content: "\e6ca"; 634 | } 635 | .ti-widget:before { 636 | content: "\e6cb"; 637 | } 638 | .ti-widget-alt:before { 639 | content: "\e6cc"; 640 | } 641 | .ti-wallet:before { 642 | content: "\e6cd"; 643 | } 644 | .ti-video-clapper:before { 645 | content: "\e6ce"; 646 | } 647 | .ti-video-camera:before { 648 | content: "\e6cf"; 649 | } 650 | .ti-vector:before { 651 | content: "\e6d0"; 652 | } 653 | .ti-themify-logo:before { 654 | content: "\e6d1"; 655 | } 656 | .ti-themify-favicon:before { 657 | content: "\e6d2"; 658 | } 659 | .ti-themify-favicon-alt:before { 660 | content: "\e6d3"; 661 | } 662 | .ti-support:before { 663 | content: "\e6d4"; 664 | } 665 | .ti-stamp:before { 666 | content: "\e6d5"; 667 | } 668 | .ti-split-v-alt:before { 669 | content: "\e6d6"; 670 | } 671 | .ti-slice:before { 672 | content: "\e6d7"; 673 | } 674 | .ti-shortcode:before { 675 | content: "\e6d8"; 676 | } 677 | .ti-shift-right-alt:before { 678 | content: "\e6d9"; 679 | } 680 | .ti-shift-left-alt:before { 681 | content: "\e6da"; 682 | } 683 | .ti-ruler-alt-2:before { 684 | content: "\e6db"; 685 | } 686 | .ti-receipt:before { 687 | content: "\e6dc"; 688 | } 689 | .ti-pin2:before { 690 | content: "\e6dd"; 691 | } 692 | .ti-pin-alt:before { 693 | content: "\e6de"; 694 | } 695 | .ti-pencil-alt2:before { 696 | content: "\e6df"; 697 | } 698 | .ti-palette:before { 699 | content: "\e6e0"; 700 | } 701 | .ti-more:before { 702 | content: "\e6e1"; 703 | } 704 | .ti-more-alt:before { 705 | content: "\e6e2"; 706 | } 707 | .ti-microphone-alt:before { 708 | content: "\e6e3"; 709 | } 710 | .ti-magnet:before { 711 | content: "\e6e4"; 712 | } 713 | .ti-line-double:before { 714 | content: "\e6e5"; 715 | } 716 | .ti-line-dotted:before { 717 | content: "\e6e6"; 718 | } 719 | .ti-line-dashed:before { 720 | content: "\e6e7"; 721 | } 722 | .ti-layout-width-full:before { 723 | content: "\e6e8"; 724 | } 725 | .ti-layout-width-default:before { 726 | content: "\e6e9"; 727 | } 728 | .ti-layout-width-default-alt:before { 729 | content: "\e6ea"; 730 | } 731 | .ti-layout-tab:before { 732 | content: "\e6eb"; 733 | } 734 | .ti-layout-tab-window:before { 735 | content: "\e6ec"; 736 | } 737 | .ti-layout-tab-v:before { 738 | content: "\e6ed"; 739 | } 740 | .ti-layout-tab-min:before { 741 | content: "\e6ee"; 742 | } 743 | .ti-layout-slider:before { 744 | content: "\e6ef"; 745 | } 746 | .ti-layout-slider-alt:before { 747 | content: "\e6f0"; 748 | } 749 | .ti-layout-sidebar-right:before { 750 | content: "\e6f1"; 751 | } 752 | .ti-layout-sidebar-none:before { 753 | content: "\e6f2"; 754 | } 755 | .ti-layout-sidebar-left:before { 756 | content: "\e6f3"; 757 | } 758 | .ti-layout-placeholder:before { 759 | content: "\e6f4"; 760 | } 761 | .ti-layout-menu:before { 762 | content: "\e6f5"; 763 | } 764 | .ti-layout-menu-v:before { 765 | content: "\e6f6"; 766 | } 767 | .ti-layout-menu-separated:before { 768 | content: "\e6f7"; 769 | } 770 | .ti-layout-menu-full:before { 771 | content: "\e6f8"; 772 | } 773 | .ti-layout-media-right-alt:before { 774 | content: "\e6f9"; 775 | } 776 | .ti-layout-media-right:before { 777 | content: "\e6fa"; 778 | } 779 | .ti-layout-media-overlay:before { 780 | content: "\e6fb"; 781 | } 782 | .ti-layout-media-overlay-alt:before { 783 | content: "\e6fc"; 784 | } 785 | .ti-layout-media-overlay-alt-2:before { 786 | content: "\e6fd"; 787 | } 788 | .ti-layout-media-left-alt:before { 789 | content: "\e6fe"; 790 | } 791 | .ti-layout-media-left:before { 792 | content: "\e6ff"; 793 | } 794 | .ti-layout-media-center-alt:before { 795 | content: "\e700"; 796 | } 797 | .ti-layout-media-center:before { 798 | content: "\e701"; 799 | } 800 | .ti-layout-list-thumb:before { 801 | content: "\e702"; 802 | } 803 | .ti-layout-list-thumb-alt:before { 804 | content: "\e703"; 805 | } 806 | .ti-layout-list-post:before { 807 | content: "\e704"; 808 | } 809 | .ti-layout-list-large-image:before { 810 | content: "\e705"; 811 | } 812 | .ti-layout-line-solid:before { 813 | content: "\e706"; 814 | } 815 | .ti-layout-grid4:before { 816 | content: "\e707"; 817 | } 818 | .ti-layout-grid3:before { 819 | content: "\e708"; 820 | } 821 | .ti-layout-grid2:before { 822 | content: "\e709"; 823 | } 824 | .ti-layout-grid2-thumb:before { 825 | content: "\e70a"; 826 | } 827 | .ti-layout-cta-right:before { 828 | content: "\e70b"; 829 | } 830 | .ti-layout-cta-left:before { 831 | content: "\e70c"; 832 | } 833 | .ti-layout-cta-center:before { 834 | content: "\e70d"; 835 | } 836 | .ti-layout-cta-btn-right:before { 837 | content: "\e70e"; 838 | } 839 | .ti-layout-cta-btn-left:before { 840 | content: "\e70f"; 841 | } 842 | .ti-layout-column4:before { 843 | content: "\e710"; 844 | } 845 | .ti-layout-column3:before { 846 | content: "\e711"; 847 | } 848 | .ti-layout-column2:before { 849 | content: "\e712"; 850 | } 851 | .ti-layout-accordion-separated:before { 852 | content: "\e713"; 853 | } 854 | .ti-layout-accordion-merged:before { 855 | content: "\e714"; 856 | } 857 | .ti-layout-accordion-list:before { 858 | content: "\e715"; 859 | } 860 | .ti-ink-pen:before { 861 | content: "\e716"; 862 | } 863 | .ti-info-alt:before { 864 | content: "\e717"; 865 | } 866 | .ti-help-alt:before { 867 | content: "\e718"; 868 | } 869 | .ti-headphone-alt:before { 870 | content: "\e719"; 871 | } 872 | .ti-hand-point-up:before { 873 | content: "\e71a"; 874 | } 875 | .ti-hand-point-right:before { 876 | content: "\e71b"; 877 | } 878 | .ti-hand-point-left:before { 879 | content: "\e71c"; 880 | } 881 | .ti-hand-point-down:before { 882 | content: "\e71d"; 883 | } 884 | .ti-gallery:before { 885 | content: "\e71e"; 886 | } 887 | .ti-face-smile:before { 888 | content: "\e71f"; 889 | } 890 | .ti-face-sad:before { 891 | content: "\e720"; 892 | } 893 | .ti-credit-card:before { 894 | content: "\e721"; 895 | } 896 | .ti-control-skip-forward:before { 897 | content: "\e722"; 898 | } 899 | .ti-control-skip-backward:before { 900 | content: "\e723"; 901 | } 902 | .ti-control-record:before { 903 | content: "\e724"; 904 | } 905 | .ti-control-eject:before { 906 | content: "\e725"; 907 | } 908 | .ti-comments-smiley:before { 909 | content: "\e726"; 910 | } 911 | .ti-brush-alt:before { 912 | content: "\e727"; 913 | } 914 | .ti-youtube:before { 915 | content: "\e728"; 916 | } 917 | .ti-vimeo:before { 918 | content: "\e729"; 919 | } 920 | .ti-twitter:before { 921 | content: "\e72a"; 922 | } 923 | .ti-time:before { 924 | content: "\e72b"; 925 | } 926 | .ti-tumblr:before { 927 | content: "\e72c"; 928 | } 929 | .ti-skype:before { 930 | content: "\e72d"; 931 | } 932 | .ti-share:before { 933 | content: "\e72e"; 934 | } 935 | .ti-share-alt:before { 936 | content: "\e72f"; 937 | } 938 | .ti-rocket:before { 939 | content: "\e730"; 940 | } 941 | .ti-pinterest:before { 942 | content: "\e731"; 943 | } 944 | .ti-new-window:before { 945 | content: "\e732"; 946 | } 947 | .ti-microsoft:before { 948 | content: "\e733"; 949 | } 950 | .ti-list-ol:before { 951 | content: "\e734"; 952 | } 953 | .ti-linkedin:before { 954 | content: "\e735"; 955 | } 956 | .ti-layout-sidebar-2:before { 957 | content: "\e736"; 958 | } 959 | .ti-layout-grid4-alt:before { 960 | content: "\e737"; 961 | } 962 | .ti-layout-grid3-alt:before { 963 | content: "\e738"; 964 | } 965 | .ti-layout-grid2-alt:before { 966 | content: "\e739"; 967 | } 968 | .ti-layout-column4-alt:before { 969 | content: "\e73a"; 970 | } 971 | .ti-layout-column3-alt:before { 972 | content: "\e73b"; 973 | } 974 | .ti-layout-column2-alt:before { 975 | content: "\e73c"; 976 | } 977 | .ti-instagram:before { 978 | content: "\e73d"; 979 | } 980 | .ti-google:before { 981 | content: "\e73e"; 982 | } 983 | .ti-github:before { 984 | content: "\e73f"; 985 | } 986 | .ti-flickr:before { 987 | content: "\e740"; 988 | } 989 | .ti-facebook:before { 990 | content: "\e741"; 991 | } 992 | .ti-dropbox:before { 993 | content: "\e742"; 994 | } 995 | .ti-dribbble:before { 996 | content: "\e743"; 997 | } 998 | .ti-apple:before { 999 | content: "\e744"; 1000 | } 1001 | .ti-android:before { 1002 | content: "\e745"; 1003 | } 1004 | .ti-save:before { 1005 | content: "\e746"; 1006 | } 1007 | .ti-save-alt:before { 1008 | content: "\e747"; 1009 | } 1010 | .ti-yahoo:before { 1011 | content: "\e748"; 1012 | } 1013 | .ti-wordpress:before { 1014 | content: "\e749"; 1015 | } 1016 | .ti-vimeo-alt:before { 1017 | content: "\e74a"; 1018 | } 1019 | .ti-twitter-alt:before { 1020 | content: "\e74b"; 1021 | } 1022 | .ti-tumblr-alt:before { 1023 | content: "\e74c"; 1024 | } 1025 | .ti-trello:before { 1026 | content: "\e74d"; 1027 | } 1028 | .ti-stack-overflow:before { 1029 | content: "\e74e"; 1030 | } 1031 | .ti-soundcloud:before { 1032 | content: "\e74f"; 1033 | } 1034 | .ti-sharethis:before { 1035 | content: "\e750"; 1036 | } 1037 | .ti-sharethis-alt:before { 1038 | content: "\e751"; 1039 | } 1040 | .ti-reddit:before { 1041 | content: "\e752"; 1042 | } 1043 | .ti-pinterest-alt:before { 1044 | content: "\e753"; 1045 | } 1046 | .ti-microsoft-alt:before { 1047 | content: "\e754"; 1048 | } 1049 | .ti-linux:before { 1050 | content: "\e755"; 1051 | } 1052 | .ti-jsfiddle:before { 1053 | content: "\e756"; 1054 | } 1055 | .ti-joomla:before { 1056 | content: "\e757"; 1057 | } 1058 | .ti-html5:before { 1059 | content: "\e758"; 1060 | } 1061 | .ti-flickr-alt:before { 1062 | content: "\e759"; 1063 | } 1064 | .ti-email:before { 1065 | content: "\e75a"; 1066 | } 1067 | .ti-drupal:before { 1068 | content: "\e75b"; 1069 | } 1070 | .ti-dropbox-alt:before { 1071 | content: "\e75c"; 1072 | } 1073 | .ti-css3:before { 1074 | content: "\e75d"; 1075 | } 1076 | .ti-rss:before { 1077 | content: "\e75e"; 1078 | } 1079 | .ti-rss-alt:before { 1080 | content: "\e75f"; 1081 | } 1082 | -------------------------------------------------------------------------------- /public/assets/fonts/T-qN9Yh40TTJeenUALkjgg.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/T-qN9Yh40TTJeenUALkjgg.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont(1).eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/fontawesome-webfont(1).eot -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /public/assets/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /public/assets/fonts/themify.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/themify.eot -------------------------------------------------------------------------------- /public/assets/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/themify.ttf -------------------------------------------------------------------------------- /public/assets/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/themify.woff -------------------------------------------------------------------------------- /public/assets/fonts/z6c3Zzm51I2zB_Gi7146Bg.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/fonts/z6c3Zzm51I2zB_Gi7146Bg.woff2 -------------------------------------------------------------------------------- /public/assets/images/arrowup.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/arrowup.gif -------------------------------------------------------------------------------- /public/assets/images/btnclose.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/btnclose.jpg -------------------------------------------------------------------------------- /public/assets/images/btnclose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/btnclose.png -------------------------------------------------------------------------------- /public/assets/images/btnclose2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/btnclose2.png -------------------------------------------------------------------------------- /public/assets/images/deleteicon1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/deleteicon1.jpg -------------------------------------------------------------------------------- /public/assets/images/editicon1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/editicon1.jpg -------------------------------------------------------------------------------- /public/assets/images/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/facebook.png -------------------------------------------------------------------------------- /public/assets/images/icongallery1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/icongallery1.jpg -------------------------------------------------------------------------------- /public/assets/images/icongallery2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/icongallery2.jpg -------------------------------------------------------------------------------- /public/assets/images/iconmessage_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/iconmessage_1.jpg -------------------------------------------------------------------------------- /public/assets/images/iconmessage_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/iconmessage_2.jpg -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-balls.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-bars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-bubbles3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 9 | 10 | 11 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-cubes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-cylon-red.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-cylon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-spin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-spin.svg.bak: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-spinning-bubbles.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /public/assets/images/loadings/loading-spokes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /public/assets/images/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/logo.jpg -------------------------------------------------------------------------------- /public/assets/images/select-arrow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/select-arrow.jpg -------------------------------------------------------------------------------- /public/assets/images/select-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/public/assets/images/select-arrow.png -------------------------------------------------------------------------------- /public/assets/scripts/bootstrap/bootstrap-checkbox-radio.js: -------------------------------------------------------------------------------- 1 | !function ($) { 2 | 3 | /* CHECKBOX PUBLIC CLASS DEFINITION 4 | * ============================== */ 5 | 6 | var Checkbox = function (element, options) { 7 | this.init(element, options); 8 | } 9 | 10 | Checkbox.prototype = { 11 | 12 | constructor: Checkbox 13 | 14 | , init: function (element, options) { 15 | var $el = this.$element = $(element) 16 | 17 | this.options = $.extend({}, $.fn.checkbox.defaults, options); 18 | $el.before(this.options.template); 19 | this.setState(); 20 | } 21 | 22 | , setState: function () { 23 | var $el = this.$element 24 | , $parent = $el.closest('.checkbox'); 25 | 26 | $el.prop('disabled') && $parent.addClass('disabled'); 27 | $el.prop('checked') && $parent.addClass('checked'); 28 | } 29 | 30 | , toggle: function () { 31 | var ch = 'checked' 32 | , $el = this.$element 33 | , $parent = $el.closest('.checkbox') 34 | , checked = $el.prop(ch) 35 | , e = $.Event('toggle') 36 | 37 | if ($el.prop('disabled') == false) { 38 | $parent.toggleClass(ch) && checked ? $el.removeAttr(ch) : $el.prop(ch, ch); 39 | $el.trigger(e).trigger('change'); 40 | } 41 | } 42 | 43 | , setCheck: function (option) { 44 | var d = 'disabled' 45 | , ch = 'checked' 46 | , $el = this.$element 47 | , $parent = $el.closest('.checkbox') 48 | , checkAction = option == 'check' ? true : false 49 | , e = $.Event(option) 50 | 51 | $parent[checkAction ? 'addClass' : 'removeClass' ](ch) && checkAction ? $el.prop(ch, ch) : $el.removeAttr(ch); 52 | $el.trigger(e).trigger('change'); 53 | } 54 | 55 | } 56 | 57 | 58 | /* CHECKBOX PLUGIN DEFINITION 59 | * ======================== */ 60 | 61 | var old = $.fn.checkbox 62 | 63 | $.fn.checkbox = function (option) { 64 | return this.each(function () { 65 | var $this = $(this) 66 | , data = $this.data('checkbox') 67 | , options = $.extend({}, $.fn.checkbox.defaults, $this.data(), typeof option == 'object' && option); 68 | if (!data) $this.data('checkbox', (data = new Checkbox(this, options))); 69 | if (option == 'toggle') data.toggle() 70 | if (option == 'check' || option == 'uncheck') data.setCheck(option) 71 | else if (option) data.setState(); 72 | }); 73 | } 74 | 75 | $.fn.checkbox.defaults = { 76 | template: '' 77 | } 78 | 79 | 80 | /* CHECKBOX NO CONFLICT 81 | * ================== */ 82 | 83 | $.fn.checkbox.noConflict = function () { 84 | $.fn.checkbox = old; 85 | return this; 86 | } 87 | 88 | 89 | /* CHECKBOX DATA-API 90 | * =============== */ 91 | 92 | $(document).on('click.checkbox.data-api', '[data-toggle^=checkbox], .checkbox', function (e) { 93 | var $checkbox = $(e.target); 94 | if (e.target.tagName != "A") { 95 | e && e.preventDefault() && e.stopPropagation(); 96 | if (!$checkbox.hasClass('checkbox')) $checkbox = $checkbox.closest('.checkbox'); 97 | $checkbox.find(':checkbox').checkbox('toggle'); 98 | } 99 | }); 100 | 101 | $(function () { 102 | $('input[type="checkbox"]').each(function () { 103 | var $checkbox = $(this); 104 | $checkbox.checkbox(); 105 | }); 106 | }); 107 | 108 | }(window.jQuery); 109 | 110 | /* ============================================================= 111 | * flatui-radio v0.0.3 112 | * ============================================================ */ 113 | 114 | !function ($) { 115 | 116 | /* RADIO PUBLIC CLASS DEFINITION 117 | * ============================== */ 118 | 119 | var Radio = function (element, options) { 120 | this.init(element, options); 121 | } 122 | 123 | Radio.prototype = { 124 | 125 | constructor: Radio 126 | 127 | , init: function (element, options) { 128 | var $el = this.$element = $(element) 129 | 130 | this.options = $.extend({}, $.fn.radio.defaults, options); 131 | $el.before(this.options.template); 132 | this.setState(); 133 | } 134 | 135 | , setState: function () { 136 | var $el = this.$element 137 | , $parent = $el.closest('.radio'); 138 | 139 | $el.prop('disabled') && $parent.addClass('disabled'); 140 | $el.prop('checked') && $parent.addClass('checked'); 141 | } 142 | 143 | , toggle: function () { 144 | var d = 'disabled' 145 | , ch = 'checked' 146 | , $el = this.$element 147 | , checked = $el.prop(ch) 148 | , $parent = $el.closest('.radio') 149 | , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body') 150 | , $elemGroup = $parentWrap.find(':radio[name="' + $el.attr('name') + '"]') 151 | , e = $.Event('toggle') 152 | 153 | if ($el.prop(d) == false) { 154 | $elemGroup.not($el).each(function () { 155 | var $el = $(this) 156 | , $parent = $(this).closest('.radio'); 157 | 158 | if ($el.prop(d) == false) { 159 | $parent.removeClass(ch) && $el.removeAttr(ch).trigger('change'); 160 | } 161 | }); 162 | 163 | if (checked == false) $parent.addClass(ch) && $el.prop(ch, true); 164 | $el.trigger(e); 165 | 166 | if (checked !== $el.prop(ch)) { 167 | $el.trigger('change'); 168 | } 169 | } 170 | } 171 | 172 | , setCheck: function (option) { 173 | var ch = 'checked' 174 | , $el = this.$element 175 | , $parent = $el.closest('.radio') 176 | , checkAction = option == 'check' ? true : false 177 | , checked = $el.prop(ch) 178 | , $parentWrap = $el.closest('form').length ? $el.closest('form') : $el.closest('body') 179 | , $elemGroup = $parentWrap.find(':radio[name="' + $el['attr']('name') + '"]') 180 | , e = $.Event(option) 181 | 182 | $elemGroup.not($el).each(function () { 183 | var $el = $(this) 184 | , $parent = $(this).closest('.radio'); 185 | 186 | $parent.removeClass(ch) && $el.removeAttr(ch); 187 | }); 188 | 189 | $parent[checkAction ? 'addClass' : 'removeClass'](ch) && checkAction ? $el.prop(ch, ch) : $el.removeAttr(ch); 190 | $el.trigger(e); 191 | 192 | if (checked !== $el.prop(ch)) { 193 | $el.trigger('change'); 194 | } 195 | } 196 | 197 | } 198 | 199 | 200 | /* RADIO PLUGIN DEFINITION 201 | * ======================== */ 202 | 203 | var old = $.fn.radio 204 | 205 | $.fn.radio = function (option) { 206 | return this.each(function () { 207 | var $this = $(this) 208 | , data = $this.data('radio') 209 | , options = $.extend({}, $.fn.radio.defaults, $this.data(), typeof option == 'object' && option); 210 | if (!data) $this.data('radio', (data = new Radio(this, options))); 211 | if (option == 'toggle') data.toggle() 212 | if (option == 'check' || option == 'uncheck') data.setCheck(option) 213 | else if (option) data.setState(); 214 | }); 215 | } 216 | 217 | $.fn.radio.defaults = { 218 | template: '' 219 | } 220 | 221 | 222 | /* RADIO NO CONFLICT 223 | * ================== */ 224 | 225 | $.fn.radio.noConflict = function () { 226 | $.fn.radio = old; 227 | return this; 228 | } 229 | 230 | 231 | /* RADIO DATA-API 232 | * =============== */ 233 | 234 | $(document).on('click.radio.data-api', '[data-toggle^=radio], .radio', function (e) { 235 | var $radio = $(e.target); 236 | e && e.preventDefault() && e.stopPropagation(); 237 | if (!$radio.hasClass('radio')) $radio = $radio.closest('.radio'); 238 | $radio.find(':radio').radio('toggle'); 239 | }); 240 | 241 | $(function () { 242 | $('input[type="radio"]').each(function () { 243 | var $radio = $(this); 244 | $radio.radio(); 245 | }); 246 | }); 247 | 248 | }(window.jQuery); 249 | -------------------------------------------------------------------------------- /public/assets/scripts/bootstrap/bootstrap-notify.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | 4 | 5 | Creative Tim Modifications 6 | 7 | Lines: 239, 240 was changed from top: 5px to top: 50% and we added margin-top: -13px. In this way the close button will be aligned vertically 8 | Line:242 - modified when the icon is set, we add the class "alert-with-icon", so there will be enough space for the icon. 9 | 10 | 11 | 12 | 13 | */ 14 | 15 | 16 | /* 17 | * Project: Bootstrap Notify = v3.1.5 18 | * Description: Turns standard Bootstrap alerts into "Growl-like" notifications. 19 | * Author: Mouse0270 aka Robert McIntosh 20 | * License: MIT License 21 | * Website: https://github.com/mouse0270/bootstrap-growl 22 | */ 23 | 24 | /* global define:false, require: false, jQuery:false */ 25 | 26 | (function (factory) { 27 | if (typeof define === 'function' && define.amd) { 28 | // AMD. Register as an anonymous module. 29 | define(['jquery'], factory); 30 | } else if (typeof exports === 'object') { 31 | // Node/CommonJS 32 | factory(require('jquery')); 33 | } else { 34 | // Browser globals 35 | factory(jQuery); 36 | } 37 | }(function ($) { 38 | // Create the defaults once 39 | var defaults = { 40 | element: 'body', 41 | position: null, 42 | type: "info", 43 | allow_dismiss: true, 44 | allow_duplicates: true, 45 | newest_on_top: false, 46 | showProgressbar: false, 47 | placement: { 48 | from: "top", 49 | align: "right" 50 | }, 51 | offset: 20, 52 | spacing: 10, 53 | z_index: 1031, 54 | delay: 5000, 55 | timer: 1000, 56 | url_target: '_blank', 57 | mouse_over: null, 58 | animate: { 59 | enter: 'animated fadeInDown', 60 | exit: 'animated fadeOutUp' 61 | }, 62 | onShow: null, 63 | onShown: null, 64 | onClose: null, 65 | onClosed: null, 66 | icon_type: 'class', 67 | template: '' 68 | }; 69 | 70 | String.format = function () { 71 | var str = arguments[0]; 72 | for (var i = 1; i < arguments.length; i++) { 73 | str = str.replace(RegExp("\\{" + (i - 1) + "\\}", "gm"), arguments[i]); 74 | } 75 | return str; 76 | }; 77 | 78 | function isDuplicateNotification(notification) { 79 | var isDupe = false; 80 | 81 | $('[data-notify="container"]').each(function (i, el) { 82 | var $el = $(el); 83 | var title = $el.find('[data-notify="title"]').text().trim(); 84 | var message = $el.find('[data-notify="message"]').html().trim(); 85 | 86 | // The input string might be different than the actual parsed HTML string! 87 | // (
vs
for example) 88 | // So we have to force-parse this as HTML here! 89 | var isSameTitle = title === $("
" + notification.settings.content.title + "
").html().trim(); 90 | var isSameMsg = message === $("
" + notification.settings.content.message + "
").html().trim(); 91 | var isSameType = $el.hasClass('alert-' + notification.settings.type); 92 | 93 | if (isSameTitle && isSameMsg && isSameType) { 94 | //we found the dupe. Set the var and stop checking. 95 | isDupe = true; 96 | } 97 | return !isDupe; 98 | }); 99 | 100 | return isDupe; 101 | } 102 | 103 | function Notify(element, content, options) { 104 | // Setup Content of Notify 105 | var contentObj = { 106 | content: { 107 | message: typeof content === 'object' ? content.message : content, 108 | title: content.title ? content.title : '', 109 | icon: content.icon ? content.icon : '', 110 | url: content.url ? content.url : '#', 111 | target: content.target ? content.target : '-' 112 | } 113 | }; 114 | 115 | options = $.extend(true, {}, contentObj, options); 116 | this.settings = $.extend(true, {}, defaults, options); 117 | this._defaults = defaults; 118 | if (this.settings.content.target === "-") { 119 | this.settings.content.target = this.settings.url_target; 120 | } 121 | this.animations = { 122 | start: 'webkitAnimationStart oanimationstart MSAnimationStart animationstart', 123 | end: 'webkitAnimationEnd oanimationend MSAnimationEnd animationend' 124 | }; 125 | 126 | if (typeof this.settings.offset === 'number') { 127 | this.settings.offset = { 128 | x: this.settings.offset, 129 | y: this.settings.offset 130 | }; 131 | } 132 | 133 | //if duplicate messages are not allowed, then only continue if this new message is not a duplicate of one that it already showing 134 | if (this.settings.allow_duplicates || (!this.settings.allow_duplicates && !isDuplicateNotification(this))) { 135 | this.init(); 136 | } 137 | } 138 | 139 | $.extend(Notify.prototype, { 140 | init: function () { 141 | var self = this; 142 | 143 | this.buildNotify(); 144 | if (this.settings.content.icon) { 145 | this.setIcon(); 146 | } 147 | if (this.settings.content.url != "#") { 148 | this.styleURL(); 149 | } 150 | this.styleDismiss(); 151 | this.placement(); 152 | this.bind(); 153 | 154 | this.notify = { 155 | $ele: this.$ele, 156 | update: function (command, update) { 157 | var commands = {}; 158 | if (typeof command === "string") { 159 | commands[command] = update; 160 | } else { 161 | commands = command; 162 | } 163 | for (var cmd in commands) { 164 | switch (cmd) { 165 | case "type": 166 | this.$ele.removeClass('alert-' + self.settings.type); 167 | this.$ele.find('[data-notify="progressbar"] > .progress-bar').removeClass('progress-bar-' + self.settings.type); 168 | self.settings.type = commands[cmd]; 169 | this.$ele.addClass('alert-' + commands[cmd]).find('[data-notify="progressbar"] > .progress-bar').addClass('progress-bar-' + commands[cmd]); 170 | break; 171 | case "icon": 172 | var $icon = this.$ele.find('[data-notify="icon"]'); 173 | if (self.settings.icon_type.toLowerCase() === 'class') { 174 | $icon.removeClass(self.settings.content.icon).addClass(commands[cmd]); 175 | } else { 176 | if (!$icon.is('img')) { 177 | $icon.find('img'); 178 | } 179 | $icon.attr('src', commands[cmd]); 180 | } 181 | break; 182 | case "progress": 183 | var newDelay = self.settings.delay - (self.settings.delay * (commands[cmd] / 100)); 184 | this.$ele.data('notify-delay', newDelay); 185 | this.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', commands[cmd]).css('width', commands[cmd] + '%'); 186 | break; 187 | case "url": 188 | this.$ele.find('[data-notify="url"]').attr('href', commands[cmd]); 189 | break; 190 | case "target": 191 | this.$ele.find('[data-notify="url"]').attr('target', commands[cmd]); 192 | break; 193 | default: 194 | this.$ele.find('[data-notify="' + cmd + '"]').html(commands[cmd]); 195 | } 196 | } 197 | var posX = this.$ele.outerHeight() + parseInt(self.settings.spacing) + parseInt(self.settings.offset.y); 198 | self.reposition(posX); 199 | }, 200 | close: function () { 201 | self.close(); 202 | } 203 | }; 204 | 205 | }, 206 | buildNotify: function () { 207 | var content = this.settings.content; 208 | this.$ele = $(String.format(this.settings.template, this.settings.type, content.title, content.message, content.url, content.target)); 209 | this.$ele.attr('data-notify-position', this.settings.placement.from + '-' + this.settings.placement.align); 210 | if (!this.settings.allow_dismiss) { 211 | this.$ele.find('[data-notify="dismiss"]').css('display', 'none'); 212 | } 213 | if ((this.settings.delay <= 0 && !this.settings.showProgressbar) || !this.settings.showProgressbar) { 214 | this.$ele.find('[data-notify="progressbar"]').remove(); 215 | } 216 | }, 217 | setIcon: function () { 218 | 219 | this.$ele.addClass('alert-with-icon'); 220 | 221 | if (this.settings.icon_type.toLowerCase() === 'class') { 222 | this.$ele.find('[data-notify="icon"]').addClass(this.settings.content.icon); 223 | } else { 224 | if (this.$ele.find('[data-notify="icon"]').is('img')) { 225 | this.$ele.find('[data-notify="icon"]').attr('src', this.settings.content.icon); 226 | } else { 227 | this.$ele.find('[data-notify="icon"]').append('Notify Icon'); 228 | } 229 | } 230 | }, 231 | styleDismiss: function () { 232 | this.$ele.find('[data-notify="dismiss"]').css({ 233 | position: 'absolute', 234 | right: '10px', 235 | top: '50%', 236 | marginTop: '-13px', 237 | zIndex: this.settings.z_index + 2 238 | }); 239 | }, 240 | styleURL: function () { 241 | this.$ele.find('[data-notify="url"]').css({ 242 | backgroundImage: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)', 243 | height: '100%', 244 | left: 0, 245 | position: 'absolute', 246 | top: 0, 247 | width: '100%', 248 | zIndex: this.settings.z_index + 1 249 | }); 250 | }, 251 | placement: function () { 252 | var self = this, 253 | offsetAmt = this.settings.offset.y, 254 | css = { 255 | display: 'inline-block', 256 | margin: '0px auto', 257 | position: this.settings.position ? this.settings.position : (this.settings.element === 'body' ? 'fixed' : 'absolute'), 258 | transition: 'all .5s ease-in-out', 259 | zIndex: this.settings.z_index 260 | }, 261 | hasAnimation = false, 262 | settings = this.settings; 263 | 264 | $('[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])').each(function () { 265 | offsetAmt = Math.max(offsetAmt, parseInt($(this).css(settings.placement.from)) + parseInt($(this).outerHeight()) + parseInt(settings.spacing)); 266 | }); 267 | if (this.settings.newest_on_top === true) { 268 | offsetAmt = this.settings.offset.y; 269 | } 270 | css[this.settings.placement.from] = offsetAmt + 'px'; 271 | 272 | switch (this.settings.placement.align) { 273 | case "left": 274 | case "right": 275 | css[this.settings.placement.align] = this.settings.offset.x + 'px'; 276 | break; 277 | case "center": 278 | css.left = 0; 279 | css.right = 0; 280 | break; 281 | } 282 | this.$ele.css(css).addClass(this.settings.animate.enter); 283 | $.each(Array('webkit-', 'moz-', 'o-', 'ms-', ''), function (index, prefix) { 284 | self.$ele[0].style[prefix + 'AnimationIterationCount'] = 1; 285 | }); 286 | 287 | $(this.settings.element).append(this.$ele); 288 | 289 | if (this.settings.newest_on_top === true) { 290 | offsetAmt = (parseInt(offsetAmt) + parseInt(this.settings.spacing)) + this.$ele.outerHeight(); 291 | this.reposition(offsetAmt); 292 | } 293 | 294 | if ($.isFunction(self.settings.onShow)) { 295 | self.settings.onShow.call(this.$ele); 296 | } 297 | 298 | this.$ele.one(this.animations.start, function () { 299 | hasAnimation = true; 300 | }).one(this.animations.end, function () { 301 | if ($.isFunction(self.settings.onShown)) { 302 | self.settings.onShown.call(this); 303 | } 304 | }); 305 | 306 | setTimeout(function () { 307 | if (!hasAnimation) { 308 | if ($.isFunction(self.settings.onShown)) { 309 | self.settings.onShown.call(this); 310 | } 311 | } 312 | }, 600); 313 | }, 314 | bind: function () { 315 | var self = this; 316 | 317 | this.$ele.find('[data-notify="dismiss"]').on('click', function () { 318 | self.close(); 319 | }); 320 | 321 | this.$ele.mouseover(function () { 322 | $(this).data('data-hover', "true"); 323 | }).mouseout(function () { 324 | $(this).data('data-hover', "false"); 325 | }); 326 | this.$ele.data('data-hover', "false"); 327 | 328 | if (this.settings.delay > 0) { 329 | self.$ele.data('notify-delay', self.settings.delay); 330 | var timer = setInterval(function () { 331 | var delay = parseInt(self.$ele.data('notify-delay')) - self.settings.timer; 332 | if ((self.$ele.data('data-hover') === 'false' && self.settings.mouse_over === "pause") || self.settings.mouse_over != "pause") { 333 | var percent = ((self.settings.delay - delay) / self.settings.delay) * 100; 334 | self.$ele.data('notify-delay', delay); 335 | self.$ele.find('[data-notify="progressbar"] > div').attr('aria-valuenow', percent).css('width', percent + '%'); 336 | } 337 | if (delay <= -(self.settings.timer)) { 338 | clearInterval(timer); 339 | self.close(); 340 | } 341 | }, self.settings.timer); 342 | } 343 | }, 344 | close: function () { 345 | var self = this, 346 | posX = parseInt(this.$ele.css(this.settings.placement.from)), 347 | hasAnimation = false; 348 | 349 | this.$ele.data('closing', 'true').addClass(this.settings.animate.exit); 350 | self.reposition(posX); 351 | 352 | if ($.isFunction(self.settings.onClose)) { 353 | self.settings.onClose.call(this.$ele); 354 | } 355 | 356 | this.$ele.one(this.animations.start, function () { 357 | hasAnimation = true; 358 | }).one(this.animations.end, function () { 359 | $(this).remove(); 360 | if ($.isFunction(self.settings.onClosed)) { 361 | self.settings.onClosed.call(this); 362 | } 363 | }); 364 | 365 | setTimeout(function () { 366 | if (!hasAnimation) { 367 | self.$ele.remove(); 368 | if (self.settings.onClosed) { 369 | self.settings.onClosed(self.$ele); 370 | } 371 | } 372 | }, 600); 373 | }, 374 | reposition: function (posX) { 375 | var self = this, 376 | notifies = '[data-notify-position="' + this.settings.placement.from + '-' + this.settings.placement.align + '"]:not([data-closing="true"])', 377 | $elements = this.$ele.nextAll(notifies); 378 | if (this.settings.newest_on_top === true) { 379 | $elements = this.$ele.prevAll(notifies); 380 | } 381 | $elements.each(function () { 382 | $(this).css(self.settings.placement.from, posX); 383 | posX = (parseInt(posX) + parseInt(self.settings.spacing)) + $(this).outerHeight(); 384 | }); 385 | } 386 | }); 387 | 388 | $.notify = function (content, options) { 389 | var plugin = new Notify(this, content, options); 390 | return plugin.notify; 391 | }; 392 | $.notifyDefaults = function (options) { 393 | defaults = $.extend(true, {}, defaults, options); 394 | return defaults; 395 | }; 396 | $.notifyClose = function (command) { 397 | if (typeof command === "undefined" || command === "all") { 398 | $('[data-notify]').find('[data-notify="dismiss"]').trigger('click'); 399 | } else { 400 | $('[data-notify-position="' + command + '"]').find('[data-notify="dismiss"]').trigger('click'); 401 | } 402 | }; 403 | 404 | })); 405 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/murilolivorato/vue-laravel-crud/952f86f2e62d7ece467c227bbdefdd740941467d/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 great 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 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ⚠️ This project is no longer maintained. It is kept here for reference purposes only. Please be aware that it contains outdated dependencies with known security vulnerabilities. 2 | 3 | ## ABOUT LARAVEL VUE CRUD 4 | 5 | Laravel Vue Crud , VUE 2.0 and LARAVEL 5.4 . 6 | 7 | 8 | - Create Items 9 | - Update Items 10 | - Delete Single Item 11 | - Delete Many Items 12 | - Pagination 13 | - Ajax Request with Axios 14 | - Validation with Laravel Request + Vue 15 | 16 | ## EXAMPLE VIDEO 17 | 18 | Example video at you tube 19 | https://www.youtube.com/watch?v=UBLjQkOwLDw 20 | 21 | 22 | -------------------------------------------------------------------------------- /readme.md.bak: -------------------------------------------------------------------------------- 1 | ## About Laravel Vue Crud 2 | 3 | Laravel Vue Crud , VUE 2.0 and LARAVEL 5.4 . 4 | 5 | 6 | - Create Items 7 | - Update Items 8 | - Delete Single Item 9 | - Delete Many Items 10 | - Pagination 11 | - Ajax Request with Axios 12 | - Validation with Laravel Request + Vue 13 | 14 | ## Example Video 15 | 16 | Example video at you tube 17 | https://www.youtube.com/watch?v=UBLjQkOwLDw 18 | 19 | 20 | -------------------------------------------------------------------------------- /resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * First we will load all of this project's JavaScript dependencies which 4 | * includes Vue and other libraries. It is a great starting point when 5 | * building robust, powerful web applications using Vue and Laravel. 6 | */ 7 | 8 | require('./bootstrap'); 9 | 10 | /** 11 | * Next, we will create a fresh Vue application instance and attach it to 12 | * the page. Then, you may begin adding components to this application 13 | * or customize the JavaScript scaffolding to fit your unique needs. 14 | */ 15 | 16 | Vue.component('example', require('./components/Example.vue')); 17 | 18 | const app = new Vue({ 19 | el: '#app' 20 | }); 21 | -------------------------------------------------------------------------------- /resources/assets/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | 2 | window._ = require('lodash'); 3 | 4 | /** 5 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support 6 | * for JavaScript based Bootstrap features such as modals and tabs. This 7 | * code may be modified to fit the specific needs of your application. 8 | */ 9 | 10 | window.$ = window.jQuery = require('jquery'); 11 | 12 | require('bootstrap-sass'); 13 | 14 | /** 15 | * Vue is a modern JavaScript library for building interactive web interfaces 16 | * using reactive data binding and reusable components. Vue's API is clean 17 | * and simple, leaving you to focus on building your next great project. 18 | */ 19 | 20 | window.Vue = require('vue'); 21 | 22 | /** 23 | * We'll load the axios HTTP library which allows us to easily issue requests 24 | * to our Laravel back-end. This library automatically handles sending the 25 | * CSRF token as a header based on the value of the "XSRF" token cookie. 26 | */ 27 | 28 | window.axios = require('axios'); 29 | 30 | window.axios.defaults.headers.common['X-CSRF-TOKEN'] = window.Laravel.csrfToken; 31 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 32 | 33 | /** 34 | * Echo exposes an expressive API for subscribing to channels and listening 35 | * for events that are broadcast by Laravel. Echo and event broadcasting 36 | * allows your team to easily build robust real-time web applications. 37 | */ 38 | 39 | // import Echo from 'laravel-echo' 40 | 41 | // window.Pusher = require('pusher-js'); 42 | 43 | // window.Echo = new Echo({ 44 | // broadcaster: 'pusher', 45 | // key: 'your-pusher-key' 46 | // }); 47 | -------------------------------------------------------------------------------- /resources/assets/js/components/Example.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 24 | -------------------------------------------------------------------------------- /resources/assets/sass/_variables.scss: -------------------------------------------------------------------------------- 1 | 2 | // Body 3 | $body-bg: #f5f8fa; 4 | 5 | // Borders 6 | $laravel-border-color: darken($body-bg, 10%); 7 | $list-group-border: $laravel-border-color; 8 | $navbar-default-border: $laravel-border-color; 9 | $panel-default-border: $laravel-border-color; 10 | $panel-inner-border: $laravel-border-color; 11 | 12 | // Brands 13 | $brand-primary: #3097D1; 14 | $brand-info: #8eb4cb; 15 | $brand-success: #2ab27b; 16 | $brand-warning: #cbb956; 17 | $brand-danger: #bf5329; 18 | 19 | // Typography 20 | $icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/"; 21 | $font-family-sans-serif: "Raleway", sans-serif; 22 | $font-size-base: 14px; 23 | $line-height-base: 1.6; 24 | $text-color: #636b6f; 25 | 26 | // Navbar 27 | $navbar-default-bg: #fff; 28 | 29 | // Buttons 30 | $btn-default-color: $text-color; 31 | 32 | // Inputs 33 | $input-border: lighten($text-color, 40%); 34 | $input-border-focus: lighten($brand-primary, 25%); 35 | $input-color-placeholder: lighten($text-color, 30%); 36 | 37 | // Panels 38 | $panel-default-heading-bg: #fff; 39 | -------------------------------------------------------------------------------- /resources/assets/sass/app.scss: -------------------------------------------------------------------------------- 1 | 2 | // Fonts 3 | @import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600); 4 | 5 | // Variables 6 | @import "variables"; 7 | 8 | // Bootstrap 9 | @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap"; 10 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /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 | 'reset' => 'Your password has been reset!', 18 | 'sent' => 'We have e-mailed your password reset link!', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that e-mail address.", 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 | 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', 20 | 'alpha' => 'The :attribute may only contain letters.', 21 | 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', 22 | 'alpha_num' => 'The :attribute may only contain letters and numbers.', 23 | 'array' => 'The :attribute must be an array.', 24 | 'before' => 'The :attribute must be a date before :date.', 25 | 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', 26 | 'between' => [ 27 | 'numeric' => 'The :attribute must be between :min and :max.', 28 | 'file' => 'The :attribute must be between :min and :max kilobytes.', 29 | 'string' => 'The :attribute must be between :min and :max characters.', 30 | 'array' => 'The :attribute must have between :min and :max items.', 31 | ], 32 | 'boolean' => 'The :attribute field must be true or false.', 33 | 'confirmed' => 'The :attribute confirmation does not match.', 34 | 'date' => 'The :attribute is not a valid date.', 35 | 'date_format' => 'The :attribute does not match the format :format.', 36 | 'different' => 'The :attribute and :other must be different.', 37 | 'digits' => 'The :attribute must be :digits digits.', 38 | 'digits_between' => 'The :attribute must be between :min and :max digits.', 39 | 'dimensions' => 'The :attribute has invalid image dimensions.', 40 | 'distinct' => 'The :attribute field has a duplicate value.', 41 | 'email' => 'The :attribute must be a valid email address.', 42 | 'exists' => 'The selected :attribute is invalid.', 43 | 'file' => 'The :attribute must be a file.', 44 | 'filled' => 'The :attribute field must have a value.', 45 | 'image' => 'The :attribute must be an image.', 46 | 'in' => 'The selected :attribute is invalid.', 47 | 'in_array' => 'The :attribute field does not exist in :other.', 48 | 'integer' => 'The :attribute must be an integer.', 49 | 'ip' => 'The :attribute must be a valid IP address.', 50 | 'json' => 'The :attribute must be a valid JSON string.', 51 | 'max' => [ 52 | 'numeric' => 'The :attribute may not be greater than :max.', 53 | 'file' => 'The :attribute may not be greater than :max kilobytes.', 54 | 'string' => 'The :attribute may not be greater than :max characters.', 55 | 'array' => 'The :attribute may not have more than :max items.', 56 | ], 57 | 'mimes' => 'The :attribute must be a file of type: :values.', 58 | 'mimetypes' => 'The :attribute must be a file of type: :values.', 59 | 'min' => [ 60 | 'numeric' => 'The :attribute must be at least :min.', 61 | 'file' => 'The :attribute must be at least :min kilobytes.', 62 | 'string' => 'The :attribute must be at least :min characters.', 63 | 'array' => 'The :attribute must have at least :min items.', 64 | ], 65 | 'not_in' => 'The selected :attribute is invalid.', 66 | 'numeric' => 'The :attribute must be a number.', 67 | 'present' => 'The :attribute field must be present.', 68 | 'regex' => 'The :attribute format is invalid.', 69 | 'required' => 'The :attribute field is required.', 70 | 'required_if' => 'The :attribute field is required when :other is :value.', 71 | 'required_unless' => 'The :attribute field is required unless :other is in :values.', 72 | 'required_with' => 'The :attribute field is required when :values is present.', 73 | 'required_with_all' => 'The :attribute field is required when :values is present.', 74 | 'required_without' => 'The :attribute field is required when :values is not present.', 75 | 'required_without_all' => 'The :attribute field is required when none of :values are present.', 76 | 'same' => 'The :attribute and :other must match.', 77 | 'size' => [ 78 | 'numeric' => 'The :attribute must be :size.', 79 | 'file' => 'The :attribute must be :size kilobytes.', 80 | 'string' => 'The :attribute must be :size characters.', 81 | 'array' => 'The :attribute must contain :size items.', 82 | ], 83 | 'string' => 'The :attribute must be a string.', 84 | 'timezone' => 'The :attribute must be a valid zone.', 85 | 'unique' => 'The :attribute has already been taken.', 86 | 'uploaded' => 'The :attribute failed to upload.', 87 | 'url' => 'The :attribute format is invalid.', 88 | 89 | /* 90 | |-------------------------------------------------------------------------- 91 | | Custom Validation Language Lines 92 | |-------------------------------------------------------------------------- 93 | | 94 | | Here you may specify custom validation messages for attributes using the 95 | | convention "attribute.rule" to name the lines. This makes it quick to 96 | | specify a specific custom language line for a given attribute rule. 97 | | 98 | */ 99 | 100 | 'custom' => [ 101 | 'attribute-name' => [ 102 | 'rule-name' => 'custom-message', 103 | ], 104 | ], 105 | 106 | /* 107 | |-------------------------------------------------------------------------- 108 | | Custom Validation Attributes 109 | |-------------------------------------------------------------------------- 110 | | 111 | | The following language lines are used to swap attribute place-holders 112 | | with something more reader friendly such as E-Mail Address instead 113 | | of "email". This simply helps us make messages a little cleaner. 114 | | 115 | */ 116 | 117 | 'attributes' => [], 118 | 119 | ]; 120 | -------------------------------------------------------------------------------- /resources/views/display_all_post_category.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layout.admin') 2 | 3 | @section('content') 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
80 | 81 |
82 | 83 | 84 | @include('admin/posts/sub_nav') 85 | 86 | 87 |
88 | 89 |
90 | 91 | 92 | 96 | 97 |
98 | 99 | 100 | 101 |
102 |
103 | 104 | 105 | 106 |
107 |

Categoria de Notícias

108 |

Total de Categorias

109 |
110 | 111 | @{{ message }} 112 | 113 | 114 |
115 | 116 | 117 | 118 | 124 | 125 | 126 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 146 | 147 | 148 | 149 | 152 | 153 | 182 | 183 | 184 | 185 | 186 | 187 | 188 |
ID 119 | 123 | Catgeroria de NotiíciaNotícias nesta Categoria 127 |
Ação
128 | 129 |
145 | 150 | @{{ countAggregate(item.count_products) }} 151 | 154 | 155 | 156 | 157 | 178 | 179 | 180 | 181 |
189 | 190 | 191 | 192 |
193 |
194 | 195 | 212 | 213 | 214 | 215 |
216 |
217 | 218 | 219 |
220 | 221 | 222 | 223 | 224 | 225 |
226 | 227 |
228 | 229 | 230 | 231 | 232 | 233 |
234 |
235 | 236 | 237 | 238 | @stop 239 | 240 | 241 | 242 | 243 | -------------------------------------------------------------------------------- /resources/views/errors.blade.php: -------------------------------------------------------------------------------- 1 | @if (count($errors) > 0) 2 |
3 | 9 |
10 | @endif -------------------------------------------------------------------------------- /resources/views/flash.blade.php: -------------------------------------------------------------------------------- 1 | @if(session()->has('flash_message')) 2 | 3 | 14 | @endif 15 | 16 | 17 | 18 | @if(session()->has('flash_message_overlay')) 19 | 20 | 30 | @endif -------------------------------------------------------------------------------- /resources/views/layout/template.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Sistema Administrativo 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
49 | 50 | 51 |
52 | 53 |
54 | 55 | 56 | 57 | @yield('content') 58 | 59 | 60 | 61 |
62 | 63 | 64 | 75 | 76 |
77 |
78 | 79 | 80 | 81 | @yield('modal_window') 82 | 83 | 84 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | @include('flash') 108 | @yield('scripts.footer') 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /resources/views/welcome.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Laravel 9 | 10 | 11 | 12 | 13 | 14 | 66 | 67 | 68 |
69 | @if (Route::has('login')) 70 | 78 | @endif 79 | 80 |
81 |
82 | Laravel 83 |
84 | 85 | 92 |
93 |
94 | 95 | 96 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 17 | return $request->user(); 18 | }); 19 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 16 | }); 17 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 18 | })->describe('Display an inspiring quote'); 19 | -------------------------------------------------------------------------------- /routes/web.php: -------------------------------------------------------------------------------- 1 | 'VueCrudController@store' , 26 | 'as' => 'vue_crud.store' 27 | 28 | ]); 29 | 30 | Route::post('vue-crud/{id}/edit' , [ 31 | 'uses' => 'VueCrudController@edit' , 32 | 'as' => 'vue_crud.edit' 33 | ]); 34 | 35 | 36 | Route::post('vue-crud/update' , [ 37 | 'uses' => 'VueCrudController@update' , 38 | 'as' => 'vue_crud.update' 39 | ]); 40 | 41 | Route::post('vue-crud/delete' , [ 42 | 'uses' => 'VueCrudController@delete' , 43 | 'as' => 'vue_crud.delete' 44 | ]); 45 | 46 | 47 | Route::get('vue-crud/load-display' , [ 48 | 'uses' => 'VueCrudController@load_display' , 49 | 'as' => 'vue_crud.load_display' 50 | ]); 51 | 52 | Route::get('vue-crud' , [ 53 | 'uses' => 'VueCrudController@index' , 54 | 'as' => 'vue_crud' 55 | ]); -------------------------------------------------------------------------------- /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 !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | config.php 2 | routes.php 3 | schedule-* 4 | compiled.php 5 | services.json 6 | events.scanned.php 7 | routes.scanned.php 8 | down 9 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 20 | 21 | $response->assertStatus(200); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const { mix } = require('laravel-mix'); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Mix Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Mix provides a clean, fluent API for defining some Webpack build steps 9 | | for your Laravel application. By default, we are compiling the Sass 10 | | file for the application as well as bundling up all the JS files. 11 | | 12 | */ 13 | 14 | mix.js('resources/assets/js/app.js', 'public/js') 15 | .sass('resources/assets/sass/app.scss', 'public/css'); 16 | --------------------------------------------------------------------------------