resolved commit
This commit is contained in:
commit
d2caa2af98
File diff suppressed because it is too large
Load Diff
|
|
@ -10,6 +10,7 @@ return [
|
|||
*/
|
||||
|
||||
\Webkul\Attribute\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Category\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Checkout\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Core\Providers\ModuleServiceProvider::class,
|
||||
|
|
@ -22,6 +23,6 @@ return [
|
|||
\Webkul\CatalogRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CMS\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class
|
||||
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
|
||||
]
|
||||
];
|
||||
|
|
@ -9,14 +9,14 @@ return [
|
|||
|
|
||||
| Debugbar is enabled by default, when debug is set to true in app.php.
|
||||
| You can override the value by setting enable to true or false instead of null.
|
||||
|
|
||||
|
|
||||
| You can provide an array of URI's that must be ignored (eg. 'api/*')
|
||||
|
|
||||
*/
|
||||
|
||||
'enabled' => env('DEBUGBAR_ENABLED', null),
|
||||
'except' => [
|
||||
//
|
||||
'telescope*'
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
@ -79,7 +79,7 @@ return [
|
|||
|
|
||||
*/
|
||||
'error_handler' => false,
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Clockwork integration
|
||||
|
|
@ -110,7 +110,7 @@ return [
|
|||
'db' => true, // Show database (PDO) queries and bindings
|
||||
'views' => true, // Views with their data
|
||||
'route' => true, // Current route information
|
||||
'auth' => true, // Display Laravel authentication status
|
||||
'auth' => false, // Display Laravel authentication status
|
||||
'gate' => true, // Display Laravel Gate checks
|
||||
'session' => true, // Display session data
|
||||
'symfony_request' => true, // Only one can be enabled..
|
||||
|
|
@ -122,6 +122,7 @@ return [
|
|||
'files' => false, // Show the included files
|
||||
'config' => false, // Display config settings
|
||||
'cache' => false, // Display cache events
|
||||
'models' => false, // Display models
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
@ -143,7 +144,7 @@ return [
|
|||
'timeline' => false, // Add the queries to the timeline
|
||||
'explain' => [ // Show EXPLAIN output on queries
|
||||
'enabled' => false,
|
||||
'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
|
||||
'types' => ['SELECT'], // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
|
||||
],
|
||||
'hints' => true, // Show hints for common mistakes
|
||||
],
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
use Maatwebsite\Excel\Excel;
|
||||
|
||||
return [
|
||||
|
||||
'exports' => [
|
||||
|
||||
/*
|
||||
|
|
@ -18,20 +19,9 @@ return [
|
|||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Temporary path
|
||||
| Pre-calculate formulas during export
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When exporting files, we use a temporary file, before storing
|
||||
| or downloading. Here you can customize that path.
|
||||
|
|
||||
*/
|
||||
'temp_path' => sys_get_temp_dir(),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Pre-calculate formulas during export
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
'pre_calculate_formulas' => false,
|
||||
|
||||
/*
|
||||
|
|
@ -69,6 +59,22 @@ return [
|
|||
*/
|
||||
'formatter' => 'slug',
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| CSV Settings
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Configure e.g. delimiter, enclosure and line ending for CSV imports.
|
||||
|
|
||||
*/
|
||||
'csv' => [
|
||||
'delimiter' => ',',
|
||||
'enclosure' => '"',
|
||||
'escape_character' => '\\',
|
||||
'contiguous' => false,
|
||||
'input_encoding' => 'UTF-8',
|
||||
],
|
||||
],
|
||||
|
||||
/*
|
||||
|
|
@ -109,4 +115,71 @@ return [
|
|||
*/
|
||||
'pdf' => Excel::DOMPDF,
|
||||
],
|
||||
|
||||
'value_binder' => [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Value Binder
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| PhpSpreadsheet offers a way to hook into the process of a value being
|
||||
| written to a cell. In there some assumptions are made on how the
|
||||
| value should be formatted. If you want to change those defaults,
|
||||
| you can implement your own default value binder.
|
||||
|
|
||||
*/
|
||||
'default' => Maatwebsite\Excel\DefaultValueBinder::class,
|
||||
],
|
||||
|
||||
'transactions' => [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Transaction Handler
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By default the import is wrapped in a transaction. This is useful
|
||||
| for when an import may fail and you want to retry it. With the
|
||||
| transactions, the previous import gets rolled-back.
|
||||
|
|
||||
| You can disable the transaction handler by setting this to null.
|
||||
| Or you can choose a custom made transaction handler here.
|
||||
|
|
||||
| Supported handlers: null|db
|
||||
|
|
||||
*/
|
||||
'handler' => 'db',
|
||||
],
|
||||
|
||||
'temporary_files' => [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Local Temporary Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When exporting and importing files, we use a temporary file, before
|
||||
| storing reading or downloading. Here you can customize that path.
|
||||
|
|
||||
*/
|
||||
'local_path' => sys_get_temp_dir(),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Remote Temporary Disk
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When dealing with a multi server setup with queues in which you
|
||||
| cannot rely on having a shared local temporary path, you might
|
||||
| want to store the temporary file on a shared disk. During the
|
||||
| queue executing, we'll retrieve the temporary file from that
|
||||
| location instead. When left to null, it will always use
|
||||
| the local path. This setting only has effect when using
|
||||
| in conjunction with queued imports and exports.
|
||||
|
|
||||
*/
|
||||
'remote_disk' => null,
|
||||
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -52,9 +52,9 @@ return array(
|
|||
*/
|
||||
|
||||
'templates' => array(
|
||||
'small' => 'Webkul\Product\CacheFilters\Small',
|
||||
'small' => 'Webkul\Product\CacheFilters\Small',
|
||||
'medium' => 'Webkul\Product\CacheFilters\Medium',
|
||||
'large' => 'Webkul\Product\CacheFilters\Large',
|
||||
'large' => 'Webkul\Product\CacheFilters\Large',
|
||||
),
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -216,7 +216,8 @@ return [
|
|||
'orderBy' => 'orderBy',
|
||||
'sortedBy' => 'sortedBy',
|
||||
'with' => 'with',
|
||||
'searchJoin' => 'searchJoin'
|
||||
'searchJoin' => 'searchJoin',
|
||||
'withCount' => 'withCount'
|
||||
]
|
||||
],
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -2,6 +2,21 @@
|
|||
|
||||
return [
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Console Commands
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option allows you to add additional Artisan commands that should
|
||||
| be available within the Tinker environment. Once the command is in
|
||||
| this array you may execute the command in Tinker using its name.
|
||||
|
|
||||
*/
|
||||
|
||||
'commands' => [
|
||||
// App\Console\Commands\ExampleCommand::class,
|
||||
],
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Alias Blacklist
|
||||
|
|
@ -13,6 +28,8 @@ return [
|
|||
|
|
||||
*/
|
||||
|
||||
'dont_alias' => [],
|
||||
'dont_alias' => [
|
||||
'App\Nova',
|
||||
],
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ return [
|
|||
| colombian spanish will be saved as 'es-CO' into the database.
|
||||
|
|
||||
*/
|
||||
'locale_separator' => '_',
|
||||
'locale_separator' => '-',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
@ -39,6 +39,8 @@ return [
|
|||
| As a default locale, Translatable takes the locale of Laravel's
|
||||
| translator. If for some reason you want to override this,
|
||||
| you can specify what default should be used here.
|
||||
| If you set a value here it will only use the current config value
|
||||
| and never fallback to the translator one.
|
||||
|
|
||||
*/
|
||||
'locale' => null,
|
||||
|
|
@ -76,10 +78,26 @@ return [
|
|||
| A fallback locale is the locale being used to return a translation
|
||||
| when the requested translation is not existing. To disable it
|
||||
| set it to false.
|
||||
| If set to null it will loop through all configured locales until
|
||||
| one existing is found or end of list reached. The locales are looped
|
||||
| from top to bottom and for country based locales the simple one
|
||||
| is used first. So "es" will be checked before "es_MX".
|
||||
|
|
||||
*/
|
||||
'fallback_locale' => 'en',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Translation Model Namespace
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Defines the default 'Translation' class namespace. For example, if
|
||||
| you want to use App\Translations\CountryTranslation instead of App\CountryTranslation
|
||||
| set this to 'App\Translations'.
|
||||
|
|
||||
*/
|
||||
'translation_model_namespace' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Translation Suffix
|
||||
|
|
@ -113,4 +131,19 @@ return [
|
|||
|
|
||||
*/
|
||||
'to_array_always_loads_translations' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Configure the default behavior of the rule factory
|
||||
|--------------------------------------------------------------------------
|
||||
| The default values used to control the behavior of the RuleFactory.
|
||||
| Here you can set your own default format and delimiters for
|
||||
| your whole app.
|
||||
*
|
||||
*/
|
||||
'rule_factory' => [
|
||||
'format' => \Astrotomic\Translatable\Validation\RuleFactory::FORMAT_ARRAY,
|
||||
'prefix' => '%',
|
||||
'suffix' => '%',
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -15,31 +15,36 @@ return [
|
|||
* of your proxy (e.g. if using ELB or similar).
|
||||
*
|
||||
*/
|
||||
'proxies' => null, // [<ip addresses>,], '*'
|
||||
'proxies' => null, // [<ip addresses>,], '*', '<ip addresses>,'
|
||||
|
||||
/*
|
||||
* To trust one or more specific proxies that connect
|
||||
* directly to your server, use an array of IP addresses:
|
||||
* directly to your server, use an array or a string separated by comma of IP addresses:
|
||||
*/
|
||||
# 'proxies' => ['192.168.1.1'],
|
||||
// 'proxies' => ['192.168.1.1'],
|
||||
// 'proxies' => '192.168.1.1, 192.168.1.2',
|
||||
|
||||
/*
|
||||
* Or, to trust all proxies that connect
|
||||
* directly to your server, use a "*"
|
||||
*/
|
||||
# 'proxies' => '*',
|
||||
// 'proxies' => '*',
|
||||
|
||||
/*
|
||||
* Which headers to use to detect proxy related data (For, Host, Proto, Port)
|
||||
*
|
||||
*
|
||||
* Options include:
|
||||
*
|
||||
*
|
||||
* - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust)
|
||||
* - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust)
|
||||
*
|
||||
* - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer)
|
||||
*
|
||||
* - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust)
|
||||
* - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust)
|
||||
* - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)
|
||||
*
|
||||
* @link https://symfony.com/doc/current/deployment/proxies.html
|
||||
*/
|
||||
'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
|
||||
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ return [
|
|||
'mass-update-success' => 'تم تحديث العملاء بنجاح',
|
||||
'status' => 'الحالة',
|
||||
'active' => 'نشيط',
|
||||
'in-active' => 'غير نشط'
|
||||
'inactive' => 'غير نشط'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ return [
|
|||
'mass-update-success' => 'Customers updated successfully',
|
||||
'status' => 'Status',
|
||||
'active' => 'Active',
|
||||
'in-active' => 'Inactive'
|
||||
'inactive' => 'Inactive'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ return [
|
|||
'mass-update-success' => 'مشتریان با موفقیت به روز شدند',
|
||||
'status' => 'وضعیت',
|
||||
'active' => 'فعال',
|
||||
'in-active' => 'غیرفعال'
|
||||
'inactive' => 'غیرفعال'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ return [
|
|||
'mass-update-success' => 'Klanten succesvol bijgewerkt',
|
||||
'status' => 'Toestand',
|
||||
'active' => 'Actief',
|
||||
'in-active' => 'Niet geactiveerd'
|
||||
'inactive' => 'Niet geactiveerd'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
|
|||
|
|
@ -949,7 +949,7 @@ return [
|
|||
'mass-update-success' => 'Clientes atualizados com sucesso',
|
||||
'status' => 'Status',
|
||||
'active' => 'Ativo (a)',
|
||||
'in-active' => 'Inativo (a)'
|
||||
'inactive' => 'Inativo (a)'
|
||||
],
|
||||
|
||||
'reviews' => [
|
||||
|
|
|
|||
|
|
@ -55,15 +55,11 @@
|
|||
<script type="text/javascript">
|
||||
window.flashMessages = [];
|
||||
|
||||
@if ($success = session('success'))
|
||||
window.flashMessages = [{'type': 'alert-success', 'message': "{{ $success }}" }];
|
||||
@elseif ($warning = session('warning'))
|
||||
window.flashMessages = [{'type': 'alert-warning', 'message': "{{ $warning }}" }];
|
||||
@elseif ($error = session('error'))
|
||||
window.flashMessages = [{'type': 'alert-error', 'message': "{{ $error }}" }];
|
||||
@elseif ($info = session('info'))
|
||||
window.flashMessages = [{'type': 'alert-info', 'message': "{{ $info }}" }];
|
||||
@endif
|
||||
@foreach (['success', 'warning', 'error', 'info'] as $key)
|
||||
@if ($value = session($key))
|
||||
window.flashMessages.push({'type': 'alert-{{ $key }}', 'message': "{{ $value }}" });
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
window.serverErrors = [];
|
||||
@if (isset($errors))
|
||||
|
|
|
|||
|
|
@ -30,11 +30,11 @@ class DefaultSlot extends Booking
|
|||
|
||||
$currentTime = Carbon::now();
|
||||
|
||||
$availableFrom = ! $bookingProduct->available_from && $bookingProduct->available_from
|
||||
$availableFrom = $bookingProduct->available_from
|
||||
? Carbon::createFromTimeString($bookingProduct->available_from)
|
||||
: clone $currentTime;
|
||||
|
||||
$availableTo = ! $bookingProduct->available_from && $bookingProduct->available_to
|
||||
$availableTo = $bookingProduct->available_to
|
||||
? Carbon::createFromTimeString($bookingProduct->available_to)
|
||||
: Carbon::createFromTimeString('2080-01-01 00:00:00');
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ class DefaultSlot extends Booking
|
|||
* Returns slots for One Booking For Many Days
|
||||
*
|
||||
* @param \Webkul\BookingProduct\Contracts\BookingProduct $bookingProduct
|
||||
* @param string $requestedDate
|
||||
* @param string $requestedDate
|
||||
* @return array
|
||||
*/
|
||||
public function getOneBookingForManyDaysSlots($bookingProductSlot, $requestedDate)
|
||||
|
|
@ -72,6 +72,10 @@ class DefaultSlot extends Booking
|
|||
|
||||
$endDate = clone $requestedDate->modify('this ' . $this->daysOfWeek[$timeDuration['to_day']]);
|
||||
|
||||
$startDate = Carbon::createFromTimeString($startDate->format('Y-m-d') . ' ' . $timeDuration['from'] . ':00');
|
||||
|
||||
$endDate = Carbon::createFromTimeString($endDate->format('Y-m-d') . ' ' . $timeDuration['to'] . ':00');
|
||||
|
||||
$slots[] = [
|
||||
'from' => $startDate->format('d F, Y h:i A'),
|
||||
'to' => $endDate->format('d F, Y h:i A'),
|
||||
|
|
@ -95,11 +99,11 @@ class DefaultSlot extends Booking
|
|||
|
||||
$currentTime = Carbon::now();
|
||||
|
||||
$availableFrom = ! $bookingProduct->available_from && $bookingProduct->available_from
|
||||
$availableFrom = $bookingProduct->available_from
|
||||
? Carbon::createFromTimeString($bookingProduct->available_from)
|
||||
: clone $currentTime;
|
||||
|
||||
$availableTo = ! $bookingProduct->available_from && $bookingProduct->available_to
|
||||
$availableTo = $bookingProduct->available_to
|
||||
? Carbon::createFromTimeString($bookingProduct->available_to)
|
||||
: Carbon::createFromTimeString('2080-01-01 00:00:00');
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ class BookingProductRepository extends Repository
|
|||
public function validateSlots($data)
|
||||
{
|
||||
if (! isset($data['same_slot_all_days'])) {
|
||||
return $data;
|
||||
return $data['slots'];
|
||||
}
|
||||
|
||||
if (! $data['same_slot_all_days']) {
|
||||
|
|
|
|||
|
|
@ -45,38 +45,36 @@
|
|||
<span class="control-error" v-if="errors.has('booking[qty]')">@{{ errors.first('booking[qty]') }}</span>
|
||||
</div>
|
||||
|
||||
<div v-if="booking.type == 'appointment' || booking.type == 'event' || booking.type == 'rental' || booking.type == 'table'">
|
||||
<div class="control-group" v-if="booking.type != 'event'" :class="[errors.has('booking[available_every_week]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}</label>
|
||||
<div class="control-group" v-if="booking.type != 'event' && booking.type != 'default'" :class="[errors.has('booking[available_every_week]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}</label>
|
||||
|
||||
<select v-validate="'required'" name="booking[available_every_week]" v-model="booking.available_every_week" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}"">
|
||||
<option value="1">{{ __('bookingproduct::app.admin.catalog.products.yes') }}</option>
|
||||
<option value="0">{{ __('bookingproduct::app.admin.catalog.products.no') }}</option>
|
||||
</select>
|
||||
<select v-validate="'required'" name="booking[available_every_week]" v-model="booking.available_every_week" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-every-week') }}"">
|
||||
<option value="1">{{ __('bookingproduct::app.admin.catalog.products.yes') }}</option>
|
||||
<option value="0">{{ __('bookingproduct::app.admin.catalog.products.no') }}</option>
|
||||
</select>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[available_every_week]')">@{{ errors.first('booking[available_every_week]') }}</span>
|
||||
</div>
|
||||
|
||||
<div v-if="! parseInt(booking.available_every_week)">
|
||||
<div class="control-group" :class="[errors.has('booking[available_from]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-from') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'required'" name="booking[available_from]" v-model="booking.available_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-from') }}""/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[available_every_week]')">@{{ errors.first('booking[available_every_week]') }}</span>
|
||||
<span class="control-error" v-if="errors.has('booking[available_from]')">@{{ errors.first('booking[available_from]') }}</span>
|
||||
</div>
|
||||
|
||||
<div v-if="! parseInt(booking.available_every_week)">
|
||||
<div class="control-group" :class="[errors.has('booking[available_from]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-from') }}</label>
|
||||
<div class="control-group" :class="[errors.has('booking[available_to]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-to') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'required'" name="booking[available_from]" v-model="booking.available_from" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-from') }}""/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[available_from]')">@{{ errors.first('booking[available_from]') }}</span>
|
||||
</div>
|
||||
|
||||
<div class="control-group" :class="[errors.has('booking[available_to]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.available-to') }}</label>
|
||||
|
||||
<datetime>
|
||||
<input type="text" v-validate="'required'" name="booking[available_to]" v-model="booking.available_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-to') }}""/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[available_to]')">@{{ errors.first('booking[available_to]') }}</span>
|
||||
</div>
|
||||
<datetime>
|
||||
<input type="text" v-validate="'required'" name="booking[available_to]" v-model="booking.available_to" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.available-to') }}""/>
|
||||
</datetime>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[available_to]')">@{{ errors.first('booking[available_to]') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
@ -116,7 +114,7 @@
|
|||
return {
|
||||
booking: bookingProduct ? bookingProduct : {
|
||||
|
||||
booking_type: 'default',
|
||||
type: 'default',
|
||||
|
||||
location: '',
|
||||
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@
|
|||
|
||||
data: function() {
|
||||
return {
|
||||
tickets: @json($bookingProduct->event_tickets()->get())
|
||||
tickets: @json($bookingProduct ? $bookingProduct->event_tickets()->get() : [])
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<div class="control-group" :class="[errors.has('booking[qty]') ? 'has-error' : '']">
|
||||
<label class="required">{{ __('bookingproduct::app.admin.catalog.products.guest-capacity') }}</label>
|
||||
|
||||
<input type="text" v-validate="'required|min_value:1'" name="booking[qty]" value="{{ $bookingProduct->qty }}" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.guest-limit') }}""/>
|
||||
<input type="text" v-validate="'required|min_value:1'" name="booking[qty]" value="{{ $bookingProduct ? $bookingProduct->qty : 0 }}" class="control" data-vv-as=""{{ __('bookingproduct::app.admin.catalog.products.guest-limit') }}""/>
|
||||
|
||||
<span class="control-error" v-if="errors.has('booking[qty]')">@{{ errors.first('booking[qty]') }}</span>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
<div class="booking-info-row">
|
||||
<span class="icon bp-slot-icon"></span>
|
||||
<span class="title">
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
|
||||
@if ($bookingProduct->default_slot->duration)
|
||||
<div class="booking-info-row">
|
||||
<span class="icon bp-slot-icon"></span>
|
||||
<span class="title">
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
|
||||
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
|
||||
</span>
|
||||
</div>
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include ('bookingproduct::shop.products.view.booking.slots', ['bookingProduct' => $bookingProduct])
|
||||
|
|
@ -47,6 +47,8 @@
|
|||
this.$http.get("{{ route('booking_product.slots.index', $bookingProduct->id) }}", {params: {date: date}})
|
||||
.then (function(response) {
|
||||
this_this.slots = response.data.data;
|
||||
|
||||
this_this.errors.clear();
|
||||
})
|
||||
.catch (function (error) {})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
<div class="booking-info-row">
|
||||
<span class="icon bp-slot-icon"></span>
|
||||
<span class="title">
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
|
||||
@if ($bookingProduct->default_slot->duration)
|
||||
<div class="booking-info-row">
|
||||
<span class="icon bp-slot-icon"></span>
|
||||
<span class="title">
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration') }} :
|
||||
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
|
||||
</span>
|
||||
</div>
|
||||
{{ __('bookingproduct::app.shop.products.slot-duration-in-minutes', ['minutes' => $bookingProduct->default_slot->duration]) }}
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include ('bookingproduct::shop.products.view.booking.slots', ['bookingProduct' => $bookingProduct])
|
||||
|
|
@ -47,6 +47,8 @@
|
|||
this.$http.get("{{ route('booking_product.slots.index', $bookingProduct->id) }}", {params: {date: date}})
|
||||
.then (function(response) {
|
||||
this_this.slots = response.data.data;
|
||||
|
||||
this_this.errors.clear();
|
||||
})
|
||||
.catch (function (error) {})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -73,6 +73,9 @@ class CatalogRuleProduct
|
|||
*/
|
||||
public function insertRuleProduct($rule, $batchCount = 1000, $product = null)
|
||||
{
|
||||
if (! (float) $rule->discount_amount)
|
||||
return;
|
||||
|
||||
$productIds = $this->getMatchingProductIds($rule, $product);
|
||||
|
||||
$rows = [];
|
||||
|
|
|
|||
|
|
@ -98,8 +98,8 @@ class CatalogRuleProductPrice
|
|||
|
||||
foreach ($dates as $key => $date) {
|
||||
if ((! $row->starts_from || $date >= $row->starts_from)
|
||||
&& (! $row->ends_till || $date <= $row->ends_till))
|
||||
{
|
||||
&& (! $row->ends_till || $date <= $row->ends_till)
|
||||
) {
|
||||
$priceKey = $date->getTimestamp() . '-' . $productKey;
|
||||
|
||||
if (isset($endRuleFlags[$priceKey])) {
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ return [
|
|||
*/
|
||||
|
||||
\Webkul\Attribute\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\BookingProduct\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Category\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Checkout\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Core\Providers\ModuleServiceProvider::class,
|
||||
|
|
@ -22,5 +23,6 @@ return [
|
|||
\Webkul\CatalogRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CartRule\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\CMS\Providers\ModuleServiceProvider::class,
|
||||
\Webkul\Velocity\Providers\ModuleServiceProvider::class,
|
||||
]
|
||||
];
|
||||
|
|
@ -49,7 +49,8 @@ class ProductServiceProvider extends ServiceProvider
|
|||
*
|
||||
* @return void
|
||||
*/
|
||||
public function registerConfig(): void {
|
||||
public function registerConfig(): void
|
||||
{
|
||||
$this->mergeConfigFrom(
|
||||
dirname(__DIR__) . '/Config/product_types.php', 'product_types'
|
||||
);
|
||||
|
|
|
|||
|
|
@ -495,7 +495,7 @@ abstract class AbstractType
|
|||
}
|
||||
|
||||
if (! (float) $this->product->special_price) {
|
||||
if ($rulePrice) {
|
||||
if ($rulePrice && $rulePrice->price < $this->product->price) {
|
||||
$this->product->special_price = $rulePrice->price;
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -61,19 +61,19 @@ class OrderDataGrid extends DataGrid
|
|||
'closure' => true,
|
||||
'wrapper' => function ($value) {
|
||||
if ($value->status == 'processing') {
|
||||
return '<span class="badge badge-md badge-success">Processing</span>';
|
||||
return '<span class="badge badge-md badge-success">' . trans('shop::app.customer.account.order.index.processing') . '</span>';
|
||||
} elseif ($value->status == 'completed') {
|
||||
return '<span class="badge badge-md badge-success">Completed</span>';
|
||||
return '<span class="badge badge-md badge-success">' . trans('shop::app.customer.account.order.index.completed') . '</span>';
|
||||
} elseif ($value->status == "canceled") {
|
||||
return '<span class="badge badge-md badge-danger">Canceled</span>';
|
||||
return '<span class="badge badge-md badge-danger">' . trans('shop::app.customer.account.order.index.canceled') . '</span>';
|
||||
} elseif ($value->status == "closed") {
|
||||
return '<span class="badge badge-md badge-info">Closed</span>';
|
||||
return '<span class="badge badge-md badge-info">' . trans('shop::app.customer.account.order.index.closed') . '</span>';
|
||||
} elseif ($value->status == "pending") {
|
||||
return '<span class="badge badge-md badge-warning">Pending</span>';
|
||||
return '<span class="badge badge-md badge-warning">' . trans('shop::app.customer.account.order.index.pending') . '</span>';
|
||||
} elseif ($value->status == "pending_payment") {
|
||||
return '<span class="badge badge-md badge-warning">Pending Payment</span>';
|
||||
return '<span class="badge badge-md badge-warning">' . trans('shop::app.customer.account.order.index.pending-payment') . '</span>';
|
||||
} elseif ($value->status == "fraud") {
|
||||
return '<span class="badge badge-md badge-danger">Fraud</span>';
|
||||
return '<span class="badge badge-md badge-danger">' . trans('shop::app.customer.account.order.index.fraud') . '</span>';
|
||||
}
|
||||
},
|
||||
'filterable' => true,
|
||||
|
|
|
|||
|
|
@ -257,7 +257,14 @@ return [
|
|||
'date' => 'التاريخ',
|
||||
'status' => 'الحالة',
|
||||
'total' => 'المجموع',
|
||||
'order_number' => 'Order Number'
|
||||
'order_number' => 'رقم الأمر',
|
||||
'processing' => 'معالجة',
|
||||
'completed' => 'منجز',
|
||||
'canceled' => 'ألغيت',
|
||||
'closed' => 'مغلق',
|
||||
'pending' => 'قيد الانتظار',
|
||||
'pending-payment' => 'في انتظار الدفع',
|
||||
'fraud' => 'تزوير'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
|
|
@ -257,7 +257,14 @@ return [
|
|||
'date' => 'Date',
|
||||
'status' => 'Status',
|
||||
'total' => 'Total',
|
||||
'order_number' => 'Order Number'
|
||||
'order_number' => 'Order Number',
|
||||
'processing' => 'Processing',
|
||||
'completed' => 'Completed',
|
||||
'canceled' => 'Canceled',
|
||||
'closed' => 'Closed',
|
||||
'pending' => 'Pending',
|
||||
'pending-payment' => 'Pending Payment',
|
||||
'fraud' => 'Fraud'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
|
|
@ -245,7 +245,14 @@ return [
|
|||
'date' => 'Fecha',
|
||||
'status' => 'Estado',
|
||||
'total' => 'Total',
|
||||
'order_number' => 'Número de pedido'
|
||||
'order_number' => 'Número de pedido',
|
||||
'processing' => 'Processing',
|
||||
'completed' => 'Completed',
|
||||
'canceled' => 'Canceled',
|
||||
'closed' => 'Closed',
|
||||
'pending' => 'Pending',
|
||||
'pending-payment' => 'Pending Payment',
|
||||
'fraud' => 'Fraud'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
|
|
@ -257,7 +257,14 @@ return [
|
|||
'date' => 'تاریخ',
|
||||
'status' => 'وضعیت',
|
||||
'total' => 'جمع',
|
||||
'order_number' => 'شماره سفارش'
|
||||
'order_number' => 'شماره سفارش',
|
||||
'processing' => 'در حال پردازش',
|
||||
'completed' => 'تکمیل شد',
|
||||
'canceled' => 'لغو شد',
|
||||
'closed' => 'بسته شد',
|
||||
'pending' => 'در انتظار',
|
||||
'pending-payment' => 'در انتظار پرداخت',
|
||||
'fraud' => 'تقلب'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
|
|
@ -262,7 +262,14 @@ return [
|
|||
'date' => 'Datum',
|
||||
'status' => 'Toestand',
|
||||
'total' => 'Totaal',
|
||||
'order_number' => 'Bestelnummer'
|
||||
'order_number' => 'Bestelnummer',
|
||||
'processing' => 'Processing',
|
||||
'completed' => 'Completed',
|
||||
'canceled' => 'Canceled',
|
||||
'closed' => 'Closed',
|
||||
'pending' => 'Pending',
|
||||
'pending-payment' => 'Pending Payment',
|
||||
'fraud' => 'Fraud'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
|
|
@ -244,7 +244,14 @@ return [
|
|||
'order_id' => 'Pedido ID',
|
||||
'date' => 'Data',
|
||||
'status' => 'Status',
|
||||
'total' => 'Total'
|
||||
'total' => 'Total',
|
||||
'processing' => 'Processing',
|
||||
'completed' => 'Completed',
|
||||
'canceled' => 'Canceled',
|
||||
'closed' => 'Closed',
|
||||
'pending' => 'Pending',
|
||||
'pending-payment' => 'Pending Payment',
|
||||
'fraud' => 'Fraud'
|
||||
],
|
||||
|
||||
'view' => [
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"/js/ui.js": "/js/ui.js?id=35b3eec657974d2d70de",
|
||||
"/css/ui.css": "/css/ui.css?id=0da4fe25579eeab1806d"
|
||||
"/js/ui.js": "/js/ui.js?id=f4734f49f2e95bf51c83",
|
||||
"/css/ui.css": "/css/ui.css?id=0895b560bbc19259cee8"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,8 +31,8 @@ export default {
|
|||
var element = this.$el.getElementsByTagName("input")[0];
|
||||
this.datepicker = new Flatpickr(element, {
|
||||
allowInput: true,
|
||||
altFormat: "Y-m-d H:i:s",
|
||||
dateFormat: "Y-m-d H:i:s",
|
||||
altFormat: "Y-m-d H:i:S",
|
||||
dateFormat: "Y-m-d H:i:S",
|
||||
enableTime: true,
|
||||
onChange: function(selectedDates, dateStr, instance) {
|
||||
this_this.$emit('onChange', dateStr)
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"/js/velocity.js": "/js/velocity.js?id=6ddbe8cf2f5f023bf2af",
|
||||
"/js/velocity.js": "/js/velocity.js?id=6435683a6664cfe72d05",
|
||||
"/css/velocity-admin.css": "/css/velocity-admin.css?id=612d35e452446366eef7",
|
||||
"/css/velocity.css": "/css/velocity.css?id=84682d653fd625fc680a"
|
||||
"/css/velocity.css": "/css/velocity.css?id=93ab8f3d857e4367cf0d"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Velocity\Contracts;
|
||||
|
||||
interface VelocityCustomerCompareProduct
|
||||
{
|
||||
}
|
||||
|
|
@ -78,7 +78,7 @@ class CartController extends Controller
|
|||
|
||||
$response = [
|
||||
'status' => 'success',
|
||||
'totalCartItems' => sizeof($items),
|
||||
'totalCartItems' => sizeof($cart->items),
|
||||
'message' => trans('shop::app.checkout.cart.item.success'),
|
||||
];
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ use Webkul\Velocity\Contracts\OrderBrand as OrderBrandContract;
|
|||
use Webkul\Attribute\Models\AttributeOptionProxy;
|
||||
use Webkul\Category\Models\CategoryProxy;
|
||||
|
||||
class OrderBrands extends Model implements OrderBrandContract
|
||||
class OrderBrand extends Model implements OrderBrandContract
|
||||
{
|
||||
|
||||
protected $table = 'order_brands';
|
||||
|
|
@ -3,8 +3,9 @@
|
|||
namespace Webkul\Velocity\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Webkul\Velocity\Contracts\VelocityCustomerCompareProduct as VelocityCustomerCompareProductContract;
|
||||
|
||||
class VelocityCustomerCompareProduct extends Model
|
||||
class VelocityCustomerCompareProduct extends Model implements VelocityCustomerCompareProductContract
|
||||
{
|
||||
protected $guarded = [];
|
||||
}
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
<?php
|
||||
|
||||
namespace Webkul\Velocity\Models;
|
||||
|
||||
use Konekt\Concord\Proxies\ModelProxy;
|
||||
|
||||
class VelocityCustomerCompareProductProxy extends ModelProxy
|
||||
{
|
||||
|
||||
}
|
||||
|
|
@ -7,7 +7,11 @@ use Konekt\Concord\BaseModuleServiceProvider;
|
|||
class ModuleServiceProvider extends BaseModuleServiceProvider
|
||||
{
|
||||
protected $models = [
|
||||
\Webkul\Velocity\Models\Content::class,
|
||||
\Webkul\Velocity\Models\Category::class,
|
||||
\Webkul\Velocity\Models\Content::class,
|
||||
\Webkul\Velocity\Models\ContentTranslation::class,
|
||||
\Webkul\Velocity\Models\OrderBrand::class,
|
||||
\Webkul\Velocity\Models\VelocityCustomerCompareProduct::class,
|
||||
\Webkul\Velocity\Models\VelocityMetadata::class,
|
||||
];
|
||||
}
|
||||
|
|
@ -3,10 +3,6 @@
|
|||
namespace Webkul\Velocity\Providers;
|
||||
|
||||
use Illuminate\Routing\Router;
|
||||
use Illuminate\Support\Facades\App;
|
||||
use Illuminate\Support\Facades\File;
|
||||
use Illuminate\Support\Facades\Event;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
use Illuminate\Foundation\AliasLoader;
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Webkul\Velocity\Facades\Velocity as VelocityFacade;
|
||||
|
|
@ -58,10 +54,6 @@ class VelocityServiceProvider extends ServiceProvider
|
|||
*/
|
||||
protected function registerConfig()
|
||||
{
|
||||
// $this->mergeConfigFrom(
|
||||
// dirname(__DIR__) . '/Config/system.php', 'core'
|
||||
// );
|
||||
|
||||
$this->mergeConfigFrom(
|
||||
dirname(__DIR__) . '/Config/admin-menu.php', 'menu.admin'
|
||||
);
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class CategoryRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\Category';
|
||||
return 'Webkul\Velocity\Contracts\Category';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ class ContentRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\Content';
|
||||
return 'Webkul\Velocity\Contracts\Content';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -13,6 +13,6 @@ class ContentTranslationRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\ContentTranslation';
|
||||
return 'Webkul\Velocity\Contracts\ContentTranslation';
|
||||
}
|
||||
}
|
||||
|
|
@ -18,7 +18,7 @@ class OrderBrandsRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\OrderBrands';
|
||||
return 'Webkul\Velocity\Contracts\OrderBrand';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -13,6 +13,6 @@ class VelocityCustomerCompareProductRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\VelocityCustomerCompareProduct';
|
||||
return 'Webkul\Velocity\Contracts\VelocityCustomerCompareProduct';
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,6 @@ class VelocityMetadataRepository extends Repository
|
|||
*/
|
||||
function model()
|
||||
{
|
||||
return 'Webkul\Velocity\Models\VelocityMetadata';
|
||||
return 'Webkul\Velocity\Contracts\VelocityMetadata';
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
</form>
|
||||
</template>
|
||||
|
||||
<script type="text/javascript">
|
||||
<script>
|
||||
export default {
|
||||
props: [
|
||||
'form',
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
]">
|
||||
|
||||
<slot
|
||||
v-for="index in slidesCount"
|
||||
v-for="index in parseInt(slidesCount)"
|
||||
:name="`slide-${parseInt(index) - 1}`">
|
||||
</slot>
|
||||
</carousel>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,83 @@
|
|||
<template>
|
||||
<div class="shimmer-card-container">
|
||||
<carousel-component
|
||||
id="shimmer-carousel"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
:slides-count="shimmerCount + 1"
|
||||
:slides-per-page="shimmerCount">
|
||||
|
||||
<slide
|
||||
:key="count"
|
||||
:slot="`slide-${count}`"
|
||||
v-for="count in shimmerCount">
|
||||
|
||||
<div class="shimmer-card">
|
||||
<div class="shimmer-wrapper">
|
||||
<div class="shimmer-product-image animate"></div>
|
||||
<div class="comment animate"></div>
|
||||
<div class="comment animate"></div>
|
||||
<div class="comment animate"></div>
|
||||
</div>
|
||||
</div>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
props: {
|
||||
'shimmerCount': {
|
||||
default: 6,
|
||||
type: Number,
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.shimmer-card {
|
||||
margin: 0px 10px 50px 10px;
|
||||
padding: 30px 40px;
|
||||
border: 2px solid #fff;
|
||||
box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
|
||||
}
|
||||
|
||||
.shimmer-product-image {
|
||||
width: 100%;
|
||||
height: 180px;
|
||||
}
|
||||
|
||||
.comment {
|
||||
height: 10px;
|
||||
background: #777;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.shimmer-wrapper {
|
||||
width: 0px;
|
||||
animation: fullView 0.5s forwards linear;
|
||||
}
|
||||
|
||||
@keyframes fullView {
|
||||
100% {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.animate {
|
||||
animation : shimmer 2s infinite;
|
||||
background: linear-gradient(to right, #eff1f3 4%, #e2e2e2 25%, #eff1f3 36%);
|
||||
background-size: 1000px 100%;
|
||||
}
|
||||
|
||||
@keyframes shimmer {
|
||||
0% {
|
||||
background-position: -1000px 0;
|
||||
}
|
||||
100% {
|
||||
background-position: 1000px 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
@ -44,6 +44,7 @@ Vue.component('child-sidebar', require('./UI/components/child-sidebar'));
|
|||
Vue.component('card-list-header', require('./UI/components/card-header'));
|
||||
Vue.component('magnify-image', require('./UI/components/image-magnifier'));
|
||||
Vue.component('compare-component', require('./UI/components/product-compare'));
|
||||
Vue.component("shimmer-component", require("./UI/components/shimmer-component"));
|
||||
Vue.component('responsive-sidebar', require('./UI/components/responsive-sidebar'));
|
||||
Vue.component('product-quick-view', require('./UI/components/product-quick-view'));
|
||||
Vue.component('product-quick-view-btn', require('./UI/components/product-quick-view-btn'));
|
||||
|
|
|
|||
|
|
@ -121,7 +121,8 @@
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.badge-wrapper {
|
||||
.badge-wrapper,
|
||||
.badge-container {
|
||||
top: -2px;
|
||||
left: -7px;
|
||||
position: relative;
|
||||
|
|
@ -133,6 +134,11 @@
|
|||
background: $theme-color;
|
||||
}
|
||||
}
|
||||
|
||||
.badge-container {
|
||||
left: 4px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -435,6 +441,11 @@
|
|||
.searchbar {
|
||||
padding-left: 20px !important;
|
||||
padding-right: 20px !important;
|
||||
|
||||
.compare-btn,
|
||||
.wishlist-btn {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
#search-form {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
{!! view_render_event('bagisto.admin.content.create_form_accordian.content.link.before') !!}
|
||||
|
||||
<div class="control-group" :class="[errors.has('page_link') ? 'has-error' : '']">
|
||||
<div class="control-group" :class="[errors.has('{!!$locale!!}[page_link]') ? 'has-error' : '']">
|
||||
<label for="page_link" class="required">
|
||||
{{ __('velocity::app.admin.contents.content.category-slug') }}
|
||||
</label>
|
||||
|
|
@ -17,10 +17,10 @@
|
|||
name="{{$locale}}[page_link]"
|
||||
v-validate="'required|max:150'"
|
||||
value="{{ $pageTarget }}"
|
||||
data-vv-as=""{{ __('velocity::app.admin.contents.content.page-link') }}"" />
|
||||
data-vv-as=""{{ __('velocity::app.admin.contents.content.category-slug') }}"" />
|
||||
|
||||
<span class="control-error" v-if="errors.has('page_link')">
|
||||
@{{ errors.first('page_link') }}
|
||||
<span class="control-error" v-if="errors.has('{!!$locale!!}[page_link]')">
|
||||
@{{ errors.first('{!!$locale!!}[page_link]') }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@
|
|||
<header class="row velocity-divide-page vc-header header-shadow active">
|
||||
<div class="vc-small-screen container" v-if="isMobile()">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<div class="col-6">
|
||||
<div v-if="hamburger" class="nav-container scrollable">
|
||||
<div class="wrapper" v-if="this.rootCategories">
|
||||
<div class="greeting drawer-section fw6">
|
||||
|
|
@ -198,19 +198,18 @@
|
|||
@endforeach
|
||||
|
||||
<ul type="none" class="velocity-content">
|
||||
<li
|
||||
:key="index"
|
||||
v-for="(content, index) in headerContent">
|
||||
<a :href="`${$root.baseUrl}/${content.page_link}`" class="unset" v-text="content.title"></a>
|
||||
<li :key="index" v-for="(content, index) in headerContent">
|
||||
<a
|
||||
class="unset"
|
||||
v-text="content.title"
|
||||
:href="`${$root.baseUrl}/${content.page_link}`">
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul type="none" class="category-wrapper">
|
||||
<li v-for="(category, index) in $root.sharedRootCategories">
|
||||
<a
|
||||
class="unset"
|
||||
:href="`${$root.baseUrl}/${category.slug}`">
|
||||
|
||||
<a class="unset" :href="`${$root.baseUrl}/${category.slug}`">
|
||||
<div class="category-logo">
|
||||
<img
|
||||
class="category-icon"
|
||||
|
|
@ -220,10 +219,7 @@
|
|||
<span v-text="category.name"></span>
|
||||
</a>
|
||||
|
||||
<i
|
||||
class="rango-arrow-right"
|
||||
@click="toggleSubcategories(index, $event)">
|
||||
</i>
|
||||
<i class="rango-arrow-right" @click="toggleSubcategories(index, $event)"></i>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
|
@ -447,8 +443,18 @@
|
|||
<logo-component></logo-component>
|
||||
</div>
|
||||
|
||||
<div class="right-vc-header col-4">
|
||||
<a :href="`${$root.baseUrl}/customer/account/wishlist`" class="unset">
|
||||
<div class="right-vc-header col-6">
|
||||
<a class="compare-btn unset" href="{{ route('velocity.product.compare') }}">
|
||||
<div class="badge-container" v-if="compareCount > 0">
|
||||
<span class="badge" v-text="compareCount"></span>
|
||||
</div>
|
||||
<i class="material-icons">compare_arrows</i>
|
||||
</a>
|
||||
|
||||
<a class="wishlist-btn unset" :href="`${isCustomer ? '{{ route('customer.wishlist.index') }}' : '{{ route('velocity.product.guest-wishlist') }}'}`">
|
||||
<div class="badge-container" v-if="wishlistCount > 0">
|
||||
<span class="badge" v-text="wishlistCount"></span>
|
||||
</div>
|
||||
<i class="material-icons">favorite_border</i>
|
||||
</a>
|
||||
|
||||
|
|
@ -688,6 +694,7 @@
|
|||
'subCategory': null,
|
||||
'isSearchbar': false,
|
||||
'rootCategories': true,
|
||||
'isCustomer': '{{ auth()->guard('customer')->user() ? "true" : "false" }}' == "true",
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -698,9 +705,17 @@
|
|||
} else {
|
||||
document.body.classList.remove('open-hamburger');
|
||||
}
|
||||
},
|
||||
|
||||
'$root.headerItemsCount': function () {
|
||||
this.updateHeaderItemsCount();
|
||||
}
|
||||
},
|
||||
|
||||
created: function () {
|
||||
this.updateHeaderItemsCount();
|
||||
},
|
||||
|
||||
methods: {
|
||||
openSearchBar: function () {
|
||||
this.isSearchbar = !this.isSearchbar;
|
||||
|
|
@ -743,6 +758,30 @@
|
|||
toggleMetaInfo: function (metaKey) {
|
||||
this.rootCategories = false;
|
||||
this[metaKey] = !this[metaKey];
|
||||
},
|
||||
|
||||
updateHeaderItemsCount: function () {
|
||||
if (! this.isCustomer) {
|
||||
let comparedItems = this.getStorageValue('compared_product');
|
||||
let wishlistedItems = this.getStorageValue('wishlist_product');
|
||||
|
||||
if (wishlistedItems) {
|
||||
this.wishlistCount = wishlistedItems.length;
|
||||
}
|
||||
|
||||
if (comparedItems) {
|
||||
this.compareCount = comparedItems.length;
|
||||
}
|
||||
} else {
|
||||
this.$http.get(`${this.$root.baseUrl}/items-count`)
|
||||
.then(response => {
|
||||
this.compareCount = response.data.compareProductsCount;
|
||||
this.wishlistCount = response.data.wishlistedProductsCount;
|
||||
})
|
||||
.catch(exception => {
|
||||
console.log(this.__('error.something_went_wrong'));
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
|
|
|
|||
|
|
@ -6,19 +6,42 @@
|
|||
|
||||
@push('scripts')
|
||||
<script type="text/x-template" id="category-products-template">
|
||||
<div class="container-fluid remove-padding-margin" v-if="isCategory && categoryProducts.length > 0">
|
||||
<card-list-header
|
||||
:view-all="`${this.baseUrl}/${categoryDetails.slug}`"
|
||||
:heading="categoryDetails.name">
|
||||
</card-list-header>
|
||||
<div class="container-fluid remove-padding-margin">
|
||||
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
|
||||
|
||||
<div class="carousel-products vc-full-screen ltr" v-if="!isMobile()">
|
||||
<carousel-component
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
:slides-count="categoryProducts.length"
|
||||
:id="`${categoryDetails.name}-carousel`">
|
||||
<template v-else-if="categoryProducts.length > 0">
|
||||
<card-list-header
|
||||
:heading="categoryDetails.name"
|
||||
:view-all="`${this.baseUrl}/${categoryDetails.slug}`">
|
||||
</card-list-header>
|
||||
|
||||
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
|
||||
<carousel-component
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
:slides-count="categoryProducts.length"
|
||||
:id="`${categoryDetails.name}-carousel`">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in categoryProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
|
||||
<div class="carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
:slides-count="categoryProducts.length"
|
||||
:id="`${categoryDetails.name}-carousel`">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
|
|
@ -29,28 +52,10 @@
|
|||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
:slides-count="categoryProducts.length"
|
||||
:id="`${categoryDetails.name}-carousel`">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in categoryProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
|
@ -59,13 +64,16 @@
|
|||
Vue.component('category-products', {
|
||||
template: '#category-products-template',
|
||||
props: [
|
||||
'categorySlug'
|
||||
'categorySlug',
|
||||
],
|
||||
|
||||
data: function () {
|
||||
return {
|
||||
isLoading: true,
|
||||
isCategory: false,
|
||||
heading: 'customer',
|
||||
categoryProducts: [],
|
||||
isMobileView: this.$root.isMobile(),
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -91,8 +99,13 @@
|
|||
// });
|
||||
// }, 0);
|
||||
}
|
||||
|
||||
this.isLoading = false;
|
||||
})
|
||||
.catch(error => {});
|
||||
.catch(error => {
|
||||
this.isLoading = false;
|
||||
console.log(this.__('error.something_went_wrong'));
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -6,49 +6,54 @@
|
|||
|
||||
@push('scripts')
|
||||
<script type="text/x-template" id="featured-products-template">
|
||||
<div class="container-fluid featured-products" v-if="featuredProducts.length > 0">
|
||||
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
|
||||
</card-list-header>
|
||||
<div class="container-fluid featured-products">
|
||||
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
|
||||
|
||||
<div class="carousel-products vc-full-screen ltr">
|
||||
<carousel-component
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="fearured-products-carousel"
|
||||
:slides-count="featuredProducts.length">
|
||||
<template v-else-if="featuredProducts.length > 0">
|
||||
<card-list-header heading="{{ __('shop::app.home.featured-products') }}">
|
||||
</card-list-header>
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in featuredProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
<div class="carousel-products vc-full-screen ltr" v-if="!isMobileView">
|
||||
<carousel-component
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="fearured-products-carousel"
|
||||
:slides-count="featuredProducts.length">
|
||||
|
||||
<div class="carousel-products vc-small-screen">
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="fearured-products-carousel"
|
||||
:slides-count="featuredProducts.length">
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in featuredProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
|
||||
<div class="carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="fearured-products-carousel"
|
||||
:slides-count="featuredProducts.length">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in featuredProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in featuredProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
|
@ -59,7 +64,9 @@
|
|||
data: function () {
|
||||
return {
|
||||
'list': false,
|
||||
'isLoading': true,
|
||||
'featuredProducts': [],
|
||||
'isMobileView': this.$root.isMobile(),
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -73,8 +80,13 @@
|
|||
.then(response => {
|
||||
if (response.data.status)
|
||||
this.featuredProducts = response.data.products;
|
||||
|
||||
this.isLoading = false;
|
||||
})
|
||||
.catch(error => {
|
||||
this.isLoading = false;
|
||||
console.log(this.__('error.something_went_wrong'));
|
||||
})
|
||||
.catch(error => {})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -59,7 +59,8 @@
|
|||
{!! view_render_event('bagisto.shop.home.content.before') !!}
|
||||
|
||||
@if ($velocityMetaData)
|
||||
{!! DbView::make($velocityMetaData)->field('home_page_content')->render() !!}
|
||||
{{-- {!! DbView::make($velocityMetaData)->field('home_page_content')->render() !!} --}}
|
||||
@include('shop::home.featured-products')
|
||||
@else
|
||||
@include('shop::home.advertisements.advertisement-four')
|
||||
@include('shop::home.featured-products')
|
||||
|
|
|
|||
|
|
@ -6,25 +6,74 @@
|
|||
|
||||
@push('scripts')
|
||||
<script type="text/x-template" id="new-products-template">
|
||||
<div class="container-fluid" v-if="newProducts.length > 0">
|
||||
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
|
||||
</card-list-header>
|
||||
<div class="container-fluid">
|
||||
<shimmer-component v-if="isLoading && !isMobileView"></shimmer-component>
|
||||
|
||||
{!! view_render_event('bagisto.shop.new-products.before') !!}
|
||||
<template v-else-if="newProducts.length > 0">
|
||||
<card-list-header heading="{{ __('shop::app.home.new-products') }}">
|
||||
</card-list-header>
|
||||
|
||||
@if ($showRecentlyViewed)
|
||||
@push('css')
|
||||
<style>
|
||||
.recently-viewed {
|
||||
padding-right: 0px;
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
{!! view_render_event('bagisto.shop.new-products.before') !!}
|
||||
|
||||
<div class="row ltr">
|
||||
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileDevice">
|
||||
@if ($showRecentlyViewed)
|
||||
@push('css')
|
||||
<style>
|
||||
.recently-viewed {
|
||||
padding-right: 0px;
|
||||
}
|
||||
</style>
|
||||
@endpush
|
||||
|
||||
<div class="row ltr">
|
||||
<div class="col-9 no-padding carousel-products vc-full-screen with-recent-viewed" v-if="!isMobileView">
|
||||
<carousel-component
|
||||
slides-per-page="5"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="new-products-carousel"
|
||||
:slides-count="newProducts.length">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in newProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
|
||||
<div class="col-12 no-padding carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="new-products-carousel"
|
||||
:slides-count="newProducts.length">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in newProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
|
||||
@include ('shop::products.list.recently-viewed', [
|
||||
'quantity' => 3,
|
||||
'addClass' => 'col-lg-3 col-md-12',
|
||||
])
|
||||
</div>
|
||||
@else
|
||||
<div class="carousel-products vc-full-screen" v-if="!isMobileView">
|
||||
<carousel-component
|
||||
slides-per-page="5"
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="new-products-carousel"
|
||||
|
|
@ -42,7 +91,7 @@
|
|||
</carousel-component>
|
||||
</div>
|
||||
|
||||
<div class="col-12 no-padding carousel-products vc-small-screen" v-else>
|
||||
<div class="carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
|
|
@ -61,55 +110,10 @@
|
|||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@include ('shop::products.list.recently-viewed', [
|
||||
'quantity' => 3,
|
||||
'addClass' => 'col-lg-3 col-md-12',
|
||||
])
|
||||
</div>
|
||||
@else
|
||||
<div class="carousel-products vc-full-screen" v-if="!isMobileDevice">
|
||||
<carousel-component
|
||||
slides-per-page="6"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="new-products-carousel"
|
||||
:slides-count="newProducts.length">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in newProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
|
||||
<div class="carousel-products vc-small-screen" v-else>
|
||||
<carousel-component
|
||||
slides-per-page="2"
|
||||
navigation-enabled="hide"
|
||||
pagination-enabled="hide"
|
||||
id="new-products-carousel"
|
||||
:slides-count="newProducts.length">
|
||||
|
||||
<slide
|
||||
:key="index"
|
||||
:slot="`slide-${index}`"
|
||||
v-for="(product, index) in newProducts">
|
||||
<product-card
|
||||
:list="list"
|
||||
:product="product">
|
||||
</product-card>
|
||||
</slide>
|
||||
</carousel-component>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
{!! view_render_event('bagisto.shop.new-products.after') !!}
|
||||
{!! view_render_event('bagisto.shop.new-products.after') !!}
|
||||
</template>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
|
|
@ -120,8 +124,9 @@
|
|||
data: function () {
|
||||
return {
|
||||
'list': false,
|
||||
'isLoading': true,
|
||||
'newProducts': [],
|
||||
'isMobileDevice': this.$root.isMobile(),
|
||||
'isMobileView': this.$root.isMobile(),
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -134,9 +139,14 @@
|
|||
this.$http.get(`${this.baseUrl}/category-details?category-slug=new-products&count={{ $count }}`)
|
||||
.then(response => {
|
||||
if (response.data.status)
|
||||
this.newProducts = response.data.products
|
||||
this.newProducts = response.data.products;
|
||||
|
||||
this.isLoading = false;
|
||||
})
|
||||
.catch(error => {
|
||||
this.isLoading = false;
|
||||
console.log(this.__('error.something_went_wrong'));
|
||||
})
|
||||
.catch(error => {})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
|||
|
|
@ -90,10 +90,10 @@
|
|||
$('#mail_port').append('<div class="form-error">' + data.errors.mail_port + '</div>');
|
||||
}
|
||||
|
||||
if (data.errors.mail_encryption) {
|
||||
$('#mail_encryption').addClass('has-error');
|
||||
$('#mail_encryption').append('<div class="form-error">' + data.errors.mail_encryption + '</div>');
|
||||
}
|
||||
// if (data.errors.mail_encryption) {
|
||||
// $('#mail_encryption').addClass('has-error');
|
||||
// $('#mail_encryption').append('<div class="form-error">' + data.errors.mail_encryption + '</div>');
|
||||
// }
|
||||
|
||||
if (data.errors.mail_from) {
|
||||
$('#mail_from').addClass('has-error');
|
||||
|
|
|
|||
|
|
@ -11,16 +11,16 @@ $data = array();
|
|||
|
||||
if (empty($_POST['mail_driver']))
|
||||
$errors['mail_driver'] = 'Please select the mail driver.';
|
||||
|
||||
|
||||
if (empty($_POST['mail_host']))
|
||||
$errors['mail_host'] = 'Please enter the hostname for this outgoing mail server.';
|
||||
|
||||
if (empty($_POST['mail_port']))
|
||||
$errors['mail_port'] = 'Please enter the port for this outgoing mail server.';
|
||||
$errors['mail_port'] = 'Please enter the port for this outgoing mail server.';
|
||||
|
||||
// if (empty($_POST['mail_encryption']))
|
||||
// $errors['mail_encryption'] = 'Please select the encryption method for this outgoing mail server.';
|
||||
|
||||
if (empty($_POST['mail_encryption']))
|
||||
$errors['mail_encryption'] = 'Please select the encryption method for this outgoing mail server.';
|
||||
|
||||
if (empty($_POST['mail_from']))
|
||||
$errors['mail_from'] = 'Please enter the email address for this store.';
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +1,19 @@
|
|||
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $url }}" class="button button-{{ $color ?? 'blue' }}" target="_blank">{{ $slot }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $url }}" class="button button-{{ $color ?? 'primary' }}" target="_blank">{{ $slot }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
<tr>
|
||||
<td>
|
||||
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="content-cell" align="center">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td>
|
||||
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell" align="center">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<tr>
|
||||
<td class="header">
|
||||
<a href="{{ $url }}">
|
||||
{{ $slot }}
|
||||
</a>
|
||||
</td>
|
||||
<td class="header">
|
||||
<a href="{{ $url }}">
|
||||
{{ $slot }}
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -1,54 +1,54 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
@media only screen and (max-width: 600px) {
|
||||
.inner-body {
|
||||
width: 100% !important;
|
||||
}
|
||||
<style>
|
||||
@media only screen and (max-width: 600px) {
|
||||
.inner-body {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.footer {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
.footer {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 500px) {
|
||||
.button {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@media only screen and (max-width: 500px) {
|
||||
.button {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="content" width="100%" cellpadding="0" cellspacing="0">
|
||||
{{ $header ?? '' }}
|
||||
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
{{ $header ?? '' }}
|
||||
|
||||
<!-- Email Body -->
|
||||
<tr>
|
||||
<td class="body" width="100%" cellpadding="0" cellspacing="0">
|
||||
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0">
|
||||
<!-- Body content -->
|
||||
<tr>
|
||||
<td class="content-cell">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
<!-- Email Body -->
|
||||
<tr>
|
||||
<td class="body" width="100%" cellpadding="0" cellspacing="0">
|
||||
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<!-- Body content -->
|
||||
<tr>
|
||||
<td class="content-cell">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
|
||||
{{ $subcopy ?? '' }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{{ $subcopy ?? '' }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{{ $footer ?? '' }}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
{{ $footer ?? '' }}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -1,27 +1,27 @@
|
|||
@component('mail::layout')
|
||||
{{-- Header --}}
|
||||
@slot('header')
|
||||
@component('mail::header', ['url' => config('app.url')])
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
||||
@endslot
|
||||
|
||||
{{-- Body --}}
|
||||
{{ $slot }}
|
||||
|
||||
{{-- Subcopy --}}
|
||||
@isset($subcopy)
|
||||
@slot('subcopy')
|
||||
@component('mail::subcopy')
|
||||
{{ $subcopy }}
|
||||
@endcomponent
|
||||
@endslot
|
||||
@endisset
|
||||
|
||||
{{-- Footer --}}
|
||||
@slot('footer')
|
||||
@component('mail::footer')
|
||||
© {{ date('Y') }} {{ config('app.name') }}. All rights reserved.
|
||||
@endcomponent
|
||||
@endslot
|
||||
{{-- Header --}}
|
||||
@slot('header')
|
||||
@component('mail::header', ['url' => config('app.url')])
|
||||
{{ config('app.name') }}
|
||||
@endcomponent
|
||||
@endslot
|
||||
|
||||
{{-- Body --}}
|
||||
{{ $slot }}
|
||||
|
||||
{{-- Subcopy --}}
|
||||
@isset($subcopy)
|
||||
@slot('subcopy')
|
||||
@component('mail::subcopy')
|
||||
{{ $subcopy }}
|
||||
@endcomponent
|
||||
@endslot
|
||||
@endisset
|
||||
|
||||
{{-- Footer --}}
|
||||
@slot('footer')
|
||||
@component('mail::footer')
|
||||
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
|
||||
@endcomponent
|
||||
@endslot
|
||||
@endcomponent
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
<table class="panel" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="panel-content">
|
||||
<table width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td class="panel-item">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<table class="panel" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="panel-content">
|
||||
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="panel-item">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<table width="100%" border="0" cellpadding="0" cellspacing="0">
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table border="0" cellpadding="0" cellspacing="0">
|
||||
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<a href="{{ $url }}" class="button button-green" target="_blank">{{ $slot }}</a>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0">
|
||||
<tr>
|
||||
<td>
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
{{ Illuminate\Mail\Markdown::parse($slot) }}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
|||
|
|
@ -1,13 +1,15 @@
|
|||
/* Base */
|
||||
|
||||
body, body *:not(html):not(style):not(br):not(tr):not(code) {
|
||||
font-family: Avenir, Helvetica, sans-serif;
|
||||
body,
|
||||
body *:not(html):not(style):not(br):not(tr):not(code) {
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
|
||||
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #f5f8fa;
|
||||
color: #74787E;
|
||||
background-color: #f8fafc;
|
||||
color: #74787e;
|
||||
height: 100%;
|
||||
hyphens: auto;
|
||||
line-height: 1.4;
|
||||
|
|
@ -30,7 +32,7 @@ blockquote {
|
|||
}
|
||||
|
||||
a {
|
||||
color: #3869D4;
|
||||
color: #3869d4;
|
||||
}
|
||||
|
||||
a img {
|
||||
|
|
@ -40,7 +42,7 @@ a img {
|
|||
/* Typography */
|
||||
|
||||
h1 {
|
||||
color: #2F3133;
|
||||
color: #3d4852;
|
||||
font-size: 19px;
|
||||
font-weight: bold;
|
||||
margin-top: 0;
|
||||
|
|
@ -48,7 +50,7 @@ h1 {
|
|||
}
|
||||
|
||||
h2 {
|
||||
color: #2F3133;
|
||||
color: #3d4852;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-top: 0;
|
||||
|
|
@ -56,7 +58,7 @@ h2 {
|
|||
}
|
||||
|
||||
h3 {
|
||||
color: #2F3133;
|
||||
color: #3d4852;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin-top: 0;
|
||||
|
|
@ -64,7 +66,7 @@ h3 {
|
|||
}
|
||||
|
||||
p {
|
||||
color: #74787E;
|
||||
color: #3d4852;
|
||||
font-size: 16px;
|
||||
line-height: 1.5em;
|
||||
margin-top: 0;
|
||||
|
|
@ -82,7 +84,7 @@ img {
|
|||
/* Layout */
|
||||
|
||||
.wrapper {
|
||||
background-color: #f5f8fa;
|
||||
background-color: #f8fafc;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
|
|
@ -118,9 +120,9 @@ img {
|
|||
/* Body */
|
||||
|
||||
.body {
|
||||
background-color: #FFFFFF;
|
||||
border-bottom: 1px solid #EDEFF2;
|
||||
border-top: 1px solid #EDEFF2;
|
||||
background-color: #ffffff;
|
||||
border-bottom: 1px solid #edeff2;
|
||||
border-top: 1px solid #edeff2;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
|
|
@ -130,7 +132,7 @@ img {
|
|||
}
|
||||
|
||||
.inner-body {
|
||||
background-color: #FFFFFF;
|
||||
background-color: #ffffff;
|
||||
margin: 0 auto;
|
||||
padding: 0;
|
||||
width: 570px;
|
||||
|
|
@ -142,7 +144,7 @@ img {
|
|||
/* Subcopy */
|
||||
|
||||
.subcopy {
|
||||
border-top: 1px solid #EDEFF2;
|
||||
border-top: 1px solid #edeff2;
|
||||
margin-top: 25px;
|
||||
padding-top: 25px;
|
||||
}
|
||||
|
|
@ -164,7 +166,7 @@ img {
|
|||
}
|
||||
|
||||
.footer p {
|
||||
color: #AEAEAE;
|
||||
color: #aeaeae;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
|
@ -180,13 +182,13 @@ img {
|
|||
}
|
||||
|
||||
.table th {
|
||||
border-bottom: 1px solid #EDEFF2;
|
||||
border-bottom: 1px solid #edeff2;
|
||||
padding-bottom: 8px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.table td {
|
||||
color: #74787E;
|
||||
color: #74787e;
|
||||
font-size: 15px;
|
||||
line-height: 18px;
|
||||
padding: 10px 0;
|
||||
|
|
@ -212,34 +214,37 @@ img {
|
|||
.button {
|
||||
border-radius: 3px;
|
||||
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
|
||||
color: #FFF;
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
-webkit-text-size-adjust: none;
|
||||
}
|
||||
|
||||
.button-blue {
|
||||
background-color: #3097D1;
|
||||
border-top: 10px solid #3097D1;
|
||||
border-right: 18px solid #3097D1;
|
||||
border-bottom: 10px solid #3097D1;
|
||||
border-left: 18px solid #3097D1;
|
||||
.button-blue,
|
||||
.button-primary {
|
||||
background-color: #3490dc;
|
||||
border-top: 10px solid #3490dc;
|
||||
border-right: 18px solid #3490dc;
|
||||
border-bottom: 10px solid #3490dc;
|
||||
border-left: 18px solid #3490dc;
|
||||
}
|
||||
|
||||
.button-green {
|
||||
background-color: #2ab27b;
|
||||
border-top: 10px solid #2ab27b;
|
||||
border-right: 18px solid #2ab27b;
|
||||
border-bottom: 10px solid #2ab27b;
|
||||
border-left: 18px solid #2ab27b;
|
||||
.button-green,
|
||||
.button-success {
|
||||
background-color: #38c172;
|
||||
border-top: 10px solid #38c172;
|
||||
border-right: 18px solid #38c172;
|
||||
border-bottom: 10px solid #38c172;
|
||||
border-left: 18px solid #38c172;
|
||||
}
|
||||
|
||||
.button-red {
|
||||
background-color: #bf5329;
|
||||
border-top: 10px solid #bf5329;
|
||||
border-right: 18px solid #bf5329;
|
||||
border-bottom: 10px solid #bf5329;
|
||||
border-left: 18px solid #bf5329;
|
||||
.button-red,
|
||||
.button-error {
|
||||
background-color: #e3342f;
|
||||
border-top: 10px solid #e3342f;
|
||||
border-right: 18px solid #e3342f;
|
||||
border-bottom: 10px solid #e3342f;
|
||||
border-left: 18px solid #e3342f;
|
||||
}
|
||||
|
||||
/* Panels */
|
||||
|
|
@ -249,7 +254,7 @@ img {
|
|||
}
|
||||
|
||||
.panel-content {
|
||||
background-color: #EDEFF2;
|
||||
background-color: #f1f5f8;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
|
|
@ -265,8 +270,8 @@ img {
|
|||
/* Promotions */
|
||||
|
||||
.promotion {
|
||||
background-color: #FFFFFF;
|
||||
border: 2px dashed #9BA2AB;
|
||||
background-color: #ffffff;
|
||||
border: 2px dashed #9ba2ab;
|
||||
margin: 0;
|
||||
margin-bottom: 25px;
|
||||
margin-top: 25px;
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
@if (! empty($greeting))
|
||||
# {{ $greeting }}
|
||||
@else
|
||||
@if ($level == 'error')
|
||||
@if ($level === 'error')
|
||||
# @lang('Whoops!')
|
||||
@else
|
||||
# @lang('Hello!')
|
||||
|
|
@ -21,13 +21,11 @@
|
|||
<?php
|
||||
switch ($level) {
|
||||
case 'success':
|
||||
$color = 'green';
|
||||
break;
|
||||
case 'error':
|
||||
$color = 'red';
|
||||
$color = $level;
|
||||
break;
|
||||
default:
|
||||
$color = 'blue';
|
||||
$color = 'primary';
|
||||
}
|
||||
?>
|
||||
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
|
||||
|
|
@ -45,20 +43,22 @@
|
|||
@if (! empty($salutation))
|
||||
{{ $salutation }}
|
||||
@else
|
||||
@lang('Regards'),<br>{{ config('app.name') }}
|
||||
@lang('Regards'),<br>
|
||||
{{ config('app.name') }}
|
||||
@endif
|
||||
|
||||
{{-- Subcopy --}}
|
||||
@isset($actionText)
|
||||
@component('mail::subcopy')
|
||||
@slot('subcopy')
|
||||
@lang(
|
||||
"If you’re having trouble clicking the \":actionText\" button, copy and paste the URL below\n".
|
||||
'into your web browser: [:actionURL](:actionURL)',
|
||||
'into your web browser: [:displayableActionUrl](:actionURL)',
|
||||
[
|
||||
'actionText' => $actionText,
|
||||
'actionURL' => $actionUrl
|
||||
'actionURL' => $actionUrl,
|
||||
'displayableActionUrl' => $displayableActionUrl,
|
||||
]
|
||||
)
|
||||
@endcomponent
|
||||
@endslot
|
||||
@endisset
|
||||
@endcomponent
|
||||
@endcomponent
|
||||
|
|
@ -1,44 +1,46 @@
|
|||
@if ($paginator->hasPages())
|
||||
<ul class="pagination" role="navigation">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span class="page-link" aria-hidden="true">‹</span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{{-- Pagination Elements --}}
|
||||
@foreach ($elements as $element)
|
||||
{{-- "Three Dots" Separator --}}
|
||||
@if (is_string($element))
|
||||
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
|
||||
<nav>
|
||||
<ul class="pagination">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span class="page-link" aria-hidden="true">‹</span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{{-- Array Of Links --}}
|
||||
@if (is_array($element))
|
||||
@foreach ($element as $page => $url)
|
||||
@if ($page == $paginator->currentPage())
|
||||
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
|
||||
@else
|
||||
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
{{-- Pagination Elements --}}
|
||||
@foreach ($elements as $element)
|
||||
{{-- "Three Dots" Separator --}}
|
||||
@if (is_string($element))
|
||||
<li class="page-item disabled" aria-disabled="true"><span class="page-link">{{ $element }}</span></li>
|
||||
@endif
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span class="page-link" aria-hidden="true">›</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
{{-- Array Of Links --}}
|
||||
@if (is_array($element))
|
||||
@foreach ($element as $page => $url)
|
||||
@if ($page == $paginator->currentPage())
|
||||
<li class="page-item active" aria-current="page"><span class="page-link">{{ $page }}</span></li>
|
||||
@else
|
||||
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span class="page-link" aria-hidden="true">›</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</nav>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -1,44 +1,46 @@
|
|||
@if ($paginator->hasPages())
|
||||
<ul class="pagination" role="navigation">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span aria-hidden="true">‹</span>
|
||||
</li>
|
||||
@else
|
||||
<li>
|
||||
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{{-- Pagination Elements --}}
|
||||
@foreach ($elements as $element)
|
||||
{{-- "Three Dots" Separator --}}
|
||||
@if (is_string($element))
|
||||
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
|
||||
<nav>
|
||||
<ul class="pagination">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.previous')">
|
||||
<span aria-hidden="true">‹</span>
|
||||
</li>
|
||||
@else
|
||||
<li>
|
||||
<a href="{{ $paginator->previousPageUrl() }}" rel="prev" aria-label="@lang('pagination.previous')">‹</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{{-- Array Of Links --}}
|
||||
@if (is_array($element))
|
||||
@foreach ($element as $page => $url)
|
||||
@if ($page == $paginator->currentPage())
|
||||
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
|
||||
@else
|
||||
<li><a href="{{ $url }}">{{ $page }}</a></li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
{{-- Pagination Elements --}}
|
||||
@foreach ($elements as $element)
|
||||
{{-- "Three Dots" Separator --}}
|
||||
@if (is_string($element))
|
||||
<li class="disabled" aria-disabled="true"><span>{{ $element }}</span></li>
|
||||
@endif
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li>
|
||||
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span aria-hidden="true">›</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
{{-- Array Of Links --}}
|
||||
@if (is_array($element))
|
||||
@foreach ($element as $page => $url)
|
||||
@if ($page == $paginator->currentPage())
|
||||
<li class="active" aria-current="page"><span>{{ $page }}</span></li>
|
||||
@else
|
||||
<li><a href="{{ $url }}">{{ $page }}</a></li>
|
||||
@endif
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li>
|
||||
<a href="{{ $paginator->nextPageUrl() }}" rel="next" aria-label="@lang('pagination.next')">›</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="disabled" aria-disabled="true" aria-label="@lang('pagination.next')">
|
||||
<span aria-hidden="true">›</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</nav>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -1,25 +1,27 @@
|
|||
@if ($paginator->hasPages())
|
||||
<ul class="pagination" role="navigation">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true">
|
||||
<span class="page-link">@lang('pagination.previous')</span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
|
||||
</li>
|
||||
@endif
|
||||
<nav>
|
||||
<ul class="pagination">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="page-item disabled" aria-disabled="true">
|
||||
<span class="page-link">@lang('pagination.previous')</span>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a>
|
||||
</li>
|
||||
@endif
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true">
|
||||
<span class="page-link">@lang('pagination.next')</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li class="page-item">
|
||||
<a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a>
|
||||
</li>
|
||||
@else
|
||||
<li class="page-item disabled" aria-disabled="true">
|
||||
<span class="page-link">@lang('pagination.next')</span>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
||||
</nav>
|
||||
@endif
|
||||
|
|
|
|||
|
|
@ -1,17 +1,19 @@
|
|||
@if ($paginator->hasPages())
|
||||
<ul class="pagination" role="navigation">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
|
||||
@else
|
||||
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
|
||||
@endif
|
||||
<nav>
|
||||
<ul class="pagination">
|
||||
{{-- Previous Page Link --}}
|
||||
@if ($paginator->onFirstPage())
|
||||
<li class="disabled" aria-disabled="true"><span>@lang('pagination.previous')</span></li>
|
||||
@else
|
||||
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">@lang('pagination.previous')</a></li>
|
||||
@endif
|
||||
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
|
||||
@else
|
||||
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
|
||||
@endif
|
||||
</ul>
|
||||
{{-- Next Page Link --}}
|
||||
@if ($paginator->hasMorePages())
|
||||
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">@lang('pagination.next')</a></li>
|
||||
@else
|
||||
<li class="disabled" aria-disabled="true"><span>@lang('pagination.next')</span></li>
|
||||
@endif
|
||||
</ul>
|
||||
</nav>
|
||||
@endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue