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}
|
||||
$target.table('setRowValues',rowIndex,updatedRow)}
|
||||
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)
|
||||
$addTimestampsButton.text($form.attr('data-lang-add-timestamps'));$toolbar.append($addTimestampsButton)
|
||||
$addSoftDeleteButton.text($form.attr('data-lang-add-soft-delete'));$toolbar.append($addSoftDeleteButton)}
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@
|
|||
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>'),
|
||||
$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>')
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -101,7 +102,8 @@ class ComponentHelper
|
|||
$result[$columnName] = $columnName;
|
||||
}
|
||||
|
||||
Cache::put($key, serialize($result), 1);
|
||||
$expiresAt = now()->addMinutes(1);
|
||||
Cache::put($key, serialize($result), $expiresAt);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
<?php namespace RainLab\Builder\Classes;
|
||||
|
||||
use DirectoryIterator;
|
||||
use ApplicationException;
|
||||
use SystemException;
|
||||
use Validator;
|
||||
use Lang;
|
||||
|
|
|
|||
|
|
@ -369,16 +369,54 @@ class StandardControlsRegistry
|
|||
'default' => Lang::get('rainlab.builder::lang.form.property_prompt_default'),
|
||||
'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' => [
|
||||
'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' => [
|
||||
'title' => Lang::get('rainlab.builder::lang.form.property_max_items'),
|
||||
'description' => Lang::get('rainlab.builder::lang.form.property_max_items_description'),
|
||||
'type' => 'string',
|
||||
'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 = [
|
||||
|
|
@ -668,12 +706,6 @@ class StandardControlsRegistry
|
|||
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_min_date_description'),
|
||||
'type' => 'string',
|
||||
'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
|
||||
],
|
||||
'maxDate' => [
|
||||
|
|
@ -681,12 +713,6 @@ class StandardControlsRegistry
|
|||
'description' => Lang::get('rainlab.builder::lang.form.property_datepicker_max_date_description'),
|
||||
'type' => 'string',
|
||||
'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
|
||||
],
|
||||
'yearRange' => [
|
||||
|
|
@ -1172,6 +1198,14 @@ class StandardControlsRegistry
|
|||
'type' => 'string',
|
||||
'ignoreIfEmpty' => true,
|
||||
'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_time' => 'Čas',
|
||||
'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_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_split' => 'Rozdělit',
|
||||
'property_markdown_mode_tab' => 'Záložka',
|
||||
|
|
|
|||
|
|
@ -208,10 +208,9 @@ return [
|
|||
'property_datepicker_mode_datetime' => 'Date and time',
|
||||
'property_datepicker_mode_time' => 'Time',
|
||||
'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_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_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_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_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_relation_select' => 'Select',
|
||||
'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' => 'Relation column name to use for displaying a description.',
|
||||
'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_show_search' => 'Show search',
|
||||
'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_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_widgets' => 'Widgets',
|
||||
'click_to_add_control' => 'Add control',
|
||||
|
|
@ -351,6 +360,9 @@ return [
|
|||
'span_right' => 'Right',
|
||||
'span_full' => 'Full',
|
||||
'span_auto' => 'Auto',
|
||||
'style_default' => 'Default',
|
||||
'style_collapsed' => 'Collapsed',
|
||||
'style_accordion' => 'Accordion',
|
||||
'empty_tab' => 'Empty tab',
|
||||
'confirm_close_tab' => 'The tab contains controls which will be deleted. Continue?',
|
||||
'tab' => 'Form tab',
|
||||
|
|
@ -548,6 +560,8 @@ return [
|
|||
'hint_apply' => 'Applying a version will also apply all older unapplied versions of the plugin.',
|
||||
'dont_show_again' => 'Don\'t show again',
|
||||
'save_unapplied_version' => 'Save unapplied version',
|
||||
'sort_ascending' => 'Sort ascending',
|
||||
'sort_descending' => 'Sort descending',
|
||||
],
|
||||
'menu' => [
|
||||
'menu_label' => 'Backend Menu',
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ return [
|
|||
'field_name' => 'Nombre de la tabla',
|
||||
'tab_columns' => 'Columnas',
|
||||
'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_type_required' => 'Please select the column type',
|
||||
'column_name_length' => 'Length',
|
||||
|
|
@ -57,14 +57,17 @@ return [
|
|||
'tab_new_table' => 'Nueva tabla',
|
||||
'btn_add_column' => 'Añadir 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?',
|
||||
'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_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_mutliple_auto_increment' => 'The table cannot contain multiple auto-increment columns.',
|
||||
'error_table_auto_increment_non_integer' => 'Auto-increment columns should have integer type.',
|
||||
'error_table_mutliple_auto_increment' => 'La tabla no puede contener más de una columna auto-incrementable.',
|
||||
'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_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.",
|
||||
|
|
@ -89,22 +92,22 @@ return [
|
|||
'add_list' => 'Añadir lista',
|
||||
],
|
||||
'form' => [
|
||||
'saved' => 'Formulario salvado',
|
||||
'saved' => 'Formulario guardado',
|
||||
'confirm_delete' => '¿Borrar el formulario?',
|
||||
'tab_new_form' => 'Nuevo formulario',
|
||||
'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_comment_title' => 'Commentario',
|
||||
'property_comment_above_title' => 'Comment above',
|
||||
'property_comment_above_title' => 'Comentario encima',
|
||||
'property_default_title' => 'Default',
|
||||
'property_checked_default_title' => 'Checked by default',
|
||||
'property_css_class_title' => 'CSS class',
|
||||
'property_css_class_description' => 'Optional CSS class to assign to the field container.',
|
||||
'property_disabled_title' => 'Disabled',
|
||||
'property_hidden_title' => 'Hidden',
|
||||
'property_required_title' => 'Required',
|
||||
'property_field_name_title' => 'Field name',
|
||||
'property_disabled_title' => 'deshabilitado',
|
||||
'property_hidden_title' => 'Oculto',
|
||||
'property_required_title' => 'Requerido',
|
||||
'property_field_name_title' => 'Nombre del campo',
|
||||
'property_placeholder_title' => 'Placeholder',
|
||||
'property_default_from_title' => 'Default from',
|
||||
'property_stretch_title' => 'Stretch',
|
||||
|
|
@ -120,8 +123,8 @@ return [
|
|||
'property_trigger_hide' => 'Hide',
|
||||
'property_trigger_enable' => 'Enable',
|
||||
'property_trigger_disable' => 'Disable',
|
||||
'property_trigger_empty' => 'Empty',
|
||||
'property_trigger_field' => 'Field',
|
||||
'property_trigger_empty' => 'Vacio',
|
||||
'property_trigger_field' => 'Campo',
|
||||
'property_trigger_field_description' => 'Defines the other field name that will trigger the action.',
|
||||
'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].',
|
||||
|
|
@ -134,35 +137,35 @@ return [
|
|||
'property_preset_field_description' => 'Defines the other field name to source the value from.',
|
||||
'property_preset_type' => '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_container_attributes_title' => 'Container attributes',
|
||||
'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_trigger_title' => 'Trigger',
|
||||
'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_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_attributes_size' => 'Size',
|
||||
'property_attributes_size_tiny' => 'Tiny',
|
||||
'property_attributes_size_small' => 'Small',
|
||||
'property_attributes_size_large' => 'Large',
|
||||
'property_attributes_size_huge' => 'Huge',
|
||||
'property_attributes_size_giant' => 'Giant',
|
||||
'property_comment_position' => 'Comment position',
|
||||
'property_comment_position_above' => 'Above',
|
||||
'property_comment_position_below' => 'Below',
|
||||
'property_attributes_size' => 'Tamaño',
|
||||
'property_attributes_size_tiny' => 'Diminuto',
|
||||
'property_attributes_size_small' => 'Pequeño',
|
||||
'property_attributes_size_large' => 'Grande',
|
||||
'property_attributes_size_huge' => 'Enorme',
|
||||
'property_attributes_size_giant' => 'Gigante',
|
||||
'property_comment_position' => 'Posición del comentario',
|
||||
'property_comment_position_above' => 'Arriba',
|
||||
'property_comment_position_below' => 'Abajo',
|
||||
'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_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_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_code_language' => 'Language',
|
||||
'property_code_theme' => 'Theme',
|
||||
'property_theme_use_default' => 'Use default theme',
|
||||
'property_code_language' => 'Idioma',
|
||||
'property_code_theme' => 'Tema',
|
||||
'property_theme_use_default' => 'Usar tema por defecto',
|
||||
'property_group_code_editor' => 'Code editor',
|
||||
'property_gutter' => 'Gutter',
|
||||
'property_gutter_show' => 'Visible',
|
||||
|
|
@ -176,40 +179,37 @@ return [
|
|||
'property_codefolding_markbegin' => 'Mark begin',
|
||||
'property_codefolding_markbeginend' => 'Mark begin and end',
|
||||
'property_autoclosing' => 'Auto closing',
|
||||
'property_enabled' => 'Enabled',
|
||||
'property_disabled' => 'Disabled',
|
||||
'property_enabled' => 'Habilitado',
|
||||
'property_disabled' => 'Deshabilitado',
|
||||
'property_soft_tabs' => 'Soft tabs',
|
||||
'property_tab_size' => 'Tab size',
|
||||
'property_readonly' => 'Read only',
|
||||
'property_tab_size' => 'Tamaño de la pestaña',
|
||||
'property_readonly' => 'Solo lectura',
|
||||
'property_use_default' => 'Use default settings',
|
||||
'property_options' => 'Opciones',
|
||||
'property_prompt' => 'Prompt',
|
||||
'property_prompt_description' => 'Text to display for the create button.',
|
||||
'property_prompt_default' => 'Add new item',
|
||||
'property_available_colors' => 'Available colors',
|
||||
'property_prompt_description' => 'Texto que se mostrará para el botón creado',
|
||||
'property_prompt_default' => 'Añadir nuevo item',
|
||||
'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_datepicker_mode' => 'Mode',
|
||||
'property_datepicker_mode_date' => 'Date',
|
||||
'property_datepicker_mode_datetime' => 'Date and time',
|
||||
'property_datepicker_mode_time' => 'Time',
|
||||
'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_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_datepicker_mode' => 'Modo',
|
||||
'property_datepicker_mode_date' => 'Fecha',
|
||||
'property_datepicker_mode_datetime' => 'Fecha y hora',
|
||||
'property_datepicker_mode_time' => 'Hora',
|
||||
'property_datepicker_min_date' => 'Fecha mínima',
|
||||
'property_datepicker_max_date' => 'Fecha máxima',
|
||||
'property_markdown_mode' => 'Mode',
|
||||
'property_markdown_mode_split' => 'Split',
|
||||
'property_markdown_mode_tab' => 'Tab',
|
||||
'property_markdown_mode_tab' => 'Pestaña',
|
||||
'property_fileupload_mode' => 'Mode',
|
||||
'property_fileupload_mode_file' => 'File',
|
||||
'property_fileupload_mode_image' => 'Imagen',
|
||||
'property_fileupload_mode_file' => 'Archivo',
|
||||
'property_fileupload_mode_image' => 'Imágen',
|
||||
'property_group_fileupload' => 'File upload',
|
||||
'property_fileupload_prompt' => 'Prompt',
|
||||
'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_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_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',
|
||||
|
|
@ -225,7 +225,7 @@ return [
|
|||
'property_fileupload_thumb_portrait' => 'Portrait',
|
||||
'property_fileupload_thumb_landscape' => 'Landscape',
|
||||
'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_description' => 'Relation column name to use for displaying a name.',
|
||||
'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_required' => 'Please provide a path to the list YAML file',
|
||||
'property_group_recordfinder' => 'Record finder',
|
||||
'property_mediafinder_mode' => 'Mode',
|
||||
'property_mediafinder_mode_file' => 'File',
|
||||
'property_mediafinder_mode_image' => 'Image',
|
||||
'property_mediafinder_mode' => 'Modo',
|
||||
'property_mediafinder_mode_file' => 'Archivo',
|
||||
'property_mediafinder_mode_image' => 'Imagen',
|
||||
'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_group_relation' => 'Relation',
|
||||
|
|
@ -248,47 +248,47 @@ return [
|
|||
'property_relation_prompt_description' => 'Text to display when there is no available selections.',
|
||||
'control_group_standard' => 'Standard',
|
||||
'control_group_widgets' => 'Widgets',
|
||||
'click_to_add_control' => 'Add control',
|
||||
'click_to_add_control' => 'Añadir control',
|
||||
'loading' => 'Cargando...',
|
||||
'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_description' => 'Single line password text field',
|
||||
'control_password_description' => 'Campo de contraseña de una linea',
|
||||
'control_checkbox' => 'Checkbox',
|
||||
'control_checkbox_description' => 'Single checkbox',
|
||||
'control_checkbox_description' => 'Checkbox único',
|
||||
'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_description' => 'Multiline text box with controllable height',
|
||||
'control_textarea_description' => 'Campo de texto multilinea con altura personalizable',
|
||||
'control_dropdown' => 'Dropdown',
|
||||
'control_dropdown_description' => 'Dropdown list with static or dynamic options',
|
||||
'control_unknown' => 'Unknown control type: :type',
|
||||
'control_repeater' => 'Repeater',
|
||||
'control_repeater_description' => 'Outputs a repeating set of form controls',
|
||||
'control_number' => 'Number',
|
||||
'control_number_description' => 'Single line text box that takes numbers only',
|
||||
'control_hint' => 'Hint',
|
||||
'control_hint_description' => 'Outputs a partial contents in a box that can be hidden by the user',
|
||||
'control_number' => 'Número',
|
||||
'control_number_description' => 'Campo de texto de una linea el cual sólo permite números',
|
||||
'control_hint' => 'Pista',
|
||||
'control_hint_description' => 'Despliega un contenido parcial en una caja que puede ser ocultado por el usuario',
|
||||
'control_partial' => 'Partial',
|
||||
'control_partial_description' => 'Outputs a partial contents',
|
||||
'control_partial_description' => 'Incluye un contenido parcial',
|
||||
'control_section' => 'Section',
|
||||
'control_section_description' => 'Displays a form section with heading and subheading',
|
||||
'control_radio' => 'Radio list',
|
||||
'control_radio_description' => 'A list of radio options, where only one item can be selected at a time',
|
||||
'control_radio_option_1' => 'Option 1',
|
||||
'control_radio_option_2' => 'Option 2',
|
||||
'control_checkboxlist' => 'Checkbox list',
|
||||
'control_checkboxlist_description' => 'A list of checkboxes, where multiple items can be selected',
|
||||
'control_codeeditor' => 'Code editor',
|
||||
'control_radio' => 'Lista de radios',
|
||||
'control_radio_description' => 'Una lista de radio buttons, donde solo un item puede ser seleccionado al mismo tiempo',
|
||||
'control_radio_option_1' => 'Opción 1',
|
||||
'control_radio_option_2' => 'Opción 2',
|
||||
'control_checkboxlist' => 'Lista de Checkbox',
|
||||
'control_checkboxlist_description' => 'Una lista de checkboxs, donde mas de un item puede ser seleccionado',
|
||||
'control_codeeditor' => 'Editor de código',
|
||||
'control_codeeditor_description' => 'Plaintext editor for formatted code or markup',
|
||||
'control_colorpicker' => 'Color picker',
|
||||
'control_colorpicker_description' => 'A field for selecting a hexadecimal color value',
|
||||
'control_datepicker' => 'Date picker',
|
||||
'control_datepicker_description' => 'Text field used for selecting date and times',
|
||||
'control_richeditor' => 'Rich editor',
|
||||
'control_richeditor_description' => 'Visual editor for rich formatted text, also known as a WYSIWYG editor',
|
||||
'control_markdown' => 'Markdown editor',
|
||||
'control_markdown_description' => 'Basic editor for Markdown formatted text',
|
||||
'control_colorpicker' => 'Selector de color',
|
||||
'control_colorpicker_description' => 'Un campo para seleccionar un valor de color en hexadecimal',
|
||||
'control_datepicker' => 'Selector de fecha',
|
||||
'control_datepicker_description' => 'Un campo de texto para seleccionar fecha/hora',
|
||||
'control_richeditor' => 'Editor enriquecido',
|
||||
'control_richeditor_description' => 'Editor visual para texto enriquecido, también conocido como editor WYSIWYG',
|
||||
'control_markdown' => 'Editor Markdown',
|
||||
'control_markdown_description' => 'Editor básico para texto formateado en Markdown',
|
||||
'control_fileupload' => 'File upload',
|
||||
'control_fileupload_description' => 'File uploader for images or regular files',
|
||||
'control_recordfinder' => 'Record finder',
|
||||
|
|
@ -296,27 +296,27 @@ return [
|
|||
'control_mediafinder' => 'Media finder',
|
||||
'control_mediafinder_description' => 'Field for selecting an item from the Media Manager library',
|
||||
'control_relation' => 'Relation',
|
||||
'control_relation_description' => 'Displays either a dropdown or checkbox list for selecting a related record',
|
||||
'error_file_name_required' => 'Please enter the form file name.',
|
||||
'error_file_name_invalid' => 'The file name can contain only Latin letters, digits, underscores, dots and hashes.',
|
||||
'span_left' => 'Left',
|
||||
'span_right' => 'Right',
|
||||
'span_full' => 'Full',
|
||||
'span_auto' => 'Auto',
|
||||
'empty_tab' => 'Empty tab',
|
||||
'confirm_close_tab' => 'The tab contains controls which will be deleted. Continue?',
|
||||
'tab' => 'Form tab',
|
||||
'tab_title' => 'Title',
|
||||
'controls' => 'Controls',
|
||||
'property_tab_title_required' => 'The tab title is required.',
|
||||
'tabs_primary' => 'Primary tabs',
|
||||
'tabs_secondary' => 'Secondary tabs',
|
||||
'control_relation_description' => 'Despliega un Dropdown o una lista de Checkboxs para seleccionar el registro relacionado',
|
||||
'error_file_name_required' => 'Por favor ingresa el nombre del archivo del formulario.',
|
||||
'error_file_name_invalid' => 'El nombre de este archivo sólo puede contener letras, digitos, guiones (bajo y medio) y puntos.',
|
||||
'span_left' => 'Izquierda',
|
||||
'span_right' => 'Derecha',
|
||||
'span_full' => 'Completo',
|
||||
'span_auto' => 'Automático',
|
||||
'empty_tab' => 'Pestaña vacia',
|
||||
'confirm_close_tab' => 'La pestaña contiene controles que serán eliminados, ¿continuar?',
|
||||
'tab' => 'Pestaña de formulario',
|
||||
'tab_title' => 'Titulo',
|
||||
'controls' => 'Controles',
|
||||
'property_tab_title_required' => 'el campo titulo es requerido',
|
||||
'tabs_primary' => 'Pestañas primarias',
|
||||
'tabs_secondary' => 'Pestañas secundarias',
|
||||
'tab_stretch' => 'Stretch',
|
||||
'tab_stretch_description' => 'Specifies if this tabs container stretches to fit the parent height.',
|
||||
'tab_css_class' => 'CSS class',
|
||||
'tab_css_class_description' => 'Assigns a CSS class to the tabs container.',
|
||||
'tab_name_template' => 'Tab %s',
|
||||
'tab_already_exists' => 'Tab with the specified title already exists.',
|
||||
'tab_stretch_description' => 'Especifica si el contenedor de esta pestaña se estira para ajustarse al alto del elemento padre.',
|
||||
'tab_css_class' => 'Clase CSS',
|
||||
'tab_css_class_description' => 'Asigna una clase CSS al contenedor de la pestaña.',
|
||||
'tab_name_template' => 'Pestaña %s',
|
||||
'tab_already_exists' => 'Ya existe una pestaña con el nombre especificado.',
|
||||
],
|
||||
'list' => [
|
||||
'tab_new_list' => 'Nueva lista',
|
||||
|
|
@ -352,7 +352,9 @@ return [
|
|||
'column_label_path' => 'Path',
|
||||
'column_label_format' => 'Format',
|
||||
'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' => [
|
||||
'menu_label' => 'Controladores',
|
||||
|
|
@ -360,15 +362,15 @@ return [
|
|||
'controller' => 'Controlador',
|
||||
'behaviors' => 'Comportamientos',
|
||||
'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',
|
||||
'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.',
|
||||
'property_behavior_form_placeholder' => '--select form--',
|
||||
'property_behavior_form_name' => 'Nombre',
|
||||
'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_file' => 'Form configuration',
|
||||
'property_behavior_form_name_required' => 'Por favor ingrese el nombre del formulario',
|
||||
'property_behavior_form_file' => 'Configuración del formulario',
|
||||
'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_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_create' => 'Create record page',
|
||||
'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_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',
|
||||
|
|
@ -448,40 +450,40 @@ return [
|
|||
'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_file_not_yaml' => 'The behavior :class configuration file (:file) is not a YAML file. Only YAML configuration files are supported.',
|
||||
'saved' => 'Controller saved',
|
||||
'controller_name' => 'Controller name',
|
||||
'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.',
|
||||
'base_model_class' => 'Base model class',
|
||||
'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_placeholder' => '--select model--',
|
||||
'saved' => 'Controlador guardado',
|
||||
'controller_name' => 'Nombre del controlador',
|
||||
'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' => 'Clase de modelo base',
|
||||
'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' => '--selecciona el modelo--',
|
||||
'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_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.',
|
||||
'menu_item' => 'Active menu item',
|
||||
'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_placeholder' => '--select menu item--',
|
||||
'error_unknown_behavior' => 'The behavior class :class is not registered in the behavior library.',
|
||||
'error_behavior_view_conflict' => 'The selected behaviors provide conflicting views (:view) and cannot be used together in a controller.',
|
||||
'error_behavior_config_conflict' => 'The selected behaviors provide conflicting configuration files (:file) and cannot be used together in a controller.',
|
||||
'controller_permissions_no_permissions' => 'El plugin no define ningún permiso.',
|
||||
'menu_item' => 'Item activo del menú',
|
||||
'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' => '--selecciona el item del menú--',
|
||||
'error_unknown_behavior' => 'La clase :class del behavior no está registrado en la librería de behaviors.',
|
||||
'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' => '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_config_file_not_found' => 'Configuration template :file of the behavior :class cannot be found.',
|
||||
'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_behavior_view_file_exists' => 'Controller view file already exists: :view.',
|
||||
'error_behavior_config_file_exists' => 'Behavior configuration file already exists: :file.',
|
||||
'error_save_file' => 'Error saving controller file: :file',
|
||||
'error_behavior_requires_base_model' => 'Behavior :behavior requires a base model class to be selected.',
|
||||
'error_model_doesnt_have_lists' => 'The selected model doesn\'t have any lists. Please create a list first.',
|
||||
'error_model_doesnt_have_forms' => 'The selected model doesn\'t have any forms. Please create a form first.',
|
||||
'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' => 'El archivo de la vista del controlador ya existe: :view.',
|
||||
'error_behavior_config_file_exists' => 'El archivo de configuración de este Behavior ya existe: :file.',
|
||||
'error_save_file' => 'Error guardando el archivo del controlador: :file',
|
||||
'error_behavior_requires_base_model' => 'El Behavior :behavior require de un modelo base para ser seleccionado.',
|
||||
'error_model_doesnt_have_lists' => 'El modelo seleccionado no tiene ninguna lista. Favor de primero crear una lista.',
|
||||
'error_model_doesnt_have_forms' => 'El modelo seleccionado no tiene ningún formulario. Favor de primero crear un formulario.',
|
||||
],
|
||||
'version' => [
|
||||
'menu_label' => 'Versiones',
|
||||
'no_records' => 'Versiones del plugin no encontradas',
|
||||
'search' => 'Buscar...',
|
||||
'tab' => 'Versiones',
|
||||
'saved' => 'Versión salvada',
|
||||
'saved' => 'Versión guardada',
|
||||
'confirm_delete' => '¿Borrar esta versión?',
|
||||
'tab_new_version' => 'Nueva versión',
|
||||
'migration' => 'Migración',
|
||||
|
|
@ -502,25 +504,25 @@ return [
|
|||
'menu' => [
|
||||
'menu_label' => 'Backend Menu',
|
||||
'tab' => 'Menus',
|
||||
'items' => 'Menu items',
|
||||
'saved' => 'Menus saved',
|
||||
'add_main_menu_item' => 'Add main menu item',
|
||||
'items' => 'Items del menú',
|
||||
'saved' => 'Menues guardados',
|
||||
'add_main_menu_item' => 'Añadir item al menú principal',
|
||||
'new_menu_item' => 'Menu Item',
|
||||
'add_side_menu_item' => 'Add sub-item',
|
||||
'side_menu_item' => 'Side menu item',
|
||||
'add_side_menu_item' => 'Agregar sub-item',
|
||||
'side_menu_item' => 'Item de menú lateral',
|
||||
'property_label' => 'Etiqueta',
|
||||
'property_label_required' => 'Please enter the menu item labels.',
|
||||
'property_url_required' => 'Please enter the menu item URL',
|
||||
'property_label_required' => 'Por favor ingrese la etiqueta para el item del menú.',
|
||||
'property_url_required' => 'Por favor ingrese la URL para el item del menú',
|
||||
'property_url' => 'URL',
|
||||
'property_icon' => 'Icono',
|
||||
'property_icon_required' => 'Please select an icon',
|
||||
'property_permissions' => 'Permissions',
|
||||
'property_order' => 'Order',
|
||||
'property_order_invalid' => 'Please enter the menu item order as integer value.',
|
||||
'property_icon_required' => 'Por favor seleccione un ícono',
|
||||
'property_permissions' => 'Permisos',
|
||||
'property_order' => 'Orden',
|
||||
'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_attributes' => 'HTML attributes',
|
||||
'property_code' => 'Code',
|
||||
'property_code_invalid' => 'The code should contain only Latin letter and digits',
|
||||
'property_attributes' => 'Atributos HTML',
|
||||
'property_code' => 'Código',
|
||||
'property_code_invalid' => 'El código sólo puede contener letras y números',
|
||||
'property_code_required' => 'Please enter the menu item code.',
|
||||
'error_duplicate_main_menu_code' => "Duplicate main menu item code: ':code'.",
|
||||
'error_duplicate_side_menu_code' => "Duplicate side menu item code: ':code'.",
|
||||
|
|
@ -558,14 +560,14 @@ return [
|
|||
'form_tab_permissions' => 'Permisos',
|
||||
'btn_add_permission' => 'Añadir permisos',
|
||||
'btn_delete_permission' => 'Borrar permisos',
|
||||
'column_permission_label' => 'Permission code',
|
||||
'column_permission_required' => 'Please enter the permission code',
|
||||
'column_permission_label' => 'Código del permiso',
|
||||
'column_permission_required' => 'Por favor ingrese el código del permiso',
|
||||
'column_tab_label' => 'Titulo pestaña',
|
||||
'column_tab_required' => 'Por favor introduzca el permiso de el título de la pestaña',
|
||||
'column_label_label' => 'Etiqueta',
|
||||
'column_label_required' => 'Por favor introduzca permiso de etiqueta',
|
||||
'saved' => 'Permisos guardados',
|
||||
'error_duplicate_code' => "Duplicate permission code: ':code'.",
|
||||
'error_duplicate_code' => "Código de permiso duplicado: ':code'.",
|
||||
],
|
||||
'yaml' => [
|
||||
'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'.",
|
||||
'error_make_dir' => "Error al crear directorio: ':name'.",
|
||||
'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_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.',
|
||||
|
|
@ -585,57 +587,57 @@ return [
|
|||
],
|
||||
'migration' => [
|
||||
'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_description' => 'Descripción',
|
||||
'field_code' => 'Code',
|
||||
'save_and_apply' => 'Salvar y Aplicar',
|
||||
'error_version_exists' => 'The migration version already exists.',
|
||||
'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_cannot_change_version_number' => 'Cannot change version number for an applied version.',
|
||||
'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_namespace' => 'Migration code should define a namespace. Leave the code field blank if you only want to update the version number.',
|
||||
'no_changes_to_save' => 'No hay cambios que salvar.',
|
||||
'error_namespace_mismatch' => "The migration code should use the plugin namespace: :namespace",
|
||||
'error_migration_file_exists' => "Migration file :file already exists. Please use another class name.",
|
||||
'error_cant_delete_applied' => 'This version has already been applied and cannot be deleted. Please rollback the version first.',
|
||||
'field_code' => 'Código',
|
||||
'save_and_apply' => 'Guardar y Aplicar',
|
||||
'error_version_exists' => 'La versión de la migración ya existe.',
|
||||
'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' => 'No se puede cambiar el número de la versión para una versión ya aplicada.',
|
||||
'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' => '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 guardar.',
|
||||
'error_namespace_mismatch' => "El código de la migración debe utilizar el namespace del plugin :namespace",
|
||||
'error_migration_file_exists' => "El archivo de migración :file ya existe. Favor usa otro nombre para la clase.",
|
||||
'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' => [
|
||||
'list_title' => 'Record list',
|
||||
'list_description' => 'Displays a list of records for a selected model',
|
||||
'list_page_number' => 'Page number',
|
||||
'list_page_number_description' => 'This value is used to determine what page the user is on.',
|
||||
'list_records_per_page' => 'Records per page',
|
||||
'list_records_per_page_description' => 'Number of records to display on a single page. Leave empty to disable pagination.',
|
||||
'list_title' => 'Lista de registros',
|
||||
'list_description' => 'Mostrar una lista de registros para el modelo seleccionado',
|
||||
'list_page_number' => 'Número de página',
|
||||
'list_page_number_description' => 'Este valor es usado para determinar en qué página se encuentra el usuario.',
|
||||
'list_records_per_page' => 'Registros por página',
|
||||
'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_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_default' => 'No records found',
|
||||
'list_sort_column' => 'Sort by column',
|
||||
'list_no_records_default' => 'No se han encontrado registros',
|
||||
'list_sort_column' => 'Ordenar por columna',
|
||||
'list_sort_column_description' => 'Model column the records should be ordered by',
|
||||
'list_sort_direction' => 'Direction',
|
||||
'list_display_column' => 'Display column',
|
||||
'list_sort_direction' => 'Dirección',
|
||||
'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_required' => 'Please select a display column.',
|
||||
'list_details_page' => 'Details page',
|
||||
'list_details_page_description' => 'Page to display record details.',
|
||||
'list_details_page_no' => '--no details page--',
|
||||
'list_display_column_required' => 'Por favor, selecciona una columna para mostrar.',
|
||||
'list_details_page' => 'Página de detalles',
|
||||
'list_details_page_description' => 'Página para desplegar el registro de detalles.',
|
||||
'list_details_page_no' => '--No hay página de detalles--',
|
||||
'list_sorting' => 'Sorting',
|
||||
'list_pagination' => 'Paginación',
|
||||
'list_order_direction_asc' => 'Ascending',
|
||||
'list_order_direction_desc' => 'Descending',
|
||||
'list_order_direction_asc' => 'Ascendente',
|
||||
'list_order_direction_desc' => 'Descendente',
|
||||
'list_model' => 'Model class',
|
||||
'list_scope' => 'Scope',
|
||||
'list_scope_description' => 'Optional model scope to fetch the records',
|
||||
'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_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_description' => 'Name of the details page URL parameter which takes the record identifier.',
|
||||
'details_title' => 'Record details',
|
||||
'details_description' => 'Displays record details for a selected model',
|
||||
'details_model' => 'Model class',
|
||||
'details_title' => 'Detalles de un registro',
|
||||
'details_description' => 'Despliega el detalle de un registro para el modelo seleccionado',
|
||||
'details_model' => 'Clase del modelo',
|
||||
'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_required' => 'The identifier value is required',
|
||||
|
|
@ -644,9 +646,9 @@ return [
|
|||
'details_key_column_required' => 'The key column name is required',
|
||||
'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_required' => 'Please select a display column.',
|
||||
'details_not_found_message' => 'Not found message',
|
||||
'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_default' => 'Record not found',
|
||||
'details_display_column_required' => 'Por favor selecciona una columna para mostrar.',
|
||||
'details_not_found_message' => 'Mensaje registro no encontrado',
|
||||
'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' => 'Registro no encontrado',
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -193,10 +193,7 @@ return [
|
|||
'property_datepicker_mode_datetime' => 'تاریخ و ساعت',
|
||||
'property_datepicker_mode_time' => 'ساعت',
|
||||
'property_datepicker_min_date' => 'کمترین تاریخ',
|
||||
'property_datepicker_min_date_description' => 'کمترین تاریخی که میتوان انتخاب کرد. برای مقدار پیشفرض این گزینه را خالی بگذارید.',
|
||||
'property_datepicker_max_date' => 'بیشترین تاریخ',
|
||||
'property_datepicker_max_date_description' => 'بیشترین تاریخی که میتوان انتخاب کرد. برای استفاده از مقدار پیشفرض این گزینه را خالی بگذارید.',
|
||||
'property_datepicker_date_invalid_format' => 'قالب تاریخ صحیح نمی باشد. مثال: YYYY-MM-DD',
|
||||
'property_markdown_mode' => 'نحوه نمایش',
|
||||
'property_markdown_mode_split' => 'پنجره کنار هم',
|
||||
'property_markdown_mode_tab' => 'Tab',
|
||||
|
|
|
|||
|
|
@ -192,10 +192,7 @@ return [
|
|||
'property_datepicker_mode_datetime' => 'Datum en tijd',
|
||||
'property_datepicker_mode_time' => 'Tijd',
|
||||
'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_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_split' => 'Gesplitst',
|
||||
'property_markdown_mode_tab' => 'Tabblad',
|
||||
|
|
|
|||
|
|
@ -201,10 +201,7 @@ return [
|
|||
'property_datepicker_mode_datetime' => 'Data i czas',
|
||||
'property_datepicker_mode_time' => 'Czas',
|
||||
'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_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_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]")',
|
||||
|
|
|
|||
|
|
@ -205,10 +205,7 @@ return [
|
|||
'property_datepicker_mode_datetime' => 'Data e hora',
|
||||
'property_datepicker_mode_time' => 'Hora',
|
||||
'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_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_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]")',
|
||||
|
|
|
|||
2
plugins/rainlab/builder/tests/fixtures/filesystemgenerator/temporary/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
||||
|
|
@ -1,16 +1,17 @@
|
|||
<?php
|
||||
|
||||
use RainLab\Builder\Classes\FilesystemGenerator;
|
||||
|
||||
class FilesystemGeneratorTest extends TestCase
|
||||
{
|
||||
public function setUp()
|
||||
public function setUp() : void
|
||||
{
|
||||
parent::setUp();
|
||||
|
||||
$this->cleanUp();
|
||||
}
|
||||
|
||||
public function tearDown()
|
||||
public function tearDown() : void
|
||||
{
|
||||
$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.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.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;
|
||||
|
||||
parent::__construct($controller, []);
|
||||
|
||||
$this->config->sort = $this->getSession('sort', 'asc');
|
||||
|
||||
$this->bindToController();
|
||||
}
|
||||
|
||||
|
|
@ -60,6 +63,15 @@ class VersionList extends WidgetBase
|
|||
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
|
||||
*/
|
||||
|
|
@ -97,6 +109,10 @@ class VersionList extends WidgetBase
|
|||
$items = $result;
|
||||
}
|
||||
|
||||
if ($this->getConfig('sort', 'asc') === 'desc') {
|
||||
$items = array_reverse($items, false);
|
||||
}
|
||||
|
||||
$versionManager = VersionManager::instance();
|
||||
$unappliedVersions = $versionManager->listNewVersions($activePluginVector->pluginCodeObj->toCode());
|
||||
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="toolbar-item" data-calculate-width>
|
||||
<div class="btn-group">
|
||||
<div class="dropdown last">
|
||||
<div class="dropdown">
|
||||
<button type="button" class="btn btn-default oc-icon-plus"
|
||||
data-toggle="dropdown"
|
||||
><?= 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>
|
||||
</ul>
|
||||
</div>
|
||||
<?= $this->makePartial('sort'); ?>
|
||||
</div>
|
||||
</div>
|
||||
<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()
|
||||
{
|
||||
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) {
|
||||
Plugin::clearCache();
|
||||
});
|
||||
|
|
@ -189,8 +196,8 @@ class Plugin extends PluginBase
|
|||
$dataHolder->settings = Snippet::processTemplateSettingsArray($dataHolder->settings);
|
||||
});
|
||||
|
||||
Event::listen('cms.template.processSettingsAfterLoad', function($controller, $template) {
|
||||
Snippet::processTemplateSettings($template);
|
||||
Event::listen('cms.template.processSettingsAfterLoad', function($controller, $template, $context = null) {
|
||||
Snippet::processTemplateSettings($template, $context);
|
||||
});
|
||||
|
||||
Event::listen('cms.template.processTwigContent', function($template, $dataHolder) {
|
||||
|
|
|
|||
|
|
@ -253,6 +253,18 @@
|
|||
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.
|
||||
*/
|
||||
|
|
@ -275,7 +287,7 @@
|
|||
}
|
||||
}).always(function(){
|
||||
$.oc.stripeLoadIndicator.hide()
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -153,6 +153,7 @@ class Menu extends Meta
|
|||
|
||||
foreach ($items as $item) {
|
||||
$parentReference = new MenuItemReference;
|
||||
$parentReference->type = $item->type;
|
||||
$parentReference->title = $item->title;
|
||||
$parentReference->code = $item->code;
|
||||
$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
|
||||
* return the item URL, subitems and determine whether the item is active.
|
||||
*/
|
||||
|
||||
|
||||
$apiResult = Event::fire('pages.menuitem.resolveItem', [$item->type, $item, $currentUrl, $this->theme]);
|
||||
|
||||
if (is_array($apiResult)) {
|
||||
foreach ($apiResult as $itemInfo) {
|
||||
if (!is_array($itemInfo)) {
|
||||
|
|
@ -191,6 +189,7 @@ class Menu extends Meta
|
|||
|
||||
foreach ($items as $item) {
|
||||
$reference = new MenuItemReference;
|
||||
$reference->type = isset($item['type']) ? $item['type'] : null;
|
||||
$reference->title = isset($item['title']) ? $item['title'] : '--no title--';
|
||||
$reference->url = isset($item['url']) ? $item['url'] : '#';
|
||||
$reference->isActive = isset($item['isActive']) ? $item['isActive'] : false;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,11 @@ use Event;
|
|||
*/
|
||||
class MenuItemReference
|
||||
{
|
||||
/**
|
||||
* @var string Specifies the menu item type.
|
||||
*/
|
||||
public $type;
|
||||
|
||||
/**
|
||||
* @var string Specifies the item title
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -85,7 +85,6 @@ class Page extends ContentBase
|
|||
'viewBag[title]',
|
||||
'viewBag[meta_title]',
|
||||
'viewBag[meta_description]',
|
||||
'viewBag[meta_keywords]',
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
@ -907,7 +906,8 @@ class Page extends ContentBase
|
|||
$iterator($pageList->getPageTree(), null, 0);
|
||||
|
||||
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);
|
||||
|
||||
return self::$menuTreeCache;
|
||||
|
|
|
|||
|
|
@ -48,27 +48,22 @@ class PageList
|
|||
$pages = $this->listPages($skipCache);
|
||||
$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 = [];
|
||||
|
||||
foreach ($configPages as $fileName => $subpages) {
|
||||
$pageObject = null;
|
||||
foreach ($pages as $page) {
|
||||
if ($page->getBaseFileName() == $fileName) {
|
||||
$pageObject = $page;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($pageObject === null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isset($pagesArray[$fileName])) {
|
||||
$result[] = (object) [
|
||||
'page' => $pageObject,
|
||||
'subpages' => $iterator($subpages)
|
||||
'page' => $pagesArray[$fileName],
|
||||
'subpages' => $iterator($subpages),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ class Router
|
|||
{
|
||||
$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;
|
||||
|
||||
if (!$cached || ($unserialized = @unserialize($cached)) === false) {
|
||||
|
|
@ -132,7 +132,8 @@ class Router
|
|||
self::$urlMap = $map;
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -265,6 +265,99 @@ class Snippet
|
|||
$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.
|
||||
* This method should not be used in the front-end request handling code.
|
||||
|
|
@ -327,12 +420,21 @@ class Snippet
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
$properties = [];
|
||||
|
||||
if (isset($settingsArray['viewBag']['snippetProperties']['TableData'])) {
|
||||
$rows = $settingsArray['viewBag']['snippetProperties']['TableData'];
|
||||
}
|
||||
else {
|
||||
$rows = $settingsArray['viewBag']['snippetProperties'];
|
||||
}
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$property = array_get($row, 'property');
|
||||
|
|
@ -354,7 +456,7 @@ class Snippet
|
|||
return $settingsArray;
|
||||
}
|
||||
|
||||
public static function processTemplateSettings($template)
|
||||
public static function processTemplateSettings($template, $context = null)
|
||||
{
|
||||
if (!isset($template->viewBag['snippetProperties'])) {
|
||||
return;
|
||||
|
|
@ -363,14 +465,20 @@ class Snippet
|
|||
$parsedProperties = self::parseIniProperties($template->viewBag['snippetProperties']);
|
||||
|
||||
foreach ($parsedProperties as $index => &$property) {
|
||||
if ($context !== 'editor') {
|
||||
$property['id'] = $index;
|
||||
}
|
||||
|
||||
if (isset($property['options'])) {
|
||||
if (isset($property['options']) && is_array($property['options'])) {
|
||||
$property['options'] = self::dropDownOptionsToString($property['options']);
|
||||
}
|
||||
}
|
||||
|
||||
$template->viewBag['snippetProperties'] = $parsedProperties;
|
||||
|
||||
if ($context == 'editor') {
|
||||
$template->settings['components']['viewBag'] = $template->viewBag;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -537,7 +645,8 @@ class Snippet
|
|||
}
|
||||
|
||||
$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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,53 @@ class SnippetManager
|
|||
$themeSnippets = $this->listThemeSnippets($theme);
|
||||
$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();
|
||||
}
|
||||
|
||||
$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);
|
||||
|
||||
return $result;
|
||||
|
|
|
|||
|
|
@ -57,15 +57,12 @@ tabs:
|
|||
type: textarea
|
||||
size: tiny
|
||||
|
||||
viewBag[meta_keywords]:
|
||||
tab: cms::lang.editor.meta
|
||||
label: 'Meta keywords'
|
||||
|
||||
secondaryTabs:
|
||||
stretch: true
|
||||
fields:
|
||||
markup:
|
||||
tab: rainlab.pages::lang.editor.content
|
||||
type: richeditor
|
||||
legacyMode: true
|
||||
stretch: true
|
||||
size: huge
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{% if __SELF__.menuItems %}
|
||||
|
||||
<ul>
|
||||
{% partial __SELF__ ~ "::items" items=__SELF__.menuItems %}
|
||||
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
{% 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 %}
|
||||
<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 }}
|
||||
</a>
|
||||
{% else %}
|
||||
|
|
@ -10,5 +11,5 @@
|
|||
{% if item.items %}
|
||||
<ul>{% partial __SELF__ ~ "::items" items=item.items %}</ul>
|
||||
{% endif %}
|
||||
|
||||
</li>
|
||||
{% 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')));
|
||||
|
||||
if ($this->canCommitObject($object)) {
|
||||
// Populate the filesystem with the object and then remove it from the db
|
||||
if (class_exists('System')) {
|
||||
// v1.2
|
||||
$datasource = $this->getThemeDatasource();
|
||||
$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]));
|
||||
}
|
||||
|
|
@ -381,9 +389,16 @@ class Index extends Controller
|
|||
$object = $this->loadObject($type, trim(Request::input('objectPath')));
|
||||
|
||||
if ($this->canResetObject($object)) {
|
||||
// Remove the object from the DB
|
||||
if (class_exists('System')) {
|
||||
// v1.2
|
||||
$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]));
|
||||
}
|
||||
|
|
@ -423,8 +438,6 @@ class Index extends Controller
|
|||
|
||||
/**
|
||||
* Get the active theme's datasource
|
||||
*
|
||||
* @return \October\Rain\Halcyon\Datasource\DatasourceInterface
|
||||
*/
|
||||
protected function getThemeDatasource()
|
||||
{
|
||||
|
|
@ -442,12 +455,25 @@ class Index extends Controller
|
|||
{
|
||||
$result = false;
|
||||
|
||||
if (class_exists('System')) {
|
||||
// v1.2
|
||||
if (
|
||||
Config::get('app.debug', false) &&
|
||||
$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;
|
||||
}
|
||||
|
|
@ -463,10 +489,21 @@ class Index extends Controller
|
|||
{
|
||||
$result = false;
|
||||
|
||||
if (class_exists('System')) {
|
||||
// v1.2
|
||||
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;
|
||||
}
|
||||
|
|
@ -610,8 +647,8 @@ class Index extends Controller
|
|||
/*
|
||||
* Translation support
|
||||
*/
|
||||
$translatableTypes = ['text', 'textarea', 'richeditor', 'repeater'];
|
||||
if (in_array($fieldConfig['type'], $translatableTypes)) {
|
||||
$translatableTypes = ['text', 'textarea', 'richeditor', 'repeater', 'markdown', 'mediafinder'];
|
||||
if (in_array($fieldConfig['type'], $translatableTypes) && array_get($fieldConfig, 'translatable', true)) {
|
||||
$page->translatable[] = 'viewBag['.$fieldCode.']';
|
||||
}
|
||||
}
|
||||
|
|
@ -723,7 +760,8 @@ class Index extends Controller
|
|||
if ($type == 'page') {
|
||||
$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);
|
||||
}
|
||||
|
||||
|
|
@ -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']);
|
||||
}
|
||||
|
||||
|
|
@ -808,7 +847,25 @@ class Index extends Controller
|
|||
$alias = Request::input('formWidgetAlias');
|
||||
$type = Request::input('objectType');
|
||||
$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->bindToController();
|
||||
|
|
|
|||
|
|
@ -26,9 +26,8 @@
|
|||
<button
|
||||
type="button"
|
||||
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-success="$.oc.pagesPage.closeTabs(data, 'page'); $.oc.pagesPage.updateObjectList('page'); $(this).trigger('close.oc.tab', [{force: true}])"
|
||||
data-control="delete-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>
|
||||
|
||||
##### 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
|
||||
|
||||
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.
|
||||
|
||||
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](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.
|
||||
|
||||
###### 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
|
||||
|
||||
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,
|
||||
// removing CMS page [base file name] suffix
|
||||
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
|
||||
class="layout-absolute"
|
||||
data-control="menu-item-editor"
|
||||
data-alias="<?= $this->alias ?>"
|
||||
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-treeview treeview-light"
|
||||
|
|
|
|||
|
|
@ -106,14 +106,22 @@ return [
|
|||
],
|
||||
'snippet' => [
|
||||
'partialtab' => 'Snippet',
|
||||
'settings_popup_title' => 'Static Pages Snippet',
|
||||
'code' => 'Snippet code',
|
||||
'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_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',
|
||||
'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_placeholder' => 'Select',
|
||||
'column_code' => 'Code',
|
||||
'column_default' => 'Default',
|
||||
'column_options' => 'Options',
|
||||
|
|
|
|||
|
|
@ -2,24 +2,24 @@
|
|||
|
||||
return [
|
||||
'plugin' => [
|
||||
'name' => 'Lapok',
|
||||
'description' => 'Lapok, menük és kódrészletek menedzselése.'
|
||||
'name' => 'Oldalak',
|
||||
'description' => 'Oldalak, menük, tartalmak és kódrészletek menedzselése.'
|
||||
],
|
||||
'page' => [
|
||||
'menu_label' => 'Lapok',
|
||||
'template_title' => '%s Lapok',
|
||||
'delete_confirmation' => 'Valóban törölni akarja a kijelölt lapokat? Ez az allapokat is törölni fogja.',
|
||||
'no_records' => 'Nem található lap',
|
||||
'delete_confirm_single' => 'Valóban törölni akarja ezt a lapot? Ez az allapokat is törölni fogja.',
|
||||
'new' => 'Új lap',
|
||||
'add_subpage' => 'Allap hozzáadása',
|
||||
'menu_label' => 'Oldalak',
|
||||
'template_title' => '%s Oldalak',
|
||||
'delete_confirmation' => 'Valóban törölni akarja a kijelölt oldalakat és azok aloldalait?',
|
||||
'no_records' => 'Nincs létrehozva oldal',
|
||||
'delete_confirm_single' => 'Valóban törölni akarja ezt az oldalt és aloldalait?',
|
||||
'new' => 'Új oldal',
|
||||
'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: _-/.',
|
||||
'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',
|
||||
'layouts_not_found' => 'Nem található elrendezés.',
|
||||
'saved' => 'A lap mentése sikerült.',
|
||||
'tab' => 'Lapok',
|
||||
'manage_pages' => 'Lapok kezelése',
|
||||
'layouts_not_found' => 'Nincs létrehozva elrendezés.',
|
||||
'saved' => 'Az oldal mentése sikerült.',
|
||||
'tab' => 'Oldalak',
|
||||
'manage_pages' => 'Oldalak kezelése',
|
||||
'manage_menus' => 'Menük kezelése',
|
||||
'access_snippets' => 'Kódrészletek kezelése',
|
||||
'manage_content' => 'Tartalom kezelése'
|
||||
|
|
@ -27,7 +27,7 @@ return [
|
|||
'menu' => [
|
||||
'menu_label' => 'Menük',
|
||||
'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_name' => 'Új menü',
|
||||
'new_code' => 'uj-menu',
|
||||
|
|
@ -36,7 +36,7 @@ return [
|
|||
'name' => 'Név',
|
||||
'code' => 'Kód',
|
||||
'items' => 'Menüpont',
|
||||
'add_subitem' => 'Almenüpont hozzáadása',
|
||||
'add_subitem' => 'Almenü hozzáadása',
|
||||
'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: _-'
|
||||
],
|
||||
|
|
@ -45,7 +45,7 @@ return [
|
|||
'editor_title' => 'Menüpont szerkesztése',
|
||||
'type' => 'Típus',
|
||||
'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',
|
||||
'reference' => 'Hivatkozás',
|
||||
'search_placeholder' => 'Keresés...',
|
||||
|
|
@ -56,18 +56,27 @@ return [
|
|||
'new_item' => 'Új menüpont',
|
||||
'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.',
|
||||
'cms_page' => 'Lap',
|
||||
'cms_page_comment' => 'Válassza ki a menüpontra kattintáskor megnyitni kívánt lapot.',
|
||||
'cms_page' => 'Oldal',
|
||||
'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ő.',
|
||||
'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_comment' => 'Adja meg a menüpont kódját, ha az API-val akarja elérni.',
|
||||
'static_page' => 'Lapok',
|
||||
'all_static_pages' => 'Összes lap'
|
||||
'code_comment' => 'Az API eléréshez szükséges egyedi azonosító.',
|
||||
'css_class' => 'CSS osztály',
|
||||
'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' => [
|
||||
'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.'
|
||||
],
|
||||
'sidebar' => [
|
||||
|
|
@ -76,11 +85,12 @@ return [
|
|||
],
|
||||
'object' => [
|
||||
'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ó.'
|
||||
],
|
||||
'editor' => [
|
||||
'title' => 'Cím',
|
||||
'new_title' => 'Új lap címe',
|
||||
'new_title' => 'Új oldal címe',
|
||||
'content' => 'Tartalom',
|
||||
'url' => 'Webcím',
|
||||
'filename' => 'Fájlnév',
|
||||
|
|
@ -90,17 +100,17 @@ return [
|
|||
'enter_fullscreen' => 'Váltás teljes képernyős módra',
|
||||
'exit_fullscreen' => 'Kilépés a teljes képernyős módból',
|
||||
'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_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' => [
|
||||
'partialtab' => 'Kódrészlet',
|
||||
'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_comment' => 'A Kódrészletek listában jelenik meg a Lapok oldalsó menüjében, valamint a Lapok aloldalon.',
|
||||
'no_records' => 'Nem található kódrészlet',
|
||||
'name_comment' => 'A Kódrészletek listában jelenik meg a Oldalak oldalsó menüjében, valamint a Oldalak aloldalon.',
|
||||
'no_records' => 'Nincs létrehozva kódrészlet',
|
||||
'menu_label' => 'Kódrészletek',
|
||||
'column_property' => 'Cím',
|
||||
'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: _-'
|
||||
],
|
||||
'component' => [
|
||||
'static_page_name' => 'Statikus lap',
|
||||
'static_page_description' => 'Lapok megjelenítése.',
|
||||
'static_page_name' => 'Statikus oldal',
|
||||
'static_page_description' => 'Oldalak megjelenítése.',
|
||||
'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_description' => 'Minden új lap ezt az elrendezést használja alapértelmezettként.',
|
||||
'static_page_child_layout_name' => 'Allap elrendezés',
|
||||
'static_page_child_layout_description' => 'Minden új allap 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' => 'Aloldal elrendezés',
|
||||
'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_description' => 'Menük megjelenítése.',
|
||||
'static_menu_code_name' => 'Menü',
|
||||
'static_menu_code_description' => 'Speciális kód a megjelenő menünek.',
|
||||
'static_breadcrumbs_name' => 'Statikus kenyérmorzsa',
|
||||
'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.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.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
|
||||
*/
|
||||
|
|
@ -106,13 +134,6 @@ class Plugin extends PluginBase
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* Register console commands
|
||||
*/
|
||||
$this->registerConsoleCommand('translate.scan', 'Rainlab\Translate\Console\ScanCommand');
|
||||
|
||||
$this->registerAssetBundles();
|
||||
}
|
||||
|
||||
public function boot()
|
||||
|
|
@ -290,13 +311,17 @@ class Plugin extends PluginBase
|
|||
|
||||
public function registerFormWidgets()
|
||||
{
|
||||
$mediaFinderClass = class_exists('System')
|
||||
? 'RainLab\Translate\FormWidgets\MLMediaFinderv2'
|
||||
: 'RainLab\Translate\FormWidgets\MLMediaFinder';
|
||||
|
||||
return [
|
||||
'RainLab\Translate\FormWidgets\MLText' => 'mltext',
|
||||
'RainLab\Translate\FormWidgets\MLTextarea' => 'mltextarea',
|
||||
'RainLab\Translate\FormWidgets\MLRichEditor' => 'mlricheditor',
|
||||
'RainLab\Translate\FormWidgets\MLMarkdownEditor' => 'mlmarkdowneditor',
|
||||
'RainLab\Translate\FormWidgets\MLRepeater' => 'mlrepeater',
|
||||
'RainLab\Translate\FormWidgets\MLMediaFinder' => 'mlmediafinder',
|
||||
$mediaFinderClass => 'mlmediafinder',
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,10 +2,7 @@
|
|||
|
||||
use Db;
|
||||
use DbDongle;
|
||||
use RainLab\Translate\Classes\Translator;
|
||||
use RainLab\Translate\Classes\TranslatableBehavior;
|
||||
use ApplicationException;
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Translatable model extension
|
||||
|
|
@ -29,6 +26,30 @@ class TranslatableModel extends TranslatableBehavior
|
|||
'RainLab\Translate\Models\Attribute',
|
||||
'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 = [];
|
||||
|
||||
if (!is_array($this->model->translatable)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
foreach ($this->model->translatable as $attribute) {
|
||||
$translatable[] = is_array($attribute) ? array_shift($attribute) : $attribute;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ class Translator
|
|||
}
|
||||
|
||||
App::setLocale($locale);
|
||||
|
||||
$this->activeLocale = $locale;
|
||||
|
||||
if ($remember) {
|
||||
|
|
|
|||
|
|
@ -54,11 +54,12 @@ class AlternateHrefLangElements extends ComponentBase
|
|||
$router = new RainRouter;
|
||||
$params = $this->getRouter()->getParameters();
|
||||
|
||||
$translatedParams = Event::fire(
|
||||
'translate.localePicker.translateParams',
|
||||
[$page, $params, $this->oldLocale, $locale],
|
||||
true
|
||||
);
|
||||
$translatedParams = Event::fire('translate.localePicker.translateParams', [
|
||||
$page,
|
||||
$params,
|
||||
$this->oldLocale,
|
||||
$locale
|
||||
], true);
|
||||
|
||||
if ($translatedParams) {
|
||||
$params = $translatedParams;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?php namespace RainLab\Translate\Components;
|
||||
use Log;
|
||||
|
||||
use Event;
|
||||
use Config;
|
||||
use Request;
|
||||
|
|
@ -64,7 +64,6 @@ class LocalePicker extends ComponentBase
|
|||
public function onRun()
|
||||
{
|
||||
if ($redirect = $this->redirectForceUrl()) {
|
||||
|
||||
return $redirect;
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +75,6 @@ class LocalePicker extends ComponentBase
|
|||
public function onSwitchLocale()
|
||||
{
|
||||
if (!$locale = post('locale')) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -90,8 +88,6 @@ class LocalePicker extends ComponentBase
|
|||
return Redirect::to($this->translator->getPathInLocale($pageUrl, $locale));
|
||||
}
|
||||
|
||||
//Log::error($pageUrl);
|
||||
//return $pageUrl;
|
||||
return Redirect::to($pageUrl);
|
||||
}
|
||||
|
||||
|
|
@ -137,7 +133,6 @@ class LocalePicker extends ComponentBase
|
|||
* Static Page
|
||||
*/
|
||||
if (isset($page->apiBag['staticPage'])) {
|
||||
|
||||
$staticPage = $page->apiBag['staticPage'];
|
||||
|
||||
$staticPage->rewriteTranslatablePageUrl($locale);
|
||||
|
|
@ -169,8 +164,12 @@ class LocalePicker extends ComponentBase
|
|||
* });
|
||||
*
|
||||
*/
|
||||
$translatedParams = Event::fire('translate.localePicker.translateParams',
|
||||
[$page, $params, $this->oldLocale, $locale], true);
|
||||
$translatedParams = Event::fire('translate.localePicker.translateParams', [
|
||||
$page,
|
||||
$params,
|
||||
$this->oldLocale,
|
||||
$locale
|
||||
], true);
|
||||
|
||||
if ($translatedParams) {
|
||||
$params = $translatedParams;
|
||||
|
|
@ -210,8 +209,12 @@ class LocalePicker extends ComponentBase
|
|||
* });
|
||||
*
|
||||
*/
|
||||
$translatedQuery = Event::fire('translate.localePicker.translateQuery',
|
||||
[$page, $query, $this->oldLocale, $locale], true);
|
||||
$translatedQuery = Event::fire('translate.localePicker.translateQuery', [
|
||||
$page,
|
||||
$query,
|
||||
$this->oldLocale,
|
||||
$locale
|
||||
], true);
|
||||
|
||||
$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
|
||||
|
||||
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).
|
||||
| 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
|
||||
| (i.e. /en/original-route) when enabled.
|
||||
|
|
||||
*/
|
||||
'disableLocalePrefixRoutes' => false,
|
||||
'disableLocalePrefixRoutes' => env('TRANSLATE_DISABLE_PREFIX_ROUTES', false),
|
||||
|
||||
];
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
name="purge_messages"
|
||||
value="1"
|
||||
id="purgeMessages">
|
||||
<label for="purgeMessages">
|
||||
<label for="purgeMessages" class="storm-icon-pseudo">
|
||||
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_label')) ?>
|
||||
</label>
|
||||
<p class="help-block">
|
||||
|
|
@ -36,7 +36,7 @@
|
|||
name="purge_deleted_messages"
|
||||
value="1"
|
||||
id="purgeDeletedMessages">
|
||||
<label for="purgeDeletedMessages">
|
||||
<label for="purgeDeletedMessages" class="storm-icon-pseudo">
|
||||
<?= e(trans('rainlab.translate::lang.messages.scan_messages_purge_deleted_label')) ?>
|
||||
</label>
|
||||
<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 $originalViewPath;
|
||||
|
||||
/**
|
||||
* @var bool legacyMode disables the Vue integration
|
||||
*/
|
||||
public $legacyMode = true;
|
||||
|
||||
/**
|
||||
* {@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;
|
||||
|
||||
use Lang;
|
||||
use File;
|
||||
use Cache;
|
||||
use Model;
|
||||
use Config;
|
||||
|
|
@ -49,7 +48,7 @@ class Locale extends Model
|
|||
/**
|
||||
* @var self Default locale cache.
|
||||
*/
|
||||
private static $defaultLocale;
|
||||
protected static $defaultLocale;
|
||||
|
||||
public function afterCreate()
|
||||
{
|
||||
|
|
@ -100,6 +99,13 @@ class Locale extends Model
|
|||
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)
|
||||
->remember(1440, 'rainlab.translate.defaultLocale')
|
||||
->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
|
||||
* @return void
|
||||
*/
|
||||
public function toLocale($locale = null, $message)
|
||||
public function toLocale($locale = null, $message = null)
|
||||
{
|
||||
if ($locale === null) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
*
|
||||
!.gitignore
|
||||
|
|
@ -51,7 +51,7 @@
|
|||
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.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.5: Fixed issue when using the language switcher
|
||||
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.9: Clear Static Page menu cache after saving the model; CSS fix for Text/Textarea input fields language selector.
|
||||
1.6.10:
|
||||
- Add option to purge deleted messages when scanning messages
|
||||
- Add Scan error column on Messages page
|
||||
- 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.
|
||||
- update_messages_table.php
|
||||
- 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
|
||||
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
|
||||
1.7.1:
|
||||
- Fix YAML issue with previous tag/release.
|
||||
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.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
|
||||
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."
|
||||
1.7.1: Fix YAML issue with previous tag/release.
|
||||
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.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.
|
||||
1.8.0: Adds initial support for October v2.0
|
||||
1.8.1: Minor bugfix
|
||||
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.
|
||||
1.8.4: Fixes the multilingual mediafinder to work with the media module.
|
||||
1.8.6: Fixes invisible checkboxes when scanning for messages.
|
||||
|
|
|
|||
|
|
@ -69,10 +69,13 @@ class Advertisement extends ComponentBase
|
|||
];
|
||||
}
|
||||
|
||||
public function onRun()
|
||||
{
|
||||
$this->tayyarla($this->property('random'));
|
||||
}
|
||||
|
||||
public function onDisplay(){
|
||||
$random = input('random');
|
||||
$this->page['group'] = $group = Group::where('code',$this->property('code'))
|
||||
private function tayyarla($random){
|
||||
$this->group = Group::where('code',$this->property('code'))
|
||||
->with(['adds' => function ($query) use ($random){
|
||||
if($random)
|
||||
$query->inRandomOrder();
|
||||
|
|
@ -80,11 +83,12 @@ class Advertisement extends ComponentBase
|
|||
$query->orderBy('order');
|
||||
}])
|
||||
->first();
|
||||
// dd($group->adds);
|
||||
$this->page['css_class'] = input('css_class','blat');
|
||||
if ($group && $group->adds){
|
||||
if ($this->group && $this->group->adds){
|
||||
try {
|
||||
DB::beginTransaction();
|
||||
foreach ($group->adds as $adv){
|
||||
foreach ($this->group->adds as $adv){
|
||||
if($adv->enable_stats){
|
||||
$statistika = Statistika::firstOrCreate(['item_id' => $adv->id,'date' => Carbon::today()]);
|
||||
$statistika->increment('view');
|
||||
|
|
@ -94,11 +98,16 @@ class Advertisement extends ComponentBase
|
|||
}catch (Exception $ex){
|
||||
DB::rollback();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function onShow(){
|
||||
$random = input('random');
|
||||
$this->tayyarla($random);
|
||||
return [
|
||||
'#'.$this->alias => $this->renderPartial('@'.$this->property('type')),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
public function onRedirect(){
|
||||
$data = post();
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<span></span>
|
||||
</button>
|
||||
<div class="partnerSlider__inner">
|
||||
{% for reklama in group.adds %}
|
||||
{% for reklama in __SELF__.group.adds %}
|
||||
<a class="partnerSlider__item"
|
||||
{% if reklama.enable_stats and reklama.url !="#" %}
|
||||
data-request="{{__SELF__}}::onRedirect"
|
||||
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
</div>
|
||||
</div>
|
||||
{% if __SELF__.property('random') %}
|
||||
<script>
|
||||
// parner slider start
|
||||
// ================================================
|
||||
|
|
@ -66,3 +67,55 @@
|
|||
// parner slider end
|
||||
// ================================================
|
||||
</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')}}">
|
||||
{% if __SELF__.property('random') %}
|
||||
{% put scripts %}
|
||||
<script>
|
||||
$.request('{{__SELF__}}::onDisplay',{
|
||||
$.request('{{__SELF__}}::onShow',{
|
||||
data:{random:{{__SELF__.property('random')}}
|
||||
{% if __SELF__.property('css_class') %},css_class:'{{__SELF__.property('css_class')}}' {% endif %}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
{% 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
|
||||
{% if reklama.url %}
|
||||
{% if reklama.enable_stats %}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{% if group and group.adds %}
|
||||
<div class="advertisiment_{{__SELF__}}">
|
||||
{% for reklama in group.adds %}
|
||||
{% for reklama in __SELF__.group.adds %}
|
||||
<a class="advertisiment__item"
|
||||
{% if reklama.enable_stats and reklama.url !="#" %}
|
||||
data-request="{{__SELF__}}::onRedirect"
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
// advertisement start
|
||||
$(function () {
|
||||
var $slideshow = $(".advertisiment_{{__SELF__}}");
|
||||
var ImagePauses = {{group.adds.pluck('display')}};
|
||||
var ImagePauses = {{__SELF__.group.adds.pluck('display')}};
|
||||
|
||||
// Init
|
||||
$slideshow.slick({
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ class Items extends ComponentBase
|
|||
* @param int $sourceId
|
||||
* @return array
|
||||
*/
|
||||
public static function loadItems(int $maxItems, int $sourceId = null): array
|
||||
public static function loadItems(int $maxItems, int $sourceId = null)
|
||||
{
|
||||
try {
|
||||
$items = Item::query()
|
||||
|
|
@ -93,6 +93,6 @@ class Items extends ComponentBase
|
|||
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 |