new theme modern2
|
|
@ -0,0 +1,51 @@
|
||||||
|
language: php
|
||||||
|
|
||||||
|
php:
|
||||||
|
- 7.0
|
||||||
|
- 7.1
|
||||||
|
- 7.2
|
||||||
|
- 7.3
|
||||||
|
- nightly
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
allow_failures:
|
||||||
|
- php: nightly
|
||||||
|
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
if: type = pull_request OR (type = push AND (branch = develop OR branch = master))
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.composer/cache/files
|
||||||
|
|
||||||
|
install:
|
||||||
|
- wget https://github.com/octobercms/october/archive/develop.zip
|
||||||
|
- unzip develop.zip && rm develop.zip
|
||||||
|
- mv october-develop october
|
||||||
|
- mkdir -p ./october/plugins/rainlab/builder
|
||||||
|
- mv !(october) october/plugins/rainlab/builder
|
||||||
|
- mv .travis.yml october/plugins/rainlab/builder
|
||||||
|
- cd october
|
||||||
|
- composer install --no-interaction --no-progress --no-suggest
|
||||||
|
- cp config/cms.php config/testing/cms.php
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- cd ./plugins/rainlab/builder
|
||||||
|
|
||||||
|
script:
|
||||||
|
- ../../../vendor/bin/parallel-lint .
|
||||||
|
- ../../../vendor/bin/phpunit
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
include:
|
||||||
|
- stage: code quality
|
||||||
|
if: type = pull_request
|
||||||
|
php: 7.1
|
||||||
|
script:
|
||||||
|
- git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*" && git fetch
|
||||||
|
- ../../../vendor/bin/phpcs --colors -nq --report="full" --extensions="php" $(git diff --name-only HEAD origin/$TRAVIS_BRANCH)
|
||||||
|
- stage: code quality
|
||||||
|
if: type = push AND (branch = develop OR branch = master)
|
||||||
|
php: 7.1
|
||||||
|
script: ../../../vendor/bin/phpcs --colors -nq --report="full" --extensions="php" $(git show --name-only --pretty="" $TRAVIS_COMMIT)
|
||||||
|
|
@ -137,7 +137,7 @@ if(column=='allow_null'&&value){updatedRow.primary_key=0}
|
||||||
if(column=='primary_key'&&!value){updatedRow.auto_increment=0}
|
if(column=='primary_key'&&!value){updatedRow.auto_increment=0}
|
||||||
$target.table('setRowValues',rowIndex,updatedRow)}
|
$target.table('setRowValues',rowIndex,updatedRow)}
|
||||||
DatabaseTable.prototype.onTableLoaded=function(){$(document).trigger('render')
|
DatabaseTable.prototype.onTableLoaded=function(){$(document).trigger('render')
|
||||||
var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$addIdButton=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),$addTimestampsButton=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),$addSoftDeleteButton=$('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
|
var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$addIdButton=$('<a class="btn oc-icon-hashtag builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),$addTimestampsButton=$('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),$addSoftDeleteButton=$('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
|
||||||
$addIdButton.text($form.attr('data-lang-add-id'));$toolbar.append($addIdButton)
|
$addIdButton.text($form.attr('data-lang-add-id'));$toolbar.append($addIdButton)
|
||||||
$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));$toolbar.append($addTimestampsButton)
|
$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));$toolbar.append($addTimestampsButton)
|
||||||
$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($addSoftDeleteButton)}
|
$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($addSoftDeleteButton)}
|
||||||
|
|
|
||||||
|
|
@ -168,7 +168,7 @@
|
||||||
var $masterTabPane = this.getMasterTabsActivePane(),
|
var $masterTabPane = this.getMasterTabsActivePane(),
|
||||||
$form = $masterTabPane.find('form'),
|
$form = $masterTabPane.find('form'),
|
||||||
$toolbar = $masterTabPane.find('div[data-control=table] div.toolbar'),
|
$toolbar = $masterTabPane.find('div[data-control=table] div.toolbar'),
|
||||||
$addIdButton = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),
|
$addIdButton = $('<a class="btn oc-icon-hashtag builder-custom-table-button" data-builder-command="databaseTable:cmdAddIdColumn"></a>'),
|
||||||
$addTimestampsButton = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),
|
$addTimestampsButton = $('<a class="btn oc-icon-clock-o builder-custom-table-button" data-builder-command="databaseTable:cmdAddTimestamps"></a>'),
|
||||||
$addSoftDeleteButton = $('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
|
$addSoftDeleteButton = $('<a class="btn oc-icon-refresh builder-custom-table-button" data-builder-command="databaseTable:cmdAddSoftDelete"></a>')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,8 @@ class ComponentHelper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Cache::put($key, serialize($result), 1);
|
$expiresAt = now()->addMinutes(1);
|
||||||
|
Cache::put($key, serialize($result), $expiresAt);
|
||||||
|
|
||||||
return $this->modelListCache = $result;
|
return $this->modelListCache = $result;
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +102,8 @@ class ComponentHelper
|
||||||
$result[$columnName] = $columnName;
|
$result[$columnName] = $columnName;
|
||||||
}
|
}
|
||||||
|
|
||||||
Cache::put($key, serialize($result), 1);
|
$expiresAt = now()->addMinutes(1);
|
||||||
|
Cache::put($key, serialize($result), $expiresAt);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?php namespace RainLab\Builder\Classes;
|
<?php namespace RainLab\Builder\Classes;
|
||||||
|
|
||||||
use DirectoryIterator;
|
use DirectoryIterator;
|
||||||
|
use ApplicationException;
|
||||||
use SystemException;
|
use SystemException;
|
||||||
use Validator;
|
use Validator;
|
||||||
use Lang;
|
use Lang;
|
||||||
|
|
|
||||||
|
|
@ -369,16 +369,54 @@ class StandardControlsRegistry
|
||||||
'default' => Lang::get('rainlab.builder::lang.form.property_prompt_default'),
|
'default' => Lang::get('rainlab.builder::lang.form.property_prompt_default'),
|
||||||
'sortOrder' => 81
|
'sortOrder' => 81
|
||||||
],
|
],
|
||||||
|
'titleFrom' => [
|
||||||
|
'title' => Lang::get('rainlab.builder::lang.form.property_title_from'),
|
||||||
|
'description' => Lang::get('rainlab.builder::lang.form.property_title_from_description'),
|
||||||
|
'type' => 'string',
|
||||||
|
'ignoreIfEmpty' => true,
|
||||||
|
'sortOrder' => 82
|
||||||
|
],
|
||||||
'form' => [
|
'form' => [
|
||||||
'type' => 'control-container'
|
'type' => 'control-container'
|
||||||
],
|
],
|
||||||
|
'minItems' => [
|
||||||
|
'title' => Lang::get('rainlab.builder::lang.form.property_min_items'),
|
||||||
|
'description' => Lang::get('rainlab.builder::lang.form.property_min_items_description'),
|
||||||
|
'type' => 'string',
|
||||||
|
'ignoreIfEmpty' => true,
|
||||||
|
'sortOrder' => 83,
|
||||||
|
'validation' => [
|
||||||
|
'integer' => [
|
||||||
|
'message' => Lang::get('rainlab.builder::lang.form.property_min_items_integer'),
|
||||||
|
'allowNegative' => false,
|
||||||
|
]
|
||||||
|
],
|
||||||
|
],
|
||||||
'maxItems' => [
|
'maxItems' => [
|
||||||
'title' => Lang::get('rainlab.builder::lang.form.property_max_items'),
|
'title' => Lang::get('rainlab.builder::lang.form.property_max_items'),
|
||||||
'description' => Lang::get('rainlab.builder::lang.form.property_max_items_description'),
|
'description' => Lang::get('rainlab.builder::lang.form.property_max_items_description'),
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'ignoreIfEmpty' => true,
|
'ignoreIfEmpty' => true,
|
||||||
'sortOrder' => 82
|
'sortOrder' => 84,
|
||||||
|
'validation' => [
|
||||||
|
'integer' => [
|
||||||
|
'message' => Lang::get('rainlab.builder::lang.form.property_max_items_integer'),
|
||||||
|
'allowNegative' => false,
|
||||||
|
]
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
'style' => [
|
||||||
|
'title' => Lang::get('rainlab.builder::lang.form.property_style'),
|
||||||
|
'description' => Lang::get('rainlab.builder::lang.form.property_style_description'),
|
||||||
|
'type' => 'dropdown',
|
||||||
|
'default' => 'default',
|
||||||
|
'options' => [
|
||||||
|
'default' => Lang::get('rainlab.builder::lang.form.style_default'),
|
||||||
|
'collapsed' => Lang::get('rainlab.builder::lang.form.style_collapsed'),
|
||||||
|
'accordion' => Lang::get('rainlab.builder::lang.form.style_accordion'),
|
||||||
|
],
|
||||||
|
'sortOrder' => 85,
|
||||||
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
$ignoreProperties = [
|
$ignoreProperties = [
|
||||||
|
|
@ -668,12 +706,6 @@ class StandardControlsRegistry
|
||||||
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_min_date_description'),
|
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_min_date_description'),
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'ignoreIfEmpty' => true,
|
'ignoreIfEmpty' => true,
|
||||||
'validation' => [
|
|
||||||
'regex' => [
|
|
||||||
'pattern' => '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
|
|
||||||
'message' => Lang::get('rainlab.builder::lang.form.property_datepicker_date_invalid_format')
|
|
||||||
]
|
|
||||||
],
|
|
||||||
'sortOrder' => 82
|
'sortOrder' => 82
|
||||||
],
|
],
|
||||||
'maxDate' => [
|
'maxDate' => [
|
||||||
|
|
@ -681,12 +713,6 @@ class StandardControlsRegistry
|
||||||
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_max_date_description'),
|
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_max_date_description'),
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'ignoreIfEmpty' => true,
|
'ignoreIfEmpty' => true,
|
||||||
'validation' => [
|
|
||||||
'regex' => [
|
|
||||||
'pattern' => '^[0-9]{4}-[0-9]{2}-[0-9]{2}$',
|
|
||||||
'message' => Lang::get('rainlab.builder::lang.form.property_datepicker_date_invalid_format')
|
|
||||||
]
|
|
||||||
],
|
|
||||||
'sortOrder' => 83
|
'sortOrder' => 83
|
||||||
],
|
],
|
||||||
'yearRange' => [
|
'yearRange' => [
|
||||||
|
|
@ -1172,6 +1198,14 @@ class StandardControlsRegistry
|
||||||
'type' => 'string',
|
'type' => 'string',
|
||||||
'ignoreIfEmpty' => true,
|
'ignoreIfEmpty' => true,
|
||||||
'sortOrder' => 84
|
'sortOrder' => 84
|
||||||
|
],
|
||||||
|
'scope' => [
|
||||||
|
'title' => Lang::get('rainlab.builder::lang.form.property_relation_scope'),
|
||||||
|
'description' => Lang::get('rainlab.builder::lang.form.property_relation_scope_description'),
|
||||||
|
'group' => Lang::get('rainlab.builder::lang.form.property_group_relation'),
|
||||||
|
'type' => 'string',
|
||||||
|
'ignoreIfEmpty' => true,
|
||||||
|
'sortOrder' => 85
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"name": "rainlab/builder-plugin",
|
||||||
|
"type": "october-plugin",
|
||||||
|
"description": "Builder plugin for October CMS",
|
||||||
|
"homepage": "https://octobercms.com/plugin/rainlab-builder",
|
||||||
|
"keywords": ["october", "octobercms", "builder"],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Alexey Bobkov",
|
||||||
|
"email": "aleksey.bobkov@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samuel Georges",
|
||||||
|
"email": "daftspunky@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0",
|
||||||
|
"composer/installers": "~1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "~4.0"
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
||||||
|
|
@ -194,10 +194,7 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'Datum a čas',
|
'property_datepicker_mode_datetime' => 'Datum a čas',
|
||||||
'property_datepicker_mode_time' => 'Čas',
|
'property_datepicker_mode_time' => 'Čas',
|
||||||
'property_datepicker_min_date' => 'Min datum',
|
'property_datepicker_min_date' => 'Min datum',
|
||||||
'property_datepicker_min_date_description' => 'The minimum/earliest date that can be selected. Leave empty for the default value (2000-01-01).',
|
|
||||||
'property_datepicker_max_date' => 'Max datum',
|
'property_datepicker_max_date' => 'Max datum',
|
||||||
'property_datepicker_max_date_description' => 'The maximum/latest date that can be selected. Leave empty for the default value (2020-12-31).',
|
|
||||||
'property_datepicker_date_invalid_format' => 'Invalid date format. Use format YYYY-MM-DD.',
|
|
||||||
'property_markdown_mode' => 'Mód',
|
'property_markdown_mode' => 'Mód',
|
||||||
'property_markdown_mode_split' => 'Rozdělit',
|
'property_markdown_mode_split' => 'Rozdělit',
|
||||||
'property_markdown_mode_tab' => 'Záložka',
|
'property_markdown_mode_tab' => 'Záložka',
|
||||||
|
|
|
||||||
|
|
@ -208,10 +208,9 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'Date and time',
|
'property_datepicker_mode_datetime' => 'Date and time',
|
||||||
'property_datepicker_mode_time' => 'Time',
|
'property_datepicker_mode_time' => 'Time',
|
||||||
'property_datepicker_min_date' => 'Min date',
|
'property_datepicker_min_date' => 'Min date',
|
||||||
'property_datepicker_min_date_description' => 'The minimum/earliest date that can be selected. Leave empty for the default value (2000-01-01).',
|
'property_datepicker_min_date_description' => 'The minimum/earliest date that can be selected. This may be any string accepted by Carbon. Leave empty for no minimum date.',
|
||||||
'property_datepicker_max_date' => 'Max date',
|
'property_datepicker_max_date' => 'Max date',
|
||||||
'property_datepicker_max_date_description' => 'The maximum/latest date that can be selected. Leave empty for the default value (2020-12-31).',
|
'property_datepicker_max_date_description' => 'The maximum/latest date that can be selected. This may be any string accepted by Carbon. Leave empty for no maximum date.',
|
||||||
'property_datepicker_date_invalid_format' => 'Invalid date format. Use format YYYY-MM-DD.',
|
|
||||||
'property_datepicker_year_range' => 'Year range',
|
'property_datepicker_year_range' => 'Year range',
|
||||||
'property_datepicker_year_range_description' => 'Number of years either side (eg 10) or array of upper/lower range (eg [1900,2015]). Leave empty for the default value (10).',
|
'property_datepicker_year_range_description' => 'Number of years either side (eg 10) or array of upper/lower range (eg [1900,2015]). Leave empty for the default value (10).',
|
||||||
'property_datepicker_year_range_invalid_format' => 'Invalid year range format. Use number (eg "10") or array of upper/lower range (eg "[1900,2015]")',
|
'property_datepicker_year_range_invalid_format' => 'Invalid year range format. Use number (eg "10") or array of upper/lower range (eg "[1900,2015]")',
|
||||||
|
|
@ -250,6 +249,8 @@ return [
|
||||||
'property_name_from_description' => 'Relation column name to use for displaying a name.',
|
'property_name_from_description' => 'Relation column name to use for displaying a name.',
|
||||||
'property_relation_select' => 'Select',
|
'property_relation_select' => 'Select',
|
||||||
'property_relation_select_description' => 'CONCAT multiple columns together for displaying a name',
|
'property_relation_select_description' => 'CONCAT multiple columns together for displaying a name',
|
||||||
|
'property_relation_scope' => 'Scope',
|
||||||
|
'property_relation_scope_description' => 'Specifies a query scope method that\'s defined in the related form model to always apply to the list query.',
|
||||||
'property_description_from' => 'Description column',
|
'property_description_from' => 'Description column',
|
||||||
'property_description_from_description' => 'Relation column name to use for displaying a description.',
|
'property_description_from_description' => 'Relation column name to use for displaying a description.',
|
||||||
'property_recordfinder_prompt' => 'Prompt',
|
'property_recordfinder_prompt' => 'Prompt',
|
||||||
|
|
@ -288,8 +289,16 @@ return [
|
||||||
'property_empty_option_description' => 'The empty option corresponds to the empty selection, but unlike the placeholder it can be reselected.',
|
'property_empty_option_description' => 'The empty option corresponds to the empty selection, but unlike the placeholder it can be reselected.',
|
||||||
'property_show_search' => 'Show search',
|
'property_show_search' => 'Show search',
|
||||||
'property_show_search_description' => 'Enables the search feature for this dropdown.',
|
'property_show_search_description' => 'Enables the search feature for this dropdown.',
|
||||||
|
'property_title_from' => 'Title from',
|
||||||
|
'property_title_from_description' => 'Specify a child field name to use the value of that field as the title for each repeater item.',
|
||||||
|
'property_min_items' => 'Min items',
|
||||||
|
'property_min_items_description' => 'Minimum number of items to allow within the repeater.',
|
||||||
|
'property_min_items_integer' => 'Min items must be a positive integer.',
|
||||||
'property_max_items' => 'Max items',
|
'property_max_items' => 'Max items',
|
||||||
'property_max_items_description' => 'Maximum number of items to allow within the repeater.',
|
'property_max_items_description' => 'Maximum number of items to allow within the repeater.',
|
||||||
|
'property_max_items_integer' => 'Max items must be a positive integer.',
|
||||||
|
'property_style' => 'Style',
|
||||||
|
'property_style_description' => 'Defines the behaviour to apply to this repeater.',
|
||||||
'control_group_standard' => 'Standard',
|
'control_group_standard' => 'Standard',
|
||||||
'control_group_widgets' => 'Widgets',
|
'control_group_widgets' => 'Widgets',
|
||||||
'click_to_add_control' => 'Add control',
|
'click_to_add_control' => 'Add control',
|
||||||
|
|
@ -351,6 +360,9 @@ return [
|
||||||
'span_right' => 'Right',
|
'span_right' => 'Right',
|
||||||
'span_full' => 'Full',
|
'span_full' => 'Full',
|
||||||
'span_auto' => 'Auto',
|
'span_auto' => 'Auto',
|
||||||
|
'style_default' => 'Default',
|
||||||
|
'style_collapsed' => 'Collapsed',
|
||||||
|
'style_accordion' => 'Accordion',
|
||||||
'empty_tab' => 'Empty tab',
|
'empty_tab' => 'Empty tab',
|
||||||
'confirm_close_tab' => 'The tab contains controls which will be deleted. Continue?',
|
'confirm_close_tab' => 'The tab contains controls which will be deleted. Continue?',
|
||||||
'tab' => 'Form tab',
|
'tab' => 'Form tab',
|
||||||
|
|
@ -548,6 +560,8 @@ return [
|
||||||
'hint_apply' => 'Applying a version will also apply all older unapplied versions of the plugin.',
|
'hint_apply' => 'Applying a version will also apply all older unapplied versions of the plugin.',
|
||||||
'dont_show_again' => 'Don\'t show again',
|
'dont_show_again' => 'Don\'t show again',
|
||||||
'save_unapplied_version' => 'Save unapplied version',
|
'save_unapplied_version' => 'Save unapplied version',
|
||||||
|
'sort_ascending' => 'Sort ascending',
|
||||||
|
'sort_descending' => 'Sort descending',
|
||||||
],
|
],
|
||||||
'menu' => [
|
'menu' => [
|
||||||
'menu_label' => 'Backend Menu',
|
'menu_label' => 'Backend Menu',
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ return [
|
||||||
'field_name' => 'Nombre de la tabla',
|
'field_name' => 'Nombre de la tabla',
|
||||||
'tab_columns' => 'Columnas',
|
'tab_columns' => 'Columnas',
|
||||||
'column_name_name' => 'Columna',
|
'column_name_name' => 'Columna',
|
||||||
'column_name_required' => 'Please provide the column name',
|
'column_name_required' => 'Por favor ingrese el nombre de la columna',
|
||||||
'column_name_type' => 'Tipo',
|
'column_name_type' => 'Tipo',
|
||||||
'column_type_required' => 'Please select the column type',
|
'column_type_required' => 'Please select the column type',
|
||||||
'column_name_length' => 'Length',
|
'column_name_length' => 'Length',
|
||||||
|
|
@ -57,14 +57,17 @@ return [
|
||||||
'tab_new_table' => 'Nueva tabla',
|
'tab_new_table' => 'Nueva tabla',
|
||||||
'btn_add_column' => 'Añadir columna',
|
'btn_add_column' => 'Añadir columna',
|
||||||
'btn_delete_column' => 'Borrar columna',
|
'btn_delete_column' => 'Borrar columna',
|
||||||
|
'btn_add_id' => 'Añadir ID',
|
||||||
|
'btn_add_timestamps' => 'Añadir timestamps',
|
||||||
|
'btn_add_soft_deleting' => 'Añadir columna para soft delete',
|
||||||
'confirm_delete' => '¿Borrar la tabla?',
|
'confirm_delete' => '¿Borrar la tabla?',
|
||||||
'error_enum_not_supported' => 'The table contains column(s) with type "enum" which is not currently supported by the Builder.',
|
'error_enum_not_supported' => 'The table contains column(s) with type "enum" which is not currently supported by the Builder.',
|
||||||
'error_table_name_invalid_prefix' => "Table name should start with the plugin prefix: ':prefix'.",
|
'error_table_name_invalid_prefix' => "Table name should start with the plugin prefix: ':prefix'.",
|
||||||
'error_table_name_invalid_characters' => 'Invalid table name. Table names should contain only Latin letters, digits and underscores. Names should start with a Latin letter and could not contain spaces.',
|
'error_table_name_invalid_characters' => 'Invalid table name. Table names should contain only Latin letters, digits and underscores. Names should start with a Latin letter and could not contain spaces.',
|
||||||
'error_table_duplicate_column' => "Duplicate column name: ':column'.",
|
'error_table_duplicate_column' => "Nombre de columna duplicada: ':column'.",
|
||||||
'error_table_auto_increment_in_compound_pk' => 'An auto-increment column cannot be a part of a compound primary key.',
|
'error_table_auto_increment_in_compound_pk' => 'An auto-increment column cannot be a part of a compound primary key.',
|
||||||
'error_table_mutliple_auto_increment' => 'The table cannot contain multiple auto-increment columns.',
|
'error_table_mutliple_auto_increment' => 'La tabla no puede contener más de una columna auto-incrementable.',
|
||||||
'error_table_auto_increment_non_integer' => 'Auto-increment columns should have integer type.',
|
'error_table_auto_increment_non_integer' => 'Las columnas Auto-incrementables deben ser de tipo numerico.',
|
||||||
'error_table_decimal_length' => "The Length parameter for :type type should be in format '10,2', without spaces.",
|
'error_table_decimal_length' => "The Length parameter for :type type should be in format '10,2', without spaces.",
|
||||||
'error_table_length' => 'The Length parameter for :type type should be specified as integer.',
|
'error_table_length' => 'The Length parameter for :type type should be specified as integer.',
|
||||||
'error_unsigned_type_not_int' => "Error in the ':column' column. The Unsigned flag can be applied only to integer type columns.",
|
'error_unsigned_type_not_int' => "Error in the ':column' column. The Unsigned flag can be applied only to integer type columns.",
|
||||||
|
|
@ -89,22 +92,22 @@ return [
|
||||||
'add_list' => 'Añadir lista',
|
'add_list' => 'Añadir lista',
|
||||||
],
|
],
|
||||||
'form' => [
|
'form' => [
|
||||||
'saved' => 'Formulario salvado',
|
'saved' => 'Formulario guardado',
|
||||||
'confirm_delete' => '¿Borrar el formulario?',
|
'confirm_delete' => '¿Borrar el formulario?',
|
||||||
'tab_new_form' => 'Nuevo formulario',
|
'tab_new_form' => 'Nuevo formulario',
|
||||||
'property_label_title' => 'Etiqueta',
|
'property_label_title' => 'Etiqueta',
|
||||||
'property_label_required' => 'Please specify the control label.',
|
'property_label_required' => 'Por favor especifique la etiqueta del control.',
|
||||||
'property_span_title' => 'Span',
|
'property_span_title' => 'Span',
|
||||||
'property_comment_title' => 'Commentario',
|
'property_comment_title' => 'Commentario',
|
||||||
'property_comment_above_title' => 'Comment above',
|
'property_comment_above_title' => 'Comentario encima',
|
||||||
'property_default_title' => 'Default',
|
'property_default_title' => 'Default',
|
||||||
'property_checked_default_title' => 'Checked by default',
|
'property_checked_default_title' => 'Checked by default',
|
||||||
'property_css_class_title' => 'CSS class',
|
'property_css_class_title' => 'CSS class',
|
||||||
'property_css_class_description' => 'Optional CSS class to assign to the field container.',
|
'property_css_class_description' => 'Optional CSS class to assign to the field container.',
|
||||||
'property_disabled_title' => 'Disabled',
|
'property_disabled_title' => 'deshabilitado',
|
||||||
'property_hidden_title' => 'Hidden',
|
'property_hidden_title' => 'Oculto',
|
||||||
'property_required_title' => 'Required',
|
'property_required_title' => 'Requerido',
|
||||||
'property_field_name_title' => 'Field name',
|
'property_field_name_title' => 'Nombre del campo',
|
||||||
'property_placeholder_title' => 'Placeholder',
|
'property_placeholder_title' => 'Placeholder',
|
||||||
'property_default_from_title' => 'Default from',
|
'property_default_from_title' => 'Default from',
|
||||||
'property_stretch_title' => 'Stretch',
|
'property_stretch_title' => 'Stretch',
|
||||||
|
|
@ -120,8 +123,8 @@ return [
|
||||||
'property_trigger_hide' => 'Hide',
|
'property_trigger_hide' => 'Hide',
|
||||||
'property_trigger_enable' => 'Enable',
|
'property_trigger_enable' => 'Enable',
|
||||||
'property_trigger_disable' => 'Disable',
|
'property_trigger_disable' => 'Disable',
|
||||||
'property_trigger_empty' => 'Empty',
|
'property_trigger_empty' => 'Vacio',
|
||||||
'property_trigger_field' => 'Field',
|
'property_trigger_field' => 'Campo',
|
||||||
'property_trigger_field_description' => 'Defines the other field name that will trigger the action.',
|
'property_trigger_field_description' => 'Defines the other field name that will trigger the action.',
|
||||||
'property_trigger_condition' => 'Condition',
|
'property_trigger_condition' => 'Condition',
|
||||||
'property_trigger_condition_description' => 'Determines the condition the specified field should satisfy for the condition to be considered "true". Supported values: checked, unchecked, value[somevalue].',
|
'property_trigger_condition_description' => 'Determines the condition the specified field should satisfy for the condition to be considered "true". Supported values: checked, unchecked, value[somevalue].',
|
||||||
|
|
@ -134,35 +137,35 @@ return [
|
||||||
'property_preset_field_description' => 'Defines the other field name to source the value from.',
|
'property_preset_field_description' => 'Defines the other field name to source the value from.',
|
||||||
'property_preset_type' => 'Type',
|
'property_preset_type' => 'Type',
|
||||||
'property_preset_type_description' => 'Specifies the conversion type',
|
'property_preset_type_description' => 'Specifies the conversion type',
|
||||||
'property_attributes_title' => 'Attributes',
|
'property_attributes_title' => 'Atributos',
|
||||||
'property_attributes_description' => 'Custom HTML attributes to add to the form field element.',
|
'property_attributes_description' => 'Custom HTML attributes to add to the form field element.',
|
||||||
'property_container_attributes_title' => 'Container attributes',
|
'property_container_attributes_title' => 'Container attributes',
|
||||||
'property_container_attributes_description' => 'Custom HTML attributes to add to the form field container element.',
|
'property_container_attributes_description' => 'Custom HTML attributes to add to the form field container element.',
|
||||||
'property_group_advanced' => 'Advanced',
|
'property_group_advanced' => 'Avanzado',
|
||||||
'property_dependson_description' => 'A list of other field names this field depends on, when the other fields are modified, this field will update. One field per line.',
|
'property_dependson_description' => 'A list of other field names this field depends on, when the other fields are modified, this field will update. One field per line.',
|
||||||
'property_trigger_title' => 'Trigger',
|
'property_trigger_title' => 'Trigger',
|
||||||
'property_trigger_description' => 'Allows to change elements attributes such as visibility or value, based on another elements\' state.',
|
'property_trigger_description' => 'Allows to change elements attributes such as visibility or value, based on another elements\' state.',
|
||||||
'property_default_from_description' => 'Takes the default value from the value of another field.',
|
'property_default_from_description' => 'Takes the default value from the value of another field.',
|
||||||
'property_field_name_required' => 'The field name is required',
|
'property_field_name_required' => 'El campo nombre es requerido',
|
||||||
'property_field_name_regex' => 'The field name can contain only Latin letters, digits, underscores, dashes and square brackets.',
|
'property_field_name_regex' => 'The field name can contain only Latin letters, digits, underscores, dashes and square brackets.',
|
||||||
'property_attributes_size' => 'Size',
|
'property_attributes_size' => 'Tamaño',
|
||||||
'property_attributes_size_tiny' => 'Tiny',
|
'property_attributes_size_tiny' => 'Diminuto',
|
||||||
'property_attributes_size_small' => 'Small',
|
'property_attributes_size_small' => 'Pequeño',
|
||||||
'property_attributes_size_large' => 'Large',
|
'property_attributes_size_large' => 'Grande',
|
||||||
'property_attributes_size_huge' => 'Huge',
|
'property_attributes_size_huge' => 'Enorme',
|
||||||
'property_attributes_size_giant' => 'Giant',
|
'property_attributes_size_giant' => 'Gigante',
|
||||||
'property_comment_position' => 'Comment position',
|
'property_comment_position' => 'Posición del comentario',
|
||||||
'property_comment_position_above' => 'Above',
|
'property_comment_position_above' => 'Arriba',
|
||||||
'property_comment_position_below' => 'Below',
|
'property_comment_position_below' => 'Abajo',
|
||||||
'property_hint_path' => 'Hint partial path',
|
'property_hint_path' => 'Hint partial path',
|
||||||
'property_hint_path_description' => 'Path to a partial file that contains the hint text. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/partials/_hint.htm',
|
'property_hint_path_description' => 'Path to a partial file that contains the hint text. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/partials/_hint.htm',
|
||||||
'property_hint_path_required' => 'Please enter the hint partial path',
|
'property_hint_path_required' => 'Por favor ingresa la ruta hacia el archivo parcial de la pista',
|
||||||
'property_partial_path' => 'Partial path',
|
'property_partial_path' => 'Partial path',
|
||||||
'property_partial_path_description' => 'Path to a partial file. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/partials/_partial.htm',
|
'property_partial_path_description' => 'Path to a partial file. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/partials/_partial.htm',
|
||||||
'property_partial_path_required' => 'Please enter the partial path',
|
'property_partial_path_required' => 'Please enter the partial path',
|
||||||
'property_code_language' => 'Language',
|
'property_code_language' => 'Idioma',
|
||||||
'property_code_theme' => 'Theme',
|
'property_code_theme' => 'Tema',
|
||||||
'property_theme_use_default' => 'Use default theme',
|
'property_theme_use_default' => 'Usar tema por defecto',
|
||||||
'property_group_code_editor' => 'Code editor',
|
'property_group_code_editor' => 'Code editor',
|
||||||
'property_gutter' => 'Gutter',
|
'property_gutter' => 'Gutter',
|
||||||
'property_gutter_show' => 'Visible',
|
'property_gutter_show' => 'Visible',
|
||||||
|
|
@ -176,40 +179,37 @@ return [
|
||||||
'property_codefolding_markbegin' => 'Mark begin',
|
'property_codefolding_markbegin' => 'Mark begin',
|
||||||
'property_codefolding_markbeginend' => 'Mark begin and end',
|
'property_codefolding_markbeginend' => 'Mark begin and end',
|
||||||
'property_autoclosing' => 'Auto closing',
|
'property_autoclosing' => 'Auto closing',
|
||||||
'property_enabled' => 'Enabled',
|
'property_enabled' => 'Habilitado',
|
||||||
'property_disabled' => 'Disabled',
|
'property_disabled' => 'Deshabilitado',
|
||||||
'property_soft_tabs' => 'Soft tabs',
|
'property_soft_tabs' => 'Soft tabs',
|
||||||
'property_tab_size' => 'Tab size',
|
'property_tab_size' => 'Tamaño de la pestaña',
|
||||||
'property_readonly' => 'Read only',
|
'property_readonly' => 'Solo lectura',
|
||||||
'property_use_default' => 'Use default settings',
|
'property_use_default' => 'Use default settings',
|
||||||
'property_options' => 'Opciones',
|
'property_options' => 'Opciones',
|
||||||
'property_prompt' => 'Prompt',
|
'property_prompt' => 'Prompt',
|
||||||
'property_prompt_description' => 'Text to display for the create button.',
|
'property_prompt_description' => 'Texto que se mostrará para el botón creado',
|
||||||
'property_prompt_default' => 'Add new item',
|
'property_prompt_default' => 'Añadir nuevo item',
|
||||||
'property_available_colors' => 'Available colors',
|
'property_available_colors' => 'Colores disponibles',
|
||||||
'property_available_colors_description' => 'List of available colors in hex format (#FF0000). Leave empty for the default color set. Enter one value per line.',
|
'property_available_colors_description' => 'List of available colors in hex format (#FF0000). Leave empty for the default color set. Enter one value per line.',
|
||||||
'property_datepicker_mode' => 'Mode',
|
'property_datepicker_mode' => 'Modo',
|
||||||
'property_datepicker_mode_date' => 'Date',
|
'property_datepicker_mode_date' => 'Fecha',
|
||||||
'property_datepicker_mode_datetime' => 'Date and time',
|
'property_datepicker_mode_datetime' => 'Fecha y hora',
|
||||||
'property_datepicker_mode_time' => 'Time',
|
'property_datepicker_mode_time' => 'Hora',
|
||||||
'property_datepicker_min_date' => 'Min date',
|
'property_datepicker_min_date' => 'Fecha mínima',
|
||||||
'property_datepicker_min_date_description' => 'The minimum/earliest date that can be selected. Leave empty for the default value (2000-01-01).',
|
'property_datepicker_max_date' => 'Fecha máxima',
|
||||||
'property_datepicker_max_date' => 'Max date',
|
|
||||||
'property_datepicker_max_date_description' => 'The maximum/latest date that can be selected. Leave empty for the default value (2020-12-31).',
|
|
||||||
'property_datepicker_date_invalid_format' => 'Invalid date format. Use format YYYY-MM-DD.',
|
|
||||||
'property_markdown_mode' => 'Mode',
|
'property_markdown_mode' => 'Mode',
|
||||||
'property_markdown_mode_split' => 'Split',
|
'property_markdown_mode_split' => 'Split',
|
||||||
'property_markdown_mode_tab' => 'Tab',
|
'property_markdown_mode_tab' => 'Pestaña',
|
||||||
'property_fileupload_mode' => 'Mode',
|
'property_fileupload_mode' => 'Mode',
|
||||||
'property_fileupload_mode_file' => 'File',
|
'property_fileupload_mode_file' => 'Archivo',
|
||||||
'property_fileupload_mode_image' => 'Imagen',
|
'property_fileupload_mode_image' => 'Imágen',
|
||||||
'property_group_fileupload' => 'File upload',
|
'property_group_fileupload' => 'File upload',
|
||||||
'property_fileupload_prompt' => 'Prompt',
|
'property_fileupload_prompt' => 'Prompt',
|
||||||
'property_fileupload_prompt_description' => 'Text to display for the upload button, applies to File mode only, optional.',
|
'property_fileupload_prompt_description' => 'Text to display for the upload button, applies to File mode only, optional.',
|
||||||
'property_fileupload_image_width' => 'Image width',
|
'property_fileupload_image_width' => 'Ancho de la imagen (width)',
|
||||||
'property_fileupload_image_width_description' => 'Optional parameter - images will be resized to this width. Applies to Image mode only.',
|
'property_fileupload_image_width_description' => 'Optional parameter - images will be resized to this width. Applies to Image mode only.',
|
||||||
'property_fileupload_invalid_dimension' => 'Invalid dimension value - please enter a number.',
|
'property_fileupload_invalid_dimension' => 'Invalid dimension value - please enter a number.',
|
||||||
'property_fileupload_image_height' => 'Image height',
|
'property_fileupload_image_height' => 'Alto de la imagen (height)',
|
||||||
'property_fileupload_image_height_description' => 'Optional parameter - images will be resized to this height. Applies to Image mode only.',
|
'property_fileupload_image_height_description' => 'Optional parameter - images will be resized to this height. Applies to Image mode only.',
|
||||||
'property_fileupload_file_types' => 'File types',
|
'property_fileupload_file_types' => 'File types',
|
||||||
'property_fileupload_file_types_description' => 'Optional comma separated list of file extensions that are accepted by the uploader. Eg: zip,txt',
|
'property_fileupload_file_types_description' => 'Optional comma separated list of file extensions that are accepted by the uploader. Eg: zip,txt',
|
||||||
|
|
@ -225,7 +225,7 @@ return [
|
||||||
'property_fileupload_thumb_portrait' => 'Portrait',
|
'property_fileupload_thumb_portrait' => 'Portrait',
|
||||||
'property_fileupload_thumb_landscape' => 'Landscape',
|
'property_fileupload_thumb_landscape' => 'Landscape',
|
||||||
'property_fileupload_thumb_crop' => 'Crop',
|
'property_fileupload_thumb_crop' => 'Crop',
|
||||||
'property_fileupload_thumb_extension' => 'File extension',
|
'property_fileupload_thumb_extension' => 'Extensión del archivo',
|
||||||
'property_name_from' => 'Name column',
|
'property_name_from' => 'Name column',
|
||||||
'property_name_from_description' => 'Relation column name to use for displaying a name.',
|
'property_name_from_description' => 'Relation column name to use for displaying a name.',
|
||||||
'property_relation_select' => 'Select',
|
'property_relation_select' => 'Select',
|
||||||
|
|
@ -238,9 +238,9 @@ return [
|
||||||
'property_recordfinder_list_description' => 'A reference to a list column definition file. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/lists/_list.yaml',
|
'property_recordfinder_list_description' => 'A reference to a list column definition file. Use the $ symbol to refer the plugins root directory, for example: $/acme/blog/lists/_list.yaml',
|
||||||
'property_recordfinder_list_required' => 'Please provide a path to the list YAML file',
|
'property_recordfinder_list_required' => 'Please provide a path to the list YAML file',
|
||||||
'property_group_recordfinder' => 'Record finder',
|
'property_group_recordfinder' => 'Record finder',
|
||||||
'property_mediafinder_mode' => 'Mode',
|
'property_mediafinder_mode' => 'Modo',
|
||||||
'property_mediafinder_mode_file' => 'File',
|
'property_mediafinder_mode_file' => 'Archivo',
|
||||||
'property_mediafinder_mode_image' => 'Image',
|
'property_mediafinder_mode_image' => 'Imagen',
|
||||||
'property_mediafinder_prompt' => 'Prompt',
|
'property_mediafinder_prompt' => 'Prompt',
|
||||||
'property_mediafinder_prompt_description' => 'Text to display when there is no item selected. The %s character represents the media manager icon. Leave empty for the default prompt.',
|
'property_mediafinder_prompt_description' => 'Text to display when there is no item selected. The %s character represents the media manager icon. Leave empty for the default prompt.',
|
||||||
'property_group_relation' => 'Relation',
|
'property_group_relation' => 'Relation',
|
||||||
|
|
@ -248,47 +248,47 @@ return [
|
||||||
'property_relation_prompt_description' => 'Text to display when there is no available selections.',
|
'property_relation_prompt_description' => 'Text to display when there is no available selections.',
|
||||||
'control_group_standard' => 'Standard',
|
'control_group_standard' => 'Standard',
|
||||||
'control_group_widgets' => 'Widgets',
|
'control_group_widgets' => 'Widgets',
|
||||||
'click_to_add_control' => 'Add control',
|
'click_to_add_control' => 'Añadir control',
|
||||||
'loading' => 'Cargando...',
|
'loading' => 'Cargando...',
|
||||||
'control_text' => 'Texto',
|
'control_text' => 'Texto',
|
||||||
'control_text_description' => 'Single line text box',
|
'control_text_description' => 'Campo de texto de una linea',
|
||||||
'control_password' => 'Contraseña',
|
'control_password' => 'Contraseña',
|
||||||
'control_password_description' => 'Single line password text field',
|
'control_password_description' => 'Campo de contraseña de una linea',
|
||||||
'control_checkbox' => 'Checkbox',
|
'control_checkbox' => 'Checkbox',
|
||||||
'control_checkbox_description' => 'Single checkbox',
|
'control_checkbox_description' => 'Checkbox único',
|
||||||
'control_switch' => 'Switch',
|
'control_switch' => 'Switch',
|
||||||
'control_switch_description' => 'Single switchbox, an alternative for checkbox',
|
'control_switch_description' => 'Control switch único, una alternativa al checkbox',
|
||||||
'control_textarea' => 'Text area',
|
'control_textarea' => 'Text area',
|
||||||
'control_textarea_description' => 'Multiline text box with controllable height',
|
'control_textarea_description' => 'Campo de texto multilinea con altura personalizable',
|
||||||
'control_dropdown' => 'Dropdown',
|
'control_dropdown' => 'Dropdown',
|
||||||
'control_dropdown_description' => 'Dropdown list with static or dynamic options',
|
'control_dropdown_description' => 'Dropdown list with static or dynamic options',
|
||||||
'control_unknown' => 'Unknown control type: :type',
|
'control_unknown' => 'Unknown control type: :type',
|
||||||
'control_repeater' => 'Repeater',
|
'control_repeater' => 'Repeater',
|
||||||
'control_repeater_description' => 'Outputs a repeating set of form controls',
|
'control_repeater_description' => 'Outputs a repeating set of form controls',
|
||||||
'control_number' => 'Number',
|
'control_number' => 'Número',
|
||||||
'control_number_description' => 'Single line text box that takes numbers only',
|
'control_number_description' => 'Campo de texto de una linea el cual sólo permite números',
|
||||||
'control_hint' => 'Hint',
|
'control_hint' => 'Pista',
|
||||||
'control_hint_description' => 'Outputs a partial contents in a box that can be hidden by the user',
|
'control_hint_description' => 'Despliega un contenido parcial en una caja que puede ser ocultado por el usuario',
|
||||||
'control_partial' => 'Partial',
|
'control_partial' => 'Partial',
|
||||||
'control_partial_description' => 'Outputs a partial contents',
|
'control_partial_description' => 'Incluye un contenido parcial',
|
||||||
'control_section' => 'Section',
|
'control_section' => 'Section',
|
||||||
'control_section_description' => 'Displays a form section with heading and subheading',
|
'control_section_description' => 'Displays a form section with heading and subheading',
|
||||||
'control_radio' => 'Radio list',
|
'control_radio' => 'Lista de radios',
|
||||||
'control_radio_description' => 'A list of radio options, where only one item can be selected at a time',
|
'control_radio_description' => 'Una lista de radio buttons, donde solo un item puede ser seleccionado al mismo tiempo',
|
||||||
'control_radio_option_1' => 'Option 1',
|
'control_radio_option_1' => 'Opción 1',
|
||||||
'control_radio_option_2' => 'Option 2',
|
'control_radio_option_2' => 'Opción 2',
|
||||||
'control_checkboxlist' => 'Checkbox list',
|
'control_checkboxlist' => 'Lista de Checkbox',
|
||||||
'control_checkboxlist_description' => 'A list of checkboxes, where multiple items can be selected',
|
'control_checkboxlist_description' => 'Una lista de checkboxs, donde mas de un item puede ser seleccionado',
|
||||||
'control_codeeditor' => 'Code editor',
|
'control_codeeditor' => 'Editor de código',
|
||||||
'control_codeeditor_description' => 'Plaintext editor for formatted code or markup',
|
'control_codeeditor_description' => 'Plaintext editor for formatted code or markup',
|
||||||
'control_colorpicker' => 'Color picker',
|
'control_colorpicker' => 'Selector de color',
|
||||||
'control_colorpicker_description' => 'A field for selecting a hexadecimal color value',
|
'control_colorpicker_description' => 'Un campo para seleccionar un valor de color en hexadecimal',
|
||||||
'control_datepicker' => 'Date picker',
|
'control_datepicker' => 'Selector de fecha',
|
||||||
'control_datepicker_description' => 'Text field used for selecting date and times',
|
'control_datepicker_description' => 'Un campo de texto para seleccionar fecha/hora',
|
||||||
'control_richeditor' => 'Rich editor',
|
'control_richeditor' => 'Editor enriquecido',
|
||||||
'control_richeditor_description' => 'Visual editor for rich formatted text, also known as a WYSIWYG editor',
|
'control_richeditor_description' => 'Editor visual para texto enriquecido, también conocido como editor WYSIWYG',
|
||||||
'control_markdown' => 'Markdown editor',
|
'control_markdown' => 'Editor Markdown',
|
||||||
'control_markdown_description' => 'Basic editor for Markdown formatted text',
|
'control_markdown_description' => 'Editor básico para texto formateado en Markdown',
|
||||||
'control_fileupload' => 'File upload',
|
'control_fileupload' => 'File upload',
|
||||||
'control_fileupload_description' => 'File uploader for images or regular files',
|
'control_fileupload_description' => 'File uploader for images or regular files',
|
||||||
'control_recordfinder' => 'Record finder',
|
'control_recordfinder' => 'Record finder',
|
||||||
|
|
@ -296,27 +296,27 @@ return [
|
||||||
'control_mediafinder' => 'Media finder',
|
'control_mediafinder' => 'Media finder',
|
||||||
'control_mediafinder_description' => 'Field for selecting an item from the Media Manager library',
|
'control_mediafinder_description' => 'Field for selecting an item from the Media Manager library',
|
||||||
'control_relation' => 'Relation',
|
'control_relation' => 'Relation',
|
||||||
'control_relation_description' => 'Displays either a dropdown or checkbox list for selecting a related record',
|
'control_relation_description' => 'Despliega un Dropdown o una lista de Checkboxs para seleccionar el registro relacionado',
|
||||||
'error_file_name_required' => 'Please enter the form file name.',
|
'error_file_name_required' => 'Por favor ingresa el nombre del archivo del formulario.',
|
||||||
'error_file_name_invalid' => 'The file name can contain only Latin letters, digits, underscores, dots and hashes.',
|
'error_file_name_invalid' => 'El nombre de este archivo sólo puede contener letras, digitos, guiones (bajo y medio) y puntos.',
|
||||||
'span_left' => 'Left',
|
'span_left' => 'Izquierda',
|
||||||
'span_right' => 'Right',
|
'span_right' => 'Derecha',
|
||||||
'span_full' => 'Full',
|
'span_full' => 'Completo',
|
||||||
'span_auto' => 'Auto',
|
'span_auto' => 'Automático',
|
||||||
'empty_tab' => 'Empty tab',
|
'empty_tab' => 'Pestaña vacia',
|
||||||
'confirm_close_tab' => 'The tab contains controls which will be deleted. Continue?',
|
'confirm_close_tab' => 'La pestaña contiene controles que serán eliminados, ¿continuar?',
|
||||||
'tab' => 'Form tab',
|
'tab' => 'Pestaña de formulario',
|
||||||
'tab_title' => 'Title',
|
'tab_title' => 'Titulo',
|
||||||
'controls' => 'Controls',
|
'controls' => 'Controles',
|
||||||
'property_tab_title_required' => 'The tab title is required.',
|
'property_tab_title_required' => 'el campo titulo es requerido',
|
||||||
'tabs_primary' => 'Primary tabs',
|
'tabs_primary' => 'Pestañas primarias',
|
||||||
'tabs_secondary' => 'Secondary tabs',
|
'tabs_secondary' => 'Pestañas secundarias',
|
||||||
'tab_stretch' => 'Stretch',
|
'tab_stretch' => 'Stretch',
|
||||||
'tab_stretch_description' => 'Specifies if this tabs container stretches to fit the parent height.',
|
'tab_stretch_description' => 'Especifica si el contenedor de esta pestaña se estira para ajustarse al alto del elemento padre.',
|
||||||
'tab_css_class' => 'CSS class',
|
'tab_css_class' => 'Clase CSS',
|
||||||
'tab_css_class_description' => 'Assigns a CSS class to the tabs container.',
|
'tab_css_class_description' => 'Asigna una clase CSS al contenedor de la pestaña.',
|
||||||
'tab_name_template' => 'Tab %s',
|
'tab_name_template' => 'Pestaña %s',
|
||||||
'tab_already_exists' => 'Tab with the specified title already exists.',
|
'tab_already_exists' => 'Ya existe una pestaña con el nombre especificado.',
|
||||||
],
|
],
|
||||||
'list' => [
|
'list' => [
|
||||||
'tab_new_list' => 'Nueva lista',
|
'tab_new_list' => 'Nueva lista',
|
||||||
|
|
@ -352,7 +352,9 @@ return [
|
||||||
'column_label_path' => 'Path',
|
'column_label_path' => 'Path',
|
||||||
'column_label_format' => 'Format',
|
'column_label_format' => 'Format',
|
||||||
'column_label_value_from' => 'Value from',
|
'column_label_value_from' => 'Value from',
|
||||||
'error_duplicate_column' => "Duplicate column field name: ':column'.",
|
'error_duplicate_column' => "Nombre del campo duplicado: ':column'.",
|
||||||
|
'btn_add_database_columns' => 'Añadir columnas desde la base de datos',
|
||||||
|
|
||||||
],
|
],
|
||||||
'controller' => [
|
'controller' => [
|
||||||
'menu_label' => 'Controladores',
|
'menu_label' => 'Controladores',
|
||||||
|
|
@ -360,15 +362,15 @@ return [
|
||||||
'controller' => 'Controlador',
|
'controller' => 'Controlador',
|
||||||
'behaviors' => 'Comportamientos',
|
'behaviors' => 'Comportamientos',
|
||||||
'new_controller' => 'Nuevo controlador',
|
'new_controller' => 'Nuevo controlador',
|
||||||
'error_controller_has_no_behaviors' => 'The controller doesn\'t have configurable behaviors.',
|
'error_controller_has_no_behaviors' => 'El controlador no tiene un behaviors configurado.',
|
||||||
'error_invalid_yaml_configuration' => 'Error loading behavior configuration file: :file',
|
'error_invalid_yaml_configuration' => 'Error loading behavior configuration file: :file',
|
||||||
'behavior_form_controller' => 'Form controller behavior',
|
'behavior_form_controller' => 'Form controller behavior',
|
||||||
'behavior_form_controller_description' => 'Adds form functionality to a back-end page. The behavior provides three pages called Create, Update and Preview.',
|
'behavior_form_controller_description' => 'Adds form functionality to a back-end page. The behavior provides three pages called Create, Update and Preview.',
|
||||||
'property_behavior_form_placeholder' => '--select form--',
|
'property_behavior_form_placeholder' => '--select form--',
|
||||||
'property_behavior_form_name' => 'Nombre',
|
'property_behavior_form_name' => 'Nombre',
|
||||||
'property_behavior_form_name_description' => 'The name of the object being managed by this form',
|
'property_behavior_form_name_description' => 'The name of the object being managed by this form',
|
||||||
'property_behavior_form_name_required' => 'Please enter the form name',
|
'property_behavior_form_name_required' => 'Por favor ingrese el nombre del formulario',
|
||||||
'property_behavior_form_file' => 'Form configuration',
|
'property_behavior_form_file' => 'Configuración del formulario',
|
||||||
'property_behavior_form_file_description' => 'Reference to a form field definition file',
|
'property_behavior_form_file_description' => 'Reference to a form field definition file',
|
||||||
'property_behavior_form_file_required' => 'Please enter a path to the form configuration file',
|
'property_behavior_form_file_required' => 'Please enter a path to the form configuration file',
|
||||||
'property_behavior_form_model_class' => 'Model class',
|
'property_behavior_form_model_class' => 'Model class',
|
||||||
|
|
@ -378,7 +380,7 @@ return [
|
||||||
'property_behavior_form_default_redirect_description' => 'A page to redirect to by default when the form is saved or cancelled.',
|
'property_behavior_form_default_redirect_description' => 'A page to redirect to by default when the form is saved or cancelled.',
|
||||||
'property_behavior_form_create' => 'Create record page',
|
'property_behavior_form_create' => 'Create record page',
|
||||||
'property_behavior_form_redirect' => 'Redirect',
|
'property_behavior_form_redirect' => 'Redirect',
|
||||||
'property_behavior_form_redirect_description' => 'A page to redirect to when a record is created.',
|
'property_behavior_form_redirect_description' => 'Una página a la que redirigir una vez el registro sea creado',
|
||||||
'property_behavior_form_redirect_close' => 'Close redirect',
|
'property_behavior_form_redirect_close' => 'Close redirect',
|
||||||
'property_behavior_form_redirect_close_description' => 'A page to redirect to when a record is created and the close post variable is sent with the request.',
|
'property_behavior_form_redirect_close_description' => 'A page to redirect to when a record is created and the close post variable is sent with the request.',
|
||||||
'property_behavior_form_flash_save' => 'Save flash message',
|
'property_behavior_form_flash_save' => 'Save flash message',
|
||||||
|
|
@ -448,40 +450,40 @@ return [
|
||||||
'error_controller_not_found' => 'Original controller file is not found.',
|
'error_controller_not_found' => 'Original controller file is not found.',
|
||||||
'error_invalid_config_file_name' => 'The behavior :class configuration file name (:file) contains invalid characters and cannot be loaded.',
|
'error_invalid_config_file_name' => 'The behavior :class configuration file name (:file) contains invalid characters and cannot be loaded.',
|
||||||
'error_file_not_yaml' => 'The behavior :class configuration file (:file) is not a YAML file. Only YAML configuration files are supported.',
|
'error_file_not_yaml' => 'The behavior :class configuration file (:file) is not a YAML file. Only YAML configuration files are supported.',
|
||||||
'saved' => 'Controller saved',
|
'saved' => 'Controlador guardado',
|
||||||
'controller_name' => 'Controller name',
|
'controller_name' => 'Nombre del controlador',
|
||||||
'controller_name_description' => 'Controller name defines the class name and URL of the controller\'s back-end pages. Standard PHP variable naming conventions apply. The first symbol should be a capital Latin letter. Examples: Categories, Posts, Products.',
|
'controller_name_description' => 'El nombre del controlador define el nombre de la clase y la URL del controlador en el backend. Se aplican Las convenciones estándar de nombramiento de variables. El primer simbolo debe ser una letra Mayúscula: Ejemplo: Categories, Posts, Products',
|
||||||
'base_model_class' => 'Base model class',
|
'base_model_class' => 'Clase de modelo base',
|
||||||
'base_model_class_description' => 'Select a model class to use as a base model in behaviors that require or support models. You can configure the behaviors later.',
|
'base_model_class_description' => 'Selecciona la clase del modelo para usarla como modelo base en los behaviors que se requieran o soporte el modelo. Puedes configurar los behaviors más adelante.',
|
||||||
'base_model_class_placeholder' => '--select model--',
|
'base_model_class_placeholder' => '--selecciona el modelo--',
|
||||||
'controller_behaviors' => 'Behaviors',
|
'controller_behaviors' => 'Behaviors',
|
||||||
'controller_behaviors_description' => 'Select behaviors the controller should implement. Builder will create view files required for the behaviors automatically.',
|
'controller_behaviors_description' => 'Selecciona los behaviors que el controlador debe implementar. El Plugin Builder creará las vistas requeridas para los behaviors automáticamente.',
|
||||||
'controller_permissions' => 'Permisos',
|
'controller_permissions' => 'Permisos',
|
||||||
'controller_permissions_description' => 'Select user permissions that can access the controller views. Permissions can be defined on the Permissions tab of the Builder. You can change this option in the controller PHP script later.',
|
'controller_permissions_description' => 'Select user permissions that can access the controller views. Permissions can be defined on the Permissions tab of the Builder. You can change this option in the controller PHP script later.',
|
||||||
'controller_permissions_no_permissions' => 'The plugin doesn\'t define any permissions.',
|
'controller_permissions_no_permissions' => 'El plugin no define ningún permiso.',
|
||||||
'menu_item' => 'Active menu item',
|
'menu_item' => 'Item activo del menú',
|
||||||
'menu_item_description' => 'Select a menu item to make active for the controller pages. You can change this option in the controller PHP script later.',
|
'menu_item_description' => 'Selecciona un item del menú para se active para las páginas de este controlador. Puedes cambiar esta opción en el script de PHP del controlador mas adelante.',
|
||||||
'menu_item_placeholder' => '--select menu item--',
|
'menu_item_placeholder' => '--selecciona el item del menú--',
|
||||||
'error_unknown_behavior' => 'The behavior class :class is not registered in the behavior library.',
|
'error_unknown_behavior' => 'La clase :class del behavior no está registrado en la librería de behaviors.',
|
||||||
'error_behavior_view_conflict' => 'The selected behaviors provide conflicting views (:view) and cannot be used together in a controller.',
|
'error_behavior_view_conflict' => 'El behaviors seleccionado provee vistas que ocasionan un conflicto (:view) y no pueden utilizarse juntas en un controlador.',
|
||||||
'error_behavior_config_conflict' => 'The selected behaviors provide conflicting configuration files (:file) and cannot be used together in a controller.',
|
'error_behavior_config_conflict' => 'El behaviors seleccionado provee archivos de configuración que ocasionan un conflicto (:file) y no pueden utilizarse juntas en un controlador.',
|
||||||
'error_behavior_view_file_not_found' => 'View template :view of the behavior :class cannot be found.',
|
'error_behavior_view_file_not_found' => 'View template :view of the behavior :class cannot be found.',
|
||||||
'error_behavior_config_file_not_found' => 'Configuration template :file of the behavior :class cannot be found.',
|
'error_behavior_config_file_not_found' => 'Configuration template :file of the behavior :class cannot be found.',
|
||||||
'error_controller_exists' => 'Controller file already exists: :file.',
|
'error_controller_exists' => 'Controller file already exists: :file.',
|
||||||
'error_controller_name_invalid' => 'Invalid controller name format. The name can only contain digits and Latin letters. The first symbol should be a capital Latin letter.',
|
'error_controller_name_invalid' => 'Formato del nombre del controlador invalido. El nombre solo puede contener letras y digitos. El primer simbolo debe ser una mayúscula.',
|
||||||
'error_behavior_view_file_exists' => 'Controller view file already exists: :view.',
|
'error_behavior_view_file_exists' => 'El archivo de la vista del controlador ya existe: :view.',
|
||||||
'error_behavior_config_file_exists' => 'Behavior configuration file already exists: :file.',
|
'error_behavior_config_file_exists' => 'El archivo de configuración de este Behavior ya existe: :file.',
|
||||||
'error_save_file' => 'Error saving controller file: :file',
|
'error_save_file' => 'Error guardando el archivo del controlador: :file',
|
||||||
'error_behavior_requires_base_model' => 'Behavior :behavior requires a base model class to be selected.',
|
'error_behavior_requires_base_model' => 'El Behavior :behavior require de un modelo base para ser seleccionado.',
|
||||||
'error_model_doesnt_have_lists' => 'The selected model doesn\'t have any lists. Please create a list first.',
|
'error_model_doesnt_have_lists' => 'El modelo seleccionado no tiene ninguna lista. Favor de primero crear una lista.',
|
||||||
'error_model_doesnt_have_forms' => 'The selected model doesn\'t have any forms. Please create a form first.',
|
'error_model_doesnt_have_forms' => 'El modelo seleccionado no tiene ningún formulario. Favor de primero crear un formulario.',
|
||||||
],
|
],
|
||||||
'version' => [
|
'version' => [
|
||||||
'menu_label' => 'Versiones',
|
'menu_label' => 'Versiones',
|
||||||
'no_records' => 'Versiones del plugin no encontradas',
|
'no_records' => 'Versiones del plugin no encontradas',
|
||||||
'search' => 'Buscar...',
|
'search' => 'Buscar...',
|
||||||
'tab' => 'Versiones',
|
'tab' => 'Versiones',
|
||||||
'saved' => 'Versión salvada',
|
'saved' => 'Versión guardada',
|
||||||
'confirm_delete' => '¿Borrar esta versión?',
|
'confirm_delete' => '¿Borrar esta versión?',
|
||||||
'tab_new_version' => 'Nueva versión',
|
'tab_new_version' => 'Nueva versión',
|
||||||
'migration' => 'Migración',
|
'migration' => 'Migración',
|
||||||
|
|
@ -502,25 +504,25 @@ return [
|
||||||
'menu' => [
|
'menu' => [
|
||||||
'menu_label' => 'Backend Menu',
|
'menu_label' => 'Backend Menu',
|
||||||
'tab' => 'Menus',
|
'tab' => 'Menus',
|
||||||
'items' => 'Menu items',
|
'items' => 'Items del menú',
|
||||||
'saved' => 'Menus saved',
|
'saved' => 'Menues guardados',
|
||||||
'add_main_menu_item' => 'Add main menu item',
|
'add_main_menu_item' => 'Añadir item al menú principal',
|
||||||
'new_menu_item' => 'Menu Item',
|
'new_menu_item' => 'Menu Item',
|
||||||
'add_side_menu_item' => 'Add sub-item',
|
'add_side_menu_item' => 'Agregar sub-item',
|
||||||
'side_menu_item' => 'Side menu item',
|
'side_menu_item' => 'Item de menú lateral',
|
||||||
'property_label' => 'Etiqueta',
|
'property_label' => 'Etiqueta',
|
||||||
'property_label_required' => 'Please enter the menu item labels.',
|
'property_label_required' => 'Por favor ingrese la etiqueta para el item del menú.',
|
||||||
'property_url_required' => 'Please enter the menu item URL',
|
'property_url_required' => 'Por favor ingrese la URL para el item del menú',
|
||||||
'property_url' => 'URL',
|
'property_url' => 'URL',
|
||||||
'property_icon' => 'Icono',
|
'property_icon' => 'Icono',
|
||||||
'property_icon_required' => 'Please select an icon',
|
'property_icon_required' => 'Por favor seleccione un ícono',
|
||||||
'property_permissions' => 'Permissions',
|
'property_permissions' => 'Permisos',
|
||||||
'property_order' => 'Order',
|
'property_order' => 'Orden',
|
||||||
'property_order_invalid' => 'Please enter the menu item order as integer value.',
|
'property_order_invalid' => 'Por favor ingrese el orden el item del menú como un valor numérico.',
|
||||||
'property_order_description' => 'Menu item order manages its position in the menu. If the order is not provided, the item will be placed to the end of the menu. The default order values have the increment of 100.',
|
'property_order_description' => 'Menu item order manages its position in the menu. If the order is not provided, the item will be placed to the end of the menu. The default order values have the increment of 100.',
|
||||||
'property_attributes' => 'HTML attributes',
|
'property_attributes' => 'Atributos HTML',
|
||||||
'property_code' => 'Code',
|
'property_code' => 'Código',
|
||||||
'property_code_invalid' => 'The code should contain only Latin letter and digits',
|
'property_code_invalid' => 'El código sólo puede contener letras y números',
|
||||||
'property_code_required' => 'Please enter the menu item code.',
|
'property_code_required' => 'Please enter the menu item code.',
|
||||||
'error_duplicate_main_menu_code' => "Duplicate main menu item code: ':code'.",
|
'error_duplicate_main_menu_code' => "Duplicate main menu item code: ':code'.",
|
||||||
'error_duplicate_side_menu_code' => "Duplicate side menu item code: ':code'.",
|
'error_duplicate_side_menu_code' => "Duplicate side menu item code: ':code'.",
|
||||||
|
|
@ -558,14 +560,14 @@ return [
|
||||||
'form_tab_permissions' => 'Permisos',
|
'form_tab_permissions' => 'Permisos',
|
||||||
'btn_add_permission' => 'Añadir permisos',
|
'btn_add_permission' => 'Añadir permisos',
|
||||||
'btn_delete_permission' => 'Borrar permisos',
|
'btn_delete_permission' => 'Borrar permisos',
|
||||||
'column_permission_label' => 'Permission code',
|
'column_permission_label' => 'Código del permiso',
|
||||||
'column_permission_required' => 'Please enter the permission code',
|
'column_permission_required' => 'Por favor ingrese el código del permiso',
|
||||||
'column_tab_label' => 'Titulo pestaña',
|
'column_tab_label' => 'Titulo pestaña',
|
||||||
'column_tab_required' => 'Por favor introduzca el permiso de el título de la pestaña',
|
'column_tab_required' => 'Por favor introduzca el permiso de el título de la pestaña',
|
||||||
'column_label_label' => 'Etiqueta',
|
'column_label_label' => 'Etiqueta',
|
||||||
'column_label_required' => 'Por favor introduzca permiso de etiqueta',
|
'column_label_required' => 'Por favor introduzca permiso de etiqueta',
|
||||||
'saved' => 'Permisos guardados',
|
'saved' => 'Permisos guardados',
|
||||||
'error_duplicate_code' => "Duplicate permission code: ':code'.",
|
'error_duplicate_code' => "Código de permiso duplicado: ':code'.",
|
||||||
],
|
],
|
||||||
'yaml' => [
|
'yaml' => [
|
||||||
'save_error' => "Error al guardar el archivo ':name'. Consulte permisos de escritura.",
|
'save_error' => "Error al guardar el archivo ':name'. Consulte permisos de escritura.",
|
||||||
|
|
@ -576,7 +578,7 @@ return [
|
||||||
'destination_dir_not_exists' => "El directorio de destino no existe: ':path'.",
|
'destination_dir_not_exists' => "El directorio de destino no existe: ':path'.",
|
||||||
'error_make_dir' => "Error al crear directorio: ':name'.",
|
'error_make_dir' => "Error al crear directorio: ':name'.",
|
||||||
'error_dir_exists' => "El directorio ya existe!: ':path'.",
|
'error_dir_exists' => "El directorio ya existe!: ':path'.",
|
||||||
'template_not_found' => "Archivo de plantilla no encuentrado: ':name'.",
|
'template_not_found' => "Archivo de plantilla no encontrado: ':name'.",
|
||||||
'error_generating_file' => "Error al generar el archivo: ':path'.",
|
'error_generating_file' => "Error al generar el archivo: ':path'.",
|
||||||
'error_loading_template' => "Error al cargar el archivo plantilla: ':name'.",
|
'error_loading_template' => "Error al cargar el archivo plantilla: ':name'.",
|
||||||
'select_plugin_first' => 'Seleccione primero un plugin. Para ver la lista de plugin, haga clic en el icono > en la barra lateral izquierda.',
|
'select_plugin_first' => 'Seleccione primero un plugin. Para ver la lista de plugin, haga clic en el icono > en la barra lateral izquierda.',
|
||||||
|
|
@ -585,57 +587,57 @@ return [
|
||||||
],
|
],
|
||||||
'migration' => [
|
'migration' => [
|
||||||
'entity_name' => 'Migración',
|
'entity_name' => 'Migración',
|
||||||
'error_version_invalid' => 'The version should be specified in format 1.0.1',
|
'error_version_invalid' => 'La versión debe ser especificada en el siguiente formato: 1.0.1',
|
||||||
'field_version' => 'Versión',
|
'field_version' => 'Versión',
|
||||||
'field_description' => 'Descripción',
|
'field_description' => 'Descripción',
|
||||||
'field_code' => 'Code',
|
'field_code' => 'Código',
|
||||||
'save_and_apply' => 'Salvar y Aplicar',
|
'save_and_apply' => 'Guardar y Aplicar',
|
||||||
'error_version_exists' => 'The migration version already exists.',
|
'error_version_exists' => 'La versión de la migración ya existe.',
|
||||||
'error_script_filename_invalid' => 'The migration script file name can contain only Latin letters, digits and underscores. The name should start with a Latin letter and could not contain spaces.',
|
'error_script_filename_invalid' => 'El nombre del archivo de migración sólo puede contener letras, digitos y guiones bajos. El nombre de comenzar con el nombre debe comenzar con una letra y no puede contener espacios.',
|
||||||
'error_cannot_change_version_number' => 'Cannot change version number for an applied version.',
|
'error_cannot_change_version_number' => 'No se puede cambiar el número de la versión para una versión ya aplicada.',
|
||||||
'error_file_must_define_class' => 'Migration code should define a migration or seeder class. Leave the code field blank if you only want to update the version number.',
|
'error_file_must_define_class' => 'El código de la migración debe definir una clase de migración o de seeder. Dejar en blanco si solo quieres actualizar el número de la versión.',
|
||||||
'error_file_must_define_namespace' => 'Migration code should define a namespace. Leave the code field blank if you only want to update the version number.',
|
'error_file_must_define_namespace' => 'La migración debe definir un namespace. Deja el campo de código en blanco si solo quieres actualizar el número de la versión.',
|
||||||
'no_changes_to_save' => 'No hay cambios que salvar.',
|
'no_changes_to_save' => 'No hay cambios que guardar.',
|
||||||
'error_namespace_mismatch' => "The migration code should use the plugin namespace: :namespace",
|
'error_namespace_mismatch' => "El código de la migración debe utilizar el namespace del plugin :namespace",
|
||||||
'error_migration_file_exists' => "Migration file :file already exists. Please use another class name.",
|
'error_migration_file_exists' => "El archivo de migración :file ya existe. Favor usa otro nombre para la clase.",
|
||||||
'error_cant_delete_applied' => 'This version has already been applied and cannot be deleted. Please rollback the version first.',
|
'error_cant_delete_applied' => 'Esta versión ya ha sido aplicada y no puede ser eliminada. Favor haz un rollback a la versión primero.',
|
||||||
],
|
],
|
||||||
'components' => [
|
'components' => [
|
||||||
'list_title' => 'Record list',
|
'list_title' => 'Lista de registros',
|
||||||
'list_description' => 'Displays a list of records for a selected model',
|
'list_description' => 'Mostrar una lista de registros para el modelo seleccionado',
|
||||||
'list_page_number' => 'Page number',
|
'list_page_number' => 'Número de página',
|
||||||
'list_page_number_description' => 'This value is used to determine what page the user is on.',
|
'list_page_number_description' => 'Este valor es usado para determinar en qué página se encuentra el usuario.',
|
||||||
'list_records_per_page' => 'Records per page',
|
'list_records_per_page' => 'Registros por página',
|
||||||
'list_records_per_page_description' => 'Number of records to display on a single page. Leave empty to disable pagination.',
|
'list_records_per_page_description' => 'Número de registros a mostrar en una página. Dejar en blanco para desactivar paginación.',
|
||||||
'list_records_per_page_validation' => 'Invalid format of the records per page value. The value should be a number.',
|
'list_records_per_page_validation' => 'Invalid format of the records per page value. The value should be a number.',
|
||||||
'list_no_records' => 'No records message',
|
'list_no_records' => 'No records message',
|
||||||
'list_no_records_description' => 'Message to display in the list in case if there are no records. Used in the default component\'s partial.',
|
'list_no_records_description' => 'Message to display in the list in case if there are no records. Used in the default component\'s partial.',
|
||||||
'list_no_records_default' => 'No records found',
|
'list_no_records_default' => 'No se han encontrado registros',
|
||||||
'list_sort_column' => 'Sort by column',
|
'list_sort_column' => 'Ordenar por columna',
|
||||||
'list_sort_column_description' => 'Model column the records should be ordered by',
|
'list_sort_column_description' => 'Model column the records should be ordered by',
|
||||||
'list_sort_direction' => 'Direction',
|
'list_sort_direction' => 'Dirección',
|
||||||
'list_display_column' => 'Display column',
|
'list_display_column' => 'Columna para mostrar',
|
||||||
'list_display_column_description' => 'Column to display in the list. Used in the default component\'s partial.',
|
'list_display_column_description' => 'Column to display in the list. Used in the default component\'s partial.',
|
||||||
'list_display_column_required' => 'Please select a display column.',
|
'list_display_column_required' => 'Por favor, selecciona una columna para mostrar.',
|
||||||
'list_details_page' => 'Details page',
|
'list_details_page' => 'Página de detalles',
|
||||||
'list_details_page_description' => 'Page to display record details.',
|
'list_details_page_description' => 'Página para desplegar el registro de detalles.',
|
||||||
'list_details_page_no' => '--no details page--',
|
'list_details_page_no' => '--No hay página de detalles--',
|
||||||
'list_sorting' => 'Sorting',
|
'list_sorting' => 'Sorting',
|
||||||
'list_pagination' => 'Paginación',
|
'list_pagination' => 'Paginación',
|
||||||
'list_order_direction_asc' => 'Ascending',
|
'list_order_direction_asc' => 'Ascendente',
|
||||||
'list_order_direction_desc' => 'Descending',
|
'list_order_direction_desc' => 'Descendente',
|
||||||
'list_model' => 'Model class',
|
'list_model' => 'Model class',
|
||||||
'list_scope' => 'Scope',
|
'list_scope' => 'Scope',
|
||||||
'list_scope_description' => 'Optional model scope to fetch the records',
|
'list_scope_description' => 'Optional model scope to fetch the records',
|
||||||
'list_scope_default' => '--select a scope, optional--',
|
'list_scope_default' => '--select a scope, optional--',
|
||||||
'list_details_page_link' => 'Link to the details page',
|
'list_details_page_link' => 'Enlace a la página de detalles',
|
||||||
'list_details_key_column' => 'Details key column',
|
'list_details_key_column' => 'Details key column',
|
||||||
'list_details_key_column_description' => 'Model column to use as a record identifier in the details page links.',
|
'list_details_key_column_description' => 'Model column to use as a record identifier in the details page links.',
|
||||||
'list_details_url_parameter' => 'URL parameter name',
|
'list_details_url_parameter' => 'URL parameter name',
|
||||||
'list_details_url_parameter_description' => 'Name of the details page URL parameter which takes the record identifier.',
|
'list_details_url_parameter_description' => 'Name of the details page URL parameter which takes the record identifier.',
|
||||||
'details_title' => 'Record details',
|
'details_title' => 'Detalles de un registro',
|
||||||
'details_description' => 'Displays record details for a selected model',
|
'details_description' => 'Despliega el detalle de un registro para el modelo seleccionado',
|
||||||
'details_model' => 'Model class',
|
'details_model' => 'Clase del modelo',
|
||||||
'details_identifier_value' => 'Identifier value',
|
'details_identifier_value' => 'Identifier value',
|
||||||
'details_identifier_value_description' => 'Identifier value to load the record from the database. Specify a fixed value or URL parameter name.',
|
'details_identifier_value_description' => 'Identifier value to load the record from the database. Specify a fixed value or URL parameter name.',
|
||||||
'details_identifier_value_required' => 'The identifier value is required',
|
'details_identifier_value_required' => 'The identifier value is required',
|
||||||
|
|
@ -644,9 +646,9 @@ return [
|
||||||
'details_key_column_required' => 'The key column name is required',
|
'details_key_column_required' => 'The key column name is required',
|
||||||
'details_display_column' => 'Display column',
|
'details_display_column' => 'Display column',
|
||||||
'details_display_column_description' => 'Model column to display on the details page. Used in the default component\'s partial.',
|
'details_display_column_description' => 'Model column to display on the details page. Used in the default component\'s partial.',
|
||||||
'details_display_column_required' => 'Please select a display column.',
|
'details_display_column_required' => 'Por favor selecciona una columna para mostrar.',
|
||||||
'details_not_found_message' => 'Not found message',
|
'details_not_found_message' => 'Mensaje registro no encontrado',
|
||||||
'details_not_found_message_description' => 'Message to display if the record is not found. Used in the default component\'s partial.',
|
'details_not_found_message_description' => 'Mensaje que se mostrará si el registro no fue encontrado. Usado en el partial del componente por defecto.',
|
||||||
'details_not_found_message_default' => 'Record not found',
|
'details_not_found_message_default' => 'Registro no encontrado',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -193,10 +193,7 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'تاریخ و ساعت',
|
'property_datepicker_mode_datetime' => 'تاریخ و ساعت',
|
||||||
'property_datepicker_mode_time' => 'ساعت',
|
'property_datepicker_mode_time' => 'ساعت',
|
||||||
'property_datepicker_min_date' => 'کمترین تاریخ',
|
'property_datepicker_min_date' => 'کمترین تاریخ',
|
||||||
'property_datepicker_min_date_description' => 'کمترین تاریخی که میتوان انتخاب کرد. برای مقدار پیشفرض این گزینه را خالی بگذارید.',
|
|
||||||
'property_datepicker_max_date' => 'بیشترین تاریخ',
|
'property_datepicker_max_date' => 'بیشترین تاریخ',
|
||||||
'property_datepicker_max_date_description' => 'بیشترین تاریخی که میتوان انتخاب کرد. برای استفاده از مقدار پیشفرض این گزینه را خالی بگذارید.',
|
|
||||||
'property_datepicker_date_invalid_format' => 'قالب تاریخ صحیح نمی باشد. مثال: YYYY-MM-DD',
|
|
||||||
'property_markdown_mode' => 'نحوه نمایش',
|
'property_markdown_mode' => 'نحوه نمایش',
|
||||||
'property_markdown_mode_split' => 'پنجره کنار هم',
|
'property_markdown_mode_split' => 'پنجره کنار هم',
|
||||||
'property_markdown_mode_tab' => 'Tab',
|
'property_markdown_mode_tab' => 'Tab',
|
||||||
|
|
|
||||||
|
|
@ -192,10 +192,7 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'Datum en tijd',
|
'property_datepicker_mode_datetime' => 'Datum en tijd',
|
||||||
'property_datepicker_mode_time' => 'Tijd',
|
'property_datepicker_mode_time' => 'Tijd',
|
||||||
'property_datepicker_min_date' => 'Minimale datum',
|
'property_datepicker_min_date' => 'Minimale datum',
|
||||||
'property_datepicker_min_date_description' => 'De minimale datum die geselecteerd kan worden. Laat leeg om de standaardwaarde te gebruiken (2000-01-01).',
|
|
||||||
'property_datepicker_max_date' => 'Maximale datum',
|
'property_datepicker_max_date' => 'Maximale datum',
|
||||||
'property_datepicker_max_date_description' => 'De maximale datum die geselecteerd kan worden. Laat leeg om de standaardwaarde te gebruiken (2020-12-31).',
|
|
||||||
'property_datepicker_date_invalid_format' => 'Ongeldig datum formaat. Gebruik het formaat YYYY-MM-DD.',
|
|
||||||
'property_markdown_mode' => 'Modus',
|
'property_markdown_mode' => 'Modus',
|
||||||
'property_markdown_mode_split' => 'Gesplitst',
|
'property_markdown_mode_split' => 'Gesplitst',
|
||||||
'property_markdown_mode_tab' => 'Tabblad',
|
'property_markdown_mode_tab' => 'Tabblad',
|
||||||
|
|
|
||||||
|
|
@ -201,10 +201,7 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'Data i czas',
|
'property_datepicker_mode_datetime' => 'Data i czas',
|
||||||
'property_datepicker_mode_time' => 'Czas',
|
'property_datepicker_mode_time' => 'Czas',
|
||||||
'property_datepicker_min_date' => 'Najwcześniejsza data',
|
'property_datepicker_min_date' => 'Najwcześniejsza data',
|
||||||
'property_datepicker_min_date_description' => 'Najwcześniejsza data, którą można wybrać. Pozostaw puste, aby wybrać wartość domyślną (2000-01-01).',
|
|
||||||
'property_datepicker_max_date' => 'Najpóźniejsza data',
|
'property_datepicker_max_date' => 'Najpóźniejsza data',
|
||||||
'property_datepicker_max_date_description' => 'Najpóźniejsza data, którą można wybrać. Pozostaw puste, aby wybrać wartość domyślną (2020-12-31).',
|
|
||||||
'property_datepicker_date_invalid_format' => 'Niepoprawny format daty. Użyj formatu YYYY-MM-DD.',
|
|
||||||
'property_datepicker_year_range' => 'Zakres lat',
|
'property_datepicker_year_range' => 'Zakres lat',
|
||||||
'property_datepicker_year_range_description' => 'Liczba lat z obu stron zakresu (np. "10") lub dolny i górny zakres w tablicy (np. "[1900,2015]"). Pozostaw puste dla wartości domyślnej (10).',
|
'property_datepicker_year_range_description' => 'Liczba lat z obu stron zakresu (np. "10") lub dolny i górny zakres w tablicy (np. "[1900,2015]"). Pozostaw puste dla wartości domyślnej (10).',
|
||||||
'property_datepicker_year_range_invalid_format' => 'Nieprawidłowy format zakresu lat. Użyj liczby (np. "10") lub dolnego i górnego zakresu w tablicy (np. "[1900,2015]")',
|
'property_datepicker_year_range_invalid_format' => 'Nieprawidłowy format zakresu lat. Użyj liczby (np. "10") lub dolnego i górnego zakresu w tablicy (np. "[1900,2015]")',
|
||||||
|
|
|
||||||
|
|
@ -205,10 +205,7 @@ return [
|
||||||
'property_datepicker_mode_datetime' => 'Data e hora',
|
'property_datepicker_mode_datetime' => 'Data e hora',
|
||||||
'property_datepicker_mode_time' => 'Hora',
|
'property_datepicker_mode_time' => 'Hora',
|
||||||
'property_datepicker_min_date' => 'Data mínima',
|
'property_datepicker_min_date' => 'Data mínima',
|
||||||
'property_datepicker_min_date_description' => 'A data minima ou mais proxima que pode ser selecionada. Deixe em branco para o valor padrão (2000-01-01).',
|
|
||||||
'property_datepicker_max_date' => 'Data máxima',
|
'property_datepicker_max_date' => 'Data máxima',
|
||||||
'property_datepicker_max_date_description' => 'A data máxima ou mais distante que pode ser selecionada. Deixe em branco para o valor padrão (2020-12-31).',
|
|
||||||
'property_datepicker_date_invalid_format' => 'Formato de data inválido. Use o formato YYYY-MM-DD.',
|
|
||||||
'property_datepicker_year_range' => 'Alcançe de Anos',
|
'property_datepicker_year_range' => 'Alcançe de Anos',
|
||||||
'property_datepicker_year_range_description' => 'Número de anos que cada lado (ex. 10) ou array de alcançe superior/inferior (ex. [1900,2015]). Deixe em branco para o valor padrão (10).',
|
'property_datepicker_year_range_description' => 'Número de anos que cada lado (ex. 10) ou array de alcançe superior/inferior (ex. [1900,2015]). Deixe em branco para o valor padrão (10).',
|
||||||
'property_datepicker_year_range_invalid_format' => 'Formato de alcançe de anos inválido. Use Números (ex. "10") ou array de alcançe superior/inferior (ex. "[1900,2015]")',
|
'property_datepicker_year_range_invalid_format' => 'Formato de alcançe de anos inválido. Use Números (ex. "10") ou array de alcançe superior/inferior (ex. "[1900,2015]")',
|
||||||
|
|
|
||||||
2
plugins/rainlab/builder/tests/fixtures/filesystemgenerator/temporary/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
|
@ -1,16 +1,17 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use RainLab\Builder\Classes\FilesystemGenerator;
|
use RainLab\Builder\Classes\FilesystemGenerator;
|
||||||
|
|
||||||
class FilesystemGeneratorTest extends TestCase
|
class FilesystemGeneratorTest extends TestCase
|
||||||
{
|
{
|
||||||
public function setUp()
|
public function setUp() : void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->cleanUp();
|
$this->cleanUp();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function tearDown()
|
public function tearDown() : void
|
||||||
{
|
{
|
||||||
$this->cleanUp();
|
$this->cleanUp();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,3 +24,4 @@
|
||||||
1.0.24: Added support for tag list field type, added read only toggle for fields. Prevent plugins from using reserved PHP keywords for class names and namespaces
|
1.0.24: Added support for tag list field type, added read only toggle for fields. Prevent plugins from using reserved PHP keywords for class names and namespaces
|
||||||
1.0.25: Allow editing of migration code in the "Migration" popup when saving changes in the database editor.
|
1.0.25: Allow editing of migration code in the "Migration" popup when saving changes in the database editor.
|
||||||
1.0.26: Allow special default values for columns and added new "Add ID column" button to database editor.
|
1.0.26: Allow special default values for columns and added new "Add ID column" button to database editor.
|
||||||
|
1.0.27: Added ability to use 'scope' in a form relation field, added ability to change the sort order of versions and added additional properties for repeater widget in form builder. Added Polish translation.
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,9 @@ class VersionList extends WidgetBase
|
||||||
$this->alias = $alias;
|
$this->alias = $alias;
|
||||||
|
|
||||||
parent::__construct($controller, []);
|
parent::__construct($controller, []);
|
||||||
|
|
||||||
|
$this->config->sort = $this->getSession('sort', 'asc');
|
||||||
|
|
||||||
$this->bindToController();
|
$this->bindToController();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -60,6 +63,15 @@ class VersionList extends WidgetBase
|
||||||
return $this->updateList();
|
return $this->updateList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onSort()
|
||||||
|
{
|
||||||
|
$this->config->sort = Input::input('sort');
|
||||||
|
|
||||||
|
$this->putSession('sort', $this->config->sort);
|
||||||
|
|
||||||
|
return ['#' . $this->getId('body') => $this->makePartial('widget-contents', $this->getRenderData())];
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Methods for the internal use
|
* Methods for the internal use
|
||||||
*/
|
*/
|
||||||
|
|
@ -97,6 +109,10 @@ class VersionList extends WidgetBase
|
||||||
$items = $result;
|
$items = $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->getConfig('sort', 'asc') === 'desc') {
|
||||||
|
$items = array_reverse($items, false);
|
||||||
|
}
|
||||||
|
|
||||||
$versionManager = VersionManager::instance();
|
$versionManager = VersionManager::instance();
|
||||||
$unappliedVersions = $versionManager->listNewVersions($activePluginVector->pluginCodeObj->toCode());
|
$unappliedVersions = $versionManager->listNewVersions($activePluginVector->pluginCodeObj->toCode());
|
||||||
return [
|
return [
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?php if ($this->getConfig('sort', 'asc') === 'asc'): ?>
|
||||||
|
<button data-request="<?= $this->getEventHandler('onSort') ?>"
|
||||||
|
data-request-data="sort: 'desc'"
|
||||||
|
class="btn btn-default empty last oc-icon-sort-numeric-desc"
|
||||||
|
title="<?= e(trans('rainlab.builder::lang.version.sort_descending')) ?>"></button>
|
||||||
|
<?php else: ?>
|
||||||
|
<button data-request="<?= $this->getEventHandler('onSort') ?>"
|
||||||
|
data-request-data="sort: 'asc'"
|
||||||
|
class="btn btn-default empty last oc-icon-sort-numeric-asc"
|
||||||
|
title="<?= e(trans('rainlab.builder::lang.version.sort_ascending')) ?>"></button>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="control-toolbar toolbar-padded">
|
<div class="control-toolbar toolbar-padded">
|
||||||
<div class="toolbar-item" data-calculate-width>
|
<div class="toolbar-item" data-calculate-width>
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<div class="dropdown last">
|
<div class="dropdown">
|
||||||
<button type="button" class="btn btn-default oc-icon-plus"
|
<button type="button" class="btn btn-default oc-icon-plus"
|
||||||
data-toggle="dropdown"
|
data-toggle="dropdown"
|
||||||
><?= e(trans('rainlab.builder::lang.common.add')) ?></button>
|
><?= e(trans('rainlab.builder::lang.common.add')) ?></button>
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
<li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" data-builder-command="version:cmdCreateVersion" data-version-type="seeder" class="oc-icon-th"><?= e(trans('rainlab.builder::lang.version.seeder')) ?></a></li>
|
<li role="presentation"><a role="menuitem" tabindex="-1" href="javascript:;" data-builder-command="version:cmdCreateVersion" data-version-type="seeder" class="oc-icon-th"><?= e(trans('rainlab.builder::lang.version.seeder')) ?></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
<?= $this->makePartial('sort'); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="relative toolbar-item loading-indicator-container size-input-text">
|
<div class="relative toolbar-item loading-indicator-container size-input-text">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
---
|
||||||
|
name: "🐛 Bug Report"
|
||||||
|
about: 'Report a general Pages Plugin issue'
|
||||||
|
labels: 'Status: Review Needed, Type: Unconfirmed Bug'
|
||||||
|
---
|
||||||
|
|
||||||
|
- OctoberCMS Build: ### <!-- Or Commit hash if using composer -->
|
||||||
|
- RainLab Pages Plugin Version: ###
|
||||||
|
- PHP Version:
|
||||||
|
|
||||||
|
### Description:
|
||||||
|
<!-- Describe the issue encountered and what should actually be happening instead in as much detail as possible-->
|
||||||
|
|
||||||
|
### Steps To Reproduce:
|
||||||
|
<!-- (Describe the steps to reproduce the problem here) -->
|
||||||
|
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
name: "⚠️ General Support"
|
||||||
|
about: 'This repository is only for reporting bugs or problems. If you need help using RainLab Pages, see: https://octobercms.com/support'
|
||||||
|
---
|
||||||
|
|
||||||
|
This repository is only for reporting bugs or problems with the RainLab Pages plugin. If you need support, please use
|
||||||
|
the following options:
|
||||||
|
|
||||||
|
- Forum: https://octobercms.com/forum
|
||||||
|
- Discord: https://discord.com/invite/gEKgwSZ
|
||||||
|
- Stack Overflow: https://stackoverflow.com/questions/tagged/octobercms
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
.DS_Store
|
||||||
|
.idea
|
||||||
|
|
@ -108,7 +108,8 @@ class Plugin extends PluginBase
|
||||||
public function registerFormWidgets()
|
public function registerFormWidgets()
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'RainLab\Pages\FormWidgets\PagePicker' => 'staticpagepicker'
|
FormWidgets\PagePicker::class => 'staticpagepicker',
|
||||||
|
FormWidgets\MenuPicker::class => 'staticmenupicker',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -181,6 +182,12 @@ class Plugin extends PluginBase
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Event::listen('cms.template.getTemplateToolbarSettingsButtons', function($extension, $dataHolder) {
|
||||||
|
if ($dataHolder->templateType === 'partial') {
|
||||||
|
Snippet::extendEditorPartialToolbar($dataHolder);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Event::listen('cms.template.save', function($controller, $template, $type) {
|
Event::listen('cms.template.save', function($controller, $template, $type) {
|
||||||
Plugin::clearCache();
|
Plugin::clearCache();
|
||||||
});
|
});
|
||||||
|
|
@ -189,8 +196,8 @@ class Plugin extends PluginBase
|
||||||
$dataHolder->settings = Snippet::processTemplateSettingsArray($dataHolder->settings);
|
$dataHolder->settings = Snippet::processTemplateSettingsArray($dataHolder->settings);
|
||||||
});
|
});
|
||||||
|
|
||||||
Event::listen('cms.template.processSettingsAfterLoad', function($controller, $template) {
|
Event::listen('cms.template.processSettingsAfterLoad', function($controller, $template, $context = null) {
|
||||||
Snippet::processTemplateSettings($template);
|
Snippet::processTemplateSettings($template, $context);
|
||||||
});
|
});
|
||||||
|
|
||||||
Event::listen('cms.template.processTwigContent', function($template, $dataHolder) {
|
Event::listen('cms.template.processTwigContent', function($template, $dataHolder) {
|
||||||
|
|
|
||||||
|
|
@ -253,6 +253,18 @@
|
||||||
this.updateContentEditorMode($tabPane, false)
|
this.updateContentEditorMode($tabPane, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PagesPage.prototype.onDeletePageSingle = function(el) {
|
||||||
|
var $el = $(el);
|
||||||
|
|
||||||
|
$el.request('onDelete', {
|
||||||
|
success: function(data) {
|
||||||
|
$.oc.pagesPage.closeTabs(data, 'page');
|
||||||
|
$.oc.pagesPage.updateObjectList('page');
|
||||||
|
$(this).trigger('close.oc.tab', [{force: true}]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Updates the browser title when an object is saved.
|
* Updates the browser title when an object is saved.
|
||||||
*/
|
*/
|
||||||
|
|
@ -275,7 +287,7 @@
|
||||||
}
|
}
|
||||||
}).always(function(){
|
}).always(function(){
|
||||||
$.oc.stripeLoadIndicator.hide()
|
$.oc.stripeLoadIndicator.hide()
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,7 @@ class Menu extends Meta
|
||||||
|
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
$parentReference = new MenuItemReference;
|
$parentReference = new MenuItemReference;
|
||||||
|
$parentReference->type = $item->type;
|
||||||
$parentReference->title = $item->title;
|
$parentReference->title = $item->title;
|
||||||
$parentReference->code = $item->code;
|
$parentReference->code = $item->code;
|
||||||
$parentReference->viewBag = $item->viewBag;
|
$parentReference->viewBag = $item->viewBag;
|
||||||
|
|
@ -170,10 +171,7 @@ class Menu extends Meta
|
||||||
* If the item type is not URL, use the API to request the item type's provider to
|
* If the item type is not URL, use the API to request the item type's provider to
|
||||||
* return the item URL, subitems and determine whether the item is active.
|
* return the item URL, subitems and determine whether the item is active.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
$apiResult = Event::fire('pages.menuitem.resolveItem', [$item->type, $item, $currentUrl, $this->theme]);
|
$apiResult = Event::fire('pages.menuitem.resolveItem', [$item->type, $item, $currentUrl, $this->theme]);
|
||||||
|
|
||||||
if (is_array($apiResult)) {
|
if (is_array($apiResult)) {
|
||||||
foreach ($apiResult as $itemInfo) {
|
foreach ($apiResult as $itemInfo) {
|
||||||
if (!is_array($itemInfo)) {
|
if (!is_array($itemInfo)) {
|
||||||
|
|
@ -191,6 +189,7 @@ class Menu extends Meta
|
||||||
|
|
||||||
foreach ($items as $item) {
|
foreach ($items as $item) {
|
||||||
$reference = new MenuItemReference;
|
$reference = new MenuItemReference;
|
||||||
|
$reference->type = isset($item['type']) ? $item['type'] : null;
|
||||||
$reference->title = isset($item['title']) ? $item['title'] : '--no title--';
|
$reference->title = isset($item['title']) ? $item['title'] : '--no title--';
|
||||||
$reference->url = isset($item['url']) ? $item['url'] : '#';
|
$reference->url = isset($item['url']) ? $item['url'] : '#';
|
||||||
$reference->isActive = isset($item['isActive']) ? $item['isActive'] : false;
|
$reference->isActive = isset($item['isActive']) ? $item['isActive'] : false;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,11 @@ use Event;
|
||||||
*/
|
*/
|
||||||
class MenuItemReference
|
class MenuItemReference
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @var string Specifies the menu item type.
|
||||||
|
*/
|
||||||
|
public $type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string Specifies the item title
|
* @var string Specifies the item title
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -85,7 +85,6 @@ class Page extends ContentBase
|
||||||
'viewBag[title]',
|
'viewBag[title]',
|
||||||
'viewBag[meta_title]',
|
'viewBag[meta_title]',
|
||||||
'viewBag[meta_description]',
|
'viewBag[meta_description]',
|
||||||
'viewBag[meta_keywords]',
|
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -907,7 +906,8 @@ class Page extends ContentBase
|
||||||
$iterator($pageList->getPageTree(), null, 0);
|
$iterator($pageList->getPageTree(), null, 0);
|
||||||
|
|
||||||
self::$menuTreeCache = $menuTree;
|
self::$menuTreeCache = $menuTree;
|
||||||
$expiresAt = now()->addMinutes(Config::get('cms.parsedPageCacheTTL', 10));
|
$comboConfig = Config::get('cms.parsedPageCacheTTL', Config::get('cms.template_cache_ttl', 10));
|
||||||
|
$expiresAt = now()->addMinutes($comboConfig);
|
||||||
Cache::put($key, serialize($menuTree), $expiresAt);
|
Cache::put($key, serialize($menuTree), $expiresAt);
|
||||||
|
|
||||||
return self::$menuTreeCache;
|
return self::$menuTreeCache;
|
||||||
|
|
|
||||||
|
|
@ -48,26 +48,21 @@ class PageList
|
||||||
$pages = $this->listPages($skipCache);
|
$pages = $this->listPages($skipCache);
|
||||||
$config = $this->getPagesConfig();
|
$config = $this->getPagesConfig();
|
||||||
|
|
||||||
$iterator = function($configPages) use (&$iterator, &$pages) {
|
// Make the $pages collection an associative array for performance
|
||||||
|
$pagesArray = $pages->keyBy(function ($page) {
|
||||||
|
return $page->getBaseFileName();
|
||||||
|
})->all();
|
||||||
|
|
||||||
|
$iterator = function($configPages) use (&$iterator, $pagesArray) {
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|
||||||
foreach ($configPages as $fileName => $subpages) {
|
foreach ($configPages as $fileName => $subpages) {
|
||||||
$pageObject = null;
|
if (isset($pagesArray[$fileName])) {
|
||||||
foreach ($pages as $page) {
|
$result[] = (object) [
|
||||||
if ($page->getBaseFileName() == $fileName) {
|
'page' => $pagesArray[$fileName],
|
||||||
$pageObject = $page;
|
'subpages' => $iterator($subpages),
|
||||||
break;
|
];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($pageObject === null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result[] = (object)[
|
|
||||||
'page' => $pageObject,
|
|
||||||
'subpages' => $iterator($subpages)
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ class Router
|
||||||
{
|
{
|
||||||
$key = $this->getCacheKey('static-page-url-map');
|
$key = $this->getCacheKey('static-page-url-map');
|
||||||
|
|
||||||
$cacheable = Config::get('cms.enableRoutesCache');
|
$cacheable = Config::get('cms.enableRoutesCache', Config::get('cms.enable_route_cache', false));
|
||||||
$cached = $cacheable ? Cache::get($key, false) : false;
|
$cached = $cacheable ? Cache::get($key, false) : false;
|
||||||
|
|
||||||
if (!$cached || ($unserialized = @unserialize($cached)) === false) {
|
if (!$cached || ($unserialized = @unserialize($cached)) === false) {
|
||||||
|
|
@ -132,7 +132,8 @@ class Router
|
||||||
self::$urlMap = $map;
|
self::$urlMap = $map;
|
||||||
|
|
||||||
if ($cacheable) {
|
if ($cacheable) {
|
||||||
$expiresAt = now()->addMinutes(Config::get('cms.urlCacheTtl', 1));
|
$comboConfig = Config::get('cms.urlCacheTtl', Config::get('cms.url_cache_ttl', 10));
|
||||||
|
$expiresAt = now()->addMinutes($comboConfig);
|
||||||
Cache::put($key, serialize($map), $expiresAt);
|
Cache::put($key, serialize($map), $expiresAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,99 @@ class Snippet
|
||||||
$formWidget->tabs['fields']['viewBag[snippetProperties]'] = $fieldConfig;
|
$formWidget->tabs['fields']['viewBag[snippetProperties]'] = $fieldConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static function extendEditorPartialToolbar($dataHolder)
|
||||||
|
{
|
||||||
|
$dataHolder->buttons[] = [
|
||||||
|
'button' => 'rainlab.pages::lang.snippet.partialtab',
|
||||||
|
'icon' => 'octo-icon-code-snippet',
|
||||||
|
'popupTitle' => 'rainlab.pages::lang.snippet.settings_popup_title',
|
||||||
|
'useViewBag' => true,
|
||||||
|
'properties' => [
|
||||||
|
[
|
||||||
|
'property' => 'snippetCode',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.code',
|
||||||
|
'description' => 'rainlab.pages::lang.snippet.code_comment',
|
||||||
|
'type' => 'string',
|
||||||
|
'validation' => [
|
||||||
|
'required' => [
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.code_required'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'property' => 'snippetName',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.name',
|
||||||
|
'description' => 'rainlab.pages::lang.snippet.name_comment',
|
||||||
|
'type' => 'string',
|
||||||
|
'validation' => [
|
||||||
|
'required' => [
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.name_required'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'property' => 'snippetProperties',
|
||||||
|
'title' => '',
|
||||||
|
'type' => 'table',
|
||||||
|
'tab' => 'rainlab.pages::lang.snippet.properties',
|
||||||
|
'columns' => [
|
||||||
|
[
|
||||||
|
'column' => 'title',
|
||||||
|
'type' => 'string',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.column_property',
|
||||||
|
'validation' => [
|
||||||
|
'required' => [
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.title_required'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'column' => 'property',
|
||||||
|
'type' => 'string',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.column_code',
|
||||||
|
'validation' => [
|
||||||
|
'required' => [
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.property_required'
|
||||||
|
],
|
||||||
|
'regex' => [
|
||||||
|
'pattern' => '^[a-z][a-z0-9]*$',
|
||||||
|
'modifiers' => 'i',
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.property_format_error'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'column' => 'type',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.column_type',
|
||||||
|
'type' => 'dropdown',
|
||||||
|
'placeholder' => 'rainlab.pages::lang.snippet.column_type_placeholder',
|
||||||
|
'options' => [
|
||||||
|
'string' => 'rainlab.pages::lang.snippet.column_type_string',
|
||||||
|
'checkbox' => 'rainlab.pages::lang.snippet.column_type_checkbox',
|
||||||
|
'dropdown' => 'rainlab.pages::lang.snippet.column_type_dropdown'
|
||||||
|
],
|
||||||
|
'validation' => [
|
||||||
|
'required' => [
|
||||||
|
'message' => 'rainlab.pages::lang.snippet.type_required'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'column' => 'default',
|
||||||
|
'type' => 'string',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.column_default'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'column' => 'options',
|
||||||
|
'type' => 'string',
|
||||||
|
'title' => 'rainlab.pages::lang.snippet.column_options'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a component corresponding to the snippet.
|
* Returns a component corresponding to the snippet.
|
||||||
* This method should not be used in the front-end request handling code.
|
* This method should not be used in the front-end request handling code.
|
||||||
|
|
@ -327,12 +420,21 @@ class Snippet
|
||||||
|
|
||||||
public static function processTemplateSettingsArray($settingsArray)
|
public static function processTemplateSettingsArray($settingsArray)
|
||||||
{
|
{
|
||||||
if (!isset($settingsArray['viewBag']['snippetProperties']['TableData'])) {
|
if (
|
||||||
|
!isset($settingsArray['viewBag']['snippetProperties']['TableData']) &&
|
||||||
|
!isset($settingsArray['viewBag']['snippetProperties']) // CMS Editor
|
||||||
|
) {
|
||||||
return $settingsArray;
|
return $settingsArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
$properties = [];
|
$properties = [];
|
||||||
$rows = $settingsArray['viewBag']['snippetProperties']['TableData'];
|
|
||||||
|
if (isset($settingsArray['viewBag']['snippetProperties']['TableData'])) {
|
||||||
|
$rows = $settingsArray['viewBag']['snippetProperties']['TableData'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$rows = $settingsArray['viewBag']['snippetProperties'];
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$property = array_get($row, 'property');
|
$property = array_get($row, 'property');
|
||||||
|
|
@ -354,7 +456,7 @@ class Snippet
|
||||||
return $settingsArray;
|
return $settingsArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function processTemplateSettings($template)
|
public static function processTemplateSettings($template, $context = null)
|
||||||
{
|
{
|
||||||
if (!isset($template->viewBag['snippetProperties'])) {
|
if (!isset($template->viewBag['snippetProperties'])) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -363,14 +465,20 @@ class Snippet
|
||||||
$parsedProperties = self::parseIniProperties($template->viewBag['snippetProperties']);
|
$parsedProperties = self::parseIniProperties($template->viewBag['snippetProperties']);
|
||||||
|
|
||||||
foreach ($parsedProperties as $index => &$property) {
|
foreach ($parsedProperties as $index => &$property) {
|
||||||
$property['id'] = $index;
|
if ($context !== 'editor') {
|
||||||
|
$property['id'] = $index;
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($property['options'])) {
|
if (isset($property['options']) && is_array($property['options'])) {
|
||||||
$property['options'] = self::dropDownOptionsToString($property['options']);
|
$property['options'] = self::dropDownOptionsToString($property['options']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$template->viewBag['snippetProperties'] = $parsedProperties;
|
$template->viewBag['snippetProperties'] = $parsedProperties;
|
||||||
|
|
||||||
|
if ($context == 'editor') {
|
||||||
|
$template->settings['components']['viewBag'] = $template->viewBag;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -537,7 +645,8 @@ class Snippet
|
||||||
}
|
}
|
||||||
|
|
||||||
$cached[$pageName] = $map;
|
$cached[$pageName] = $map;
|
||||||
$expiresAt = now()->addMinutes(Config::get('cms.parsedPageCacheTTL', 10));
|
$comboConfig = Config::get('cms.parsedPageCacheTTL', Config::get('cms.template_cache_ttl', 10));
|
||||||
|
$expiresAt = now()->addMinutes($comboConfig);
|
||||||
Cache::put($key, serialize($cached), $expiresAt);
|
Cache::put($key, serialize($cached), $expiresAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,53 @@ class SnippetManager
|
||||||
$themeSnippets = $this->listThemeSnippets($theme);
|
$themeSnippets = $this->listThemeSnippets($theme);
|
||||||
$componentSnippets = $this->listComponentSnippets();
|
$componentSnippets = $this->listComponentSnippets();
|
||||||
|
|
||||||
return $this->snippets = array_merge($themeSnippets, $componentSnippets);
|
$this->snippets = array_merge($themeSnippets, $componentSnippets);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @event pages.snippets.listSnippets
|
||||||
|
* Gives the ability to manage the snippet list dynamically.
|
||||||
|
*
|
||||||
|
* Example usage to add a snippet to the list:
|
||||||
|
*
|
||||||
|
* Event::listen('pages.snippets.listSnippets', function($manager) {
|
||||||
|
* $snippet = new \RainLab\Pages\Classes\Snippet();
|
||||||
|
* $snippet->initFromComponentInfo('\Example\Plugin\Components\ComponentClass', 'snippetCode');
|
||||||
|
* $manager->addSnippet($snippet);
|
||||||
|
* });
|
||||||
|
*
|
||||||
|
* Example usage to remove a snippet from the list:
|
||||||
|
*
|
||||||
|
* Event::listen('pages.snippets.listSnippets', function($manager) {
|
||||||
|
* $manager->removeSnippet('snippetCode');
|
||||||
|
* });
|
||||||
|
*/
|
||||||
|
Event::fire('pages.snippets.listSnippets', [$this]);
|
||||||
|
|
||||||
|
return $this->snippets;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add snippet to the list of snippets
|
||||||
|
*
|
||||||
|
* @param Snippet $snippet
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function addSnippet(Snippet $snippet)
|
||||||
|
{
|
||||||
|
$this->snippets[] = $snippet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove a snippet with the given code from the list of snippets
|
||||||
|
*
|
||||||
|
* @param string $snippetCode
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function removeSnippet(string $snippetCode)
|
||||||
|
{
|
||||||
|
$this->snippets = array_filter($this->snippets, function ($snippet) use ($snippetCode) {
|
||||||
|
return $snippet->code !== $snippetCode;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -166,7 +212,8 @@ class SnippetManager
|
||||||
$result[$snippetCode] = $partial->getFileName();
|
$result[$snippetCode] = $partial->getFileName();
|
||||||
}
|
}
|
||||||
|
|
||||||
$expiresAt = now()->addMinutes(Config::get('cms.parsedPageCacheTTL', 10));
|
$comboConfig = Config::get('cms.parsedPageCacheTTL', Config::get('cms.template_cache_ttl', 10));
|
||||||
|
$expiresAt = now()->addMinutes($comboConfig);
|
||||||
Cache::put($key, serialize($result), $expiresAt);
|
Cache::put($key, serialize($result), $expiresAt);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
|
||||||
|
|
@ -57,15 +57,12 @@ tabs:
|
||||||
type: textarea
|
type: textarea
|
||||||
size: tiny
|
size: tiny
|
||||||
|
|
||||||
viewBag[meta_keywords]:
|
|
||||||
tab: cms::lang.editor.meta
|
|
||||||
label: 'Meta keywords'
|
|
||||||
|
|
||||||
secondaryTabs:
|
secondaryTabs:
|
||||||
stretch: true
|
stretch: true
|
||||||
fields:
|
fields:
|
||||||
markup:
|
markup:
|
||||||
tab: rainlab.pages::lang.editor.content
|
tab: rainlab.pages::lang.editor.content
|
||||||
type: richeditor
|
type: richeditor
|
||||||
|
legacyMode: true
|
||||||
stretch: true
|
stretch: true
|
||||||
size: huge
|
size: huge
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{% if __SELF__.menuItems %}
|
{% if __SELF__.menuItems %}
|
||||||
|
<ul>
|
||||||
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
|
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
|
||||||
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
{% for item in items if not item.viewBag.isHidden %}
|
{% for item in items if not item.viewBag.isHidden %}
|
||||||
|
<li role="presentation" class="{{ item.isActive ? 'active' : '' }} {{ item.isChildActive ? 'child-active' : '' }} {{ item.viewBag.cssClass }}">
|
||||||
{% if item.url %}
|
{% if item.url %}
|
||||||
<a class="nav__inner-link {{ item.isActive ? 'active' : '' }}" href="{{ item.url }}" {{ item.viewBag.isExternal ? 'target="_blank"' }}>
|
<a href="{{ item.url }}" {{ item.viewBag.isExternal ? 'target="_blank"' }}>
|
||||||
{{ item.title }}
|
{{ item.title }}
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
@ -10,5 +11,5 @@
|
||||||
{% if item.items %}
|
{% if item.items %}
|
||||||
<ul>{% partial __SELF__ ~ "::items" items=item.items %}</ul>
|
<ul>{% partial __SELF__ ~ "::items" items=item.items %}</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "rainlab/pages-plugin",
|
||||||
|
"type": "october-plugin",
|
||||||
|
"description": "Pages plugin for October CMS",
|
||||||
|
"homepage": "https://octobercms.com/plugin/rainlab-pages",
|
||||||
|
"keywords": ["october", "octobercms", "pages"],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Alexey Bobkov",
|
||||||
|
"email": "aleksey.bobkov@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samuel Georges",
|
||||||
|
"email": "daftspunky@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.9",
|
||||||
|
"composer/installers": "~1.0"
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
||||||
|
|
@ -358,10 +358,18 @@ class Index extends Controller
|
||||||
$object = $this->loadObject($type, trim(Request::input('objectPath')));
|
$object = $this->loadObject($type, trim(Request::input('objectPath')));
|
||||||
|
|
||||||
if ($this->canCommitObject($object)) {
|
if ($this->canCommitObject($object)) {
|
||||||
// Populate the filesystem with the object and then remove it from the db
|
if (class_exists('System')) {
|
||||||
$datasource = $this->getThemeDatasource();
|
// v1.2
|
||||||
$datasource->pushToSource($object, 'filesystem');
|
$datasource = $this->getThemeDatasource();
|
||||||
$datasource->removeFromSource($object, 'database');
|
$datasource->updateModelAtIndex(1, $object);
|
||||||
|
$datasource->forceDeleteModelAtIndex(0, $object);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// v1.1
|
||||||
|
$datasource = $this->getThemeDatasource();
|
||||||
|
$datasource->pushToSource($object, 'filesystem');
|
||||||
|
$datasource->removeFromSource($object, 'database');
|
||||||
|
}
|
||||||
|
|
||||||
Flash::success(Lang::get('cms::lang.editor.commit_success', ['type' => $type]));
|
Flash::success(Lang::get('cms::lang.editor.commit_success', ['type' => $type]));
|
||||||
}
|
}
|
||||||
|
|
@ -381,9 +389,16 @@ class Index extends Controller
|
||||||
$object = $this->loadObject($type, trim(Request::input('objectPath')));
|
$object = $this->loadObject($type, trim(Request::input('objectPath')));
|
||||||
|
|
||||||
if ($this->canResetObject($object)) {
|
if ($this->canResetObject($object)) {
|
||||||
// Remove the object from the DB
|
if (class_exists('System')) {
|
||||||
$datasource = $this->getThemeDatasource();
|
// v1.2
|
||||||
$datasource->removeFromSource($object, 'database');
|
$datasource = $this->getThemeDatasource();
|
||||||
|
$datasource->forceDeleteModelAtIndex(0, $object);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// v1.1
|
||||||
|
$datasource = $this->getThemeDatasource();
|
||||||
|
$datasource->removeFromSource($object, 'database');
|
||||||
|
}
|
||||||
|
|
||||||
Flash::success(Lang::get('cms::lang.editor.reset_success', ['type' => $type]));
|
Flash::success(Lang::get('cms::lang.editor.reset_success', ['type' => $type]));
|
||||||
}
|
}
|
||||||
|
|
@ -423,8 +438,6 @@ class Index extends Controller
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the active theme's datasource
|
* Get the active theme's datasource
|
||||||
*
|
|
||||||
* @return \October\Rain\Halcyon\Datasource\DatasourceInterface
|
|
||||||
*/
|
*/
|
||||||
protected function getThemeDatasource()
|
protected function getThemeDatasource()
|
||||||
{
|
{
|
||||||
|
|
@ -442,11 +455,24 @@ class Index extends Controller
|
||||||
{
|
{
|
||||||
$result = false;
|
$result = false;
|
||||||
|
|
||||||
if (Config::get('app.debug', false) &&
|
if (class_exists('System')) {
|
||||||
Theme::databaseLayerEnabled() &&
|
// v1.2
|
||||||
$this->getThemeDatasource()->sourceHasModel('database', $object)
|
if (
|
||||||
) {
|
Config::get('app.debug', false) &&
|
||||||
$result = true;
|
$this->theme->secondLayerEnabled() &&
|
||||||
|
$this->getThemeDatasource()->hasModelAtIndex(1, $object)
|
||||||
|
) {
|
||||||
|
$result = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// v1.1
|
||||||
|
if (Config::get('app.debug', false) &&
|
||||||
|
Theme::databaseLayerEnabled() &&
|
||||||
|
$this->getThemeDatasource()->sourceHasModel('database', $object)
|
||||||
|
) {
|
||||||
|
$result = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
@ -463,9 +489,20 @@ class Index extends Controller
|
||||||
{
|
{
|
||||||
$result = false;
|
$result = false;
|
||||||
|
|
||||||
if (Theme::databaseLayerEnabled()) {
|
if (class_exists('System')) {
|
||||||
$datasource = $this->getThemeDatasource();
|
// v1.2
|
||||||
$result = $datasource->sourceHasModel('database', $object) && $datasource->sourceHasModel('filesystem', $object);
|
if ($this->theme->secondLayerEnabled()) {
|
||||||
|
$datasource = $this->getThemeDatasource();
|
||||||
|
$result = $datasource->hasModelAtIndex(0, $object) &&
|
||||||
|
$datasource->hasModelAtIndex(1, $object);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// v1.1
|
||||||
|
if (Theme::databaseLayerEnabled()) {
|
||||||
|
$datasource = $this->getThemeDatasource();
|
||||||
|
$result = $datasource->sourceHasModel('database', $object) && $datasource->sourceHasModel('filesystem', $object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
|
|
@ -610,8 +647,8 @@ class Index extends Controller
|
||||||
/*
|
/*
|
||||||
* Translation support
|
* Translation support
|
||||||
*/
|
*/
|
||||||
$translatableTypes = ['text', 'textarea', 'richeditor', 'repeater'];
|
$translatableTypes = ['text', 'textarea', 'richeditor', 'repeater', 'markdown', 'mediafinder'];
|
||||||
if (in_array($fieldConfig['type'], $translatableTypes)) {
|
if (in_array($fieldConfig['type'], $translatableTypes) && array_get($fieldConfig, 'translatable', true)) {
|
||||||
$page->translatable[] = 'viewBag['.$fieldCode.']';
|
$page->translatable[] = 'viewBag['.$fieldCode.']';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -723,7 +760,8 @@ class Index extends Controller
|
||||||
if ($type == 'page') {
|
if ($type == 'page') {
|
||||||
$placeholders = array_get($saveData, 'placeholders');
|
$placeholders = array_get($saveData, 'placeholders');
|
||||||
|
|
||||||
if (is_array($placeholders) && Config::get('cms.convertLineEndings', false) === true) {
|
$comboConfig = Config::get('cms.convertLineEndings', Config::get('system.convert_line_endings', false));
|
||||||
|
if (is_array($placeholders) && $comboConfig === true) {
|
||||||
$placeholders = array_map([$this, 'convertLineEndings'], $placeholders);
|
$placeholders = array_map([$this, 'convertLineEndings'], $placeholders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -756,7 +794,8 @@ class Index extends Controller
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($objectData['markup']) && Config::get('cms.convertLineEndings', false) === true) {
|
$comboConfig = Config::get('cms.convertLineEndings', Config::get('system.convert_line_endings', false));
|
||||||
|
if (!empty($objectData['markup']) && $comboConfig === true) {
|
||||||
$objectData['markup'] = $this->convertLineEndings($objectData['markup']);
|
$objectData['markup'] = $this->convertLineEndings($objectData['markup']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -808,7 +847,25 @@ class Index extends Controller
|
||||||
$alias = Request::input('formWidgetAlias');
|
$alias = Request::input('formWidgetAlias');
|
||||||
$type = Request::input('objectType');
|
$type = Request::input('objectType');
|
||||||
$objectPath = trim(Request::input('objectPath'));
|
$objectPath = trim(Request::input('objectPath'));
|
||||||
$object = $objectPath ? $this->loadObject($type, $objectPath) : $this->createObject($type);
|
|
||||||
|
if (!$objectPath) {
|
||||||
|
$object = $this->createObject($type);
|
||||||
|
|
||||||
|
if ($type === 'page') {
|
||||||
|
/**
|
||||||
|
* If layout is in POST, populate that into the object's viewBag to allow placeholders and syntax
|
||||||
|
* fields to still work when editing a new page.
|
||||||
|
*
|
||||||
|
* Fixes https://github.com/octobercms/october/issues/4628
|
||||||
|
*/
|
||||||
|
$layout = Request::input('viewBag.layout');
|
||||||
|
if ($layout) {
|
||||||
|
$object->getViewBag()->setProperty('layout', $layout);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$object = $this->loadObject($type, $objectPath);
|
||||||
|
}
|
||||||
|
|
||||||
$widget = $this->makeObjectFormWidget($type, $object, $alias);
|
$widget = $this->makeObjectFormWidget($type, $object, $alias);
|
||||||
$widget->bindToController();
|
$widget->bindToController();
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,8 @@
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="btn btn-default empty oc-icon-trash-o <?php if (!$objectPath): ?>hide<?php endif ?>"
|
class="btn btn-default empty oc-icon-trash-o <?php if (!$objectPath): ?>hide<?php endif ?>"
|
||||||
data-request="onDelete"
|
onclick="$.oc.pagesPage.onDeletePageSingle(this)"
|
||||||
data-request-confirm="<?= e(trans('rainlab.pages::lang.page.delete_confirm_single')) ?>"
|
data-request-confirm="<?= e(trans('rainlab.pages::lang.page.delete_confirm_single')) ?>"
|
||||||
data-request-success="$.oc.pagesPage.closeTabs(data, 'page'); $.oc.pagesPage.updateObjectList('page'); $(this).trigger('close.oc.tab', [{force: true}])"
|
|
||||||
data-control="delete-button">
|
data-control="delete-button">
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,28 @@ If you want to link to the static page by its URL, simply use the `|app` filter:
|
||||||
|
|
||||||
<a href="{{ '/chairs'|app }}">Go to Chairs</a>
|
<a href="{{ '/chairs'|app }}">Go to Chairs</a>
|
||||||
|
|
||||||
|
##### Manually displaying a static menu
|
||||||
|
|
||||||
|
When a static menu is first created it will be assigned a file name based on the menu name (menu code can also be manually defined). For example, a menu with the name **Primary Nav** will create a meta file called **menus/primary-nav.yaml** in the theme. This file will not change even if the menu name is changed at a later time.
|
||||||
|
|
||||||
|
To render a static menu based on a menu code from the `staticmenupicker` dropdown form widget:
|
||||||
|
|
||||||
|
You can either define the code property on the staticMenu component.
|
||||||
|
|
||||||
|
{% component 'staticMenu' code=this.theme.primary_menu %}
|
||||||
|
|
||||||
|
Or, use the resetMenu method on the staticMenu component, so we can manually control the menu output without having to create a staticMenu partial override.
|
||||||
|
|
||||||
|
```twig
|
||||||
|
{% set menuItems = staticMenu.resetMenu(this.theme.primary_menu) %}
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{% for item in menuItems %}
|
||||||
|
<li><a href="{{ item.url }}">{{ item.name }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
```
|
||||||
|
|
||||||
##### Backend forms
|
##### Backend forms
|
||||||
|
|
||||||
If you need to select from a list of static pages in your own backend forms, you can use the `staticpagepicker` widget:
|
If you need to select from a list of static pages in your own backend forms, you can use the `staticpagepicker` widget:
|
||||||
|
|
@ -105,6 +127,15 @@ If you need to select from a list of static pages in your own backend forms, you
|
||||||
|
|
||||||
The field's assigned value will be the static page's file name, which can be used to link to the page as described above.
|
The field's assigned value will be the static page's file name, which can be used to link to the page as described above.
|
||||||
|
|
||||||
|
If you need to select from a list of static menus in your own backend forms, you can use the `staticmenupicker` widget:
|
||||||
|
|
||||||
|
fields:
|
||||||
|
field_name:
|
||||||
|
label: Static Menu
|
||||||
|
type: staticmenupicker
|
||||||
|
|
||||||
|
The field's assigned value will be the static menu's code, which can be used to link to the menu as described above.
|
||||||
|
|
||||||
### Placeholders
|
### Placeholders
|
||||||
|
|
||||||
[Placeholders](https://octobercms.com/docs/cms/layouts#placeholders) defined in the layout are automatically detected by the Static Pages plugin. The Edit Static Page form displays a tab for each placeholder defined in the layout used by the page. Placeholders are defined in the layout in the usual way:
|
[Placeholders](https://octobercms.com/docs/cms/layouts#placeholders) defined in the layout are automatically detected by the Static Pages plugin. The Edit Static Page form displays a tab for each placeholder defined in the layout used by the page. Placeholders are defined in the layout in the usual way:
|
||||||
|
|
@ -345,6 +376,24 @@ Any component can be registered as a snippet and be used in Static Pages. To reg
|
||||||
|
|
||||||
A same component can be registered with registerPageSnippets() and registerComponents() and used in CMS pages and Static Pages.
|
A same component can be registered with registerPageSnippets() and registerComponents() and used in CMS pages and Static Pages.
|
||||||
|
|
||||||
|
###### Extending the list of snippets
|
||||||
|
|
||||||
|
If you want to dynamically extend the list of the snippets you can bind to the `pages.snippets.listSnippets` event.
|
||||||
|
|
||||||
|
An example usage to add a snippet to the list:
|
||||||
|
|
||||||
|
Event::listen('pages.snippets.listSnippets', function($manager) {
|
||||||
|
$snippet = new \RainLab\Pages\Classes\Snippet();
|
||||||
|
$snippet->initFromComponentInfo('\Example\Plugin\Components\ComponentClass', 'snippetCode');
|
||||||
|
$manager->addSnippet($snippet);
|
||||||
|
});
|
||||||
|
|
||||||
|
An example usage to remove a snippet from the list:
|
||||||
|
|
||||||
|
Event::listen('pages.snippets.listSnippets', function($manager) {
|
||||||
|
$manager->removeSnippet('snippetCode');
|
||||||
|
});
|
||||||
|
|
||||||
##### Custom page fields
|
##### Custom page fields
|
||||||
|
|
||||||
There is a special syntax you can use inside your layout to add custom fields to the page editor form, called *Syntax Fields*. For example, if you add the following markup to a Layout that uses Static Pages:
|
There is a special syntax you can use inside your layout to add custom fields to the page editor form, called *Syntax Fields*. For example, if you add the following markup to a Layout that uses Static Pages:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?php namespace RainLab\Pages\FormWidgets;
|
||||||
|
|
||||||
|
use Cms\Classes\Theme;
|
||||||
|
use Backend\Classes\FormField;
|
||||||
|
use Backend\Classes\FormWidgetBase;
|
||||||
|
use RainLab\Pages\Classes\Menu;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MenuPicker allows the user to pick from available menus
|
||||||
|
*/
|
||||||
|
class MenuPicker extends FormWidgetBase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->prepareVars();
|
||||||
|
|
||||||
|
return $this->makePartial('~/modules/backend/widgets/form/partials/_field_dropdown.htm');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares the view data
|
||||||
|
*/
|
||||||
|
public function prepareVars()
|
||||||
|
{
|
||||||
|
$this->vars['field'] = $this->makeFormField();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function makeFormField(): FormField
|
||||||
|
{
|
||||||
|
$field = clone $this->formField;
|
||||||
|
$field->type = 'dropdown';
|
||||||
|
$field->options = $this->getOptions();
|
||||||
|
|
||||||
|
return $field;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function getOptions(): array
|
||||||
|
{
|
||||||
|
return Menu::listInTheme(Theme::getEditTheme(), true)
|
||||||
|
->mapWithKeys(function ($menu) {
|
||||||
|
return [
|
||||||
|
$menu->code => $menu->name,
|
||||||
|
];
|
||||||
|
})->toArray();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -91,7 +91,14 @@
|
||||||
// If the saved title is the default new item title, use reference title,
|
// If the saved title is the default new item title, use reference title,
|
||||||
// removing CMS page [base file name] suffix
|
// removing CMS page [base file name] suffix
|
||||||
if (selectedTitle && self.properties.title === self.$popupForm.attr('data-new-item-title')) {
|
if (selectedTitle && self.properties.title === self.$popupForm.attr('data-new-item-title')) {
|
||||||
$titleField.val($.trim(selectedTitle.replace(/\s*\[.*\]$/, '')))
|
var title = $.trim(selectedTitle.replace(/\s*\[.*\]$/, ''))
|
||||||
|
$titleField.val(title)
|
||||||
|
|
||||||
|
// Support for RainLab.Translate
|
||||||
|
var defaultLocale = $('[data-control="multilingual"]').data('default-locale')
|
||||||
|
if (defaultLocale) {
|
||||||
|
$('[name="RLTranslate['+defaultLocale+'][title]"]', self.$popupContainer).val(title)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,12 @@
|
||||||
|
<?php
|
||||||
|
$mediaPath = Config::get('cms.storage.media.path', Config::get('system.storage.media.path', '/storage/app/media'));
|
||||||
|
?>
|
||||||
<div
|
<div
|
||||||
class="layout-absolute"
|
class="layout-absolute"
|
||||||
data-control="menu-item-editor"
|
data-control="menu-item-editor"
|
||||||
data-alias="<?= $this->alias ?>"
|
data-alias="<?= $this->alias ?>"
|
||||||
data-item-properties="<?= e($itemProperties) ?>"
|
data-item-properties="<?= e($itemProperties) ?>"
|
||||||
data-storage-media-path="<?= url(Config::get('cms.storage.media.path')); ?>"
|
data-storage-media-path="<?= Url::to($mediaPath) ?>"
|
||||||
>
|
>
|
||||||
<div class="control-scrollbar" data-control="scrollbar">
|
<div class="control-scrollbar" data-control="scrollbar">
|
||||||
<div class="control-treeview treeview-light"
|
<div class="control-treeview treeview-light"
|
||||||
|
|
|
||||||
|
|
@ -106,14 +106,22 @@ return [
|
||||||
],
|
],
|
||||||
'snippet' => [
|
'snippet' => [
|
||||||
'partialtab' => 'Snippet',
|
'partialtab' => 'Snippet',
|
||||||
|
'settings_popup_title' => 'Static Pages Snippet',
|
||||||
'code' => 'Snippet code',
|
'code' => 'Snippet code',
|
||||||
'code_comment' => 'Enter a code to make this partial available as a snippet in the Static Pages plugin.',
|
'code_comment' => 'Enter a code to make this partial available as a snippet in the Static Pages plugin.',
|
||||||
|
'code_required' => 'Please enter tne snippet code',
|
||||||
'name' => 'Name',
|
'name' => 'Name',
|
||||||
'name_comment' => 'The name is displayed in the snippet list in the Static Pages sidebar and on a Page when a snippet is added.',
|
'name_comment' => 'The name is displayed in the snippet list in the Static Pages sidebar and on a Page when a snippet is added.',
|
||||||
|
'name_required' => 'Please enter tne snippet name',
|
||||||
'no_records' => 'No snippets found',
|
'no_records' => 'No snippets found',
|
||||||
'menu_label' => 'Snippets',
|
'menu_label' => 'Snippets',
|
||||||
'column_property' => 'Property title',
|
'properties' => 'Snippet properties',
|
||||||
|
'column_property' => 'Property Title',
|
||||||
|
'title_required' => 'Please provide the property title',
|
||||||
|
'type_required' => 'Please select the property type',
|
||||||
|
'property_required' => 'Please provide the property name',
|
||||||
'column_type' => 'Type',
|
'column_type' => 'Type',
|
||||||
|
'column_type_placeholder' => 'Select',
|
||||||
'column_code' => 'Code',
|
'column_code' => 'Code',
|
||||||
'column_default' => 'Default',
|
'column_default' => 'Default',
|
||||||
'column_options' => 'Options',
|
'column_options' => 'Options',
|
||||||
|
|
|
||||||
|
|
@ -2,24 +2,24 @@
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'plugin' => [
|
'plugin' => [
|
||||||
'name' => 'Lapok',
|
'name' => 'Oldalak',
|
||||||
'description' => 'Lapok, menük és kódrészletek menedzselése.'
|
'description' => 'Oldalak, menük, tartalmak és kódrészletek menedzselése.'
|
||||||
],
|
],
|
||||||
'page' => [
|
'page' => [
|
||||||
'menu_label' => 'Lapok',
|
'menu_label' => 'Oldalak',
|
||||||
'template_title' => '%s Lapok',
|
'template_title' => '%s Oldalak',
|
||||||
'delete_confirmation' => 'Valóban törölni akarja a kijelölt lapokat? Ez az allapokat is törölni fogja.',
|
'delete_confirmation' => 'Valóban törölni akarja a kijelölt oldalakat és azok aloldalait?',
|
||||||
'no_records' => 'Nem található lap',
|
'no_records' => 'Nincs létrehozva oldal',
|
||||||
'delete_confirm_single' => 'Valóban törölni akarja ezt a lapot? Ez az allapokat is törölni fogja.',
|
'delete_confirm_single' => 'Valóban törölni akarja ezt az oldalt és aloldalait?',
|
||||||
'new' => 'Új lap',
|
'new' => 'Új oldal',
|
||||||
'add_subpage' => 'Allap hozzáadása',
|
'add_subpage' => 'Aloldal hozzáadása',
|
||||||
'invalid_url' => 'Érvénytelen a webcím formátuma. Perjellel kell kezdődnie, és számokat, latin betűket, valamint a következő szimbólumokat tartalmazhatja: _-/.',
|
'invalid_url' => 'Érvénytelen a webcím formátuma. Perjellel kell kezdődnie, és számokat, latin betűket, valamint a következő szimbólumokat tartalmazhatja: _-/.',
|
||||||
'url_not_unique' => 'Már használja egy másik lap ezt a webcímet.',
|
'url_not_unique' => 'Egy másik oldal már használja ezt a webcímet.',
|
||||||
'layout' => 'Elrendezés',
|
'layout' => 'Elrendezés',
|
||||||
'layouts_not_found' => 'Nem található elrendezés.',
|
'layouts_not_found' => 'Nincs létrehozva elrendezés.',
|
||||||
'saved' => 'A lap mentése sikerült.',
|
'saved' => 'Az oldal mentése sikerült.',
|
||||||
'tab' => 'Lapok',
|
'tab' => 'Oldalak',
|
||||||
'manage_pages' => 'Lapok kezelése',
|
'manage_pages' => 'Oldalak kezelése',
|
||||||
'manage_menus' => 'Menük kezelése',
|
'manage_menus' => 'Menük kezelése',
|
||||||
'access_snippets' => 'Kódrészletek kezelése',
|
'access_snippets' => 'Kódrészletek kezelése',
|
||||||
'manage_content' => 'Tartalom kezelése'
|
'manage_content' => 'Tartalom kezelése'
|
||||||
|
|
@ -27,7 +27,7 @@ return [
|
||||||
'menu' => [
|
'menu' => [
|
||||||
'menu_label' => 'Menük',
|
'menu_label' => 'Menük',
|
||||||
'delete_confirmation' => 'Valóban törölni akarja a kijelölt menüket?',
|
'delete_confirmation' => 'Valóban törölni akarja a kijelölt menüket?',
|
||||||
'no_records' => 'Nem található menü',
|
'no_records' => 'Nincs létrehozva menü',
|
||||||
'new' => 'Új menü',
|
'new' => 'Új menü',
|
||||||
'new_name' => 'Új menü',
|
'new_name' => 'Új menü',
|
||||||
'new_code' => 'uj-menu',
|
'new_code' => 'uj-menu',
|
||||||
|
|
@ -36,7 +36,7 @@ return [
|
||||||
'name' => 'Név',
|
'name' => 'Név',
|
||||||
'code' => 'Kód',
|
'code' => 'Kód',
|
||||||
'items' => 'Menüpont',
|
'items' => 'Menüpont',
|
||||||
'add_subitem' => 'Almenüpont hozzáadása',
|
'add_subitem' => 'Almenü hozzáadása',
|
||||||
'code_required' => 'A Kód kötelező',
|
'code_required' => 'A Kód kötelező',
|
||||||
'invalid_code' => 'Érvénytelen a kód formátuma. Csak számokat, latin betűket és a következő szimbólumokat tartalmazhatja: _-'
|
'invalid_code' => 'Érvénytelen a kód formátuma. Csak számokat, latin betűket és a következő szimbólumokat tartalmazhatja: _-'
|
||||||
],
|
],
|
||||||
|
|
@ -45,7 +45,7 @@ return [
|
||||||
'editor_title' => 'Menüpont szerkesztése',
|
'editor_title' => 'Menüpont szerkesztése',
|
||||||
'type' => 'Típus',
|
'type' => 'Típus',
|
||||||
'allow_nested_items' => 'Beágyazott menüpontok engedélyezése',
|
'allow_nested_items' => 'Beágyazott menüpontok engedélyezése',
|
||||||
'allow_nested_items_comment' => 'A beágyazott menüpontokat a lap és néhány más menüpont típus dinamikusan generálhatja',
|
'allow_nested_items_comment' => 'A beágyazott menüpontokat az oldal és néhány más menüpont típus dinamikusan generálhatja',
|
||||||
'url' => 'Webcím',
|
'url' => 'Webcím',
|
||||||
'reference' => 'Hivatkozás',
|
'reference' => 'Hivatkozás',
|
||||||
'search_placeholder' => 'Keresés...',
|
'search_placeholder' => 'Keresés...',
|
||||||
|
|
@ -56,18 +56,27 @@ return [
|
||||||
'new_item' => 'Új menüpont',
|
'new_item' => 'Új menüpont',
|
||||||
'replace' => 'A menüpont kicserélése a generált gyermekeire',
|
'replace' => 'A menüpont kicserélése a generált gyermekeire',
|
||||||
'replace_comment' => 'Ennek a jelölőnégyzetnek a használatával viheti a generált menüpontokat az ezen menüpont által azonos szintre. Maga ez a menüpont rejtett marad.',
|
'replace_comment' => 'Ennek a jelölőnégyzetnek a használatával viheti a generált menüpontokat az ezen menüpont által azonos szintre. Maga ez a menüpont rejtett marad.',
|
||||||
'cms_page' => 'Lap',
|
'cms_page' => 'Oldal',
|
||||||
'cms_page_comment' => 'Válassza ki a menüpontra kattintáskor megnyitni kívánt lapot.',
|
'cms_page_comment' => 'Válassza ki a menüre kattintáskor megnyitni kívánt oldalt.',
|
||||||
'reference_required' => 'A menüpont hivatkozás kitöltése kötelező.',
|
'reference_required' => 'A menüpont hivatkozás kitöltése kötelező.',
|
||||||
'url_required' => 'A webcím megadása kötelező',
|
'url_required' => 'A webcím megadása kötelező',
|
||||||
'cms_page_required' => 'Válasszon egy lapot',
|
'cms_page_required' => 'Válasszon egy oldalt',
|
||||||
|
'display_tab' => 'Megjelenés',
|
||||||
|
'hidden' => 'Rejtett',
|
||||||
|
'hidden_comment' => 'Nem jelenik meg a felhasználói felületen.',
|
||||||
|
'attributes_tab' => 'Tulajdonságok',
|
||||||
'code' => 'Kód',
|
'code' => 'Kód',
|
||||||
'code_comment' => 'Adja meg a menüpont kódját, ha az API-val akarja elérni.',
|
'code_comment' => 'Az API eléréshez szükséges egyedi azonosító.',
|
||||||
'static_page' => 'Lapok',
|
'css_class' => 'CSS osztály',
|
||||||
'all_static_pages' => 'Összes lap'
|
'css_class_comment' => 'Egyedi megjelenés esetén szükséges megadni.',
|
||||||
|
'external_link' => 'Külső hivatkozás',
|
||||||
|
'external_link_comment' => 'A link új ablakban fog megjelenni.',
|
||||||
|
'static_page' => 'Oldalak',
|
||||||
|
'all_static_pages' => 'Összes oldal'
|
||||||
],
|
],
|
||||||
'content' => [
|
'content' => [
|
||||||
'menu_label' => 'Tartalom',
|
'menu_label' => 'Tartalom',
|
||||||
|
'saved' => 'A tartalom mentése sikerült.',
|
||||||
'cant_save_to_dir' => 'A fájlok mentése a "static-pages" könyvtárba nem engedélyezett.'
|
'cant_save_to_dir' => 'A fájlok mentése a "static-pages" könyvtárba nem engedélyezett.'
|
||||||
],
|
],
|
||||||
'sidebar' => [
|
'sidebar' => [
|
||||||
|
|
@ -76,11 +85,12 @@ return [
|
||||||
],
|
],
|
||||||
'object' => [
|
'object' => [
|
||||||
'invalid_type' => 'Ismeretlen objektumtípus',
|
'invalid_type' => 'Ismeretlen objektumtípus',
|
||||||
|
'unauthorized_type' => 'Nem jogosult a következő objektum(ok) kezelésére: :type',
|
||||||
'not_found' => 'A kért objektum nem található.'
|
'not_found' => 'A kért objektum nem található.'
|
||||||
],
|
],
|
||||||
'editor' => [
|
'editor' => [
|
||||||
'title' => 'Cím',
|
'title' => 'Cím',
|
||||||
'new_title' => 'Új lap címe',
|
'new_title' => 'Új oldal címe',
|
||||||
'content' => 'Tartalom',
|
'content' => 'Tartalom',
|
||||||
'url' => 'Webcím',
|
'url' => 'Webcím',
|
||||||
'filename' => 'Fájlnév',
|
'filename' => 'Fájlnév',
|
||||||
|
|
@ -90,17 +100,17 @@ return [
|
||||||
'enter_fullscreen' => 'Váltás teljes képernyős módra',
|
'enter_fullscreen' => 'Váltás teljes képernyős módra',
|
||||||
'exit_fullscreen' => 'Kilépés a teljes képernyős módból',
|
'exit_fullscreen' => 'Kilépés a teljes képernyős módból',
|
||||||
'hidden' => 'Rejtett',
|
'hidden' => 'Rejtett',
|
||||||
'hidden_comment' => 'A rejtett lapokhoz csak a bejelentkezett kiszolgáló oldali felhasználók férhetnek hozzá.',
|
'hidden_comment' => 'A rejtett oldalakhoz csak a bejelentkezett kiszolgáló oldali felhasználók férhetnek hozzá.',
|
||||||
'navigation_hidden' => 'Elrejtés a navigációban',
|
'navigation_hidden' => 'Elrejtés a navigációban',
|
||||||
'navigation_hidden_comment' => 'Jelölje be ezt a jelölőnégyzetet ennek a lapnak az automatikusan generált menükből és útkövetésekből való elrejtéséhez.'
|
'navigation_hidden_comment' => 'Jelölje be ezt a jelölőnégyzetet ennek a oldalnak az automatikusan generált menükből és útkövetésekből való elrejtéséhez.'
|
||||||
],
|
],
|
||||||
'snippet' => [
|
'snippet' => [
|
||||||
'partialtab' => 'Kódrészlet',
|
'partialtab' => 'Kódrészlet',
|
||||||
'code' => 'Kódrészlet kódja',
|
'code' => 'Kódrészlet kódja',
|
||||||
'code_comment' => 'Adja meg a kódot, hogy a jelenlegi részlap elérhető legyen kódrészletként a Lapok bővítményben.',
|
'code_comment' => 'Adja meg a kódot, hogy a jelenlegi részlap elérhető legyen kódrészletként a Oldalak bővítményben.',
|
||||||
'name' => 'Név',
|
'name' => 'Név',
|
||||||
'name_comment' => 'A Kódrészletek listában jelenik meg a Lapok oldalsó menüjében, valamint a Lapok aloldalon.',
|
'name_comment' => 'A Kódrészletek listában jelenik meg a Oldalak oldalsó menüjében, valamint a Oldalak aloldalon.',
|
||||||
'no_records' => 'Nem található kódrészlet',
|
'no_records' => 'Nincs létrehozva kódrészlet',
|
||||||
'menu_label' => 'Kódrészletek',
|
'menu_label' => 'Kódrészletek',
|
||||||
'column_property' => 'Cím',
|
'column_property' => 'Cím',
|
||||||
'column_type' => 'Típus',
|
'column_type' => 'Típus',
|
||||||
|
|
@ -115,19 +125,21 @@ return [
|
||||||
'invalid_option_key' => 'Érvénytelen formátum: :key. Csak számokat, latin betűket és a következő szimbólumokat tartalmazhatja: _-'
|
'invalid_option_key' => 'Érvénytelen formátum: :key. Csak számokat, latin betűket és a következő szimbólumokat tartalmazhatja: _-'
|
||||||
],
|
],
|
||||||
'component' => [
|
'component' => [
|
||||||
'static_page_name' => 'Statikus lap',
|
'static_page_name' => 'Statikus oldal',
|
||||||
'static_page_description' => 'Lapok megjelenítése.',
|
'static_page_description' => 'Oldalak megjelenítése.',
|
||||||
'static_page_use_content_name' => 'Tartalom mező használata',
|
'static_page_use_content_name' => 'Tartalom mező használata',
|
||||||
'static_page_use_content_description' => 'Ha nem engedélyezi ezt, akkor a tartalmi rész nem fog megjelenni a lap szerkesztésénél. A lap tartalmát kizárólag a változók fogják meghatározni.',
|
'static_page_use_content_description' => 'Ha nem engedélyezi ezt, akkor a tartalmi rész nem fog megjelenni az oldal szerkesztésénél. Az oldal tartalmát kizárólag a változók fogják meghatározni.',
|
||||||
'static_page_default_name' => 'Alapértelmezett elrendezés',
|
'static_page_default_name' => 'Alapértelmezett elrendezés',
|
||||||
'static_page_default_description' => 'Minden új lap ezt az elrendezést használja alapértelmezettként.',
|
'static_page_default_description' => 'Minden új oldal ezt az elrendezést fogja hasznáni alapértelmezettként.',
|
||||||
'static_page_child_layout_name' => 'Allap elrendezés',
|
'static_page_child_layout_name' => 'Aloldal elrendezés',
|
||||||
'static_page_child_layout_description' => 'Minden új allap ezt az elrendezést használja alapértelmezettként.',
|
'static_page_child_layout_description' => 'Minden új aloldal ezt az elrendezést fogja használni alapértelmezettként.',
|
||||||
'static_menu_name' => 'Statikus menü',
|
'static_menu_name' => 'Statikus menü',
|
||||||
'static_menu_description' => 'Menük megjelenítése.',
|
'static_menu_description' => 'Menük megjelenítése.',
|
||||||
'static_menu_code_name' => 'Menü',
|
'static_menu_code_name' => 'Menü',
|
||||||
'static_menu_code_description' => 'Speciális kód a megjelenő menünek.',
|
'static_menu_code_description' => 'Speciális kód a megjelenő menünek.',
|
||||||
'static_breadcrumbs_name' => 'Statikus kenyérmorzsa',
|
'static_breadcrumbs_name' => 'Statikus kenyérmorzsa',
|
||||||
'static_breadcrumbs_description' => 'Kenyérmorzsa megjelenítése.',
|
'static_breadcrumbs_description' => 'Kenyérmorzsa megjelenítése.',
|
||||||
|
'child_pages_name' => 'Aloldalak',
|
||||||
|
'child_pages_description' => 'Megjeleníti az aktuális oldal aloldalainak listáját.',
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -53,3 +53,7 @@
|
||||||
1.3.4: Fix error where large menus were being truncated due to the PHP "max_input_vars" configuration value. Improved Slovenian translation.
|
1.3.4: Fix error where large menus were being truncated due to the PHP "max_input_vars" configuration value. Improved Slovenian translation.
|
||||||
1.3.5: Minor fix to bust the browser cache for JS assets. Prevent duplicate property fields in snippet inspector.
|
1.3.5: Minor fix to bust the browser cache for JS assets. Prevent duplicate property fields in snippet inspector.
|
||||||
1.3.6: ChildPages component now displays localized page titles from Translate plugin.
|
1.3.6: ChildPages component now displays localized page titles from Translate plugin.
|
||||||
|
1.3.7: Adds MenuPicker formwidget. Adds future support for v2.0 of October CMS.
|
||||||
|
1.4.0: Fixes bug when adding menu items in October CMS v2.0.
|
||||||
|
1.4.1: Fixes support for configuration values.
|
||||||
|
1.4.3: Fixes page deletion is newer platform builds.
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
/vendor
|
||||||
|
composer.lock
|
||||||
|
.DS_Store
|
||||||
|
.phpunit.result.cache
|
||||||
|
|
@ -67,6 +67,34 @@ class Plugin extends PluginBase
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Extension logic for October CMS v1.0
|
||||||
|
*/
|
||||||
|
if (!class_exists('System')) {
|
||||||
|
$this->extendLegacyPlatform();
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Extension logic for October CMS v2.0
|
||||||
|
*/
|
||||||
|
else {
|
||||||
|
Event::listen('cms.theme.createThemeDataModel', function($attributes) {
|
||||||
|
return new \RainLab\Translate\Models\MLThemeData($attributes);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Register console commands
|
||||||
|
*/
|
||||||
|
$this->registerConsoleCommand('translate.scan', 'Rainlab\Translate\Console\ScanCommand');
|
||||||
|
|
||||||
|
$this->registerAssetBundles();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extendLegacyPlatform will add the legacy features expected in v1.0
|
||||||
|
*/
|
||||||
|
protected function extendLegacyPlatform()
|
||||||
|
{
|
||||||
/*
|
/*
|
||||||
* Add translation support to file models
|
* Add translation support to file models
|
||||||
*/
|
*/
|
||||||
|
|
@ -106,13 +134,6 @@ class Plugin extends PluginBase
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
|
||||||
* Register console commands
|
|
||||||
*/
|
|
||||||
$this->registerConsoleCommand('translate.scan', 'Rainlab\Translate\Console\ScanCommand');
|
|
||||||
|
|
||||||
$this->registerAssetBundles();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function boot()
|
public function boot()
|
||||||
|
|
@ -290,13 +311,17 @@ class Plugin extends PluginBase
|
||||||
|
|
||||||
public function registerFormWidgets()
|
public function registerFormWidgets()
|
||||||
{
|
{
|
||||||
|
$mediaFinderClass = class_exists('System')
|
||||||
|
? 'RainLab\Translate\FormWidgets\MLMediaFinderv2'
|
||||||
|
: 'RainLab\Translate\FormWidgets\MLMediaFinder';
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'RainLab\Translate\FormWidgets\MLText' => 'mltext',
|
'RainLab\Translate\FormWidgets\MLText' => 'mltext',
|
||||||
'RainLab\Translate\FormWidgets\MLTextarea' => 'mltextarea',
|
'RainLab\Translate\FormWidgets\MLTextarea' => 'mltextarea',
|
||||||
'RainLab\Translate\FormWidgets\MLRichEditor' => 'mlricheditor',
|
'RainLab\Translate\FormWidgets\MLRichEditor' => 'mlricheditor',
|
||||||
'RainLab\Translate\FormWidgets\MLMarkdownEditor' => 'mlmarkdowneditor',
|
'RainLab\Translate\FormWidgets\MLMarkdownEditor' => 'mlmarkdowneditor',
|
||||||
'RainLab\Translate\FormWidgets\MLRepeater' => 'mlrepeater',
|
'RainLab\Translate\FormWidgets\MLRepeater' => 'mlrepeater',
|
||||||
'RainLab\Translate\FormWidgets\MLMediaFinder' => 'mlmediafinder',
|
$mediaFinderClass => 'mlmediafinder',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,7 @@
|
||||||
|
|
||||||
use Db;
|
use Db;
|
||||||
use DbDongle;
|
use DbDongle;
|
||||||
use RainLab\Translate\Classes\Translator;
|
|
||||||
use RainLab\Translate\Classes\TranslatableBehavior;
|
use RainLab\Translate\Classes\TranslatableBehavior;
|
||||||
use ApplicationException;
|
|
||||||
use Exception;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translatable model extension
|
* Translatable model extension
|
||||||
|
|
@ -29,6 +26,30 @@ class TranslatableModel extends TranslatableBehavior
|
||||||
'RainLab\Translate\Models\Attribute',
|
'RainLab\Translate\Models\Attribute',
|
||||||
'name' => 'model'
|
'name' => 'model'
|
||||||
];
|
];
|
||||||
|
|
||||||
|
// October v2.0
|
||||||
|
if (class_exists('System')) {
|
||||||
|
$this->extendFileModels('attachOne');
|
||||||
|
$this->extendFileModels('attachMany');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* extendFileModels will swap the standard File model with MLFile instead
|
||||||
|
*/
|
||||||
|
protected function extendFileModels(string $relationGroup): void
|
||||||
|
{
|
||||||
|
foreach ($this->model->$relationGroup as $relationName => $relationObj) {
|
||||||
|
$relationClass = is_array($relationObj) ? $relationObj[0] : $relationObj;
|
||||||
|
if ($relationClass === \System\Models\File::class) {
|
||||||
|
if (is_array($relationObj)) {
|
||||||
|
$this->model->$relationGroup[$relationName][0] = \RainLab\Translate\Models\MLFile::class;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->model->$relationGroup[$relationName] = \RainLab\Translate\Models\MLFile::class;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -326,6 +326,10 @@ abstract class TranslatableBehavior extends ExtensionBase
|
||||||
{
|
{
|
||||||
$translatable = [];
|
$translatable = [];
|
||||||
|
|
||||||
|
if (!is_array($this->model->translatable)) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($this->model->translatable as $attribute) {
|
foreach ($this->model->translatable as $attribute) {
|
||||||
$translatable[] = is_array($attribute) ? array_shift($attribute) : $attribute;
|
$translatable[] = is_array($attribute) ? array_shift($attribute) : $attribute;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ class Translator
|
||||||
}
|
}
|
||||||
|
|
||||||
App::setLocale($locale);
|
App::setLocale($locale);
|
||||||
|
|
||||||
$this->activeLocale = $locale;
|
$this->activeLocale = $locale;
|
||||||
|
|
||||||
if ($remember) {
|
if ($remember) {
|
||||||
|
|
|
||||||
|
|
@ -54,11 +54,12 @@ class AlternateHrefLangElements extends ComponentBase
|
||||||
$router = new RainRouter;
|
$router = new RainRouter;
|
||||||
$params = $this->getRouter()->getParameters();
|
$params = $this->getRouter()->getParameters();
|
||||||
|
|
||||||
$translatedParams = Event::fire(
|
$translatedParams = Event::fire('translate.localePicker.translateParams', [
|
||||||
'translate.localePicker.translateParams',
|
$page,
|
||||||
[$page, $params, $this->oldLocale, $locale],
|
$params,
|
||||||
true
|
$this->oldLocale,
|
||||||
);
|
$locale
|
||||||
|
], true);
|
||||||
|
|
||||||
if ($translatedParams) {
|
if ($translatedParams) {
|
||||||
$params = $translatedParams;
|
$params = $translatedParams;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<?php namespace RainLab\Translate\Components;
|
<?php namespace RainLab\Translate\Components;
|
||||||
use Log;
|
|
||||||
use Event;
|
use Event;
|
||||||
use Config;
|
use Config;
|
||||||
use Request;
|
use Request;
|
||||||
|
|
@ -64,7 +64,6 @@ class LocalePicker extends ComponentBase
|
||||||
public function onRun()
|
public function onRun()
|
||||||
{
|
{
|
||||||
if ($redirect = $this->redirectForceUrl()) {
|
if ($redirect = $this->redirectForceUrl()) {
|
||||||
|
|
||||||
return $redirect;
|
return $redirect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -76,7 +75,6 @@ class LocalePicker extends ComponentBase
|
||||||
public function onSwitchLocale()
|
public function onSwitchLocale()
|
||||||
{
|
{
|
||||||
if (!$locale = post('locale')) {
|
if (!$locale = post('locale')) {
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,8 +88,6 @@ class LocalePicker extends ComponentBase
|
||||||
return Redirect::to($this->translator->getPathInLocale($pageUrl, $locale));
|
return Redirect::to($this->translator->getPathInLocale($pageUrl, $locale));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Log::error($pageUrl);
|
|
||||||
//return $pageUrl;
|
|
||||||
return Redirect::to($pageUrl);
|
return Redirect::to($pageUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -137,7 +133,6 @@ class LocalePicker extends ComponentBase
|
||||||
* Static Page
|
* Static Page
|
||||||
*/
|
*/
|
||||||
if (isset($page->apiBag['staticPage'])) {
|
if (isset($page->apiBag['staticPage'])) {
|
||||||
|
|
||||||
$staticPage = $page->apiBag['staticPage'];
|
$staticPage = $page->apiBag['staticPage'];
|
||||||
|
|
||||||
$staticPage->rewriteTranslatablePageUrl($locale);
|
$staticPage->rewriteTranslatablePageUrl($locale);
|
||||||
|
|
@ -169,8 +164,12 @@ class LocalePicker extends ComponentBase
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
$translatedParams = Event::fire('translate.localePicker.translateParams',
|
$translatedParams = Event::fire('translate.localePicker.translateParams', [
|
||||||
[$page, $params, $this->oldLocale, $locale], true);
|
$page,
|
||||||
|
$params,
|
||||||
|
$this->oldLocale,
|
||||||
|
$locale
|
||||||
|
], true);
|
||||||
|
|
||||||
if ($translatedParams) {
|
if ($translatedParams) {
|
||||||
$params = $translatedParams;
|
$params = $translatedParams;
|
||||||
|
|
@ -210,8 +209,12 @@ class LocalePicker extends ComponentBase
|
||||||
* });
|
* });
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
$translatedQuery = Event::fire('translate.localePicker.translateQuery',
|
$translatedQuery = Event::fire('translate.localePicker.translateQuery', [
|
||||||
[$page, $query, $this->oldLocale, $locale], true);
|
$page,
|
||||||
|
$query,
|
||||||
|
$this->oldLocale,
|
||||||
|
$locale
|
||||||
|
], true);
|
||||||
|
|
||||||
$query = http_build_query($translatedQuery ?: $query);
|
$query = http_build_query($translatedQuery ?: $query);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
"name": "rainlab/translate-plugin",
|
||||||
|
"type": "october-plugin",
|
||||||
|
"description": "Translate plugin for October CMS",
|
||||||
|
"homepage": "https://octobercms.com/plugin/rainlab-translate",
|
||||||
|
"keywords": ["october", "octobercms", "translate"],
|
||||||
|
"license": "MIT",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Alexey Bobkov",
|
||||||
|
"email": "aleksey.bobkov@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Samuel Georges",
|
||||||
|
"email": "daftspunky@gmail.com",
|
||||||
|
"role": "Co-founder"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.5.9",
|
||||||
|
"composer/installers": "~1.0"
|
||||||
|
},
|
||||||
|
"minimum-stability": "dev"
|
||||||
|
}
|
||||||
|
|
@ -1,38 +1,50 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
return [
|
return [
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Prefix the default Locale
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Should the default locale be prefixed by the plugin?
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
'prefixDefaultLocale' => true,
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Cache timeout in minutes
|
| Force the Default Locale
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Always use the defined locale code as the default.
|
||||||
|
| Related to https://github.com/rainlab/translate-plugin/issues/231
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'forceDefaultLocale' => env('TRANSLATE_FORCE_LOCALE', null),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Prefix the Default Locale
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Specifies if the default locale be prefixed by the plugin.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
'prefixDefaultLocale' => env('TRANSLATE_PREFIX_LOCALE', true),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Cache Timeout in Minutes
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| By default all translations are cached for 24 hours (1440 min).
|
| By default all translations are cached for 24 hours (1440 min).
|
||||||
| This setting allows to change that period with given amount of minutes.
|
| This setting allows to change that period with given amount of minutes.
|
||||||
|
|
|
|
||||||
| ( For example 43200 for 30 days or 525600 for one year )
|
| For example, 43200 for 30 days or 525600 for one year.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'cacheTimeout' => 1440,
|
'cacheTimeout' => env('TRANSLATE_CACHE_TIMEOUT', 1440),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Disable locale prefix routes
|
| Disable Locale Prefix Routes
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Disables the automatically generated locale prefixed routes
|
| Disables the automatically generated locale prefixed routes
|
||||||
| (i.e. /en/original-route) when enabled.
|
| (i.e. /en/original-route) when enabled.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
'disableLocalePrefixRoutes' => false,
|
'disableLocalePrefixRoutes' => env('TRANSLATE_DISABLE_PREFIX_ROUTES', false),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
name="purge_messages"
|
name="purge_messages"
|
||||||
value="1"
|
value="1"
|
||||||
id="purgeMessages">
|
id="purgeMessages">
|
||||||
<label for="purgeMessages">
|
<label for="purgeMessages" class="storm-icon-pseudo">
|
||||||
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_label')) ?>
|
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_label')) ?>
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">
|
<p class="help-block">
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
name="purge_deleted_messages"
|
name="purge_deleted_messages"
|
||||||
value="1"
|
value="1"
|
||||||
id="purgeDeletedMessages">
|
id="purgeDeletedMessages">
|
||||||
<label for="purgeDeletedMessages">
|
<label for="purgeDeletedMessages" class="storm-icon-pseudo">
|
||||||
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_deleted_label')) ?>
|
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_deleted_label')) ?>
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">
|
<p class="help-block">
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,104 @@
|
||||||
|
<?php namespace RainLab\Translate\FormWidgets;
|
||||||
|
|
||||||
|
use Media\Classes\MediaLibrary;
|
||||||
|
use Media\FormWidgets\MediaFinder;
|
||||||
|
use RainLab\Translate\Models\Locale;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MLMediaFinderv2 renders a multilingual media finder for October CMS v2
|
||||||
|
*
|
||||||
|
* @package rainlab\translate
|
||||||
|
* @author Sascha Aeppli
|
||||||
|
*/
|
||||||
|
class MLMediaFinderv2 extends MediaFinder
|
||||||
|
{
|
||||||
|
use \RainLab\Translate\Traits\MLControl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
protected $defaultAlias = 'mlmediafinder';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* needed to preview images, because we only get a relative path
|
||||||
|
* @var string path to media library
|
||||||
|
*/
|
||||||
|
private $mediaPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function init()
|
||||||
|
{
|
||||||
|
parent::init();
|
||||||
|
$this->initLocale();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function render()
|
||||||
|
{
|
||||||
|
$this->actAsParent();
|
||||||
|
$parentContent = parent::render();
|
||||||
|
$this->actAsParent(false);
|
||||||
|
|
||||||
|
if (!$this->isAvailable) {
|
||||||
|
return $parentContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->vars['mediafinder'] = $parentContent;
|
||||||
|
return $this->makePartial('mlmediafinder');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares the form widget view data
|
||||||
|
*/
|
||||||
|
public function prepareVars()
|
||||||
|
{
|
||||||
|
parent::prepareVars();
|
||||||
|
$this->prepareLocaleVars();
|
||||||
|
// make root path of media files accessible
|
||||||
|
$this->vars['mediaPath'] = $this->mediaPath = MediaLibrary::url('/');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getSaveValue($value)
|
||||||
|
{
|
||||||
|
return $this->getLocaleSaveValue($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function loadAssets()
|
||||||
|
{
|
||||||
|
$this->actAsParent();
|
||||||
|
parent::loadAssets();
|
||||||
|
$this->actAsParent(false);
|
||||||
|
|
||||||
|
if (Locale::isAvailable()) {
|
||||||
|
$this->loadLocaleAssets();
|
||||||
|
$this->addJs('../../mlmediafinder/assets/js/mlmediafinder.js');
|
||||||
|
$this->addCss('../../mlmediafinder/assets/css/mlmediafinder.css');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected function getParentViewPath()
|
||||||
|
{
|
||||||
|
return base_path().'/modules/media/formwidgets/mediafinder/partials';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
protected function getParentAssetPath()
|
||||||
|
{
|
||||||
|
return '/modules/media/formwidgets/mediafinder/assets';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,11 @@ class MLRichEditor extends RichEditor
|
||||||
public $originalAssetPath;
|
public $originalAssetPath;
|
||||||
public $originalViewPath;
|
public $originalViewPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool legacyMode disables the Vue integration
|
||||||
|
*/
|
||||||
|
public $legacyMode = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
<!-- ML MediaFinder -->
|
||||||
|
<div
|
||||||
|
id="<?= $this->getId('mlControl') ?>"
|
||||||
|
data-control="mlmediafinder"
|
||||||
|
data-default-locale="<?= $defaultLocale->code ?>"
|
||||||
|
data-media-path="<?= $mediaPath ?>"
|
||||||
|
class="field-multilingual field-multilingual-mediafinder dropdown"
|
||||||
|
>
|
||||||
|
|
||||||
|
<?= $mediafinder ?>
|
||||||
|
|
||||||
|
<button
|
||||||
|
class="btn btn-default ml-btn"
|
||||||
|
data-toggle="dropdown"
|
||||||
|
data-active-locale
|
||||||
|
type="button">
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<?= $this->makeMLPartial('locale_values') ?>
|
||||||
|
|
||||||
|
<?= $this->makeMLPartial('locale_selector') ?>
|
||||||
|
</div>
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
<?php namespace RainLab\Translate\Models;
|
<?php namespace RainLab\Translate\Models;
|
||||||
|
|
||||||
use Lang;
|
use Lang;
|
||||||
use File;
|
|
||||||
use Cache;
|
use Cache;
|
||||||
use Model;
|
use Model;
|
||||||
use Config;
|
use Config;
|
||||||
|
|
@ -49,7 +48,7 @@ class Locale extends Model
|
||||||
/**
|
/**
|
||||||
* @var self Default locale cache.
|
* @var self Default locale cache.
|
||||||
*/
|
*/
|
||||||
private static $defaultLocale;
|
protected static $defaultLocale;
|
||||||
|
|
||||||
public function afterCreate()
|
public function afterCreate()
|
||||||
{
|
{
|
||||||
|
|
@ -100,6 +99,13 @@ class Locale extends Model
|
||||||
return self::$defaultLocale;
|
return self::$defaultLocale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($forceDefault = Config::get('rainlab.translate::forceDefaultLocale')) {
|
||||||
|
$locale = new self;
|
||||||
|
$locale->name = $locale->code = $forceDefault;
|
||||||
|
$locale->is_default = $locale->is_enabled = true;
|
||||||
|
return self::$defaultLocale = $locale;
|
||||||
|
}
|
||||||
|
|
||||||
return self::$defaultLocale = self::where('is_default', true)
|
return self::$defaultLocale = self::where('is_default', true)
|
||||||
->remember(1440, 'rainlab.translate.defaultLocale')
|
->remember(1440, 'rainlab.translate.defaultLocale')
|
||||||
->first()
|
->first()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php namespace RainLab\Translate\Models;
|
||||||
|
|
||||||
|
use System\Models\File as FileBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MLFile makes file attachments translatable
|
||||||
|
*
|
||||||
|
* @package rainlab\translate
|
||||||
|
* @author Alexey Bobkov, Samuel Georges
|
||||||
|
*/
|
||||||
|
class MLFile extends FileBase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array implement behaviors
|
||||||
|
*/
|
||||||
|
public $implement = [
|
||||||
|
\RainLab\Translate\Behaviors\TranslatableModel::class
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array translatable attributes
|
||||||
|
*/
|
||||||
|
public $translatable = ['title', 'description'];
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,39 @@
|
||||||
|
<?php namespace RainLab\Translate\Models;
|
||||||
|
|
||||||
|
use Cms\Models\ThemeData as ThemeDataBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MLThemeData makes theme data translatable
|
||||||
|
*
|
||||||
|
* @package rainlab\translate
|
||||||
|
* @author Alexey Bobkov, Samuel Georges
|
||||||
|
*/
|
||||||
|
class MLThemeData extends ThemeDataBase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var array implement behaviors
|
||||||
|
*/
|
||||||
|
public $implement = [
|
||||||
|
\RainLab\Translate\Behaviors\TranslatableModel::class
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array translatable attributes
|
||||||
|
*/
|
||||||
|
public $translatable = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* afterFetch event
|
||||||
|
*/
|
||||||
|
public function afterFetch()
|
||||||
|
{
|
||||||
|
parent::afterFetch();
|
||||||
|
|
||||||
|
// Splice in translations
|
||||||
|
foreach ($this->getFormFields() as $id => $field) {
|
||||||
|
if (!empty($field['translatable'])) {
|
||||||
|
$this->translatable[] = $id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -79,7 +79,7 @@ class Message extends Model
|
||||||
* @param string $message
|
* @param string $message
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function toLocale($locale = null, $message)
|
public function toLocale($locale = null, $message = null)
|
||||||
{
|
{
|
||||||
if ($locale === null) {
|
if ($locale === null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
1.4.0: Add importer and exporter for messages
|
1.4.0: Add importer and exporter for messages
|
||||||
1.4.1: Updated Hungarian translation. Added Arabic translation. Fixed issue where default texts are overwritten by import. Fixed issue where the language switcher for repeater fields would overlap with the first repeater row.
|
1.4.1: Updated Hungarian translation. Added Arabic translation. Fixed issue where default texts are overwritten by import. Fixed issue where the language switcher for repeater fields would overlap with the first repeater row.
|
||||||
1.4.2: Add multilingual MediaFinder
|
1.4.2: Add multilingual MediaFinder
|
||||||
1.4.3: !!! Please update OctoberCMS to Build 444 before updating this plugin. Added ability to translate CMS Pages fields (e.g. title, description, meta-title, meta-description)
|
1.4.3: "!!! Please update OctoberCMS to Build 444 before updating this plugin. Added ability to translate CMS Pages fields (e.g. title, description, meta-title, meta-description)"
|
||||||
1.4.4: Minor improvements to compatibility with Laravel framework.
|
1.4.4: Minor improvements to compatibility with Laravel framework.
|
||||||
1.4.5: Fixed issue when using the language switcher
|
1.4.5: Fixed issue when using the language switcher
|
||||||
1.5.0: Compatibility fix with Build 451
|
1.5.0: Compatibility fix with Build 451
|
||||||
|
|
@ -70,33 +70,15 @@
|
||||||
1.6.8: Add support for transOrderBy; Add translation support for ThemeData; Update russian localization.
|
1.6.8: Add support for transOrderBy; Add translation support for ThemeData; Update russian localization.
|
||||||
1.6.9: Clear Static Page menu cache after saving the model; CSS fix for Text/Textarea input fields language selector.
|
1.6.9: Clear Static Page menu cache after saving the model; CSS fix for Text/Textarea input fields language selector.
|
||||||
1.6.10:
|
1.6.10:
|
||||||
- Add option to purge deleted messages when scanning messages
|
- Add option to purge deleted messages when scanning messages, Add Scan error column on Messages page, Fix translations that were lost when clicking locale twice while holding ctrl key, Fix error with nested fields default locale value, Escape Message translate params value.
|
||||||
- Add Scan error column on Messages page
|
|
||||||
- update_messages_table.php
|
- update_messages_table.php
|
||||||
- Fix translations that were lost when clicking locale twice while holding ctrl key
|
1.7.0: "!!! Breaking change for the Message::trans() method (params are now escaped), fix message translation documentation, fix string translation key for scan errors column header."
|
||||||
- Fix error with nested fields default locale value
|
1.7.1: Fix YAML issue with previous tag/release.
|
||||||
- Escape Message translate params value
|
1.7.2: Fix regex when "|_" filter is followed by another filter, Try locale without country before returning default translation, Allow exporting default locale, Fire 'rainlab.translate.themeScanner.afterScan' event in the theme scanner for extendability.
|
||||||
1.7.0:
|
1.7.3: Make plugin ready for Laravel 6 update, Add support for translating RainLab.Pages MenuItem properties (requires RainLab.Pages v1.3.6), Restore multilingual button position for textarea, Fix translatableAttributes.
|
||||||
- !!! Breaking change for the Message::trans() method (params are now escaped)
|
1.7.4: Faster version of transWhere, Mail templates/views can now be localized, Fix messages table layout on mobile, Fix scopeTransOrderBy duplicates, Polish localization updates, Turkish localization updates, Add Greek language localization.
|
||||||
- fix message translation documentation
|
1.8.0: Adds initial support for October v2.0
|
||||||
- fix string translation key for scan errors column header
|
1.8.1: Minor bugfix
|
||||||
1.7.1:
|
1.8.2: Fixes translated file models and theme data for v2.0. The parent model must implement translatable behavior for their related file models to be translated.
|
||||||
- Fix YAML issue with previous tag/release.
|
1.8.4: Fixes the multilingual mediafinder to work with the media module.
|
||||||
1.7.2:
|
1.8.6: Fixes invisible checkboxes when scanning for messages.
|
||||||
- Fix regex when "|_" filter is followed by another filter
|
|
||||||
- Try locale without country before returning default translation
|
|
||||||
- Allow exporting default locale
|
|
||||||
- Fire 'rainlab.translate.themeScanner.afterScan' event in the theme scanner for extendability
|
|
||||||
1.7.3:
|
|
||||||
- Make plugin ready for Laravel 6 update
|
|
||||||
- Add support for translating RainLab.Pages MenuItem properties (requires RainLab.Pages v1.3.6)
|
|
||||||
- Restore multilingual button position for textarea
|
|
||||||
- Fix translatableAttributes
|
|
||||||
1.7.4:
|
|
||||||
- Faster version of transWhere
|
|
||||||
- Mail templates/views can now be localized
|
|
||||||
- Fix messages table layout on mobile
|
|
||||||
- Fix scopeTransOrderBy duplicates
|
|
||||||
- Polish localization updates
|
|
||||||
- Turkish localization updates
|
|
||||||
- Add Greek language localization
|
|
||||||
|
|
|
||||||
|
|
@ -69,10 +69,13 @@ class Advertisement extends ComponentBase
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onRun()
|
||||||
|
{
|
||||||
|
$this->tayyarla($this->property('random'));
|
||||||
|
}
|
||||||
|
|
||||||
public function onDisplay(){
|
private function tayyarla($random){
|
||||||
$random = input('random');
|
$this->group = Group::where('code',$this->property('code'))
|
||||||
$this->page['group'] = $group = Group::where('code',$this->property('code'))
|
|
||||||
->with(['adds' => function ($query) use ($random){
|
->with(['adds' => function ($query) use ($random){
|
||||||
if($random)
|
if($random)
|
||||||
$query->inRandomOrder();
|
$query->inRandomOrder();
|
||||||
|
|
@ -80,11 +83,12 @@ class Advertisement extends ComponentBase
|
||||||
$query->orderBy('order');
|
$query->orderBy('order');
|
||||||
}])
|
}])
|
||||||
->first();
|
->first();
|
||||||
|
// dd($group->adds);
|
||||||
$this->page['css_class'] = input('css_class','blat');
|
$this->page['css_class'] = input('css_class','blat');
|
||||||
if ($group && $group->adds){
|
if ($this->group && $this->group->adds){
|
||||||
try {
|
try {
|
||||||
DB::beginTransaction();
|
DB::beginTransaction();
|
||||||
foreach ($group->adds as $adv){
|
foreach ($this->group->adds as $adv){
|
||||||
if($adv->enable_stats){
|
if($adv->enable_stats){
|
||||||
$statistika = Statistika::firstOrCreate(['item_id' => $adv->id,'date' => Carbon::today()]);
|
$statistika = Statistika::firstOrCreate(['item_id' => $adv->id,'date' => Carbon::today()]);
|
||||||
$statistika->increment('view');
|
$statistika->increment('view');
|
||||||
|
|
@ -94,12 +98,17 @@ class Advertisement extends ComponentBase
|
||||||
}catch (Exception $ex){
|
}catch (Exception $ex){
|
||||||
DB::rollback();
|
DB::rollback();
|
||||||
}
|
}
|
||||||
return [
|
|
||||||
'#'.$this->alias => $this->renderPartial('@'.$this->property('type')),
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function onShow(){
|
||||||
|
$random = input('random');
|
||||||
|
$this->tayyarla($random);
|
||||||
|
return [
|
||||||
|
'#'.$this->alias => $this->renderPartial('@'.$this->property('type')),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
public function onRedirect(){
|
public function onRedirect(){
|
||||||
$data = post();
|
$data = post();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<span></span>
|
<span></span>
|
||||||
</button>
|
</button>
|
||||||
<div class="partnerSlider__inner">
|
<div class="partnerSlider__inner">
|
||||||
{% for reklama in group.adds %}
|
{% for reklama in __SELF__.group.adds %}
|
||||||
<a class="partnerSlider__item"
|
<a class="partnerSlider__item"
|
||||||
{% if reklama.enable_stats and reklama.url !="#" %}
|
{% if reklama.enable_stats and reklama.url !="#" %}
|
||||||
data-request="{{__SELF__}}::onRedirect"
|
data-request="{{__SELF__}}::onRedirect"
|
||||||
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% if __SELF__.property('random') %}
|
||||||
<script>
|
<script>
|
||||||
// parner slider start
|
// parner slider start
|
||||||
// ================================================
|
// ================================================
|
||||||
|
|
@ -66,3 +67,55 @@
|
||||||
// parner slider end
|
// parner slider end
|
||||||
// ================================================
|
// ================================================
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
{% else %}
|
||||||
|
{% put scripts %}
|
||||||
|
<script>
|
||||||
|
// parner slider start
|
||||||
|
// ================================================
|
||||||
|
$(".partnerSlider__inner").slick({
|
||||||
|
dots: false,
|
||||||
|
infinite: true,
|
||||||
|
speed: 300,
|
||||||
|
slidesToShow: 5,
|
||||||
|
arrows: true,
|
||||||
|
prevArrow: $(".p1"),
|
||||||
|
nextArrow: $(".n1"),
|
||||||
|
slidesToScroll: 1,
|
||||||
|
responsive: [
|
||||||
|
{
|
||||||
|
breakpoint: 1400,
|
||||||
|
settings: {
|
||||||
|
slidesToShow: 4,
|
||||||
|
slidesToScroll: 2,
|
||||||
|
infinite: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
breakpoint: 1023,
|
||||||
|
settings: {
|
||||||
|
slidesToShow: 3,
|
||||||
|
slidesToScroll: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
breakpoint: 768,
|
||||||
|
settings: {
|
||||||
|
slidesToShow: 2,
|
||||||
|
slidesToScroll: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
breakpoint: 540,
|
||||||
|
settings: {
|
||||||
|
slidesToShow: 1,
|
||||||
|
slidesToScroll: 1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
// parner slider end
|
||||||
|
// ================================================
|
||||||
|
</script>
|
||||||
|
{% endput %}
|
||||||
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,16 @@
|
||||||
<div id="{{__SELF__}}" class="{{__SELF__.property('css_class')}}"></div>
|
<div id="{{__SELF__}}" class="{{__SELF__.property('css_class')}}">
|
||||||
{% put scripts %}
|
{% if __SELF__.property('random') %}
|
||||||
<script>
|
{% put scripts %}
|
||||||
$.request('{{__SELF__}}::onDisplay',{
|
<script>
|
||||||
data:{random:{{__SELF__.property('random')}}
|
$.request('{{__SELF__}}::onShow',{
|
||||||
{% if __SELF__.property('css_class') %},css_class:'{{__SELF__.property('css_class')}}' {% endif %}
|
data:{random:{{__SELF__.property('random')}}
|
||||||
|
{% if __SELF__.property('css_class') %},css_class:'{{__SELF__.property('css_class')}}' {% endif %}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
{% endput %}
|
{% endput %}
|
||||||
|
{% else %}
|
||||||
|
{% partial __SELF__ ~ "::"~ __SELF__.property('type') %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
{% set reklama = group.adds.first %}
|
{% set reklama = __SELF__.group.adds.first %}
|
||||||
<a
|
<a
|
||||||
{% if reklama.url %}
|
{% if reklama.url %}
|
||||||
{% if reklama.enable_stats %}
|
{% if reklama.enable_stats %}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{% if group and group.adds %}
|
{% if group and group.adds %}
|
||||||
<div class="advertisiment_{{__SELF__}}">
|
<div class="advertisiment_{{__SELF__}}">
|
||||||
{% for reklama in group.adds %}
|
{% for reklama in __SELF__.group.adds %}
|
||||||
<a class="advertisiment__item"
|
<a class="advertisiment__item"
|
||||||
{% if reklama.enable_stats and reklama.url !="#" %}
|
{% if reklama.enable_stats and reklama.url !="#" %}
|
||||||
data-request="{{__SELF__}}::onRedirect"
|
data-request="{{__SELF__}}::onRedirect"
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
// advertisement start
|
// advertisement start
|
||||||
$(function () {
|
$(function () {
|
||||||
var $slideshow = $(".advertisiment_{{__SELF__}}");
|
var $slideshow = $(".advertisiment_{{__SELF__}}");
|
||||||
var ImagePauses = {{group.adds.pluck('display')}};
|
var ImagePauses = {{__SELF__.group.adds.pluck('display')}};
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
$slideshow.slick({
|
$slideshow.slick({
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ class Items extends ComponentBase
|
||||||
* @param int $sourceId
|
* @param int $sourceId
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public static function loadItems(int $maxItems, int $sourceId = null): array
|
public static function loadItems(int $maxItems, int $sourceId = null)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
$items = Item::query()
|
$items = Item::query()
|
||||||
|
|
@ -93,6 +93,6 @@ class Items extends ComponentBase
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return $items->get()->toArray();
|
return $items->get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@ -0,0 +1,90 @@
|
||||||
|
@mixin transition {
|
||||||
|
transition: all 0.2s ease-in-out 0s;
|
||||||
|
-moz-transition: all 0.2s ease-in-out 0s;
|
||||||
|
}
|
||||||
|
@mixin transition-bg {
|
||||||
|
transition: background 0.2s ease-in-out 0s;
|
||||||
|
-moz-transition: background 0.2s ease-in-out 0s;
|
||||||
|
}
|
||||||
|
@mixin transition-border {
|
||||||
|
transition: border 0.2s ease-in-out 0s;
|
||||||
|
-moz-transition: border 0.2s ease-in-out 0s;
|
||||||
|
}
|
||||||
|
@mixin fullImage {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
-o-object-fit: cover;
|
||||||
|
}
|
||||||
|
@mixin transformY {
|
||||||
|
transform: translateY(-50%);
|
||||||
|
-moz-ransform: translateY(-50%);
|
||||||
|
-o-transform: translateY(-50%);
|
||||||
|
-ms-transform: translateY(-50%);
|
||||||
|
-webkit-transform: translateY(-50%);
|
||||||
|
}
|
||||||
|
@mixin transformX {
|
||||||
|
transform: translateX(-50%);
|
||||||
|
-moz-ransform: translateX(-50%);
|
||||||
|
-o-transform: translateX(-50%);
|
||||||
|
-ms-transform: translateX(-50%);
|
||||||
|
-webkit-transform: translateX(-50%);
|
||||||
|
}
|
||||||
|
@mixin transform {
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
-moz-ransform: translate(-50%, -50%);
|
||||||
|
-o-transform: translate(-50%, -50%);
|
||||||
|
-ms-transform: translate(-50%, -50%);
|
||||||
|
-webkit-transform: translate(-50%, -50%);
|
||||||
|
}
|
||||||
|
@mixin transformReset {
|
||||||
|
transform: translate(0, 0);
|
||||||
|
-moz-ransform: translate(0, 0);
|
||||||
|
-o-transform: translate(0, 0);
|
||||||
|
-ms-transform: translate(0, 0);
|
||||||
|
-webkit-transform: translate(0, 0);
|
||||||
|
}
|
||||||
|
@mixin rotate {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
-o-transform: rotate(90deg);
|
||||||
|
-ms-transform: rotate(90deg);
|
||||||
|
-moz-transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
@mixin rotate180deg {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
-webkit-transform: rotate(180deg);
|
||||||
|
-o-transform: rotate(180deg);
|
||||||
|
-ms-transform: rotate(180deg);
|
||||||
|
-moz-transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
@mixin rotate270deg {
|
||||||
|
transform: rotate(270deg);
|
||||||
|
-webkit-transform: rotate(270deg);
|
||||||
|
-o-transform: rotate(270deg);
|
||||||
|
-ms-transform: rotate(270deg);
|
||||||
|
-moz-transform: rotate(270deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin xxsm-xsm {
|
||||||
|
@media (max-width: 374px) { @content; }
|
||||||
|
}
|
||||||
|
@mixin xsm-sm {
|
||||||
|
@media (max-width: 540px) { @content; }
|
||||||
|
}
|
||||||
|
@mixin sm-md {
|
||||||
|
@media (max-width: 700px) { @content; }
|
||||||
|
}
|
||||||
|
@mixin md-lg {
|
||||||
|
@media (max-width: 768px) { @content; }
|
||||||
|
}
|
||||||
|
@mixin lg-xlg {
|
||||||
|
@media (max-width: 1024px) { @content; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin xlg-xxlg {
|
||||||
|
@media (max-width: 1400px) { @content; }
|
||||||
|
}
|
||||||
|
@mixin xxlg-xxxlg {
|
||||||
|
@media (max-width: 1640px) { @content; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
/***
|
||||||
|
|
||||||
|
====================================================================
|
||||||
|
Reset
|
||||||
|
====================================================================
|
||||||
|
|
||||||
|
***/
|
||||||
|
// :root {
|
||||||
|
// font-size: calc(1vw + 0.6em);
|
||||||
|
// }
|
||||||
|
* {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
border: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
button:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
button:focus {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
input::-webkit-outer-spin-button,
|
||||||
|
input::-webkit-inner-spin-button {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
/***
|
||||||
|
====================================================================
|
||||||
|
Global Settings
|
||||||
|
====================================================================
|
||||||
|
***/
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #000;
|
||||||
|
line-height: 1.7em;
|
||||||
|
font-weight: 400;
|
||||||
|
background: #fff;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-font-smoothing: antialiased;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5,
|
||||||
|
h6 {
|
||||||
|
position: relative;
|
||||||
|
font-weight: normal;
|
||||||
|
margin: 0px;
|
||||||
|
background: none;
|
||||||
|
line-height: 1.6em;
|
||||||
|
}
|
||||||
|
/* Typography */
|
||||||
|
h1 {
|
||||||
|
font-size: 4em;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 40px;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 34px;
|
||||||
|
}
|
||||||
|
h4 {
|
||||||
|
font-size: 22px;
|
||||||
|
}
|
||||||
|
h5 {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
position: relative;
|
||||||
|
line-height: 1.8em;
|
||||||
|
}
|
||||||
|
.auto__container {
|
||||||
|
position: relative;
|
||||||
|
max-width: 1440px;
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
ul,
|
||||||
|
li {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
.mr-top-bot {
|
||||||
|
margin: 80px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
$main-color: #fd4c24;
|
||||||
|
$text-light-black: #242424;
|
||||||
|
$text-black: #000;
|
||||||
|
$text-color-white: #ffffff;
|
||||||
|
$text-color-grey: #a2a2a2;
|
||||||
|
$color-grey: #b4b4b4;
|
||||||
|
$p-size: 16px;
|
||||||
|
$p-height: 30px;
|
||||||
|
$h2-size: 22px;
|
||||||
|
$h2-height: 30px;
|
||||||
|
$h3-size: 18px;
|
||||||
|
$h3-height: 26px;
|
||||||
|
$h4-size: 16px;
|
||||||
|
$h4-height: 25px;
|
||||||
|
$h5-size: 12px;
|
||||||
|
$h5-height: 20px;
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
.footer {
|
||||||
|
background: $text-light-black;
|
||||||
|
padding: 30px 0;
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
&__copyright {
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-color-white;
|
||||||
|
}
|
||||||
|
&__social {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&-link {
|
||||||
|
fill: $text-color-white;
|
||||||
|
margin: 0 10px;
|
||||||
|
@include transition;
|
||||||
|
&:hover {
|
||||||
|
fill: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
.header {
|
||||||
|
position: relative;
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 4px;
|
||||||
|
background: #00822c;
|
||||||
|
}
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 20px 0;
|
||||||
|
}
|
||||||
|
&__logo {
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
&__search {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&-input {
|
||||||
|
width: 350px;
|
||||||
|
position: relative;
|
||||||
|
input {
|
||||||
|
width: calc(100% - 60px);
|
||||||
|
font-family: "roboto";
|
||||||
|
padding: 14px 40px 14px 20px;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-size;
|
||||||
|
color: rgba($color: $text-light-black, $alpha: 0.3);
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #c9c9c9;
|
||||||
|
&::placeholder {
|
||||||
|
font-family: "roboto";
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-size;
|
||||||
|
color: rgba($color: $text-light-black, $alpha: 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-btn {
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
right: 20px;
|
||||||
|
@include transformY;
|
||||||
|
svg {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
fill: $text-light-black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__slogan {
|
||||||
|
font-family: "Oswald", sans-serif;
|
||||||
|
color: $main-color;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 40px;
|
||||||
|
line-height: 40px;
|
||||||
|
margin-right: 20px;
|
||||||
|
letter-spacing: -1.5px;
|
||||||
|
}
|
||||||
|
.hamBtn {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,433 @@
|
||||||
|
// Helper Functions
|
||||||
|
|
||||||
|
/// Replace `$search` with `$replace` in `$string`
|
||||||
|
/// @author Hugo Giraudel
|
||||||
|
/// @param {String} $string - Initial string
|
||||||
|
/// @param {String} $search - Substring to replace
|
||||||
|
/// @param {String} $replace ('') - New value
|
||||||
|
/// @return {String} - Updated string
|
||||||
|
@function lightpick-str-replace($string, $search, $replace: "") {
|
||||||
|
$index: str-index($string, $search);
|
||||||
|
|
||||||
|
@if $index {
|
||||||
|
@return str-slice($string, 1, $index - 1) + $replace +
|
||||||
|
lightpick-str-replace(
|
||||||
|
str-slice($string, $index + str-length($search)),
|
||||||
|
$search,
|
||||||
|
$replace
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Split `$string` between the `$separator` characters
|
||||||
|
/// @author https://stackoverflow.com/a/42295154/108816
|
||||||
|
/// @param {String} $string - Initial string
|
||||||
|
/// @param {String} $separator - Substring to split on
|
||||||
|
/// @return {List} - Split string
|
||||||
|
@function lightpick-str-split($string, $separator) {
|
||||||
|
$split-arr: ();
|
||||||
|
$index: str-index($string, $separator);
|
||||||
|
|
||||||
|
@while $index != null {
|
||||||
|
$item: str-slice($string, 1, $index - 1);
|
||||||
|
|
||||||
|
$split-arr: append($split-arr, $item);
|
||||||
|
|
||||||
|
$string: str-slice($string, $index + 1);
|
||||||
|
|
||||||
|
$index: str-index($string, $separator);
|
||||||
|
}
|
||||||
|
|
||||||
|
$split-arr: append($split-arr, $string);
|
||||||
|
|
||||||
|
@return $split-arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// SCSS Variables
|
||||||
|
|
||||||
|
$lightpick-font: system-ui, Roboto, Helvetica, Arial, sans-serif !default;
|
||||||
|
$lightpick-line-height: 1.125em !default;
|
||||||
|
$lightpick-border-radius: 4px !default;
|
||||||
|
$lightpick-padding: 4px !default;
|
||||||
|
$lightpick-color: #000 !default;
|
||||||
|
$lightpick-background-color: #fff !default;
|
||||||
|
$lightpick-months-background-color: #eee !default;
|
||||||
|
$lightpick-title-font-size: 16px !default;
|
||||||
|
$lightpick-title-font-weight: normal !default;
|
||||||
|
$lightpick-day-of-week-font-size: 11px !default;
|
||||||
|
$lightpick-day-of-week-font-weight: bold !default;
|
||||||
|
$lightpick-day-hover-color: #e0e0e0 !default;
|
||||||
|
$lightpick-day-hover-background-image-color: lightpick-str-replace(
|
||||||
|
quote(#{$lightpick-day-hover-color}),
|
||||||
|
"#",
|
||||||
|
"%23"
|
||||||
|
);
|
||||||
|
$lightpick-day-hover-background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle fill='#{$lightpick-day-hover-background-image-color}' cx='16' cy='16' r='16'/%3E%3C/svg%3E") !default;
|
||||||
|
$lightpick-day-disabled-opacity: 0.38 !default;
|
||||||
|
$lightpick-day-previous-next-opacity: $lightpick-day-disabled-opacity !default;
|
||||||
|
$lightpick-day-size: 40px !default;
|
||||||
|
$lightpick-day-font-size: 13px !default;
|
||||||
|
$lightpick-selected-date-color: #fff !default;
|
||||||
|
$main-color: #268bd2 !default;
|
||||||
|
$lightpick-selected-date-background-image-color: lightpick-str-replace(
|
||||||
|
quote(#{$main-color}),
|
||||||
|
"#",
|
||||||
|
"%23"
|
||||||
|
);
|
||||||
|
$lightpick-selected-date-background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle fill='#{$lightpick-selected-date-background-image-color}' cx='16' cy='16' r='16'/%3E%3C/svg%3E") !default;
|
||||||
|
$lightpick-selected-date-font-weight: bold !default;
|
||||||
|
$lightpick-selected-range-background-color: rgba($main-color, 0.1) !default;
|
||||||
|
$lightpick-selected-range-hover-background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle fill='#{rgba($main-color, 0.5)}' cx='16' cy='16' r='16'/%3E%3C/svg%3E") !default;
|
||||||
|
$lightpick-today-color: #dc322f !default;
|
||||||
|
$lightpick-today-background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle fill='#{rgba($lightpick-today-color, .5)}' cx='16' cy='16' r='16'/%3E%3C/svg%3E") !default;
|
||||||
|
$lightpick-tooltip-background-color: #fff !default;
|
||||||
|
$lightpick-tooltip-padding: 4px 8px !default;
|
||||||
|
$lightpick-tooltip-margin: -(unquote(nth(lightpick-str-split(quote(#{$lightpick-tooltip-padding}), " "), 1))) !default;
|
||||||
|
$lightpick-tooltip-triangle-size: 4px !default;
|
||||||
|
$lightpick-tooltip-border-color: rgba(0, 0, 0, 0.12) !default;
|
||||||
|
$lightpick-tooltip-font-size: 11px !default;
|
||||||
|
$lightpick-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25) !default;
|
||||||
|
$lightpick-dropdown-font-size: 1em !default;
|
||||||
|
$lightpick-dropdown-font-weight: bold !default;
|
||||||
|
$lightpick-dropdown-disabled-color: #333 !default;
|
||||||
|
$lightpick-action-width: 32px !default;
|
||||||
|
$lightpick-action-height: $lightpick-action-width !default;
|
||||||
|
$lightpick-action-background-color: #ddd !default;
|
||||||
|
$lightpick-action-reset-background-color: #aeacad !default;
|
||||||
|
$lightpick-action-reset-color: #fff !default;
|
||||||
|
$lightpick-action-apply-background-color: #2495f3 !default;
|
||||||
|
$lightpick-action-apply-color: #fff !default;
|
||||||
|
$lightpick-action-border-radius: 5px !default;
|
||||||
|
$lightpick-action-font-size: 12px !default;
|
||||||
|
$lightpick-action-close-font-size: 18px !default;
|
||||||
|
|
||||||
|
// Styles
|
||||||
|
.calendar__outer {
|
||||||
|
width: 100%;
|
||||||
|
input {
|
||||||
|
width: 100%;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.lightpick {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 99999;
|
||||||
|
border-radius: $lightpick-border-radius;
|
||||||
|
// background-color: $lightpick-background-color;
|
||||||
|
// box-shadow: $lightpick-box-shadow;
|
||||||
|
color: $lightpick-color;
|
||||||
|
font-family: $lightpick-font;
|
||||||
|
line-height: $lightpick-line-height;
|
||||||
|
width: 100%;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
&--inlined {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
&,
|
||||||
|
& *,
|
||||||
|
&::after,
|
||||||
|
&::before {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__months {
|
||||||
|
display: grid;
|
||||||
|
background-color: $lightpick-months-background-color;
|
||||||
|
grid-template-columns: auto;
|
||||||
|
grid-gap: 1px;
|
||||||
|
|
||||||
|
@at-root .lightpick--2-columns #{&} {
|
||||||
|
grid-template-columns: auto auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root .lightpick--3-columns #{&} {
|
||||||
|
grid-template-columns: auto auto auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root .lightpick--4-columns #{&} {
|
||||||
|
grid-template-columns: auto auto auto auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@at-root .lightpick--5-columns #{&} {
|
||||||
|
grid-template-columns: auto auto auto auto auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__month {
|
||||||
|
width: 100%;
|
||||||
|
background-color: $lightpick-background-color;
|
||||||
|
|
||||||
|
&-title-bar {
|
||||||
|
display: flex;
|
||||||
|
margin-bottom: $lightpick-padding;
|
||||||
|
justify-content: space-between;
|
||||||
|
text-align: center;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border: 1px solid #242424;
|
||||||
|
position: relative;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-title {
|
||||||
|
margin-top: $lightpick-padding;
|
||||||
|
margin-bottom: $lightpick-padding;
|
||||||
|
margin-left: $lightpick-padding;
|
||||||
|
font-size: $lightpick-title-font-size;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: $lightpick-title-font-size * 1.5;
|
||||||
|
cursor: default;
|
||||||
|
padding: 0 $lightpick-padding;
|
||||||
|
border-radius: $lightpick-border-radius;
|
||||||
|
|
||||||
|
& > .lightpick__select {
|
||||||
|
border: none;
|
||||||
|
background-color: transparent;
|
||||||
|
outline: none;
|
||||||
|
-moz-appearance: none;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
appearance: none;
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
color: $lightpick-dropdown-disabled-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
& > .lightpick__select-months {
|
||||||
|
font-weight: $lightpick-dropdown-font-weight;
|
||||||
|
font-size: $lightpick-dropdown-font-size;
|
||||||
|
margin-right: 0;
|
||||||
|
direction: ltr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__toolbar {
|
||||||
|
display: flex;
|
||||||
|
// text-align: right;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
transform: translateY(-50%);
|
||||||
|
-webkit-transform: translateY(-50%);
|
||||||
|
-moz-transform: translateY(-50%);
|
||||||
|
-ms-transform: translateY(-50%);
|
||||||
|
-o-transform: translateY(-50%);
|
||||||
|
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__previous-action,
|
||||||
|
&__next-action,
|
||||||
|
&__close-action {
|
||||||
|
display: flex;
|
||||||
|
width: $lightpick-action-width;
|
||||||
|
height: $lightpick-action-height;
|
||||||
|
outline: none;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
// border-radius: 50%;
|
||||||
|
// background-color: $lightpick-action-background-color;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
color: inherit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__previous-action,
|
||||||
|
&__next-action {
|
||||||
|
font-size: 20px;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__close-action {
|
||||||
|
font-size: $lightpick-action-close-font-size;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__days-of-the-week {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(7, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__day-of-the-week {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__days {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(7, 1fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__day {
|
||||||
|
display: flex;
|
||||||
|
height: $lightpick-day-size;
|
||||||
|
padding: 10px 0;
|
||||||
|
background-position: center center;
|
||||||
|
background-size: contain;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
font-size: $h3-size - 3px;
|
||||||
|
line-height: $h3-height - 3px;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
cursor: default;
|
||||||
|
|
||||||
|
&.is-today {
|
||||||
|
background-image: $lightpick-today-background-image;
|
||||||
|
background-size: 18.8% auto;
|
||||||
|
background-position: center bottom;
|
||||||
|
color: $lightpick-today-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.is-disabled):hover {
|
||||||
|
background-size: contain;
|
||||||
|
background-image: $lightpick-day-hover-background-image;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-disabled {
|
||||||
|
opacity: $lightpick-day-disabled-opacity;
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
&.is-forward-selected {
|
||||||
|
opacity: 1;
|
||||||
|
|
||||||
|
&:not(.is-start-date) {
|
||||||
|
background-color: $lightpick-selected-range-background-color;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.disabled-tooltip {
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-previous-month,
|
||||||
|
&.is-next-month {
|
||||||
|
opacity: $lightpick-day-previous-next-opacity;
|
||||||
|
}
|
||||||
|
|
||||||
|
&#{&}.is-in-range:not(.is-disabled) {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-in-range {
|
||||||
|
border-radius: 0;
|
||||||
|
background-color: $lightpick-selected-range-background-color;
|
||||||
|
background-image: none;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Ccircle fill='rgba(38, 139, 210, 0.5)' cx='16' cy='16' r='16'/%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-start-date.is-in-range,
|
||||||
|
&.is-end-date.is-in-range.is-flipped {
|
||||||
|
border-top-left-radius: 50%;
|
||||||
|
border-top-right-radius: 0;
|
||||||
|
border-bottom-right-radius: 0;
|
||||||
|
border-bottom-left-radius: 50%;
|
||||||
|
background-color: $main-color;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-end-date.is-in-range,
|
||||||
|
&.is-start-date.is-in-range.is-flipped {
|
||||||
|
border-top-left-radius: 0;
|
||||||
|
border-top-right-radius: 50%;
|
||||||
|
border-bottom-right-radius: 50%;
|
||||||
|
border-bottom-left-radius: 0;
|
||||||
|
background-color: $main-color;
|
||||||
|
background-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-start-date.is-end-date {
|
||||||
|
background-color: transparent;
|
||||||
|
background-image: $lightpick-selected-date-background-image;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.is-start-date,
|
||||||
|
&.is-end-date,
|
||||||
|
&.is-start-date:hover,
|
||||||
|
&.is-end-date:hover {
|
||||||
|
background-image: $lightpick-selected-date-background-image;
|
||||||
|
background-size: auto;
|
||||||
|
background-position: center;
|
||||||
|
color: $lightpick-selected-date-color;
|
||||||
|
font-weight: $lightpick-selected-date-font-weight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__tooltip {
|
||||||
|
position: absolute;
|
||||||
|
margin-top: $lightpick-tooltip-margin;
|
||||||
|
padding: $lightpick-tooltip-padding;
|
||||||
|
border-radius: $lightpick-border-radius;
|
||||||
|
background-color: $lightpick-tooltip-background-color;
|
||||||
|
box-shadow: $lightpick-box-shadow;
|
||||||
|
white-space: nowrap;
|
||||||
|
font-size: $lightpick-tooltip-font-size;
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -($lightpick-tooltip-triangle-size + 1);
|
||||||
|
left: calc(50% - #{$lightpick-tooltip-triangle-size + 1});
|
||||||
|
border-top: ($lightpick-tooltip-triangle-size + 1) solid
|
||||||
|
$lightpick-tooltip-border-color;
|
||||||
|
border-right: ($lightpick-tooltip-triangle-size + 1) solid transparent;
|
||||||
|
border-left: ($lightpick-tooltip-triangle-size + 1) solid transparent;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -$lightpick-tooltip-triangle-size;
|
||||||
|
left: calc(50% - #{$lightpick-tooltip-triangle-size});
|
||||||
|
border-top: $lightpick-tooltip-triangle-size solid
|
||||||
|
$lightpick-tooltip-background-color;
|
||||||
|
border-right: $lightpick-tooltip-triangle-size solid transparent;
|
||||||
|
border-left: $lightpick-tooltip-triangle-size solid transparent;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__footer {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__reset-action,
|
||||||
|
&__apply-action {
|
||||||
|
border-radius: $lightpick-action-border-radius;
|
||||||
|
font-size: $lightpick-action-font-size;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__reset-action {
|
||||||
|
color: $lightpick-action-reset-color;
|
||||||
|
background-color: $lightpick-action-reset-background-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__apply-action {
|
||||||
|
color: $lightpick-action-apply-color;
|
||||||
|
background-color: $lightpick-action-apply-background-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,85 @@
|
||||||
|
.card {
|
||||||
|
position: relative;
|
||||||
|
padding: 30px;
|
||||||
|
background: $text-color-white;
|
||||||
|
&__header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&-category {
|
||||||
|
padding: 5px 10px;
|
||||||
|
background: $main-color;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
color: $text-color-white;
|
||||||
|
font-weight: 700;
|
||||||
|
max-width: 115px;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
&-view {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: $text-color-grey;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height - 5px;
|
||||||
|
svg {
|
||||||
|
margin-right: 5px;
|
||||||
|
stroke: $text-color-grey;
|
||||||
|
width: 21px;
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
color: $text-color-grey;
|
||||||
|
font-weight: 400;
|
||||||
|
svg {
|
||||||
|
margin: 0 5px;
|
||||||
|
width: 4px;
|
||||||
|
height: 4px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__link {
|
||||||
|
color: $text-black;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
display: block;
|
||||||
|
max-height: 75px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
&__box {
|
||||||
|
padding: 30px 0;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-top: 1px solid $text-color-grey;
|
||||||
|
padding: 30px 0 0 0;
|
||||||
|
}
|
||||||
|
&:nth-child(2) {
|
||||||
|
padding: 0 0 30px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.other {
|
||||||
|
padding: 30px;
|
||||||
|
.card__header {
|
||||||
|
&-category {
|
||||||
|
background: $text-light-black;
|
||||||
|
color: $text-color-white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
border-bottom: 1px solid #e6e6e6;
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
.newsSlider {
|
||||||
|
&__outer {
|
||||||
|
position: relative;
|
||||||
|
margin: 0 -5px;
|
||||||
|
overflow: hidden;
|
||||||
|
.p2 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 5px;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.n2 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: 50%;
|
||||||
|
right: 5px;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.newsSlider__item {
|
||||||
|
position: relative;
|
||||||
|
padding: 5px 5px;
|
||||||
|
img {
|
||||||
|
@include fullImage;
|
||||||
|
}
|
||||||
|
&-content {
|
||||||
|
position: absolute;
|
||||||
|
left: 20px;
|
||||||
|
bottom: 20px;
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
&-date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 8px 12px;
|
||||||
|
background: $main-color;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 18px;
|
||||||
|
font-weight: 400;
|
||||||
|
max-width: 145px;
|
||||||
|
color: $text-color-white;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
svg {
|
||||||
|
margin: 0 4px;
|
||||||
|
width: 4px;
|
||||||
|
height: 4px;
|
||||||
|
fill: $text-color-white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-link {
|
||||||
|
color: $text-color-white;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 30px;
|
||||||
|
height: 60px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
font-weight: 700;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
.partnerSlider {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
&__inner {
|
||||||
|
}
|
||||||
|
&__item {
|
||||||
|
margin-right: 5px;
|
||||||
|
padding: 30px;
|
||||||
|
border-right: 5px;
|
||||||
|
border: 1px solid #e6e6e6;
|
||||||
|
position: relative;
|
||||||
|
height: 120px;
|
||||||
|
img {
|
||||||
|
width: 90%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.p1 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 0;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.n1 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: 50%;
|
||||||
|
right: 5px;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,566 @@
|
||||||
|
@include xxlg-xxxlg {
|
||||||
|
.auto__container {
|
||||||
|
max-width: 1240px;
|
||||||
|
}
|
||||||
|
.swiper {
|
||||||
|
&-slide {
|
||||||
|
height: 450px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include xlg-xxlg {
|
||||||
|
.main__banner {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
.swiper {
|
||||||
|
&-slide {
|
||||||
|
height: 350px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.auto__container {
|
||||||
|
max-width: 1040px;
|
||||||
|
padding: 0 25px;
|
||||||
|
}
|
||||||
|
.banner {
|
||||||
|
margin: 40px 0;
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
height: 450px;
|
||||||
|
&__item {
|
||||||
|
height: 450px;
|
||||||
|
}
|
||||||
|
&__nav {
|
||||||
|
a {
|
||||||
|
height: 33.3%;
|
||||||
|
span {
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.event {
|
||||||
|
margin: 40px 0;
|
||||||
|
&__header {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
margin: 0 -10px;
|
||||||
|
}
|
||||||
|
&-image {
|
||||||
|
margin: 0 10px;
|
||||||
|
width: calc(50% - 20px);
|
||||||
|
a.progressive {
|
||||||
|
height: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-card {
|
||||||
|
position: unset;
|
||||||
|
width: 100%;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
margin: 0 10px;
|
||||||
|
width: calc(50% - 30px);
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
&__body {
|
||||||
|
&-header {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
a.progressive {
|
||||||
|
height: 240px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-card {
|
||||||
|
margin: -50px 15px 0 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__sidebar {
|
||||||
|
&-title {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
a.progressive {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&-tag {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
&-link {
|
||||||
|
padding: 4px 6px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
.partner {
|
||||||
|
&__title {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.heading {
|
||||||
|
&__row {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&__title {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
padding: 15px 0 15px 15px;
|
||||||
|
width: calc(60% - 15px);
|
||||||
|
&-header {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
&-body {
|
||||||
|
&-para {
|
||||||
|
height: 90px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a.progressive {
|
||||||
|
height: 250px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.form {
|
||||||
|
&__title {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&__input {
|
||||||
|
label {
|
||||||
|
height: 60px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.news {
|
||||||
|
&__inner {
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
|
&__image {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
&-image {
|
||||||
|
margin: 0 10px;
|
||||||
|
width: calc(50% - 20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include lg-xlg {
|
||||||
|
.swiper-container {
|
||||||
|
.slick-list {
|
||||||
|
padding: 0 20% 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.partner__title {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.swiper-slide {
|
||||||
|
&-content {
|
||||||
|
padding: 15px;
|
||||||
|
width: calc(100% - 30px);
|
||||||
|
&-category {
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 14px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
&-link {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 26px;
|
||||||
|
height: 52px;
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
&__nav {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&__inner {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
&__slogan {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&__search {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.hamBtn {
|
||||||
|
display: block;
|
||||||
|
width: 35px;
|
||||||
|
background: none;
|
||||||
|
height: 25px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
span {
|
||||||
|
width: 100%;
|
||||||
|
height: 5px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: $text-light-black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.subheader__inner {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
z-index: 1000;
|
||||||
|
@include transition;
|
||||||
|
.close {
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
position: absolute;
|
||||||
|
left: 30px;
|
||||||
|
top: 30px;
|
||||||
|
display: block;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.nav {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 50%;
|
||||||
|
height: calc(100% - 50px);
|
||||||
|
overflow-y: scroll;
|
||||||
|
background: $text-light-black;
|
||||||
|
&__inner {
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
&-link {
|
||||||
|
display: block;
|
||||||
|
text-align: center;
|
||||||
|
margin-right: 0;
|
||||||
|
padding: 20px;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
&::before {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.language {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
width: 50%;
|
||||||
|
padding: 15px 0;
|
||||||
|
justify-content: center;
|
||||||
|
background: $color-grey;
|
||||||
|
}
|
||||||
|
&.showMenu {
|
||||||
|
width: 100%;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.event {
|
||||||
|
&__body {
|
||||||
|
&-image {
|
||||||
|
width: calc(50% - 20px);
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
width: calc(50% - 30px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
margin-top: 40px;
|
||||||
|
&__sidebar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
width: 100%;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
&-card {
|
||||||
|
margin: -50px 0 0 0;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
a.progressive {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
&__inner {
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
&__social {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
&__copyright {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.card.other {
|
||||||
|
padding: 15px;
|
||||||
|
}
|
||||||
|
.mr-top-bot {
|
||||||
|
margin: 40px 0;
|
||||||
|
}
|
||||||
|
.about {
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
|
.news {
|
||||||
|
&__sidebar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
width: 100%;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.terms {
|
||||||
|
padding: 40px 0;
|
||||||
|
&__title {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
&__para {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include sm-md {
|
||||||
|
.swiper-container {
|
||||||
|
.slick-list {
|
||||||
|
padding: 0 0 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.header__logo {
|
||||||
|
width: 80px;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.marquee {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
height: 350px;
|
||||||
|
&__item {
|
||||||
|
height: 350px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.event {
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
margin: 0;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
}
|
||||||
|
&-image {
|
||||||
|
width: 100%;
|
||||||
|
margin: 15px 0;
|
||||||
|
a.progressive {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
width: calc(100% - 30px);
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 15px;
|
||||||
|
border: none;
|
||||||
|
.card {
|
||||||
|
padding: 15px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
width: 100%;
|
||||||
|
margin: 15px 0;
|
||||||
|
a.progressive {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__banner {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.heading {
|
||||||
|
&__row {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
}
|
||||||
|
&__image {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
padding: 20px 0;
|
||||||
|
width: 100%;
|
||||||
|
&-body {
|
||||||
|
&-para {
|
||||||
|
height: 120px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
a.progressive {
|
||||||
|
height: auto;
|
||||||
|
img {
|
||||||
|
height: unset;
|
||||||
|
width: 100%;
|
||||||
|
object-fit: unset;
|
||||||
|
-o-object-fit: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.form {
|
||||||
|
&__row {
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
}
|
||||||
|
&__input {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
&:first-child {
|
||||||
|
width: 100%;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
width: 100%;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
height: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__btn {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
&__inner.contact {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.news {
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
margin: 0;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
&-image {
|
||||||
|
margin: 15px 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__footer {
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.newsSlider {
|
||||||
|
.newsSlider__item {
|
||||||
|
&-content {
|
||||||
|
position: unset;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #dfdfdf;
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
&-link {
|
||||||
|
color: $text-light-black;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 16px;
|
||||||
|
height: 48px;
|
||||||
|
}
|
||||||
|
&-date {
|
||||||
|
font-size: 10px;
|
||||||
|
width: 100%;
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@include xsm-sm {
|
||||||
|
.swiper-slide-content-category {
|
||||||
|
position: absolute;
|
||||||
|
top: 12px;
|
||||||
|
right: 15px;
|
||||||
|
}
|
||||||
|
.auto__container {
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
.slider {
|
||||||
|
height: 300px;
|
||||||
|
&__item {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.partnerSlider {
|
||||||
|
overflow: hidden;
|
||||||
|
&__item {
|
||||||
|
margin-right: 0;
|
||||||
|
padding: 5px;
|
||||||
|
height: unset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
&__social {
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: center;
|
||||||
|
&-link {
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.subheader {
|
||||||
|
&__inner {
|
||||||
|
.close {
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
top: 15px;
|
||||||
|
left: 15px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.nav {
|
||||||
|
width: calc(100% - 50px);
|
||||||
|
}
|
||||||
|
.language {
|
||||||
|
width: calc(100% - 50px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.swiper-slide {
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
.animaSlider {
|
||||||
|
height: 560px;
|
||||||
|
&__outer {
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
}
|
||||||
|
&__item {
|
||||||
|
height: 560px;
|
||||||
|
padding: 5px;
|
||||||
|
&-image {
|
||||||
|
height: 100%;
|
||||||
|
width: 66.6%;
|
||||||
|
-moz-transition: 0.4s linear;
|
||||||
|
transition: 0.4s linear;
|
||||||
|
img {
|
||||||
|
@include fullImage;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.slick-slide {
|
||||||
|
width: 66.6%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-category {
|
||||||
|
position: absolute;
|
||||||
|
left: 30px;
|
||||||
|
bottom: 30px;
|
||||||
|
background: $main-color;
|
||||||
|
color: $text-color-white;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
padding: 5px 20px;
|
||||||
|
}
|
||||||
|
&.slick-active {
|
||||||
|
.animaSlider__item-image {
|
||||||
|
width: 100%;
|
||||||
|
img {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.slick-list {
|
||||||
|
padding: 0 33.3% 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
.subheader {
|
||||||
|
background: $text-light-black;
|
||||||
|
.close {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.nav {
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&-link {
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-color-white;
|
||||||
|
margin-right: 40px;
|
||||||
|
padding: 15px 0;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 0;
|
||||||
|
height: 4px;
|
||||||
|
background: $main-color;
|
||||||
|
content: "";
|
||||||
|
@include transition;
|
||||||
|
}
|
||||||
|
&:hover::before {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
&.active::before {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.dropDown {
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
width: 200px;
|
||||||
|
max-height: 0;
|
||||||
|
overflow: auto;
|
||||||
|
background: $text-color-white;
|
||||||
|
&__link {
|
||||||
|
display: block;
|
||||||
|
padding: 15px;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-light-black;
|
||||||
|
@include transition;
|
||||||
|
&:hover {
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover .dropDown {
|
||||||
|
max-height: 2000px;
|
||||||
|
}
|
||||||
|
&:hover::before {
|
||||||
|
width: 200px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.language {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&__link {
|
||||||
|
width: 30px;
|
||||||
|
height: 20px;
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,153 @@
|
||||||
|
.swiper-container {
|
||||||
|
width: calc(100% + 10px);
|
||||||
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
margin: 0 -5px;
|
||||||
|
.p3 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 5px;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.n3 {
|
||||||
|
cursor: pointer;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
top: 50%;
|
||||||
|
right: 5px;
|
||||||
|
@include transformY;
|
||||||
|
width: 30px;
|
||||||
|
height: 40px;
|
||||||
|
background: rgba($color: #000000, $alpha: 0.5);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
.slick-list {
|
||||||
|
padding: 0 33.3% 0 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.swiper-slide {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 18px;
|
||||||
|
height: 520px;
|
||||||
|
/* Center slide t ext vertically */
|
||||||
|
display: -webkit-box;
|
||||||
|
display: -ms-flexbox;
|
||||||
|
display: -webkit-flex;
|
||||||
|
display: flex;
|
||||||
|
-webkit-box-pack: center;
|
||||||
|
-ms-flex-pack: center;
|
||||||
|
-webkit-justify-content: center;
|
||||||
|
justify-content: center;
|
||||||
|
-webkit-box-align: center;
|
||||||
|
-ms-flex-align: center;
|
||||||
|
-webkit-align-items: center;
|
||||||
|
align-items: center;
|
||||||
|
overflow: hidden;
|
||||||
|
@include transition;
|
||||||
|
margin: 5px;
|
||||||
|
&-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
transform-origin: 0% 50%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
&-content {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
display: none;
|
||||||
|
width: calc(100% - 80px);
|
||||||
|
background: rgb(0, 0, 0);
|
||||||
|
background: linear-gradient(
|
||||||
|
0deg,
|
||||||
|
rgba(0, 0, 0, 1) 0%,
|
||||||
|
rgba(0, 0, 0, 0.022846638655462215) 100%
|
||||||
|
);
|
||||||
|
padding: 50px 40px;
|
||||||
|
|
||||||
|
&-date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-start;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 18px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-color-white;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
svg {
|
||||||
|
margin: 0 4px;
|
||||||
|
width: 4px;
|
||||||
|
height: 4px;
|
||||||
|
fill: $text-color-white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-footer {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
&-link {
|
||||||
|
color: $text-color-white;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 30px;
|
||||||
|
height: 60px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
font-weight: 700;
|
||||||
|
display: block;
|
||||||
|
text-align: left;
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
&-category {
|
||||||
|
color: 14px;
|
||||||
|
line-height: 18px;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-color-white;
|
||||||
|
padding: 8px 16px;
|
||||||
|
background: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&.slick-active .swiper-slide-content {
|
||||||
|
display: block;
|
||||||
|
animation: myAnim 1s ease 0s 1 normal forwards;
|
||||||
|
animation-delay: 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.copy {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 15px;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
text-align: center;
|
||||||
|
color: white;
|
||||||
|
letter-spacing: 0.06em;
|
||||||
|
}
|
||||||
|
.swiper-slide img {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
@keyframes myAnim {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(250px);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
.about {
|
||||||
|
padding: 80px 0;
|
||||||
|
&__title {
|
||||||
|
font-size: $h2-size;
|
||||||
|
line-height: $h2-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
&__para {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height + 14px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
.form {
|
||||||
|
&__title {
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
}
|
||||||
|
&__row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
&__input {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
-ms-flex-direction: column;
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
padding: 0 20px;
|
||||||
|
height: 60px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #c9c9c9;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-size;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
&:last-child {
|
||||||
|
width: calc(50% - 20px);
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
&:first-child {
|
||||||
|
width: calc(50% - 20px);
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__input-bg {
|
||||||
|
width: 100%;
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
input {
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
padding: 0 20px;
|
||||||
|
height: 60px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #c9c9c9;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-size;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__textarea {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 30px;
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
textarea {
|
||||||
|
width: calc(100% - 40px);
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: 1px solid #c9c9c9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__btn {
|
||||||
|
width: 250px;
|
||||||
|
background: $main-color;
|
||||||
|
text-align: center;
|
||||||
|
color: $text-color-white;
|
||||||
|
font-weight: 700;
|
||||||
|
padding: 14px;
|
||||||
|
border-radius: 5px;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.main {
|
||||||
|
&__inner.contact {
|
||||||
|
padding: 80px 0 160px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,154 @@
|
||||||
|
.heading {
|
||||||
|
&__title {
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
}
|
||||||
|
&__row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
}
|
||||||
|
&__image {
|
||||||
|
width: 40%;
|
||||||
|
}
|
||||||
|
a.progressive {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
outline: none;
|
||||||
|
height: 320px;
|
||||||
|
&:not(.replace) {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
& img {
|
||||||
|
@include fullImage;
|
||||||
|
}
|
||||||
|
& img.preview {
|
||||||
|
filter: blur(2vw);
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
& img.reveal {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
will-change: transform, opacity;
|
||||||
|
animation: reveal 1s ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
width: calc(60% - 40px);
|
||||||
|
height: calc(100% - 80px);
|
||||||
|
padding: 40px 0 40px 40px;
|
||||||
|
&-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
&-view {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
color: $text-color-grey;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height - 5px;
|
||||||
|
svg {
|
||||||
|
margin-right: 5px;
|
||||||
|
stroke: $text-color-grey;
|
||||||
|
width: 21px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
color: $text-color-white;
|
||||||
|
background: $text-light-black;
|
||||||
|
font-weight: 400;
|
||||||
|
padding: 5px 15px;
|
||||||
|
svg {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-body {
|
||||||
|
&-link {
|
||||||
|
color: $text-black;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
margin: 10px 0 0 0;
|
||||||
|
display: block;
|
||||||
|
height: 60px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
&-para {
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-light-black;
|
||||||
|
height: 120px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__footer {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&-page {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
background: $text-light-black;
|
||||||
|
svg {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
fill: $text-color-white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-input {
|
||||||
|
width: 80px;
|
||||||
|
height: 40px;
|
||||||
|
margin: 0 10px;
|
||||||
|
|
||||||
|
input {
|
||||||
|
text-align: center;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 5px;
|
||||||
|
background: #e6e6e6;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
span {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
color: $text-light-black;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.address {
|
||||||
|
&__inner {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
color: $text-light-black;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-bottom: 25px;
|
||||||
|
span {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,370 @@
|
||||||
|
.marquee {
|
||||||
|
width: 100%;
|
||||||
|
margin: 10px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
|
height: 40px;
|
||||||
|
&::after {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 260px;
|
||||||
|
height: 100%;
|
||||||
|
content: "";
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
rgba(255, 255, 255, 0) 0%,
|
||||||
|
rgba(255, 255, 255, 1) 100%
|
||||||
|
);
|
||||||
|
}
|
||||||
|
&__link {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 120px;
|
||||||
|
height: 100%;
|
||||||
|
background: #00822c;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
z-index: 1;
|
||||||
|
font-size: 14px;
|
||||||
|
color: $text-color-white;
|
||||||
|
line-height: 16px;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
&::before {
|
||||||
|
clip-path: polygon(100% 46%, 0 0, 0 100%);
|
||||||
|
background: #00822c;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 100%;
|
||||||
|
height: 100%;
|
||||||
|
width: 25px;
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.marquee div {
|
||||||
|
display: block;
|
||||||
|
width: 200%;
|
||||||
|
height: 30px;
|
||||||
|
position: absolute;
|
||||||
|
overflow: hidden;
|
||||||
|
animation: marquee 10s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
.marquee span {
|
||||||
|
float: left;
|
||||||
|
width: 50%;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 40px;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-black;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes marquee {
|
||||||
|
0% {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
left: -100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make it move */
|
||||||
|
@keyframes marquee {
|
||||||
|
0% {
|
||||||
|
transform: translate(0, 0);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translate(-100%, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// banner start
|
||||||
|
.banner {
|
||||||
|
margin: 80px 0;
|
||||||
|
&__inner {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// banner end
|
||||||
|
|
||||||
|
// main start
|
||||||
|
.main {
|
||||||
|
margin-top: 70px;
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
width: calc(70% - 25px);
|
||||||
|
margin-right: 25px;
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
margin: 0 -20px 80px -20px;
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
width: calc(50% - 42px);
|
||||||
|
margin: 0 20px;
|
||||||
|
a.progressive {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
outline: none;
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
a.progressive:not(.replace) {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
a.progressive img {
|
||||||
|
@include fullImage;
|
||||||
|
}
|
||||||
|
a.progressive img.preview {
|
||||||
|
filter: blur(2vw);
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
a.progressive img.reveal {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
will-change: transform, opacity;
|
||||||
|
animation: reveal 1s ease-out;
|
||||||
|
}
|
||||||
|
&.border {
|
||||||
|
border: 1px solid #dcdcdc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-header {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
position: relative;
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 80%;
|
||||||
|
height: 1px;
|
||||||
|
background: #e6e6e6;
|
||||||
|
@include transform;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
&-title {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
background: $text-color-white;
|
||||||
|
}
|
||||||
|
&-link {
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-color-grey;
|
||||||
|
background: $text-color-white;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-card {
|
||||||
|
margin: -100px 30px 0 30px;
|
||||||
|
}
|
||||||
|
&-title {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__banner {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__sidebar {
|
||||||
|
margin-left: 25px;
|
||||||
|
width: calc(30% - 25px);
|
||||||
|
&-title {
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
a.progressive {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
outline: none;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
&:not(.replace) {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
& img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
& img.preview {
|
||||||
|
filter: blur(2vw);
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
& img.reveal {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
will-change: transform, opacity;
|
||||||
|
animation: reveal 1s ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-tag {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: -30px -5px 80px -5px;
|
||||||
|
&-link {
|
||||||
|
padding: 8px 9px;
|
||||||
|
border-right: 5px;
|
||||||
|
background: #f7f7f6;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 16px;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// main end
|
||||||
|
// event start
|
||||||
|
.event {
|
||||||
|
margin: 80px 0;
|
||||||
|
&__header {
|
||||||
|
margin-bottom: 80px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
position: relative;
|
||||||
|
&-title {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
background: $text-color-white;
|
||||||
|
}
|
||||||
|
&-link {
|
||||||
|
font-size: $h5-size;
|
||||||
|
line-height: $h5-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-color-grey;
|
||||||
|
background: $text-color-white;
|
||||||
|
}
|
||||||
|
&::before {
|
||||||
|
position: absolute;
|
||||||
|
content: "";
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 80%;
|
||||||
|
height: 1px;
|
||||||
|
background: #e6e6e6;
|
||||||
|
@include transform;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
&-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
margin: 0 -20px;
|
||||||
|
}
|
||||||
|
&-image {
|
||||||
|
width: calc(50% - 40px);
|
||||||
|
margin: 0 20px;
|
||||||
|
position: relative;
|
||||||
|
a.progressive {
|
||||||
|
position: relative;
|
||||||
|
display: block;
|
||||||
|
overflow: hidden;
|
||||||
|
outline: none;
|
||||||
|
height: 330px;
|
||||||
|
}
|
||||||
|
a.progressive:not(.replace) {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
a.progressive img {
|
||||||
|
@include fullImage;
|
||||||
|
}
|
||||||
|
a.progressive img.preview {
|
||||||
|
filter: blur(2vw);
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
a.progressive img.reveal {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
will-change: transform, opacity;
|
||||||
|
animation: reveal 1s ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-card {
|
||||||
|
position: absolute;
|
||||||
|
bottom: -30px;
|
||||||
|
left: 30px;
|
||||||
|
width: calc(100% - 60px);
|
||||||
|
border: 1px solid #707070;
|
||||||
|
}
|
||||||
|
&-column {
|
||||||
|
width: calc(50% - 100px);
|
||||||
|
margin: 0 20px;
|
||||||
|
padding: 15px 30px;
|
||||||
|
border: 1px solid #dcdcdc;
|
||||||
|
.card {
|
||||||
|
padding: 30px 0;
|
||||||
|
border-bottom: 1px solid #dcdcdc;
|
||||||
|
&:nth-last-child(1) {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// event end
|
||||||
|
// partner start
|
||||||
|
.partner {
|
||||||
|
margin-bottom: 80px;
|
||||||
|
&__title {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
margin-bottom: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// partner end
|
||||||
|
/* progressive image CSS */
|
||||||
|
|
||||||
|
@keyframes reveal {
|
||||||
|
0% {
|
||||||
|
transform: scale(1.05);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
.news {
|
||||||
|
&__inner {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
padding: 80px 0;
|
||||||
|
}
|
||||||
|
&__sidebar {
|
||||||
|
margin-left: 25px;
|
||||||
|
width: calc(30% - 25px);
|
||||||
|
&-title {
|
||||||
|
font-size: $h4-size;
|
||||||
|
line-height: $h4-height;
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
padding: 30px 0;
|
||||||
|
border-bottom: 1px solid #dcdcdc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__content {
|
||||||
|
width: calc(70% - 25px);
|
||||||
|
margin-right: 25px;
|
||||||
|
}
|
||||||
|
&__title {
|
||||||
|
color: $text-black;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: $h2-size;
|
||||||
|
line-height: $h2-height;
|
||||||
|
}
|
||||||
|
&__date {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
color: $text-color-grey;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
svg {
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__image {
|
||||||
|
width: 100%;
|
||||||
|
margin: 50px 0;
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__body {
|
||||||
|
p {
|
||||||
|
font-size: $p-size;
|
||||||
|
line-height: $p-height;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
img.aligncenter {
|
||||||
|
margin: 100px auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&__footer {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
&-social {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
&-link {
|
||||||
|
margin-right: 20px;
|
||||||
|
fill: $main-color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&-name {
|
||||||
|
font-size: $h2-size;
|
||||||
|
line-height: $h2-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-light-black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
.terms {
|
||||||
|
padding: 80px 0;
|
||||||
|
&__title {
|
||||||
|
font-size: $h3-size;
|
||||||
|
line-height: $h3-height;
|
||||||
|
font-weight: 700;
|
||||||
|
color: $text-black;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
&__para {
|
||||||
|
font-size: $p-size;
|
||||||
|
line-height: $p-height;
|
||||||
|
font-weight: 400;
|
||||||
|
color: $text-black;
|
||||||
|
margin-bottom: 40px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
// 1-main components
|
||||||
|
@import "./components/1-main/mixin.scss";
|
||||||
|
@import "./components/1-main/nulifier.scss";
|
||||||
|
@import "./components/1-main/variables.scss";
|
||||||
|
// 2-layout components
|
||||||
|
|
||||||
|
@import "./components/2-layout/header.scss";
|
||||||
|
@import "./components/2-layout/footer.scss";
|
||||||
|
|
||||||
|
@import "./components/2-layout/subheader.scss";
|
||||||
|
@import "../slick/slick.scss";
|
||||||
|
@import "../slick/slick-theme.scss";
|
||||||
|
@import "./components/2-layout/partnerSlider.scss";
|
||||||
|
@import "./components/2-layout/newsCard.scss";
|
||||||
|
@import "./components/2-layout/lightpick.scss";
|
||||||
|
@import "./components/2-layout/newsSlider.scss";
|
||||||
|
@import "./components/2-layout/swiper.scss";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3-page components
|
||||||
|
@import "./components/3-page/home.scss";
|
||||||
|
@import "./components/3-page/heading.scss";
|
||||||
|
@import "./components/3-page/about.scss";
|
||||||
|
@import "./components/3-page/contact.scss";
|
||||||
|
@import "./components/3-page/news.scss";
|
||||||
|
@import "./components/3-page/terms.scss";
|
||||||
|
|
||||||
|
|
||||||
|
@import "./components/2-layout/slider.scss";
|
||||||
|
|
||||||
|
// responsive
|
||||||
|
@import "./components/2-layout/responsive.scss";
|
||||||
|
|
@ -0,0 +1,921 @@
|
||||||
|
{
|
||||||
|
"version": "7",
|
||||||
|
"about": "This is a Prepros (https://prepros.io) configuration file. You can commit this file to a git repo to backup and sync project configurations.",
|
||||||
|
"config": {
|
||||||
|
"proxy": {
|
||||||
|
"enable": false,
|
||||||
|
"target": "",
|
||||||
|
"useLocalAssets": false
|
||||||
|
},
|
||||||
|
"reload": {
|
||||||
|
"enable": true,
|
||||||
|
"delay": 0,
|
||||||
|
"animate": true,
|
||||||
|
"afterUpload": false
|
||||||
|
},
|
||||||
|
"sync": {
|
||||||
|
"enable": false,
|
||||||
|
"mouse": true,
|
||||||
|
"keyboard": true,
|
||||||
|
"form": true,
|
||||||
|
"scroll": true
|
||||||
|
},
|
||||||
|
"watcher": {
|
||||||
|
"enable": true,
|
||||||
|
"maxFiles": 2000,
|
||||||
|
"usePolling": false,
|
||||||
|
"pollingInterval": 500,
|
||||||
|
"extensions": [
|
||||||
|
".html",
|
||||||
|
".htm",
|
||||||
|
".php"
|
||||||
|
],
|
||||||
|
"ignore": {
|
||||||
|
"patterns": [
|
||||||
|
".*",
|
||||||
|
"wp-admin",
|
||||||
|
"wp-includes",
|
||||||
|
"node_modules",
|
||||||
|
"Prepros Export",
|
||||||
|
"bower_components"
|
||||||
|
],
|
||||||
|
"exceptions": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exporter": {
|
||||||
|
"ignore": {
|
||||||
|
"patterns": [
|
||||||
|
".*",
|
||||||
|
"desktop.ini",
|
||||||
|
"prepros.cfg",
|
||||||
|
"node_modules",
|
||||||
|
"Prepros Export",
|
||||||
|
"prepros.config",
|
||||||
|
"prepros-6.config",
|
||||||
|
"*-original.jpg",
|
||||||
|
"*-original.jpeg",
|
||||||
|
"*-original.png",
|
||||||
|
"*-original.svg",
|
||||||
|
"*.scss",
|
||||||
|
"*.sass",
|
||||||
|
"*.less",
|
||||||
|
"*.pug",
|
||||||
|
"*.jade",
|
||||||
|
"*.styl",
|
||||||
|
"*.haml",
|
||||||
|
"*.slim",
|
||||||
|
"*.coffee",
|
||||||
|
"*.kit",
|
||||||
|
"*.turf",
|
||||||
|
"*.ts"
|
||||||
|
],
|
||||||
|
"exceptions": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"uploader": {
|
||||||
|
"remotePath": "",
|
||||||
|
"timeout": 20000,
|
||||||
|
"autoUpload": false,
|
||||||
|
"reuseConnection": true,
|
||||||
|
"connectionType": "ftp",
|
||||||
|
"history": []
|
||||||
|
},
|
||||||
|
"packages": {
|
||||||
|
"createPackageLock": true
|
||||||
|
},
|
||||||
|
"images": {
|
||||||
|
"preserveOriginal": true
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"autoprefixer": {
|
||||||
|
"cascade": true,
|
||||||
|
"add": true,
|
||||||
|
"remove": true,
|
||||||
|
"supports": true,
|
||||||
|
"flexbox": true,
|
||||||
|
"grid": "autoplace",
|
||||||
|
"browsers": [
|
||||||
|
"> 2%",
|
||||||
|
"not dead"
|
||||||
|
],
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"babel": {
|
||||||
|
"sourceMap": false,
|
||||||
|
"presets": {
|
||||||
|
"@babel/preset-env": {
|
||||||
|
"enable": true,
|
||||||
|
"options": {
|
||||||
|
"targets": [
|
||||||
|
"> 2%",
|
||||||
|
"not dead"
|
||||||
|
],
|
||||||
|
"preserveImports": false,
|
||||||
|
"polyfills": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/preset-react": true,
|
||||||
|
"@babel/preset-flow": false
|
||||||
|
},
|
||||||
|
"plugins": {
|
||||||
|
"@babel/plugin-proposal-class-static-block": false,
|
||||||
|
"@babel/plugin-proposal-class-properties": false,
|
||||||
|
"@babel/plugin-proposal-decorators": {
|
||||||
|
"enable": false,
|
||||||
|
"options": {
|
||||||
|
"decoratorsBeforeExport": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/plugin-proposal-export-namespace-from": false,
|
||||||
|
"@babel/plugin-proposal-function-sent": false,
|
||||||
|
"@babel/plugin-proposal-logical-assignment-operators": false,
|
||||||
|
"@babel/plugin-proposal-nullish-coalescing-operator": false,
|
||||||
|
"@babel/plugin-proposal-numeric-separator": false,
|
||||||
|
"@babel/plugin-proposal-optional-chaining": false,
|
||||||
|
"@babel/plugin-proposal-private-methods": false,
|
||||||
|
"@babel/plugin-proposal-throw-expressions": false
|
||||||
|
},
|
||||||
|
"customPresets": [],
|
||||||
|
"customPlugins": []
|
||||||
|
},
|
||||||
|
"bundle-js": {
|
||||||
|
"sourceMap": false,
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"bower_components"
|
||||||
|
],
|
||||||
|
"devMode": true,
|
||||||
|
"globals": [],
|
||||||
|
"externals": [],
|
||||||
|
"babel": {
|
||||||
|
"enable": true,
|
||||||
|
"options": {
|
||||||
|
"sourceMap": false,
|
||||||
|
"presets": {
|
||||||
|
"@babel/preset-env": {
|
||||||
|
"enable": true,
|
||||||
|
"options": {
|
||||||
|
"targets": [
|
||||||
|
"> 2%",
|
||||||
|
"not dead"
|
||||||
|
],
|
||||||
|
"preserveImports": false,
|
||||||
|
"polyfills": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/preset-react": true,
|
||||||
|
"@babel/preset-flow": false
|
||||||
|
},
|
||||||
|
"plugins": {
|
||||||
|
"@babel/plugin-proposal-class-static-block": false,
|
||||||
|
"@babel/plugin-proposal-class-properties": false,
|
||||||
|
"@babel/plugin-proposal-decorators": {
|
||||||
|
"enable": false,
|
||||||
|
"options": {
|
||||||
|
"decoratorsBeforeExport": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/plugin-proposal-export-namespace-from": false,
|
||||||
|
"@babel/plugin-proposal-function-sent": false,
|
||||||
|
"@babel/plugin-proposal-logical-assignment-operators": false,
|
||||||
|
"@babel/plugin-proposal-nullish-coalescing-operator": false,
|
||||||
|
"@babel/plugin-proposal-numeric-separator": false,
|
||||||
|
"@babel/plugin-proposal-optional-chaining": false,
|
||||||
|
"@babel/plugin-proposal-private-methods": false,
|
||||||
|
"@babel/plugin-proposal-throw-expressions": false
|
||||||
|
},
|
||||||
|
"customPresets": [],
|
||||||
|
"customPlugins": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
"fonts": {
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"coffeescript": {
|
||||||
|
"header": false,
|
||||||
|
"bare": false,
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"command": {
|
||||||
|
"command": "",
|
||||||
|
"rootDir": ""
|
||||||
|
},
|
||||||
|
"concat-js": {
|
||||||
|
"sourceMap": false,
|
||||||
|
"rootDir": ""
|
||||||
|
},
|
||||||
|
"copy": {
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"dart-sass": {
|
||||||
|
"indentType": "space",
|
||||||
|
"allowWildcardImports": false,
|
||||||
|
"indentWidth": 2,
|
||||||
|
"linefeed": "lf",
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"haml": {
|
||||||
|
"doubleQuoteAttributes": true
|
||||||
|
},
|
||||||
|
"jpg": {
|
||||||
|
"quality": 90
|
||||||
|
},
|
||||||
|
"less": {
|
||||||
|
"javascriptEnabled": false,
|
||||||
|
"strictImports": false,
|
||||||
|
"insecure": false,
|
||||||
|
"math": "always",
|
||||||
|
"strictUnits": false,
|
||||||
|
"dumpLineNumbers": false,
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"githubFlavored": true,
|
||||||
|
"wrapWithHtml": false
|
||||||
|
},
|
||||||
|
"minify-css": {
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"minify-html": {
|
||||||
|
"caseSensitive": false,
|
||||||
|
"collapseBooleanAttributes": true,
|
||||||
|
"collapseInlineTagWhitespace": false,
|
||||||
|
"collapseWhitespace": true,
|
||||||
|
"conservativeCollapse": false,
|
||||||
|
"decodeEntities": false,
|
||||||
|
"html5": true,
|
||||||
|
"includeAutoGeneratedTags": true,
|
||||||
|
"keepClosingSlash": false,
|
||||||
|
"minifyCSS": true,
|
||||||
|
"minifyJS": true,
|
||||||
|
"preserveLineBreaks": false,
|
||||||
|
"preventAttributesEscaping": false,
|
||||||
|
"processConditionalComments": false,
|
||||||
|
"removeAttributeQuotes": false,
|
||||||
|
"removeComments": true,
|
||||||
|
"removeEmptyAttributes": false,
|
||||||
|
"removeEmptyElement": false,
|
||||||
|
"removeOptionalTags": false,
|
||||||
|
"removeRedundantAttributes": false,
|
||||||
|
"removeScriptTypeAttributes": false,
|
||||||
|
"removeStyleLinkTypeAttributes": false,
|
||||||
|
"removeTagWhitespace": false,
|
||||||
|
"sortAttributes": false,
|
||||||
|
"sortClassName": false,
|
||||||
|
"useShortDoctype": true
|
||||||
|
},
|
||||||
|
"minify-js": {
|
||||||
|
"parse": {
|
||||||
|
"bare_returns": false
|
||||||
|
},
|
||||||
|
"compress": {
|
||||||
|
"arrows": true,
|
||||||
|
"arguments": false,
|
||||||
|
"booleans": true,
|
||||||
|
"booleans_as_integers": false,
|
||||||
|
"collapse_vars": true,
|
||||||
|
"comparisons": true,
|
||||||
|
"computed_props": true,
|
||||||
|
"conditionals": true,
|
||||||
|
"dead_code": true,
|
||||||
|
"directives": true,
|
||||||
|
"drop_console": false,
|
||||||
|
"drop_debugger": true,
|
||||||
|
"evaluate": true,
|
||||||
|
"expression": false,
|
||||||
|
"global_defs": [],
|
||||||
|
"hoist_funs": false,
|
||||||
|
"hoist_props": true,
|
||||||
|
"hoist_vars": false,
|
||||||
|
"if_return": true,
|
||||||
|
"inline": 3,
|
||||||
|
"join_vars": true,
|
||||||
|
"keep_fargs": true,
|
||||||
|
"keep_infinity": false,
|
||||||
|
"loops": true,
|
||||||
|
"negate_iife": true,
|
||||||
|
"properties": true,
|
||||||
|
"pure_funcs": [],
|
||||||
|
"pure_getters": false,
|
||||||
|
"reduce_funcs": true,
|
||||||
|
"reduce_vars": true,
|
||||||
|
"sequences": true,
|
||||||
|
"side_effects": true,
|
||||||
|
"switches": true,
|
||||||
|
"top_retain": [],
|
||||||
|
"typeofs": true,
|
||||||
|
"unsafe": false,
|
||||||
|
"unsafe_arrows": false,
|
||||||
|
"unsafe_comps": false,
|
||||||
|
"unsafe_Function": false,
|
||||||
|
"unsafe_math": false,
|
||||||
|
"unsafe_proto": false,
|
||||||
|
"unsafe_regexp": false,
|
||||||
|
"unsafe_undefined": false,
|
||||||
|
"unused": true
|
||||||
|
},
|
||||||
|
"mangle": {
|
||||||
|
"eval": false,
|
||||||
|
"reserved": []
|
||||||
|
},
|
||||||
|
"output": {
|
||||||
|
"ascii_only": false,
|
||||||
|
"braces": false,
|
||||||
|
"comments": "none",
|
||||||
|
"inline_script": true,
|
||||||
|
"keep_numbers": false,
|
||||||
|
"keep_quoted_props": false,
|
||||||
|
"preamble": null,
|
||||||
|
"quote_keys": false,
|
||||||
|
"quote_style": 0,
|
||||||
|
"semicolons": true,
|
||||||
|
"shebang": true,
|
||||||
|
"webkit": false,
|
||||||
|
"wrap_iife": false,
|
||||||
|
"wrap_func_args": true
|
||||||
|
},
|
||||||
|
"sourceMap": false,
|
||||||
|
"toplevel": false,
|
||||||
|
"ie8": false,
|
||||||
|
"keep_classnames": false,
|
||||||
|
"keep_fnames": false,
|
||||||
|
"safari10": false
|
||||||
|
},
|
||||||
|
"node-sass": {
|
||||||
|
"indentType": "space",
|
||||||
|
"allowWildcardImports": false,
|
||||||
|
"indentWidth": 2,
|
||||||
|
"linefeed": "lf",
|
||||||
|
"outputStyle": "expanded",
|
||||||
|
"precision": 10,
|
||||||
|
"sourceMap": false,
|
||||||
|
"sourceComments": false
|
||||||
|
},
|
||||||
|
"png": {
|
||||||
|
"quality": 90
|
||||||
|
},
|
||||||
|
"postcss-import": {
|
||||||
|
"ignoreKeywords": [],
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"postcss-preset-env": {
|
||||||
|
"stage": 2,
|
||||||
|
"browsers": [
|
||||||
|
"> 2%",
|
||||||
|
"not dead"
|
||||||
|
],
|
||||||
|
"sourceMap": false
|
||||||
|
},
|
||||||
|
"pug": {
|
||||||
|
"pretty": true
|
||||||
|
},
|
||||||
|
"slim": {
|
||||||
|
"indent": "space",
|
||||||
|
"indentSize": 2,
|
||||||
|
"pretty": true
|
||||||
|
},
|
||||||
|
"stylus": {
|
||||||
|
"useNib": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"linenos": false
|
||||||
|
},
|
||||||
|
"svg": {
|
||||||
|
"cleanupAttrs": true,
|
||||||
|
"removeDoctype": true,
|
||||||
|
"removeXMLProcInst": true,
|
||||||
|
"removeComments": true,
|
||||||
|
"removeMetadata": true,
|
||||||
|
"removeTitle": true,
|
||||||
|
"removeDesc": true,
|
||||||
|
"removeUselessDefs": true,
|
||||||
|
"removeEditorsNSData": true,
|
||||||
|
"removeEmptyAttrs": true,
|
||||||
|
"removeHiddenElems": true,
|
||||||
|
"removeEmptyText": true,
|
||||||
|
"removeEmptyContainers": true,
|
||||||
|
"removeViewBox": false,
|
||||||
|
"cleanupEnableBackground": true,
|
||||||
|
"convertStyleToAttrs": true,
|
||||||
|
"convertColors": true,
|
||||||
|
"convertPathData": true,
|
||||||
|
"convertTransform": true,
|
||||||
|
"removeUnknownsAndDefaults": true,
|
||||||
|
"removeNonInheritableGroupAttrs": true,
|
||||||
|
"removeUselessStrokeAndFill": true,
|
||||||
|
"removeUnusedNS": true,
|
||||||
|
"cleanupIDs": true,
|
||||||
|
"cleanupNumericValues": true,
|
||||||
|
"moveElemsAttrsToGroup": true,
|
||||||
|
"moveGroupAttrsToElems": true,
|
||||||
|
"collapseGroups": true,
|
||||||
|
"removeRasterImages": false,
|
||||||
|
"mergePaths": true,
|
||||||
|
"convertShapeToPath": true,
|
||||||
|
"sortAttrs": true,
|
||||||
|
"removeDimensions": true
|
||||||
|
},
|
||||||
|
"turf": {
|
||||||
|
"rootDir": ""
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"allowJs": false,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"allowUmdGlobalAccess": false,
|
||||||
|
"allowUnreachableCode": false,
|
||||||
|
"allowUnusedLabels": false,
|
||||||
|
"alwaysStrict": false,
|
||||||
|
"charset": "utf8",
|
||||||
|
"checkJs": false,
|
||||||
|
"declaration": false,
|
||||||
|
"disableSizeLimit": false,
|
||||||
|
"downlevelIteration": false,
|
||||||
|
"emitBOM": false,
|
||||||
|
"emitDecoratorMetadata": false,
|
||||||
|
"experimentalDecorators": false,
|
||||||
|
"forceConsistentCasingInFileNames": false,
|
||||||
|
"importHelpers": false,
|
||||||
|
"jsx": "React",
|
||||||
|
"keyofStringsOnly": false,
|
||||||
|
"lib": [],
|
||||||
|
"maxNodeModuleJsDepth": 0,
|
||||||
|
"module": "ES2015",
|
||||||
|
"moduleResolution": "NodeJs",
|
||||||
|
"newLine": "LineFeed",
|
||||||
|
"noFallthroughCasesInSwitch": false,
|
||||||
|
"noImplicitAny": false,
|
||||||
|
"noImplicitReturns": false,
|
||||||
|
"noImplicitThis": false,
|
||||||
|
"noStrictGenericChecks": false,
|
||||||
|
"noUnusedLocals": false,
|
||||||
|
"noUnusedParameters": false,
|
||||||
|
"noImplicitUseStrict": false,
|
||||||
|
"noLib": false,
|
||||||
|
"noResolve": false,
|
||||||
|
"preserveConstEnums": false,
|
||||||
|
"jsxFactory": "React.createElement",
|
||||||
|
"removeComments": false,
|
||||||
|
"skipLibCheck": false,
|
||||||
|
"sourceMap": false,
|
||||||
|
"strict": false,
|
||||||
|
"strictFunctionTypes": false,
|
||||||
|
"strictBindCallApply": false,
|
||||||
|
"strictNullChecks": false,
|
||||||
|
"strictPropertyInitialization": false,
|
||||||
|
"suppressExcessPropertyErrors": false,
|
||||||
|
"suppressImplicitAnyIndexErrors": false,
|
||||||
|
"target": "ES3",
|
||||||
|
"resolveJsonModule": false,
|
||||||
|
"esModuleInterop": false,
|
||||||
|
"useDefineForClassFields": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fileTypes": {
|
||||||
|
"sass": {
|
||||||
|
"extensions": [
|
||||||
|
".scss",
|
||||||
|
".sass"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "dart-sass",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "autoprefixer",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-css",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".css",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "scss",
|
||||||
|
"replaceWith": "css"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"segment": "sass",
|
||||||
|
"replaceWith": "css"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"less": {
|
||||||
|
"extensions": [
|
||||||
|
".less"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "less",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "autoprefixer",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-css",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".css",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "less",
|
||||||
|
"replaceWith": "css"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pug": {
|
||||||
|
"extensions": [
|
||||||
|
".pug",
|
||||||
|
".jade"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "pug",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-html",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".html",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "pug",
|
||||||
|
"replaceWith": "html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"css": {
|
||||||
|
"extensions": [
|
||||||
|
".css"
|
||||||
|
],
|
||||||
|
"autoCompile": false,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "copy",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "postcss-import",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "postcss-preset-env",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "autoprefixer",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-css",
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".css",
|
||||||
|
"type": "SOURCE_RELATIVE",
|
||||||
|
"relativePath": "",
|
||||||
|
"suffix": "-dist",
|
||||||
|
"alwaysSuffix": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"javascript": {
|
||||||
|
"extensions": [
|
||||||
|
".js",
|
||||||
|
".jsx"
|
||||||
|
],
|
||||||
|
"autoCompile": false,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "copy",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "concat-js",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "babel",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "bundle-js",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-js",
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".js",
|
||||||
|
"type": "SOURCE_RELATIVE",
|
||||||
|
"relativePath": "",
|
||||||
|
"suffix": "-dist",
|
||||||
|
"alwaysSuffix": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stylus": {
|
||||||
|
"extensions": [
|
||||||
|
".styl"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "stylus",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "autoprefixer",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-css",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".css",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "stylus",
|
||||||
|
"replaceWith": "css"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"segment": "styl",
|
||||||
|
"replaceWith": "css"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"markdown": {
|
||||||
|
"extensions": [
|
||||||
|
".md",
|
||||||
|
".markdown",
|
||||||
|
".mkd"
|
||||||
|
],
|
||||||
|
"autoCompile": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "markdown",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-html",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".html",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "markdown",
|
||||||
|
"replaceWith": "html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"haml": {
|
||||||
|
"extensions": [
|
||||||
|
".haml"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "haml",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-html",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".html",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "haml",
|
||||||
|
"replaceWith": "html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"slim": {
|
||||||
|
"extensions": [
|
||||||
|
".slim"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "slim",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-html",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".html",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "slim",
|
||||||
|
"replaceWith": "html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"coffeescript": {
|
||||||
|
"extensions": [
|
||||||
|
".coffee"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "coffeescript",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "babel",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "bundle-js",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-js",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".js",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "coffee-script",
|
||||||
|
"replaceWith": "js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"segment": "coffeescript",
|
||||||
|
"replaceWith": "js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"segment": "coffee",
|
||||||
|
"replaceWith": "js"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"turf": {
|
||||||
|
"extensions": [
|
||||||
|
".turf",
|
||||||
|
".kit"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "turf",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-html",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".html",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "turf",
|
||||||
|
"replaceWith": "html"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"typescript": {
|
||||||
|
"extensions": [
|
||||||
|
".ts",
|
||||||
|
".tsx"
|
||||||
|
],
|
||||||
|
"autoCompile": true,
|
||||||
|
"sourceMap": false,
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "typescript",
|
||||||
|
"enable": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "babel",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "bundle-js",
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"task": "minify-js",
|
||||||
|
"enable": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".js",
|
||||||
|
"type": "REPLACE_SEGMENTS",
|
||||||
|
"segments": [
|
||||||
|
{
|
||||||
|
"segment": "typescript",
|
||||||
|
"replaceWith": "js"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"segment": "ts",
|
||||||
|
"replaceWith": "js"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"jpg": {
|
||||||
|
"extensions": [
|
||||||
|
".jpg",
|
||||||
|
".jpeg"
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "jpg",
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".jpg",
|
||||||
|
"type": "SOURCE_RELATIVE",
|
||||||
|
"relativePath": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"png": {
|
||||||
|
"extensions": [
|
||||||
|
".png"
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "png",
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".png",
|
||||||
|
"type": "SOURCE_RELATIVE",
|
||||||
|
"relativePath": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"svg": {
|
||||||
|
"extensions": [
|
||||||
|
".svg"
|
||||||
|
],
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"task": "svg",
|
||||||
|
"enable": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"output": {
|
||||||
|
"extension": ".svg",
|
||||||
|
"type": "SOURCE_RELATIVE",
|
||||||
|
"relativePath": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": []
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="940" height="160" viewBox="0 0 940 160">
|
||||||
|
<rect id="Реклама_большая_1_" data-name="Реклама большая (1)" width="940" height="160" fill="#b4b4b4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 229 B |
|
|
@ -0,0 +1,32 @@
|
||||||
|
<svg id="header_2" data-name="header 2" xmlns="http://www.w3.org/2000/svg" width="116" height="60" viewBox="0 0 116 60">
|
||||||
|
<g id="Group_101" data-name="Group 101" transform="translate(18.146 0.368)">
|
||||||
|
<g id="Group_198" data-name="Group 198" transform="translate(0 0)">
|
||||||
|
<path id="Path_85" data-name="Path 85" d="M108.458,42.238l3.5,28.609H110.3a7.537,7.537,0,0,1-7.369-6.5L100.537,45.4H97.774V37.222h2.763a3.118,3.118,0,0,0,3.132-3.158V22.918a3.118,3.118,0,0,0-3.132-3.158H97.59a12.2,12.2,0,0,0-3.869-7.431L92.8,11.4h7.737a11.528,11.528,0,0,1,11.421,11.518V34.064a11.128,11.128,0,0,1-3.5,8.174" transform="translate(-92.8 -11.4)" fill="#00822c"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group_103" data-name="Group 103" transform="translate(39.79 0.368)">
|
||||||
|
<g id="Group_197" data-name="Group 197" transform="translate(0 0)">
|
||||||
|
<path id="Path_86" data-name="Path 86" d="M104.5,11.4h0V70.847h8.474v-50.9A8.608,8.608,0,0,0,104.5,11.4" transform="translate(-104.5 -11.4)" fill="#00822c"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group_105" data-name="Group 105" transform="translate(0 0.368)">
|
||||||
|
<g id="Group_196" data-name="Group 196" transform="translate(0 0)">
|
||||||
|
<path id="Path_87" data-name="Path 87" d="M101.237,14.372C99.4,12.329,96.816,11.4,93.5,11.4s-5.895.929-7.737,2.972C83.921,16.23,83,19.016,83,22.546V59.885a11.537,11.537,0,0,0,2.763,8.174c1.842,2.043,4.421,2.972,7.737,2.972s5.895-.929,7.737-2.972C103.08,66.2,104,63.415,104,59.885V22.546c0-3.53-.921-6.316-2.763-8.174M95.9,60.071c0,2.6-1.105,2.972-2.395,2.972-1.105,0-2.395-.372-2.395-2.972v-37.9c0-2.6,1.105-2.972,2.395-2.972,1.105,0,2.395.372,2.395,2.972Z" transform="translate(-83 -11.4)" fill="#00822c"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group_107" data-name="Group 107" transform="translate(90.946 0.368)">
|
||||||
|
<g id="Group_193" data-name="Group 193" transform="translate(0 0)">
|
||||||
|
<path id="Path_88" data-name="Path 88" d="M157.154,11.4v8.546H150.89v50.9a8.54,8.54,0,0,1-3.132-.557,8.765,8.765,0,0,1-4.79-4.83h0a1.124,1.124,0,0,1-.184-.743c-.184-.557-.184-1.115-.368-1.672v-43.1H132.1a9.8,9.8,0,0,1,2.579-5.573c1.842-2.044,4.421-2.972,7.737-2.972Z" transform="translate(-132.1 -11.4)" fill="#00822c"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group_109" data-name="Group 109" transform="translate(70.498 0)">
|
||||||
|
<g id="Group_194" data-name="Group 194" transform="translate(0 0)">
|
||||||
|
<path id="Path_89" data-name="Path 89" d="M141.448,22.346V45.567L132.237,11.2H121V60.429h8.106V26.99l9.579,35.482a11.082,11.082,0,0,0,10.869,8.36V22.346Z" transform="translate(-121 -11.2)" fill="#00822c"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="Group_111" data-name="Group 111" transform="translate(50.576 0.368)">
|
||||||
|
<g id="Group_195" data-name="Group 195" transform="translate(0 0)">
|
||||||
|
<path id="Path_90" data-name="Path 90" d="M118.774,62.86V45.212h5.895V37.037h-5.895V19.2H127.8V11.4H110.3V62.117a8.389,8.389,0,0,0,7.921,8.546h19.9V62.675H118.774v.186Z" transform="translate(-110.3 -11.4)" fill="#ee4037"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 945 KiB |
|
After Width: | Height: | Size: 483 KiB |
|
After Width: | Height: | Size: 294 KiB |
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="4" height="4" viewBox="0 0 4 4">
|
||||||
|
<path id="Polygon_1" data-name="Polygon 1" d="M2,0,4,2,2,4,0,2Z" fill="#a2a2a2"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 171 B |
|
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="440" height="500" viewBox="0 0 440 500">
|
||||||
|
<rect id="Реклама_1_" data-name="Реклама (1)" width="440" height="500" fill="#b4b4b4"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 199 B |