APP_ENV=dev
APP_KEY=base64:/Jmlg7TepI/inQ4KJ3VF0YVTqghRGvvBrnDI7NkUk94=
APP_DEBUG=true
-APP_URL=https://dev.pmi.cubedesigners.com
+APP_URL=https://pmi.dev.cubedesigners.com
APP_LOG=daily
APP_ENV=production
APP_KEY=base64:/Jmlg7TepI/inQ4KJ3VF0YVTqghRGvvBrnDI7NkUk94=
APP_DEBUG=true
-APP_URL=https://dev.pmi.cubedesigners.com
+APP_URL=https://pmi.dev.cubedesigners.com
LOG_CHANNEL=stack
| - page slug
*/
- protected function _common()
- {
- $this->crud->addField([
- 'name' => 'status',
- 'type' => 'select_from_array',
- 'default' => '0',
- 'label' => __('Status'),
- 'options' => ['0' => __('Offline'),'1' => __('Published')],
- 'fake' => true,
- 'store_in' => 'extras',
- ]);
- $this->_seo();
- }
-
- protected function _seo()
- {
- $this->crud->addField([ // CustomHTML
- 'name' => 'metas_separator',
- 'type' => 'custom_html',
- 'value' => '<br><h2>' . trans('SEO') . '</h2><hr>',
- 'tab' => 'Meta // SEO'
- ]);
- $this->crud->addField([
- 'name' => 'meta_title',
- 'label' => trans('backpack::pagemanager.meta_title'),
- 'type' => 'text',
- 'fake' => true,
- 'hint' => trans('If empty, page title is used.') . ' ' . __('Recommended length: 60 chars'),
- 'store_in' => 'extras',
- 'tab' => 'Meta // SEO',
- ]);
- $this->crud->addField([
- 'name' => 'meta_description',
- 'label' => trans('backpack::pagemanager.meta_description'),
- 'type' => 'textarea',
- 'fake' => true,
- 'store_in' => 'extras',
- 'hint' => __('Recommended length: 160 chars'),
- 'tab' => 'Meta // SEO',
- ]);
- $this->crud->addField([
- 'name' => 'robots',
- 'label' => __('Allow page index by search engines'),
- 'type' => 'checkbox',
- 'default' => true,
- 'fake' => true,
- 'store_in' => 'extras',
- 'tab' => 'Meta // SEO',
- ]);
- }
-
- private function home()
- {
- $this->_common();
-
- $this->crud->addField([
- 'name' => 'slideshow',
- 'type' => 'list_model',
- 'model' => 'slideshow',
- 'label' => __('Slideshow'),
- 'fake' => true,
- 'store_in' => 'extras',
- ]);
- }
-
- private function services()
- {
- $this->_common();
- $this->crud->addField([ // CustomHTML
- 'name' => 'content_separator',
- 'type' => 'custom_html',
- 'value' => '<br><h2>' . trans('backpack::pagemanager.content') . '</h2><hr>',
- ]);
- $this->crud->addField([
- 'name' => 'content',
- 'label' => trans('backpack::pagemanager.content'),
- 'type' => 'simplemde',
- 'placeholder' => trans('backpack::pagemanager.content_placeholder'),
- ]);
- }
-
- private function about_us()
- {
- $this->_common();
- $this->crud->addField([
- 'name' => 'content',
- 'label' => trans('backpack::pagemanager.content'),
- 'type' => 'simplemde',
- 'placeholder' => trans('backpack::pagemanager.content_placeholder'),
- ]);
- }
}
--- /dev/null
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:25
+ */
+
+namespace App\Templates;
+
+class Aboutus extends Base
+{
+ public function showInDropDown()
+ {
+ return true;
+ }
+
+ public function getName()
+ {
+ return 'Qui sommes nous ?';
+ }
+
+
+ public function init()
+ {
+ parent::init();
+ $this->addField([
+ 'name' => 'content',
+ 'label' => trans('backpack::pagemanager.content'),
+ 'type' => 'simplemde',
+ 'placeholder' => trans('backpack::pagemanager.content_placeholder'),
+ ]);
+ }
+
+
+}
--- /dev/null
+<?php
+
+namespace App\Templates;
+
+use Cubist\Backpack\app\Template\TemplateAbstract;
+
+class Base extends TemplateAbstract
+{
+ public function init()
+ {
+ parent::init();
+
+ }
+
+ public function showInDropDown()
+ {
+ return false;
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:24
+ */
+
+namespace App\Templates;
+
+
+class Home extends Base
+{
+
+ public function showInDropDown()
+ {
+ return true;
+ }
+
+ public function getName()
+ {
+ return 'Accueil';
+ }
+
+
+ public function init()
+ {
+ parent::init();
+ $this->addField([
+ 'name' => 'slideshow',
+ 'type' => 'list_model',
+ 'model' => 'slideshow',
+ 'label' => __('Slideshow'),
+ ]);
+ }
+}
--- /dev/null
+<?php
+/**
+ * Created by IntelliJ IDEA.
+ * User: Vincent
+ * Date: 14/03/2019
+ * Time: 18:23
+ */
+
+namespace App\Templates;
+
+
+class Services extends Base
+{
+ public function showInDropDown()
+ {
+ return true;
+ }
+
+ public function getName()
+ {
+ return 'Services';
+ }
+
+ public function init()
+ {
+ parent::init();
+ }
+}
},
{
"name": "backpack/crud",
- "version": "3.6.5",
+ "version": "3.6.6",
"source": {
"type": "git",
"url": "https://github.com/Laravel-Backpack/CRUD.git",
- "reference": "39501b8181512795e6d17cb56b88599b19ed4cd2"
+ "reference": "bb57131e6b8bc0c94c13173edc66f3ebae093820"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/39501b8181512795e6d17cb56b88599b19ed4cd2",
- "reference": "39501b8181512795e6d17cb56b88599b19ed4cd2",
+ "url": "https://api.github.com/repos/Laravel-Backpack/CRUD/zipball/bb57131e6b8bc0c94c13173edc66f3ebae093820",
+ "reference": "bb57131e6b8bc0c94c13173edc66f3ebae093820",
"shasum": ""
},
"require": {
"read",
"update"
],
- "time": "2019-03-12T08:39:57+00:00"
+ "time": "2019-03-13T09:20:59+00:00"
},
{
"name": "backpack/langfilemanager",
"source": {
"type": "git",
"url": "git://git.cubedesigners.com/cubist_cms-back.git",
- "reference": "7f6948908b15ef4f07c126165ac6e42961b1fb07"
+ "reference": "8273ed9563659d6cc816178bb6ed101358108ef1"
},
"dist": {
"type": "tar",
- "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-b3d9ce.tar",
- "reference": "7f6948908b15ef4f07c126165ac6e42961b1fb07",
- "shasum": "9f58d38bada58aa1a2dcb25c8aee0d089c082c68"
+ "url": "https://composer.cubedesigners.com/dist/cubist/cms-back/cubist-cms-back-dev-master-9dc4ae.tar",
+ "reference": "8273ed9563659d6cc816178bb6ed101358108ef1",
+ "shasum": "dfc388a6d788aa0d2809c424337605092253ce1d"
},
"require": {
"backpack/backupmanager": "^1.4",
"fideloper/proxy": "^4.0",
"laravel/tinker": "^1.0",
"php": ">=7.1.3",
- "predis/predis": "^1.1"
+ "predis/predis": "^1.1",
+ "webfactor/laravel-backpack-instant-fields": "^2.1.2"
},
"require-dev": {
"backpack/generators": "^1.2"
}
],
"description": "Cubist Backpack extension",
- "time": "2019-03-12T17:54:05+00:00"
+ "time": "2019-03-15T15:00:31+00:00"
},
{
"name": "cubist/cms-front",
],
"time": "2019-03-06T09:39:45+00:00"
},
+ {
+ "name": "webfactor/laravel-backpack-instant-fields",
+ "version": "2.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webfactor/laravel-backpack-instant-fields.git",
+ "reference": "58c12ed666917e21d8a2e7e226eccd70daa3dc1d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webfactor/laravel-backpack-instant-fields/zipball/58c12ed666917e21d8a2e7e226eccd70daa3dc1d",
+ "reference": "58c12ed666917e21d8a2e7e226eccd70daa3dc1d",
+ "shasum": ""
+ },
+ "require": {
+ "illuminate/database": "~5.5.0|~5.6.0|~5.7.0|~5.8.0",
+ "illuminate/support": "~5.5.0|~5.6.0|~5.7.0|~5.8.0",
+ "php": "~7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~6.0",
+ "squizlabs/php_codesniffer": "^2.3"
+ },
+ "type": "library",
+ "extra": {
+ "laravel": {
+ "providers": [
+ "Webfactor\\Laravel\\Backpack\\InstantFields\\InstantFieldsServiceProvider"
+ ]
+ },
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webfactor\\Laravel\\Backpack\\InstantFields\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Thomas Swonke",
+ "email": "thomas.swonke@webfactor.de",
+ "homepage": "http://webfactor.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Instant fields to create/edit/delete related entities on the fly in Laravel Backpack",
+ "homepage": "https://github.com/webfactor/laravel-backpack-instant-fields",
+ "keywords": [
+ "Webfactor",
+ "backpack",
+ "instant fields",
+ "laravel",
+ "modal",
+ "on-the-fly"
+ ],
+ "time": "2019-03-06T13:42:05+00:00"
+ },
{
"name": "zendframework/zend-filter",
"version": "2.9.1",
return [
// Change this class if you wish to extend PageCrudController
- 'admin_controller_class' => 'Backpack\PageManager\app\Http\Controllers\Admin\PageCrudController',
+ 'admin_controller_class' => 'Cubist\Backpack\app\Http\Controllers\CubistPageCrudController',
// Change this class if you wish to extend the Page model
- 'page_model_class' => 'Backpack\PageManager\app\Models\Page',
+ 'page_model_class' => 'Backpack\PageManager\app\Models\Page',
];
--- /dev/null
+<?php
+
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateLanguagesTable extends Migration
+{
+ /**
+ * Run the migrations.
+ *
+ * @return void
+ */
+ public function up()
+ {
+ Schema::create('languages', function (Blueprint $table) {
+ $table->increments('id');
+ $table->string('name', 100);
+ $table->string('flag', 100)->nullable();
+ $table->string('abbr', 3);
+ $table->tinyInteger('active')->unsigned()->default('1');
+ $table->tinyInteger('default')->unsigned()->default('0');
+ $table->timestamps();
+ $table->softDeletes();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::drop('languages');
+ }
+}
--- /dev/null
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+
+class AlterLanguagesTable extends Migration
+{
+ /**
+ * Run the migrations.
+ *
+ * @return void
+ */
+ public function up()
+ {
+ Schema::table('languages', function ($table) {
+ $table->string('script', 20)->nullable()->after('abbr');
+ $table->string('native', 20)->nullable()->after('script');
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ Schema::table('languages', function ($table) {
+ $table->dropColumn('script');
+ $table->dropColumn('native');
+ });
+ }
+}
+++ /dev/null
-@extends('layouts.app')
-
--- /dev/null
+@extends('layouts.app')
+
--- /dev/null
+<!-- select2 from ajax -->
+@php
+ $connected_entity = new $field['model'];
+ $connected_entity_key_name = $connected_entity->getKeyName();
+ $old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
+@endphp
+
+<div @include('crud::inc.field_wrapper_attributes') >
+ <label>{!! $field['label'] !!}</label>
+ <?php $entity_model = $crud->model; ?>
+
+ <div class="input-group">
+ <select
+ class="form-control"
+ name="{{ $field['name'] }}"
+ style="width: 100%"
+ id="select2_ajax_{{ $field['name'] }}"
+ @include('crud::inc.field_attributes', ['default_class' => 'form-control'])
+ >
+
+ @if ($old_value)
+ @php
+ $item = $connected_entity->find($old_value);
+ @endphp
+ @if ($item)
+
+ {{-- allow clear --}}
+ @if ($entity_model::isColumnNullable($field['name']))
+ <option value="" selected>
+ {{ $field['placeholder'] }}
+ </option>
+ @endif
+
+ <option value="{{ $item->getKey() }}" selected>
+ {{ $item->{isset($field['option_label']) ? $field['option_label'] : $field['attribute']} }}
+ </option>
+ @endif
+ @endif
+ </select>
+
+ @if ($field['on_the_fly']['create'] ?? true)
+ @include('webfactor::fields.inc.button-add')
+ @endif
+
+ @if ($field['on_the_fly']['edit'] ?? true)
+ @include('webfactor::fields.inc.button-edit')
+ @endif
+
+ @if ($field['on_the_fly']['delete'] ?? true)
+ @include('webfactor::fields.inc.button-delete')
+ @endif
+ </div>
+
+ {{-- HINT --}}
+ @if (isset($field['hint']))
+ <p class="help-block">{!! $field['hint'] !!}</p>
+ @endif
+</div>
+
+
+{{-- ########################################## --}}
+{{-- Extra CSS and JS for this particular field --}}
+{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
+@if ($crud->checkIfFieldIsFirstOfItsType($field))
+
+ {{-- FIELD CSS - will be loaded in the after_styles section --}}
+ @push('crud_fields_styles')
+ <!-- include select2 css-->
+ <link href="{{ asset('vendor/adminlte/bower_components/select2/dist/css/select2.min.css') }}" rel="stylesheet"
+ type="text/css"/>
+ <link
+ href="https://cdnjs.cloudflare.com/ajax/libs/select2-bootstrap-theme/0.1.0-beta.10/select2-bootstrap.min.css"
+ rel="stylesheet" type="text/css"/>
+ {{-- allow clear --}}
+ @if ($entity_model::isColumnNullable($field['name']))
+ <style type="text/css">
+ .select2-selection__clear::after {
+ content: ' {{ trans('backpack::crud.clear') }}';
+ }
+ </style>
+ @endif
+ @endpush
+
+ {{-- FIELD JS - will be loaded in the after_scripts section --}}
+ @push('crud_fields_scripts')
+ <!-- include select2 js-->
+ <script src="{{ asset('vendor/adminlte/bower_components/select2/dist/js/select2.min.js') }}"></script>
+ @endpush
+
+@endif
+
+<!-- include field specific select2 js-->
+@push('crud_fields_scripts')
+ <script>
+ jQuery(document).ready(function ($) {
+
+ // load create modal content
+ $("#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_create_modal").on('show.bs.modal', function (e) {
+ var loadurl = $(e.relatedTarget).data('load-url');
+
+ $(this).find('.modal-content').load(loadurl);
+ });
+
+ // load edit/delete modal content
+ $(
+ "#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_edit_modal," +
+ "#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_delete_modal"
+ ).on('show.bs.modal', function (e) {
+ var button = e.relatedTarget;
+
+ if ($(button).hasClass('disabled')) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ } else {
+ var loadurl = $(button).data('load-url');
+ var id = $(button).data('id');
+
+ $(this).find('.modal-content').load(loadurl + '&id=' + id);
+ }
+ });
+
+ // update id for edit/delete modal url
+ $("#select2_ajax_{{ $field['name'] }}").change(function (e) {
+ var entry = $("#select2_ajax_{{ $field['name'] }}").select2('data')[0];
+ var editButton = $("[data-target='#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_edit_modal']");
+ var deleteButton = $("[data-target='#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_delete_modal']");
+
+ if (entry) {
+ editButton.data("id", entry.id).removeClass('disabled');
+ deleteButton.data("id", entry.id).removeClass('disabled');
+ } else {
+ editButton.data("id", "").addClass('disabled');
+ deleteButton.data("id", "").addClass('disabled');
+ }
+
+ })
+
+ // trigger select2 for each untriggered select2 box
+ $("#select2_ajax_{{ $field['name'] }}").each(function (i, obj) {
+ var form = $(obj).closest('form');
+
+ if (!$(obj).hasClass("select2-hidden-accessible")) {
+
+ $(obj).select2({
+ theme: 'bootstrap',
+ multiple: false,
+ placeholder: "{{ $field['placeholder'] }}",
+ minimumInputLength: "{{ $field['minimum_input_length'] }}",
+
+ {{-- allow clear --}}
+ @if ($entity_model::isColumnNullable($field['name']))
+ allowClear: true,
+ @endif
+ ajax: {
+ url: "/{{ ltrim($field['data_source'] ?? $crud->getRoute().'/ajax', '/') }}",
+ type: '{{ $field['method'] ?? 'POST' }}',
+ dataType: 'json',
+ quietMillis: 250,
+ data: function (params) {
+ return {
+ q: params.term, // search term
+ field: "{{ $field['name'] }}",
+ page: params.page,
+ form: form.serializeArray() // all other form inputs
+ };
+ },
+ processResults: function (data, params) {
+ params.page = params.page || 1;
+
+ var result = {
+ results: $.map(data.data, function (item) {
+ return {
+ text: item["{{ isset($field['option_label']) ? $field['option_label'] : $field['attribute'] }}"],
+ id: item["{{ $connected_entity_key_name }}"]
+ }
+ }),
+ more: data.current_page < data.last_page
+ };
+
+ return result;
+ },
+ cache: true
+ },
+ })
+ {{-- allow clear --}}
+ @if ($entity_model::isColumnNullable($field['name']))
+ .on('select2:unselecting', function (e) {
+ $(this).val('').trigger('change');
+ // console.log('cleared! '+$(this).val());
+ e.preventDefault();
+ })
+ @endif
+ ;
+
+ }
+ });
+
+ @if (isset($field['dependencies']))
+ @foreach (array_wrap($field['dependencies']) as $dependency)
+ $('input[name={{ $dependency }}], select[name={{ $dependency }}], checkbox[name={{ $dependency }}], radio[name={{ $dependency }}], textarea[name={{ $dependency }}]').change(function () {
+ $("#select2_ajax_{{ $field['name'] }}").val(null).trigger("change");
+ });
+ @endforeach
+ @endif
+ });
+ </script>
+@endpush
+{{-- End of Extra CSS and JS --}}
+{{-- ########################################## --}}
--- /dev/null
+<!-- select2 from ajax multiple -->
+@php
+ $connected_entity = new $field['model'];
+ $connected_entity_key_name = $connected_entity->getKeyName();
+ $old_value = old(square_brackets_to_dots($field['name'])) ?? $field['value'] ?? $field['default'] ?? false;
+@endphp
+
+<div @include('crud::inc.field_wrapper_attributes') >
+ <label>{!! $field['label'] !!}</label>
+
+ <div class="input-group">
+ <select
+ name="{{ $field['name'] }}[]"
+ style="width: 100%"
+ id="select2_ajax_multiple_{{ $field['name'] }}"
+ @include('crud::inc.field_attributes', ['default_class' => 'form-control'])
+ multiple>
+
+ @if ($old_value)
+ @foreach ($old_value as $item)
+ @if (!is_object($item))
+ @php
+ $item = $connected_entity->find($item);
+ @endphp
+ @endif
+ <option value="{{ $item->getKey() }}" selected>
+ {{ $item->{isset($field['option_label']) ? $field['option_label'] : $field['attribute']} }}
+ </option>
+ @endforeach
+ @endif
+ </select>
+
+ @if (isset($field['on_the_fly']))
+ @include('webfactor::fields.inc.button-add')
+ @endif
+ </div>
+
+ {{-- HINT --}}
+ @if (isset($field['hint']))
+ <p class="help-block">{!! $field['hint'] !!}</p>
+ @endif
+</div>
+
+
+{{-- ########################################## --}}
+{{-- Extra CSS and JS for this particular field --}}
+{{-- If a field type is shown multiple times on a form, the CSS and JS will only be loaded once --}}
+@if ($crud->checkIfFieldIsFirstOfItsType($field))
+
+ {{-- FIELD CSS - will be loaded in the after_styles section --}}
+ @push('crud_fields_styles')
+ <!-- include select2 css-->
+ <link href="{{ asset('vendor/adminlte/bower_components/select2/dist/css/select2.min.css') }}" rel="stylesheet"
+ type="text/css"/>
+ <link
+ href="https://cdnjs.cloudflare.com/ajax/libs/select2-bootstrap-theme/0.1.0-beta.10/select2-bootstrap.min.css"
+ rel="stylesheet" type="text/css"/>
+ @endpush
+
+ {{-- FIELD JS - will be loaded in the after_scripts section --}}
+ @push('crud_fields_scripts')
+ <!-- include select2 js-->
+ <script src="{{ asset('vendor/adminlte/bower_components/select2/dist/js/select2.min.js') }}"></script>
+ @endpush
+
+@endif
+
+<!-- include field specific select2 js-->
+@push('crud_fields_scripts')
+ <script>
+ jQuery(document).ready(function ($) {
+ // load create modal content
+ $("#{{ $field['on_the_fly']['entity'] ?? 'ajax_entity' }}_create_modal").on('show.bs.modal', function (e) {
+ var loadurl = $(e.relatedTarget).data('load-url');
+ $(this).find('.modal-content').load(loadurl);
+ });
+
+ // trigger select2 for each untriggered select2 box
+ $("#select2_ajax_multiple_{{ $field['name'] }}").each(function (i, obj) {
+ var form = $(obj).closest('form');
+
+ if (!$(obj).hasClass("select2-hidden-accessible")) {
+ $(obj).select2({
+ theme: 'bootstrap',
+ multiple: true,
+ placeholder: "{{ $field['placeholder'] }}",
+ minimumInputLength: "{{ $field['minimum_input_length'] }}",
+ ajax: {
+ url: "/{{ ltrim($field['data_source'] ?? $crud->getRoute().'/ajax', '/') }}",
+ type: '{{ $field['method'] ?? 'POST' }}',
+ dataType: 'json',
+ quietMillis: 250,
+ data: function (params) {
+ return {
+ q: params.term, // search term
+ field: "{{ $field['name'] }}",
+ page: params.page,
+ form: form.serializeArray() // all other form inputs
+ };
+ },
+ processResults: function (data, params) {
+ params.page = params.page || 1;
+
+ return {
+ results: $.map(data.data, function (item) {
+ return {
+ text: item["{{ isset($field['option_label']) ? $field['option_label'] : $field['attribute'] }}"],
+ id: item["{{ $connected_entity_key_name }}"]
+ }
+ }),
+ more: data.current_page < data.last_page
+ };
+ },
+ cache: true
+ },
+ });
+ }
+ });
+
+ @if (isset($field['dependencies']))
+ @foreach (array_wrap($field['dependencies']) as $dependency)
+ $('input[name={{ $dependency }}], select[name={{ $dependency }}], checkbox[name={{ $dependency }}], radio[name={{ $dependency }}], textarea[name={{ $dependency }}]').change(function () {
+ $("#select2_ajax_multiple_{{ $field['name'] }}").val(null).trigger("change");
+ });
+ @endforeach
+ @endif
+ });
+ </script>
+@endpush
+{{-- End of Extra CSS and JS --}}
+{{-- ########################################## --}}