diff --git a/plugins/rainlab/builder/.travis.yml b/plugins/rainlab/builder/.travis.yml new file mode 100644 index 000000000..d4a44f926 --- /dev/null +++ b/plugins/rainlab/builder/.travis.yml @@ -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) diff --git a/plugins/rainlab/builder/assets/js/build-min.js b/plugins/rainlab/builder/assets/js/build-min.js index f46def49f..2c643c7e1 100644 --- a/plugins/rainlab/builder/assets/js/build-min.js +++ b/plugins/rainlab/builder/assets/js/build-min.js @@ -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=$(''),$addTimestampsButton=$(''),$addSoftDeleteButton=$('') +var $masterTabPane=this.getMasterTabsActivePane(),$form=$masterTabPane.find('form'),$toolbar=$masterTabPane.find('div[data-control=table] div.toolbar'),$addIdButton=$(''),$addTimestampsButton=$(''),$addSoftDeleteButton=$('') $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)} diff --git a/plugins/rainlab/builder/assets/js/builder.index.entity.databasetable.js b/plugins/rainlab/builder/assets/js/builder.index.entity.databasetable.js index 9b9e3b2a0..98f8cbd4c 100644 --- a/plugins/rainlab/builder/assets/js/builder.index.entity.databasetable.js +++ b/plugins/rainlab/builder/assets/js/builder.index.entity.databasetable.js @@ -168,7 +168,7 @@ var $masterTabPane = this.getMasterTabsActivePane(), $form = $masterTabPane.find('form'), $toolbar = $masterTabPane.find('div[data-control=table] div.toolbar'), - $addIdButton = $(''), + $addIdButton = $(''), $addTimestampsButton = $(''), $addSoftDeleteButton = $('') diff --git a/plugins/rainlab/builder/assets/less/builder.less b/plugins/rainlab/builder/assets/less/builder.less index 45e8ba524..1b64f63f9 100644 --- a/plugins/rainlab/builder/assets/less/builder.less +++ b/plugins/rainlab/builder/assets/less/builder.less @@ -195,4 +195,4 @@ div.control-table .toolbar a.builder-custom-table-button { background: white; } } -} \ No newline at end of file +} diff --git a/plugins/rainlab/builder/classes/ComponentHelper.php b/plugins/rainlab/builder/classes/ComponentHelper.php index d31451ed8..ab185915f 100644 --- a/plugins/rainlab/builder/classes/ComponentHelper.php +++ b/plugins/rainlab/builder/classes/ComponentHelper.php @@ -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; } diff --git a/plugins/rainlab/builder/classes/ModelModel.php b/plugins/rainlab/builder/classes/ModelModel.php index d962ad547..0b2ade023 100644 --- a/plugins/rainlab/builder/classes/ModelModel.php +++ b/plugins/rainlab/builder/classes/ModelModel.php @@ -1,6 +1,7 @@ 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 ] ]; diff --git a/plugins/rainlab/builder/classes/menusmodel/fields.yaml b/plugins/rainlab/builder/classes/menusmodel/fields.yaml index 5ca1394d5..01ad3baec 100644 --- a/plugins/rainlab/builder/classes/menusmodel/fields.yaml +++ b/plugins/rainlab/builder/classes/menusmodel/fields.yaml @@ -14,4 +14,4 @@ secondaryTabs: menus: stretch: true tab: rainlab.builder::lang.menu.items - type: RainLab\Builder\FormWidgets\MenuEditor + type: RainLab\Builder\FormWidgets\MenuEditor \ No newline at end of file diff --git a/plugins/rainlab/builder/composer.json b/plugins/rainlab/builder/composer.json new file mode 100644 index 000000000..d01cfe01c --- /dev/null +++ b/plugins/rainlab/builder/composer.json @@ -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" +} diff --git a/plugins/rainlab/builder/lang/cs/lang.php b/plugins/rainlab/builder/lang/cs/lang.php index 1758c5304..f63fabdf7 100644 --- a/plugins/rainlab/builder/lang/cs/lang.php +++ b/plugins/rainlab/builder/lang/cs/lang.php @@ -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', diff --git a/plugins/rainlab/builder/lang/en/lang.php b/plugins/rainlab/builder/lang/en/lang.php index 92c566cf2..b04f5e162 100644 --- a/plugins/rainlab/builder/lang/en/lang.php +++ b/plugins/rainlab/builder/lang/en/lang.php @@ -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', diff --git a/plugins/rainlab/builder/lang/es/lang.php b/plugins/rainlab/builder/lang/es/lang.php index 47626c0a2..0ee8050c3 100644 --- a/plugins/rainlab/builder/lang/es/lang.php +++ b/plugins/rainlab/builder/lang/es/lang.php @@ -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', ], ]; diff --git a/plugins/rainlab/builder/lang/fa/lang.php b/plugins/rainlab/builder/lang/fa/lang.php index 9269751ea..969937912 100644 --- a/plugins/rainlab/builder/lang/fa/lang.php +++ b/plugins/rainlab/builder/lang/fa/lang.php @@ -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', diff --git a/plugins/rainlab/builder/lang/nl/lang.php b/plugins/rainlab/builder/lang/nl/lang.php index 37a8cad22..31787a491 100644 --- a/plugins/rainlab/builder/lang/nl/lang.php +++ b/plugins/rainlab/builder/lang/nl/lang.php @@ -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', diff --git a/plugins/rainlab/builder/lang/pl/lang.php b/plugins/rainlab/builder/lang/pl/lang.php index 922063895..d12538c3b 100644 --- a/plugins/rainlab/builder/lang/pl/lang.php +++ b/plugins/rainlab/builder/lang/pl/lang.php @@ -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]")', diff --git a/plugins/rainlab/builder/lang/pt-br/lang.php b/plugins/rainlab/builder/lang/pt-br/lang.php index 9a10e55f7..22a0f3fa6 100644 --- a/plugins/rainlab/builder/lang/pt-br/lang.php +++ b/plugins/rainlab/builder/lang/pt-br/lang.php @@ -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]")', diff --git a/plugins/rainlab/builder/tests/fixtures/filesystemgenerator/temporary/.gitignore b/plugins/rainlab/builder/tests/fixtures/filesystemgenerator/temporary/.gitignore new file mode 100644 index 000000000..c96a04f00 --- /dev/null +++ b/plugins/rainlab/builder/tests/fixtures/filesystemgenerator/temporary/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/plugins/rainlab/builder/tests/unit/classes/FilesystemGeneratorTest.php b/plugins/rainlab/builder/tests/unit/classes/FilesystemGeneratorTest.php index fcc0c3e1a..3a7a5f809 100644 --- a/plugins/rainlab/builder/tests/unit/classes/FilesystemGeneratorTest.php +++ b/plugins/rainlab/builder/tests/unit/classes/FilesystemGeneratorTest.php @@ -1,16 +1,17 @@ cleanUp(); } - public function tearDown() + public function tearDown() : void { $this->cleanUp(); } diff --git a/plugins/rainlab/builder/updates/version.yaml b/plugins/rainlab/builder/updates/version.yaml index 5c0338bcf..638416231 100644 --- a/plugins/rainlab/builder/updates/version.yaml +++ b/plugins/rainlab/builder/updates/version.yaml @@ -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. diff --git a/plugins/rainlab/builder/widgets/VersionList.php b/plugins/rainlab/builder/widgets/VersionList.php index eb487ecf0..a58be2cf4 100644 --- a/plugins/rainlab/builder/widgets/VersionList.php +++ b/plugins/rainlab/builder/widgets/VersionList.php @@ -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 [ diff --git a/plugins/rainlab/builder/widgets/versionlist/partials/_sort.htm b/plugins/rainlab/builder/widgets/versionlist/partials/_sort.htm new file mode 100644 index 000000000..d84feb059 --- /dev/null +++ b/plugins/rainlab/builder/widgets/versionlist/partials/_sort.htm @@ -0,0 +1,11 @@ +getConfig('sort', 'asc') === 'asc'): ?> + + + + diff --git a/plugins/rainlab/builder/widgets/versionlist/partials/_toolbar.htm b/plugins/rainlab/builder/widgets/versionlist/partials/_toolbar.htm index 3e49d7072..f0197389a 100644 --- a/plugins/rainlab/builder/widgets/versionlist/partials/_toolbar.htm +++ b/plugins/rainlab/builder/widgets/versionlist/partials/_toolbar.htm @@ -2,7 +2,7 @@
-
@@ -31,4 +32,4 @@ />
-
\ No newline at end of file + diff --git a/plugins/rainlab/builder/widgets/versionlist/partials/_widget-contents.htm b/plugins/rainlab/builder/widgets/versionlist/partials/_widget-contents.htm index 77031c4e9..a2813ef78 100644 --- a/plugins/rainlab/builder/widgets/versionlist/partials/_widget-contents.htm +++ b/plugins/rainlab/builder/widgets/versionlist/partials/_widget-contents.htm @@ -25,4 +25,4 @@ - \ No newline at end of file + diff --git a/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/1_BUG_REPORT.md b/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/1_BUG_REPORT.md new file mode 100644 index 000000000..5a58d175a --- /dev/null +++ b/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/1_BUG_REPORT.md @@ -0,0 +1,15 @@ +--- +name: "🐛 Bug Report" +about: 'Report a general Pages Plugin issue' +labels: 'Status: Review Needed, Type: Unconfirmed Bug' +--- + +- OctoberCMS Build: ### +- RainLab Pages Plugin Version: ### +- PHP Version: + +### Description: + + +### Steps To Reproduce: + diff --git a/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/2_GENERAL_SUPPORT.md b/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/2_GENERAL_SUPPORT.md new file mode 100644 index 000000000..935714f02 --- /dev/null +++ b/plugins/rainlab/pages/.github/ISSUE_TEMPLATE/2_GENERAL_SUPPORT.md @@ -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! diff --git a/plugins/rainlab/pages/.gitignore b/plugins/rainlab/pages/.gitignore new file mode 100644 index 000000000..3d725761b --- /dev/null +++ b/plugins/rainlab/pages/.gitignore @@ -0,0 +1,2 @@ +.DS_Store +.idea \ No newline at end of file diff --git a/plugins/rainlab/pages/Plugin.php b/plugins/rainlab/pages/Plugin.php index 66591ccf0..4e36c15fb 100644 --- a/plugins/rainlab/pages/Plugin.php +++ b/plugins/rainlab/pages/Plugin.php @@ -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) { diff --git a/plugins/rainlab/pages/assets/js/pages-page.js b/plugins/rainlab/pages/assets/js/pages-page.js index 5e3b862c4..e969e2d0f 100644 --- a/plugins/rainlab/pages/assets/js/pages-page.js +++ b/plugins/rainlab/pages/assets/js/pages-page.js @@ -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() - }) + }); } /* diff --git a/plugins/rainlab/pages/classes/Menu.php b/plugins/rainlab/pages/classes/Menu.php index ba294dc59..bc0808cd1 100644 --- a/plugins/rainlab/pages/classes/Menu.php +++ b/plugins/rainlab/pages/classes/Menu.php @@ -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; diff --git a/plugins/rainlab/pages/classes/MenuItemReference.php b/plugins/rainlab/pages/classes/MenuItemReference.php index 535d9114b..7ee4b7a0a 100644 --- a/plugins/rainlab/pages/classes/MenuItemReference.php +++ b/plugins/rainlab/pages/classes/MenuItemReference.php @@ -16,6 +16,11 @@ use Event; */ class MenuItemReference { + /** + * @var string Specifies the menu item type. + */ + public $type; + /** * @var string Specifies the item title */ diff --git a/plugins/rainlab/pages/classes/Page.php b/plugins/rainlab/pages/classes/Page.php index 142da5364..dda6dae19 100644 --- a/plugins/rainlab/pages/classes/Page.php +++ b/plugins/rainlab/pages/classes/Page.php @@ -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; diff --git a/plugins/rainlab/pages/classes/PageList.php b/plugins/rainlab/pages/classes/PageList.php index 60ac32a14..547a2fe53 100644 --- a/plugins/rainlab/pages/classes/PageList.php +++ b/plugins/rainlab/pages/classes/PageList.php @@ -47,27 +47,22 @@ class PageList { $pages = $this->listPages($skipCache); $config = $this->getPagesConfig(); + + // Make the $pages collection an associative array for performance + $pagesArray = $pages->keyBy(function ($page) { + return $page->getBaseFileName(); + })->all(); - $iterator = function($configPages) use (&$iterator, &$pages) { + $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 (isset($pagesArray[$fileName])) { + $result[] = (object) [ + 'page' => $pagesArray[$fileName], + 'subpages' => $iterator($subpages), + ]; } - - if ($pageObject === null) { - continue; - } - - $result[] = (object)[ - 'page' => $pageObject, - 'subpages' => $iterator($subpages) - ]; } return $result; diff --git a/plugins/rainlab/pages/classes/Router.php b/plugins/rainlab/pages/classes/Router.php index b7bd481d0..11e4d2c46 100644 --- a/plugins/rainlab/pages/classes/Router.php +++ b/plugins/rainlab/pages/classes/Router.php @@ -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); } diff --git a/plugins/rainlab/pages/classes/Snippet.php b/plugins/rainlab/pages/classes/Snippet.php index 3f90e50f4..9b89b0df9 100644 --- a/plugins/rainlab/pages/classes/Snippet.php +++ b/plugins/rainlab/pages/classes/Snippet.php @@ -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 = []; - $rows = $settingsArray['viewBag']['snippetProperties']['TableData']; + + if (isset($settingsArray['viewBag']['snippetProperties']['TableData'])) { + $rows = $settingsArray['viewBag']['snippetProperties']['TableData']; + } + else { + $rows = $settingsArray['viewBag']['snippetProperties']; + } foreach ($rows as $row) { $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) { - $property['id'] = $index; + if ($context !== 'editor') { + $property['id'] = $index; + } - if (isset($property['options'])) { + if (isset($property['options']) && is_array($property['options'])) { $property['options'] = self::dropDownOptionsToString($property['options']); } } $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); } diff --git a/plugins/rainlab/pages/classes/SnippetManager.php b/plugins/rainlab/pages/classes/SnippetManager.php index 0d55f8ee3..1d9af0b2c 100644 --- a/plugins/rainlab/pages/classes/SnippetManager.php +++ b/plugins/rainlab/pages/classes/SnippetManager.php @@ -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; diff --git a/plugins/rainlab/pages/classes/page/fields.yaml b/plugins/rainlab/pages/classes/page/fields.yaml index ed1064bd7..9a2350e90 100644 --- a/plugins/rainlab/pages/classes/page/fields.yaml +++ b/plugins/rainlab/pages/classes/page/fields.yaml @@ -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 diff --git a/plugins/rainlab/pages/components/staticmenu/default.htm b/plugins/rainlab/pages/components/staticmenu/default.htm index 10f15e42e..a974a7e9b 100644 --- a/plugins/rainlab/pages/components/staticmenu/default.htm +++ b/plugins/rainlab/pages/components/staticmenu/default.htm @@ -1,5 +1,5 @@ {% if __SELF__.menuItems %} - + +{% endif %} \ No newline at end of file diff --git a/plugins/rainlab/pages/components/staticmenu/items.htm b/plugins/rainlab/pages/components/staticmenu/items.htm index e54cd1eab..dea010750 100644 --- a/plugins/rainlab/pages/components/staticmenu/items.htm +++ b/plugins/rainlab/pages/components/staticmenu/items.htm @@ -1,6 +1,7 @@ {% for item in items if not item.viewBag.isHidden %} + +{% endfor %} \ No newline at end of file diff --git a/plugins/rainlab/pages/composer.json b/plugins/rainlab/pages/composer.json new file mode 100644 index 000000000..a7fc74d22 --- /dev/null +++ b/plugins/rainlab/pages/composer.json @@ -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" +} diff --git a/plugins/rainlab/pages/controllers/Index.php b/plugins/rainlab/pages/controllers/Index.php index c56d2cf27..9166381e7 100644 --- a/plugins/rainlab/pages/controllers/Index.php +++ b/plugins/rainlab/pages/controllers/Index.php @@ -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 - $datasource = $this->getThemeDatasource(); - $datasource->pushToSource($object, 'filesystem'); - $datasource->removeFromSource($object, 'database'); + 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 - $datasource = $this->getThemeDatasource(); - $datasource->removeFromSource($object, 'database'); + 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,11 +455,24 @@ class Index extends Controller { $result = false; - if (Config::get('app.debug', false) && - Theme::databaseLayerEnabled() && - $this->getThemeDatasource()->sourceHasModel('database', $object) - ) { - $result = true; + 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,9 +489,20 @@ class Index extends Controller { $result = false; - if (Theme::databaseLayerEnabled()) { - $datasource = $this->getThemeDatasource(); - $result = $datasource->sourceHasModel('database', $object) && $datasource->sourceHasModel('filesystem', $object); + 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(); diff --git a/plugins/rainlab/pages/controllers/index/_page_toolbar.htm b/plugins/rainlab/pages/controllers/index/_page_toolbar.htm index fceef94c8..719a5534c 100644 --- a/plugins/rainlab/pages/controllers/index/_page_toolbar.htm +++ b/plugins/rainlab/pages/controllers/index/_page_toolbar.htm @@ -26,11 +26,10 @@ makePartial('~/modules/cms/controllers/index/_button_lastmodified.htm'); ?> - \ No newline at end of file + diff --git a/plugins/rainlab/pages/docs/documentation.md b/plugins/rainlab/pages/docs/documentation.md index 94ae95acd..54c04b8ea 100644 --- a/plugins/rainlab/pages/docs/documentation.md +++ b/plugins/rainlab/pages/docs/documentation.md @@ -94,6 +94,28 @@ If you want to link to the static page by its URL, simply use the `|app` filter: Go to Chairs +##### 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) %} + + +``` + ##### 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: diff --git a/plugins/rainlab/pages/formwidgets/MenuPicker.php b/plugins/rainlab/pages/formwidgets/MenuPicker.php new file mode 100644 index 000000000..5ba38f4e5 --- /dev/null +++ b/plugins/rainlab/pages/formwidgets/MenuPicker.php @@ -0,0 +1,49 @@ +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(); + } +} diff --git a/plugins/rainlab/pages/formwidgets/menuitems/assets/js/menu-items-editor.js b/plugins/rainlab/pages/formwidgets/menuitems/assets/js/menu-items-editor.js index 299433538..fe750976f 100644 --- a/plugins/rainlab/pages/formwidgets/menuitems/assets/js/menu-items-editor.js +++ b/plugins/rainlab/pages/formwidgets/menuitems/assets/js/menu-items-editor.js @@ -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) + } } }) diff --git a/plugins/rainlab/pages/formwidgets/menuitems/partials/_menuitems.htm b/plugins/rainlab/pages/formwidgets/menuitems/partials/_menuitems.htm index 50b921dba..de2babcff 100644 --- a/plugins/rainlab/pages/formwidgets/menuitems/partials/_menuitems.htm +++ b/plugins/rainlab/pages/formwidgets/menuitems/partials/_menuitems.htm @@ -1,9 +1,12 @@ +
[ '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', diff --git a/plugins/rainlab/pages/lang/hu/lang.php b/plugins/rainlab/pages/lang/hu/lang.php index c2b860e7f..6c4238c1d 100644 --- a/plugins/rainlab/pages/lang/hu/lang.php +++ b/plugins/rainlab/pages/lang/hu/lang.php @@ -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.', ] ]; diff --git a/plugins/rainlab/pages/updates/version.yaml b/plugins/rainlab/pages/updates/version.yaml index 55b0f2b64..6bcde256d 100644 --- a/plugins/rainlab/pages/updates/version.yaml +++ b/plugins/rainlab/pages/updates/version.yaml @@ -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. diff --git a/plugins/rainlab/translate/.gitignore b/plugins/rainlab/translate/.gitignore new file mode 100644 index 000000000..4b53aba1a --- /dev/null +++ b/plugins/rainlab/translate/.gitignore @@ -0,0 +1,4 @@ +/vendor +composer.lock +.DS_Store +.phpunit.result.cache diff --git a/plugins/rainlab/translate/Plugin.php b/plugins/rainlab/translate/Plugin.php index 073646ad0..445b0b264 100644 --- a/plugins/rainlab/translate/Plugin.php +++ b/plugins/rainlab/translate/Plugin.php @@ -37,7 +37,7 @@ class Plugin extends PluginBase public function register() { - /* + /* * Load localized version of mail templates (akin to localized CMS content files) */ Event::listen('mailer.beforeAddContent', function ($mailer, $message, $view, $data, $raw, $plain) { @@ -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', ]; } diff --git a/plugins/rainlab/translate/behaviors/TranslatableModel.php b/plugins/rainlab/translate/behaviors/TranslatableModel.php index a6b484ae5..d8a0955bf 100644 --- a/plugins/rainlab/translate/behaviors/TranslatableModel.php +++ b/plugins/rainlab/translate/behaviors/TranslatableModel.php @@ -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; + } + } + } } /** diff --git a/plugins/rainlab/translate/classes/TranslatableBehavior.php b/plugins/rainlab/translate/classes/TranslatableBehavior.php index 9876621d1..8336864a5 100644 --- a/plugins/rainlab/translate/classes/TranslatableBehavior.php +++ b/plugins/rainlab/translate/classes/TranslatableBehavior.php @@ -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; } diff --git a/plugins/rainlab/translate/classes/Translator.php b/plugins/rainlab/translate/classes/Translator.php index f395b5f04..02a76f45f 100644 --- a/plugins/rainlab/translate/classes/Translator.php +++ b/plugins/rainlab/translate/classes/Translator.php @@ -59,6 +59,7 @@ class Translator } App::setLocale($locale); + $this->activeLocale = $locale; if ($remember) { diff --git a/plugins/rainlab/translate/components/AlternateHrefLangElements.php b/plugins/rainlab/translate/components/AlternateHrefLangElements.php index 1ac554583..106dfddf3 100644 --- a/plugins/rainlab/translate/components/AlternateHrefLangElements.php +++ b/plugins/rainlab/translate/components/AlternateHrefLangElements.php @@ -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; diff --git a/plugins/rainlab/translate/components/LocalePicker.php b/plugins/rainlab/translate/components/LocalePicker.php index 14480692f..1d1277039 100644 --- a/plugins/rainlab/translate/components/LocalePicker.php +++ b/plugins/rainlab/translate/components/LocalePicker.php @@ -1,5 +1,5 @@ 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); diff --git a/plugins/rainlab/translate/composer.json b/plugins/rainlab/translate/composer.json new file mode 100644 index 000000000..af3417851 --- /dev/null +++ b/plugins/rainlab/translate/composer.json @@ -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" +} diff --git a/plugins/rainlab/translate/config/config.php b/plugins/rainlab/translate/config/config.php index 457187b81..b3c3b49f9 100644 --- a/plugins/rainlab/translate/config/config.php +++ b/plugins/rainlab/translate/config/config.php @@ -1,38 +1,50 @@ 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), ]; diff --git a/plugins/rainlab/translate/controllers/messages/_scan_messages_form.htm b/plugins/rainlab/translate/controllers/messages/_scan_messages_form.htm index 4d7b169f1..73065329e 100644 --- a/plugins/rainlab/translate/controllers/messages/_scan_messages_form.htm +++ b/plugins/rainlab/translate/controllers/messages/_scan_messages_form.htm @@ -22,7 +22,7 @@ name="purge_messages" value="1" id="purgeMessages"> -
+ diff --git a/plugins/tps/reklama/components/advertisement/single.htm b/plugins/tps/reklama/components/advertisement/single.htm index 14a1e0946..ec9bf3120 100644 --- a/plugins/tps/reklama/components/advertisement/single.htm +++ b/plugins/tps/reklama/components/advertisement/single.htm @@ -1,5 +1,5 @@ -{% set reklama = group.adds.first %} +{% set reklama = __SELF__.group.adds.first %} - {% for reklama in group.adds %} + {% for reklama in __SELF__.group.adds %} get()->toArray(); + return $items->get(); } } diff --git a/themes/modern2/assets/css/ajax-loader.gif b/themes/modern2/assets/css/ajax-loader.gif new file mode 100755 index 000000000..e0e6e9760 Binary files /dev/null and b/themes/modern2/assets/css/ajax-loader.gif differ diff --git a/themes/modern2/assets/css/components/1-main/mixin.scss b/themes/modern2/assets/css/components/1-main/mixin.scss new file mode 100755 index 000000000..364922671 --- /dev/null +++ b/themes/modern2/assets/css/components/1-main/mixin.scss @@ -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; } +} \ No newline at end of file diff --git a/themes/modern2/assets/css/components/1-main/nulifier.scss b/themes/modern2/assets/css/components/1-main/nulifier.scss new file mode 100755 index 000000000..02c044780 --- /dev/null +++ b/themes/modern2/assets/css/components/1-main/nulifier.scss @@ -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; +} + diff --git a/themes/modern2/assets/css/components/1-main/variables.scss b/themes/modern2/assets/css/components/1-main/variables.scss new file mode 100755 index 000000000..be6e35ce3 --- /dev/null +++ b/themes/modern2/assets/css/components/1-main/variables.scss @@ -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; diff --git a/themes/modern2/assets/css/components/2-layout/footer.scss b/themes/modern2/assets/css/components/2-layout/footer.scss new file mode 100755 index 000000000..30e53700c --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/footer.scss @@ -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; + } + } + } +} diff --git a/themes/modern2/assets/css/components/2-layout/header.scss b/themes/modern2/assets/css/components/2-layout/header.scss new file mode 100755 index 000000000..be4f25c79 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/header.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/2-layout/lightpick.scss b/themes/modern2/assets/css/components/2-layout/lightpick.scss new file mode 100755 index 000000000..598351286 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/lightpick.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/2-layout/newsCard.scss b/themes/modern2/assets/css/components/2-layout/newsCard.scss new file mode 100755 index 000000000..cf342de26 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/newsCard.scss @@ -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; + } + } +} diff --git a/themes/modern2/assets/css/components/2-layout/newsSlider.scss b/themes/modern2/assets/css/components/2-layout/newsSlider.scss new file mode 100755 index 000000000..55ff83b60 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/newsSlider.scss @@ -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; + } + } + } +} diff --git a/themes/modern2/assets/css/components/2-layout/partnerSlider.scss b/themes/modern2/assets/css/components/2-layout/partnerSlider.scss new file mode 100755 index 000000000..f9a92d463 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/partnerSlider.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/2-layout/responsive.scss b/themes/modern2/assets/css/components/2-layout/responsive.scss new file mode 100755 index 000000000..0d23939a9 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/responsive.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/2-layout/slider.scss b/themes/modern2/assets/css/components/2-layout/slider.scss new file mode 100755 index 000000000..ee8e09184 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/slider.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/2-layout/subheader.scss b/themes/modern2/assets/css/components/2-layout/subheader.scss new file mode 100755 index 000000000..074404a12 --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/subheader.scss @@ -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; + } + } +} diff --git a/themes/modern2/assets/css/components/2-layout/swiper.scss b/themes/modern2/assets/css/components/2-layout/swiper.scss new file mode 100755 index 000000000..829dff77c --- /dev/null +++ b/themes/modern2/assets/css/components/2-layout/swiper.scss @@ -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); + } +} diff --git a/themes/modern2/assets/css/components/3-page/about.scss b/themes/modern2/assets/css/components/3-page/about.scss new file mode 100755 index 000000000..ca11fead1 --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/about.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/3-page/contact.scss b/themes/modern2/assets/css/components/3-page/contact.scss new file mode 100755 index 000000000..c36b71a4e --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/contact.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/3-page/heading.scss b/themes/modern2/assets/css/components/3-page/heading.scss new file mode 100755 index 000000000..0046bad39 --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/heading.scss @@ -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; + } + } +} diff --git a/themes/modern2/assets/css/components/3-page/home.scss b/themes/modern2/assets/css/components/3-page/home.scss new file mode 100755 index 000000000..affb4531f --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/home.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/components/3-page/news.scss b/themes/modern2/assets/css/components/3-page/news.scss new file mode 100755 index 000000000..32945836b --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/news.scss @@ -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; + } + } +} diff --git a/themes/modern2/assets/css/components/3-page/terms.scss b/themes/modern2/assets/css/components/3-page/terms.scss new file mode 100755 index 000000000..1619a0ebf --- /dev/null +++ b/themes/modern2/assets/css/components/3-page/terms.scss @@ -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; + } +} diff --git a/themes/modern2/assets/css/main.css b/themes/modern2/assets/css/main.css new file mode 100755 index 000000000..6d1fb7b5f --- /dev/null +++ b/themes/modern2/assets/css/main.css @@ -0,0 +1,2463 @@ +@charset "UTF-8"; +/*** + +==================================================================== + Reset +==================================================================== + +***/ +* { + 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; +} + +.header { + position: relative; +} +.header::before { + position: absolute; + content: ""; + top: 0; + left: 0; + width: 100%; + height: 4px; + background: #00822c; +} +.header__inner { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 0; +} +.header__logo { + width: 120px; +} +.header__search { + display: flex; + align-items: center; +} +.header__search-input { + width: 350px; + position: relative; +} +.header__search-input input { + width: calc(100% - 60px); + font-family: "roboto"; + padding: 14px 40px 14px 20px; + font-size: 16px; + line-height: 16px; + color: rgba(36, 36, 36, 0.3); + border-radius: 5px; + border: 1px solid #c9c9c9; +} +.header__search-input input::placeholder { + font-family: "roboto"; + font-size: 16px; + line-height: 16px; + color: rgba(36, 36, 36, 0.3); +} +.header__search-btn { + position: absolute; + top: 50%; + right: 20px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); +} +.header__search-btn svg { + width: 18px; + height: 18px; + fill: #242424; +} +.header__slogan { + font-family: "Oswald", sans-serif; + color: #fd4c24; + font-weight: 700; + font-size: 40px; + line-height: 40px; + margin-right: 20px; + letter-spacing: -1.5px; +} +.header .hamBtn { + display: none; +} + +.footer { + background: #242424; + padding: 30px 0; +} +.footer__inner { + display: flex; + align-items: center; + justify-content: space-between; +} +.footer__copyright { + font-size: 12px; + line-height: 20px; + font-weight: 400; + color: #ffffff; +} +.footer__social { + display: flex; + align-items: center; +} +.footer__social-link { + fill: #ffffff; + margin: 0 10px; + transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; +} +.footer__social-link:hover { + fill: #fd4c24; +} + +.subheader { + background: #242424; +} +.subheader .close { + display: none; +} +.subheader__inner { + display: flex; + align-items: center; + justify-content: space-between; +} +.subheader .nav__inner { + display: flex; + align-items: center; +} +.subheader .nav__inner-link { + font-size: 12px; + line-height: 20px; + font-weight: 400; + color: #ffffff; + margin-right: 40px; + padding: 15px 0; + position: relative; + z-index: 1; +} +.subheader .nav__inner-link::before { + position: absolute; + bottom: 0; + width: 0; + height: 4px; + background: #fd4c24; + content: ""; + transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; +} +.subheader .nav__inner-link:hover::before { + width: 100%; +} +.subheader .nav__inner-link.active::before { + width: 100%; +} +.subheader .nav__inner-link .dropDown { + position: absolute; + top: 100%; + left: 0; + width: 200px; + max-height: 0; + overflow: auto; + background: #ffffff; +} +.subheader .nav__inner-link .dropDown__link { + display: block; + padding: 15px; + font-size: 12px; + line-height: 20px; + font-weight: 400; + color: #242424; + transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; +} +.subheader .nav__inner-link .dropDown__link:hover { + background: #f7f7f7; +} +.subheader .nav__inner-link:hover .dropDown { + max-height: 2000px; +} +.subheader .nav__inner-link:hover::before { + width: 200px; +} +.subheader .language { + display: flex; + align-items: center; +} +.subheader .language__link { + width: 30px; + height: 20px; + margin-left: 20px; +} + +/* Slider */ +.slick-slider { + position: relative; + display: block; + box-sizing: border-box; + -webkit-touch-callout: none; + -webkit-user-select: none; + user-select: none; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} + +.slick-list { + position: relative; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.slick-list:focus { + outline: none; +} +.slick-list.dragging { + cursor: pointer; + cursor: hand; +} + +.slick-slider .slick-track, +.slick-slider .slick-list { + transform: translate3d(0, 0, 0); +} + +.slick-track { + position: relative; + left: 0; + top: 0; + display: block; + margin-left: auto; + margin-right: auto; +} +.slick-track:before, .slick-track:after { + content: ""; + display: table; +} +.slick-track:after { + clear: both; +} +.slick-loading .slick-track { + visibility: hidden; +} + +.slick-slide { + float: left; + height: 100%; + min-height: 1px; + display: none; +} +[dir=rtl] .slick-slide { + float: right; +} +.slick-slide img { + display: block; +} +.slick-slide.slick-loading img { + display: none; +} +.slick-slide.dragging img { + pointer-events: none; +} +.slick-initialized .slick-slide { + display: block; +} +.slick-loading .slick-slide { + visibility: hidden; +} +.slick-vertical .slick-slide { + display: block; + height: auto; + border: 1px solid transparent; +} + +.slick-arrow.slick-hidden { + display: none; +} + +/* Slider */ +.slick-loading .slick-list { + background: #fff url("./ajax-loader.gif") center center no-repeat; +} + +/* Icons */ +@font-face { + font-family: "slick"; + src: url("./fonts/slick.eot"); + src: url("./fonts/slick.eot?#iefix") format("embedded-opentype"), url("./fonts/slick.woff") format("woff"), url("./fonts/slick.ttf") format("truetype"), url("./fonts/slick.svg#slick") format("svg"); + font-weight: normal; + font-style: normal; +} +/* Arrows */ +.slick-prev, +.slick-next { + position: absolute; + display: block; + height: 20px; + width: 20px; + line-height: 0px; + font-size: 0px; + cursor: pointer; + background: transparent; + color: transparent; + top: 50%; + transform: translate(0, -50%); + padding: 0; + border: none; + outline: none; +} +.slick-prev:hover, .slick-prev:focus, +.slick-next:hover, +.slick-next:focus { + outline: none; + background: transparent; + color: transparent; +} +.slick-prev:hover:before, .slick-prev:focus:before, +.slick-next:hover:before, +.slick-next:focus:before { + opacity: 1; +} +.slick-prev.slick-disabled:before, +.slick-next.slick-disabled:before { + opacity: 0.25; +} +.slick-prev:before, +.slick-next:before { + font-family: "slick"; + font-size: 20px; + line-height: 1; + color: white; + opacity: 0.75; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.slick-prev { + left: -25px; +} +[dir=rtl] .slick-prev { + left: auto; + right: -25px; +} +.slick-prev:before { + content: "←"; +} +[dir=rtl] .slick-prev:before { + content: "→"; +} + +.slick-next { + right: -25px; +} +[dir=rtl] .slick-next { + left: -25px; + right: auto; +} +.slick-next:before { + content: "→"; +} +[dir=rtl] .slick-next:before { + content: "←"; +} + +/* Dots */ +.slick-dotted.slick-slider { + margin-bottom: 30px; +} + +.slick-dots { + position: absolute; + bottom: -25px; + list-style: none; + display: block; + text-align: center; + padding: 0; + margin: 0; + width: 100%; +} +.slick-dots li { + position: relative; + display: inline-block; + height: 20px; + width: 20px; + margin: 0 5px; + padding: 0; + cursor: pointer; +} +.slick-dots li button { + border: 0; + background: transparent; + display: block; + height: 20px; + width: 20px; + outline: none; + line-height: 0px; + font-size: 0px; + color: transparent; + padding: 5px; + cursor: pointer; +} +.slick-dots li button:hover, .slick-dots li button:focus { + outline: none; +} +.slick-dots li button:hover:before, .slick-dots li button:focus:before { + opacity: 1; +} +.slick-dots li button:before { + position: absolute; + top: 0; + left: 0; + content: "•"; + width: 20px; + height: 20px; + font-family: "slick"; + font-size: 6px; + line-height: 20px; + text-align: center; + color: black; + opacity: 0.25; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.slick-dots li.slick-active button:before { + color: black; + opacity: 0.75; +} + +.partnerSlider { + position: relative; +} +.partnerSlider__item { + margin-right: 5px; + padding: 30px; + border-right: 5px; + border: 1px solid #e6e6e6; + position: relative; + height: 120px; +} +.partnerSlider__item img { + width: 90%; + margin: 0 auto; +} +.partnerSlider .p1 { + cursor: pointer; + position: absolute; + top: 50%; + left: 0; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1; +} +.partnerSlider .n1 { + cursor: pointer; + position: absolute; + z-index: 1; + top: 50%; + right: 5px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; +} + +.card { + position: relative; + padding: 30px; + background: #ffffff; +} +.card__header { + display: flex; + align-items: center; + justify-content: space-between; + position: relative; +} +.card__header-category { + padding: 5px 10px; + background: #fd4c24; + font-size: 12px; + line-height: 20px; + color: #ffffff; + font-weight: 700; + max-width: 115px; + text-align: center; + margin-bottom: 10px; +} +.card__header-view { + display: flex; + align-items: center; + color: #a2a2a2; + font-weight: 400; + font-size: 12px; + line-height: 15px; +} +.card__header-view svg { + margin-right: 5px; + stroke: #a2a2a2; + width: 21px; + height: 14px; +} +.card__header-date { + display: flex; + align-items: center; + font-size: 12px; + line-height: 20px; + color: #a2a2a2; + font-weight: 400; +} +.card__header-date svg { + margin: 0 5px; + width: 4px; + height: 4px; +} +.card__link { + color: #000; + font-weight: 700; + font-size: 16px; + line-height: 25px; + margin: 10px 0 0 0; + display: block; + max-height: 75px; + overflow: hidden; + text-overflow: ellipsis; +} +.card__box { + padding: 30px 0; +} +.card__box:last-child { + border-top: 1px solid #a2a2a2; + padding: 30px 0 0 0; +} +.card__box:nth-child(2) { + padding: 0 0 30px 0; +} +.card.other { + padding: 30px; + border-bottom: 1px solid #e6e6e6; +} +.card.other .card__header-category { + background: #242424; + color: #ffffff; +} +.card.other:last-child { + border-bottom: none; +} + +.calendar__outer { + width: 100%; +} +.calendar__outer input { + width: 100%; + display: none; +} + +.lightpick { + position: absolute; + z-index: 99999; + border-radius: 4px; + color: #000; + font-family: system-ui, Roboto, Helvetica, Arial, sans-serif; + line-height: 1.125em; + width: 100%; + margin-bottom: 80px; +} +.lightpick--inlined { + position: relative; + display: inline-block; +} +.lightpick, .lightpick *, .lightpick::after, .lightpick::before { + box-sizing: border-box; +} +.lightpick.is-hidden { + display: none; +} +.lightpick__months { + display: grid; + background-color: #eee; + grid-template-columns: auto; + grid-gap: 1px; +} +.lightpick--2-columns .lightpick__months { + grid-template-columns: auto auto; +} + +.lightpick--3-columns .lightpick__months { + grid-template-columns: auto auto auto; +} + +.lightpick--4-columns .lightpick__months { + grid-template-columns: auto auto auto auto; +} + +.lightpick--5-columns .lightpick__months { + grid-template-columns: auto auto auto auto auto; +} + +.lightpick__month { + width: 100%; + background-color: #fff; +} +.lightpick__month-title-bar { + display: flex; + margin-bottom: 4px; + justify-content: space-between; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + border: 1px solid #242424; + position: relative; + padding: 10px 0; +} +.lightpick__month-title { + margin-top: 4px; + margin-bottom: 4px; + margin-left: 4px; + font-size: 16px; + font-weight: 700; + line-height: 24px; + cursor: default; + padding: 0 4px; + border-radius: 4px; +} +.lightpick__month-title > .lightpick__select { + border: none; + background-color: transparent; + outline: none; + -webkit-appearance: none; + appearance: none; +} +.lightpick__month-title > .lightpick__select:disabled { + color: #333; +} +.lightpick__month-title > .lightpick__select-months { + font-weight: bold; + font-size: 1em; + margin-right: 0; + direction: ltr; +} +.lightpick__toolbar { + display: flex; + 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%; +} +.lightpick__previous-action, .lightpick__next-action, .lightpick__close-action { + display: flex; + width: 32px; + height: 32px; + outline: none; + border: none; + background: none; + justify-content: center; + align-items: center; +} +.lightpick__previous-action:active, .lightpick__next-action:active, .lightpick__close-action:active { + color: inherit; +} +.lightpick__previous-action, .lightpick__next-action { + font-size: 20px; + margin: 0 5px; +} +.lightpick__close-action { + font-size: 18px; +} +.lightpick__days-of-the-week { + display: grid; + grid-template-columns: repeat(7, 1fr); +} +.lightpick__day-of-the-week { + display: flex; + justify-content: center; + align-items: center; + font-size: 18px; + line-height: 26px; + font-weight: 700; + padding: 10px 0; +} +.lightpick__days { + display: grid; + grid-template-columns: repeat(7, 1fr); +} +.lightpick__day { + display: flex; + height: 40px; + padding: 10px 0; + background-position: center center; + background-size: contain; + background-repeat: no-repeat; + font-size: 15px; + line-height: 23px; + justify-content: center; + align-items: center; + cursor: default; +} +.lightpick__day.is-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(220, 50, 47, 0.5)' cx='16' cy='16' r='16'/%3E%3C/svg%3E"); + background-size: 18.8% auto; + background-position: center bottom; + color: #dc322f; +} +.lightpick__day:not(.is-disabled):hover { + background-size: contain; + 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='%23e0e0e0' cx='16' cy='16' r='16'/%3E%3C/svg%3E"); +} +.lightpick__day.is-disabled { + opacity: 0.38; + pointer-events: none; +} +.lightpick__day.is-disabled.is-forward-selected { + opacity: 1; +} +.lightpick__day.is-disabled.is-forward-selected:not(.is-start-date) { + background-color: rgba(253, 76, 36, 0.1); + background-image: none; +} +.lightpick__day.disabled-tooltip { + pointer-events: auto; +} +.lightpick__day.is-previous-month, .lightpick__day.is-next-month { + opacity: 0.38; +} +.lightpick__day.lightpick__day.is-in-range:not(.is-disabled) { + opacity: 1; +} +.lightpick__day.is-in-range { + border-radius: 0; + background-color: rgba(253, 76, 36, 0.1); + background-image: none; +} +.lightpick__day.is-in-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(38, 139, 210, 0.5)' cx='16' cy='16' r='16'/%3E%3C/svg%3E"); +} +.lightpick__day.is-start-date.is-in-range, .lightpick__day.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: #fd4c24; + background-image: none; +} +.lightpick__day.is-end-date.is-in-range, .lightpick__day.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: #fd4c24; + background-image: none; +} +.lightpick__day.is-start-date.is-end-date { + background-color: transparent; + 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='%23fd4c24' cx='16' cy='16' r='16'/%3E%3C/svg%3E"); +} +.lightpick__day.is-start-date, .lightpick__day.is-end-date, .lightpick__day.is-start-date:hover, .lightpick__day.is-end-date: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='%23fd4c24' cx='16' cy='16' r='16'/%3E%3C/svg%3E"); + background-size: auto; + background-position: center; + color: #fff; + font-weight: bold; +} +.lightpick__tooltip { + position: absolute; + margin-top: -4px; + padding: 4px 8px; + border-radius: 4px; + background-color: #fff; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); + white-space: nowrap; + font-size: 11px; + pointer-events: none; +} +.lightpick__tooltip::before { + position: absolute; + bottom: -5px; + left: calc(50% - 5px); + border-top: 5px solid rgba(0, 0, 0, 0.12); + border-right: 5px solid transparent; + border-left: 5px solid transparent; + content: ""; +} +.lightpick__tooltip::after { + position: absolute; + bottom: -4px; + left: calc(50% - 4px); + border-top: 4px solid #fff; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} +.lightpick__footer { + display: flex; + justify-content: space-between; +} +.lightpick__reset-action, .lightpick__apply-action { + border-radius: 5px; + font-size: 12px; + border: none; +} +.lightpick__reset-action { + color: #fff; + background-color: #aeacad; +} +.lightpick__apply-action { + color: #fff; + background-color: #2495f3; +} + +.newsSlider__outer { + position: relative; + margin: 0 -5px; + overflow: hidden; +} +.newsSlider__outer .p2 { + cursor: pointer; + position: absolute; + top: 50%; + left: 5px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1; +} +.newsSlider__outer .n2 { + cursor: pointer; + position: absolute; + z-index: 1; + top: 50%; + right: 5px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; +} +.newsSlider .newsSlider__item { + position: relative; + padding: 5px 5px; +} +.newsSlider .newsSlider__item img { + width: 100%; + height: 100%; + object-fit: cover; + -o-object-fit: cover; +} +.newsSlider .newsSlider__item-content { + position: absolute; + left: 20px; + bottom: 20px; + width: calc(100% - 40px); +} +.newsSlider .newsSlider__item-content-date { + display: flex; + align-items: center; + justify-content: center; + padding: 8px 12px; + background: #fd4c24; + font-size: 14px; + line-height: 18px; + font-weight: 400; + max-width: 145px; + color: #ffffff; + margin-bottom: 10px; +} +.newsSlider .newsSlider__item-content-date svg { + margin: 0 4px; + width: 4px; + height: 4px; + fill: #ffffff; +} +.newsSlider .newsSlider__item-content-link { + color: #ffffff; + font-size: 16px; + line-height: 30px; + height: 60px; + overflow: hidden; + text-overflow: ellipsis; + font-weight: 700; + display: block; +} + +.swiper-container { + width: calc(100% + 10px); + height: 100%; + position: relative; + margin: 0 -5px; +} +.swiper-container .p3 { + cursor: pointer; + position: absolute; + top: 50%; + left: 5px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 1; +} +.swiper-container .n3 { + cursor: pointer; + position: absolute; + z-index: 1; + top: 50%; + right: 5px; + transform: translateY(-50%); + -moz-ransform: translateY(-50%); + -o-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -webkit-transform: translateY(-50%); + width: 30px; + height: 40px; + background: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; +} +.swiper-container .slick-list { + padding: 0 33.3% 0 0; +} + +.swiper-slide { + text-align: center; + font-size: 18px; + height: 520px; + /* Center slide t ext vertically */ + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; + margin: 5px; +} +.swiper-slide-image { + width: 100%; + height: 100%; + position: absolute; + transform-origin: 0% 50%; + position: relative; +} +.swiper-slide-content { + position: absolute; + left: 0; + bottom: 0; + display: none; + width: calc(100% - 80px); + background: black; + background: linear-gradient(0deg, black 0%, rgba(0, 0, 0, 0.0228466387) 100%); + padding: 50px 40px; +} +.swiper-slide-content-date { + display: flex; + align-items: center; + justify-content: flex-start; + font-size: 14px; + line-height: 18px; + font-weight: 400; + color: #ffffff; + margin-bottom: 10px; +} +.swiper-slide-content-date svg { + margin: 0 4px; + width: 4px; + height: 4px; + fill: #ffffff; +} +.swiper-slide-content-footer { + display: flex; + align-items: center; + justify-content: space-between; +} +.swiper-slide-content-link { + color: #ffffff; + font-size: 16px; + line-height: 30px; + height: 60px; + overflow: hidden; + text-overflow: ellipsis; + font-weight: 700; + display: block; + text-align: left; + width: 75%; +} +.swiper-slide-content-category { + color: 14px; + line-height: 18px; + font-weight: 700; + color: #ffffff; + padding: 8px 16px; + background: #fd4c24; +} +.swiper-slide.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); + } +} +.marquee { + width: 100%; + margin: 10px 0; + overflow: hidden; + position: relative; + height: 40px; +} +.marquee::after { + position: absolute; + right: 0; + top: 0; + width: 260px; + height: 100%; + content: ""; + background: white; + background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, white 100%); +} +.marquee__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: #ffffff; + line-height: 16px; + font-weight: 700; + text-transform: uppercase; +} +.marquee__link::before { + -webkit-clip-path: polygon(100% 46%, 0 0, 0 100%); + 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: #000; +} + +@keyframes marquee { + 0% { + left: 0; + } + 100% { + left: -100%; + } +} +/* Make it move */ +@keyframes marquee { + 0% { + transform: translate(0, 0); + } + 100% { + transform: translate(-100%, 0); + } +} +.banner { + margin: 80px 0; +} +.banner__inner { + width: 100%; + height: auto; +} +.banner__inner img { + width: 100%; +} + +.main { + margin-top: 70px; +} +.main__inner { + display: flex; + align-items: stretch; +} +.main__content { + width: calc(70% - 25px); + margin-right: 25px; +} +.main__body-row { + margin: 0 -20px 80px -20px; + display: flex; + align-items: stretch; + flex-wrap: wrap; +} +.main__body-column { + width: calc(50% - 42px); + margin: 0 20px; +} +.main__body-column a.progressive { + position: relative; + display: block; + overflow: hidden; + outline: none; + height: 300px; +} +.main__body-column a.progressive:not(.replace) { + cursor: default; +} +.main__body-column a.progressive img { + width: 100%; + height: 100%; + object-fit: cover; + -o-object-fit: cover; +} +.main__body-column a.progressive img.preview { + filter: blur(2vw); + transform: scale(1.05); +} +.main__body-column a.progressive img.reveal { + position: absolute; + left: 0; + top: 0; + will-change: transform, opacity; + animation: reveal 1s ease-out; +} +.main__body-column.border { + border: 1px solid #dcdcdc; +} +.main__body-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 80px; + position: relative; +} +.main__body-header::before { + position: absolute; + content: ""; + top: 50%; + left: 50%; + width: 80%; + height: 1px; + background: #e6e6e6; + transform: translate(-50%, -50%); + -moz-ransform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + z-index: -1; +} +.main__body-header-title { + font-size: 18px; + line-height: 26px; + font-weight: 700; + color: #242424; + background: #ffffff; +} +.main__body-header-link { + font-size: 12px; + line-height: 20px; + font-weight: 400; + color: #a2a2a2; + background: #ffffff; + display: block; +} +.main__body-card { + margin: -100px 30px 0 30px; +} +.main__body-title { + font-size: 18px; + line-height: 26px; + font-weight: 700; + color: #242424; + margin-bottom: 20px; +} +.main__banner { + width: 100%; + height: auto; + margin-bottom: 80px; +} +.main__banner img { + width: 100%; +} +.main__sidebar { + margin-left: 25px; + width: calc(30% - 25px); +} +.main__sidebar-title { + font-size: 16px; + line-height: 25px; + font-weight: 700; + text-transform: uppercase; + margin-bottom: 80px; + color: #242424; +} +.main__sidebar a.progressive { + position: relative; + display: block; + overflow: hidden; + outline: none; + margin-bottom: 80px; +} +.main__sidebar a.progressive:not(.replace) { + cursor: default; +} +.main__sidebar a.progressive img { + width: 100%; + height: auto; +} +.main__sidebar a.progressive img.preview { + filter: blur(2vw); + transform: scale(1.05); +} +.main__sidebar a.progressive img.reveal { + position: absolute; + left: 0; + top: 0; + will-change: transform, opacity; + animation: reveal 1s ease-out; +} +.main__sidebar-tag { + display: flex; + align-items: center; + flex-wrap: wrap; + margin: -30px -5px 80px -5px; +} +.main__sidebar-tag-link { + padding: 8px 9px; + border-right: 5px; + background: #f7f7f6; + font-size: 16px; + line-height: 16px; + color: #242424; + margin: 5px; +} + +.event { + margin: 80px 0; +} +.event__header { + margin-bottom: 80px; + display: flex; + align-items: center; + justify-content: space-between; + position: relative; +} +.event__header-title { + font-size: 18px; + line-height: 26px; + font-weight: 700; + color: #242424; + background: #ffffff; +} +.event__header-link { + font-size: 12px; + line-height: 20px; + font-weight: 400; + color: #a2a2a2; + background: #ffffff; +} +.event__header::before { + position: absolute; + content: ""; + top: 50%; + left: 50%; + width: 80%; + height: 1px; + background: #e6e6e6; + transform: translate(-50%, -50%); + -moz-ransform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -webkit-transform: translate(-50%, -50%); + z-index: -1; +} +.event__body-row { + display: flex; + align-items: stretch; + margin: 0 -20px; +} +.event__body-image { + width: calc(50% - 40px); + margin: 0 20px; + position: relative; +} +.event__body-image a.progressive { + position: relative; + display: block; + overflow: hidden; + outline: none; + height: 330px; +} +.event__body-image a.progressive:not(.replace) { + cursor: default; +} +.event__body-image a.progressive img { + width: 100%; + height: 100%; + object-fit: cover; + -o-object-fit: cover; +} +.event__body-image a.progressive img.preview { + filter: blur(2vw); + transform: scale(1.05); +} +.event__body-image a.progressive img.reveal { + position: absolute; + left: 0; + top: 0; + will-change: transform, opacity; + animation: reveal 1s ease-out; +} +.event__body-card { + position: absolute; + bottom: -30px; + left: 30px; + width: calc(100% - 60px); + border: 1px solid #707070; +} +.event__body-column { + width: calc(50% - 100px); + margin: 0 20px; + padding: 15px 30px; + border: 1px solid #dcdcdc; +} +.event__body-column .card { + padding: 30px 0; + border-bottom: 1px solid #dcdcdc; +} +.event__body-column .card:nth-last-child(1) { + border-bottom: none; +} + +.partner { + margin-bottom: 80px; +} +.partner__title { + font-size: 18px; + line-height: 26px; + font-weight: 700; + color: #242424; + margin-bottom: 80px; +} + +/* progressive image CSS */ +@keyframes reveal { + 0% { + transform: scale(1.05); + opacity: 0; + } + 100% { + transform: scale(1); + opacity: 1; + } +} +.heading__title { + font-weight: 700; + color: #242424; + font-size: 18px; + line-height: 26px; + margin-bottom: 80px; +} +.heading__row { + display: flex; + align-items: center; + margin-bottom: 80px; +} +.heading__image { + width: 40%; +} +.heading a.progressive { + position: relative; + display: block; + overflow: hidden; + outline: none; + height: 320px; +} +.heading a.progressive:not(.replace) { + cursor: default; +} +.heading a.progressive img { + width: 100%; + height: 100%; + object-fit: cover; + -o-object-fit: cover; +} +.heading a.progressive img.preview { + filter: blur(2vw); + transform: scale(1.05); +} +.heading a.progressive img.reveal { + position: absolute; + left: 0; + top: 0; + will-change: transform, opacity; + animation: reveal 1s ease-out; +} +.heading__content { + width: calc(60% - 40px); + height: calc(100% - 80px); + padding: 40px 0 40px 40px; +} +.heading__content-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 30px; +} +.heading__content-header-view { + display: flex; + align-items: center; + color: #a2a2a2; + font-weight: 400; + font-size: 12px; + line-height: 15px; +} +.heading__content-header-view svg { + margin-right: 5px; + stroke: #a2a2a2; + width: 21px; +} +.heading__content-header-date { + display: flex; + align-items: center; + font-size: 12px; + line-height: 20px; + color: #ffffff; + background: #242424; + font-weight: 400; + padding: 5px 15px; +} +.heading__content-header-date svg { + margin: 0 5px; +} +.heading__content-body-link { + color: #000; + font-weight: 700; + font-size: 16px; + line-height: 25px; + margin: 10px 0 0 0; + display: block; + height: 60px; + overflow: hidden; + text-overflow: ellipsis; + margin-bottom: 20px; +} +.heading__content-body-para { + font-size: 16px; + line-height: 25px; + font-weight: 400; + color: #242424; + height: 120px; + overflow: hidden; + text-overflow: ellipsis; +} +.heading__footer { + display: flex; + align-items: center; +} +.heading__footer-page { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background: #242424; +} +.heading__footer-page svg { + width: 12px; + height: 12px; + fill: #ffffff; +} +.heading__footer-input { + width: 80px; + height: 40px; + margin: 0 10px; +} +.heading__footer-input input { + text-align: center; + font-size: 18px; + line-height: 26px; + height: 100%; + width: 100%; + border-radius: 5px; + background: #e6e6e6; + font-weight: 400; + color: #242424; +} +.heading__footer span { + font-size: 18px; + line-height: 26px; + color: #242424; + font-weight: 400; + margin-left: 10px; +} + +.address__inner { + font-size: 18px; + line-height: 26px; + color: #242424; + font-weight: 400; + margin-bottom: 25px; +} +.address__inner span { + font-weight: 700; +} + +.about { + padding: 80px 0; +} +.about__title { + font-size: 22px; + line-height: 30px; + font-weight: 700; + color: #242424; +} +.about__para { + font-size: 18px; + line-height: 40px; + font-weight: 400; + color: #242424; + margin-top: 30px; +} + +.form__title { + font-weight: 700; + color: #242424; + font-size: 18px; + line-height: 26px; + margin-bottom: 80px; +} +.form__row { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 30px; +} +.form__input { + display: flex; + flex-direction: column; +} +.form__input label { + display: block; + font-size: 16px; + line-height: 25px; + font-weight: 700; + color: #242424; + margin-bottom: 20px; +} +.form__input input { + width: calc(100% - 40px); + padding: 0 20px; + height: 60px; + border-radius: 5px; + border: 1px solid #c9c9c9; + font-size: 16px; + line-height: 16px; + color: #242424; +} +.form__input:last-child { + width: calc(50% - 20px); + margin-left: 20px; +} +.form__input:first-child { + width: calc(50% - 20px); + margin-right: 20px; +} +.form__input-bg { + width: 100%; +} +.form__input-bg label { + display: block; + font-size: 16px; + line-height: 25px; + font-weight: 700; + color: #242424; + margin-bottom: 20px; +} +.form__input-bg input { + width: calc(100% - 40px); + padding: 0 20px; + height: 60px; + border-radius: 5px; + border: 1px solid #c9c9c9; + font-size: 16px; + line-height: 16px; + color: #242424; +} +.form__textarea { + width: 100%; + margin-top: 30px; +} +.form__textarea label { + display: block; + font-size: 16px; + line-height: 25px; + font-weight: 700; + color: #242424; + margin-bottom: 20px; +} +.form__textarea textarea { + width: calc(100% - 40px); + padding: 20px; + border-radius: 5px; + border: 1px solid #c9c9c9; +} +.form__btn { + width: 250px; + background: #fd4c24; + text-align: center; + color: #ffffff; + font-weight: 700; + padding: 14px; + border-radius: 5px; + font-size: 16px; + line-height: 25px; + margin-top: 30px; +} + +.main__inner.contact { + padding: 80px 0 160px 0; +} + +.news__inner { + display: flex; + align-items: stretch; + padding: 80px 0; +} +.news__sidebar { + margin-left: 25px; + width: calc(30% - 25px); +} +.news__sidebar-title { + font-size: 16px; + line-height: 25px; + font-weight: 700; + text-transform: uppercase; + margin-bottom: 20px; + color: #242424; +} +.news__sidebar .card { + padding: 30px 0; + border-bottom: 1px solid #dcdcdc; +} +.news__content { + width: calc(70% - 25px); + margin-right: 25px; +} +.news__title { + color: #000; + font-weight: 700; + font-size: 22px; + line-height: 30px; +} +.news__date { + display: flex; + align-items: center; + font-size: 18px; + line-height: 26px; + color: #a2a2a2; + font-weight: 400; + margin-bottom: 20px; +} +.news__date svg { + margin: 0 5px; +} +.news__image { + width: 100%; + margin: 50px 0; +} +.news__image img { + width: 100%; + height: auto; +} +.news__body p { + font-size: 16px; + line-height: 30px; + margin-bottom: 30px; +} +.news__body img.aligncenter { + margin: 100px auto; + display: block; +} +.news__footer { + display: flex; + align-items: center; + justify-content: space-between; +} +.news__footer-social { + display: flex; + align-items: center; +} +.news__footer-social-link { + margin-right: 20px; + fill: #fd4c24; +} +.news__footer-name { + font-size: 22px; + line-height: 30px; + font-weight: 700; + color: #242424; +} + +.terms { + padding: 80px 0; +} +.terms__title { + font-size: 18px; + line-height: 26px; + font-weight: 700; + color: #000; + margin-bottom: 40px; +} +.terms__para { + font-size: 16px; + line-height: 30px; + font-weight: 400; + color: #000; + margin-bottom: 40px; +} + +.animaSlider { + height: 560px; +} +.animaSlider__outer { + position: relative; +} +.animaSlider__item { + height: 560px; + padding: 5px; +} +.animaSlider__item-image { + height: 100%; + width: 66.6%; + transition: 0.4s linear; +} +.animaSlider__item-image img { + width: 100%; + height: 100%; + object-fit: cover; + -o-object-fit: cover; +} +.animaSlider__item.slick-slide { + width: 66.6%; +} +.animaSlider__item-category { + position: absolute; + left: 30px; + bottom: 30px; + background: #fd4c24; + color: #ffffff; + font-weight: 400; + font-size: 16px; + line-height: 25px; + padding: 5px 20px; +} +.animaSlider__item.slick-active .animaSlider__item-image { + width: 100%; +} +.animaSlider .slick-list { + padding: 0 33.3% 0 0; +} + +@media (max-width: 1640px) { + .auto__container { + max-width: 1240px; + } + + .swiper-slide { + height: 450px; + } +} +@media (max-width: 1400px) { + .main__banner { + margin-bottom: 40px; + } + + .swiper-slide { + height: 350px; + } + + .auto__container { + max-width: 1040px; + padding: 0 25px; + } + + .banner { + margin: 40px 0; + } + + .slider { + height: 450px; + } + .slider__item { + height: 450px; + } + .slider__nav a { + height: 33.3%; + } + .slider__nav a span { + overflow: hidden; + text-overflow: ellipsis; + } + + .event { + margin: 40px 0; + } + .event__header { + margin-bottom: 40px; + } + .event__body-row { + margin: 0 -10px; + } + .event__body-image { + margin: 0 10px; + width: calc(50% - 20px); + } + .event__body-image a.progressive { + height: 200px; + } + .event__body-card { + position: unset; + width: 100%; + border: none; + } + .event__body-column { + margin: 0 10px; + width: calc(50% - 30px); + padding: 0 15px; + } + + .main__body-header { + margin-bottom: 40px; + } + .main__body-column a.progressive { + height: 240px; + } + .main__body-card { + margin: -50px 15px 0 15px; + } + .main__sidebar-title { + margin-bottom: 40px; + } + .main__sidebar a.progressive { + margin-bottom: 40px; + } + .main__sidebar-tag { + margin-bottom: 40px; + } + .main__sidebar-tag-link { + padding: 4px 6px; + font-size: 12px; + } + + .card { + padding: 15px; + } + + .partner__title { + margin-bottom: 40px; + } + + .heading__row { + margin-bottom: 40px; + } + .heading__title { + margin-bottom: 40px; + } + .heading__content { + padding: 15px 0 15px 15px; + width: calc(60% - 15px); + } + .heading__content-header { + margin-bottom: 15px; + } + .heading__content-body-para { + height: 90px; + } + .heading a.progressive { + height: 250px; + } + + .form__title { + margin-bottom: 40px; + } + .form__input label { + height: 60px; + overflow: hidden; + text-overflow: ellipsis; + } + + .news__inner { + padding: 40px 0; + } + .news__image { + margin: 20px 0; + } + .news__body-row-image { + margin: 0 10px; + width: calc(50% - 20px); + } +} +@media (max-width: 1024px) { + .swiper-container .slick-list { + padding: 0 20% 0 0; + } + + .partner__title { + margin-bottom: 20px; + } + + .swiper-slide-content { + padding: 15px; + width: calc(100% - 30px); + } + .swiper-slide-content-category { + font-size: 12px; + line-height: 14px; + padding: 8px 12px; + font-weight: 500; + } + .swiper-slide-content-link { + font-size: 14px; + line-height: 26px; + height: 52px; + width: 75%; + } + + .slider__nav { + display: none; + } + .slider__inner { + width: 100%; + margin: 0; + } + + .header__slogan { + display: none; + } + .header__search { + display: none; + } + .header .hamBtn { + display: block; + width: 35px; + background: none; + height: 25px; + display: flex; + flex-direction: column; + justify-content: space-between; + } + .header .hamBtn span { + width: 100%; + height: 5px; + border-radius: 10px; + background: #242424; + } + + .subheader__inner { + position: fixed; + top: 0; + right: 0; + height: 100%; + width: 0; + overflow: hidden; + opacity: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 1000; + transition: all 0.2s ease-in-out 0s; + -moz-transition: all 0.2s ease-in-out 0s; + } + .subheader__inner .close { + width: 30px; + height: 30px; + position: absolute; + left: 30px; + top: 30px; + display: block; + } + .subheader__inner .close img { + width: 100%; + height: 100%; + } + .subheader__inner .nav { + position: absolute; + top: 0; + right: 0; + width: 50%; + height: calc(100% - 50px); + overflow-y: scroll; + background: #242424; + } + .subheader__inner .nav__inner { + flex-direction: column; + } + .subheader__inner .nav__inner-link { + display: block; + text-align: center; + margin-right: 0; + padding: 20px; + font-size: 18px; + line-height: 26px; + font-weight: 700; + width: calc(100% - 40px); + } + .subheader__inner .nav__inner-link::before { + display: none; + } + .subheader__inner .language { + position: absolute; + bottom: 0; + right: 0; + width: 50%; + padding: 15px 0; + justify-content: center; + background: #b4b4b4; + } + .subheader__inner.showMenu { + width: 100%; + opacity: 1; + } + + .event__body-image { + width: calc(50% - 20px); + } + .event__body-column { + width: calc(50% - 30px); + } + + .main { + margin-top: 40px; + } + .main__sidebar { + display: none; + } + .main__content { + width: 100%; + margin: 0; + } + .main__body-card { + margin: -50px 0 0 0; + } + .main__body-column a.progressive { + height: 300px; + } + + .footer__inner { + flex-direction: column; + justify-content: center; + } + .footer__social { + margin-top: 20px; + } + .footer__copyright { + text-align: center; + } + + .card.other { + padding: 15px; + } + + .mr-top-bot { + margin: 40px 0; + } + + .about { + padding: 40px 0; + } + + .news__sidebar { + display: none; + } + .news__content { + width: 100%; + margin-right: 0; + } + + .terms { + padding: 40px 0; + } + .terms__title { + margin-bottom: 20px; + } + .terms__para { + margin-bottom: 20px; + } +} +@media (max-width: 700px) { + .swiper-container .slick-list { + padding: 0 0 0 0; + } + + .header__logo { + width: 80px; + } + .header__logo img { + width: 100%; + } + + .marquee { + display: none; + } + + .slider { + height: 350px; + } + .slider__item { + height: 350px; + } + + .event__body-row { + margin: 0; + flex-direction: column; + } + .event__body-image { + width: 100%; + margin: 15px 0; + } + .event__body-image a.progressive { + height: auto; + } + .event__body-column { + width: calc(100% - 30px); + margin: 0; + padding: 0 15px; + border: none; + } + .event__body-column .card { + padding: 15px 0; + } + + .main__body-row { + flex-direction: column; + margin: 0; + } + .main__body-column { + width: 100%; + margin: 15px 0; + } + .main__body-column a.progressive { + height: auto; + } + .main__banner { + margin-bottom: 40px; + } + + .heading__row { + margin-bottom: 20px; + flex-direction: column; + } + .heading__image { + width: 100%; + } + .heading__content { + padding: 20px 0; + width: 100%; + } + .heading__content-body-para { + height: 120px; + } + .heading a.progressive { + height: auto; + } + .heading a.progressive img { + height: unset; + width: 100%; + object-fit: unset; + -o-object-fit: unset; + } + + .form__row { + flex-direction: column; + } + .form__input { + margin-bottom: 20px; + } + .form__input:first-child { + width: 100%; + margin-right: 0; + } + .form__input:last-child { + width: 100%; + margin-left: 0; + } + .form__input label { + height: unset; + } + .form__btn { + width: 100%; + } + + .main__inner.contact { + padding: 0; + } + + .news__body-row { + margin: 0; + flex-direction: column; + } + .news__body-row-image { + margin: 15px 0; + width: 100%; + } + .news__footer { + flex-direction: column; + } + + .newsSlider .newsSlider__item-content { + position: unset; + padding: 10px; + border: 1px solid #dfdfdf; + width: calc(100% - 20px); + } + .newsSlider .newsSlider__item-content-link { + color: #242424; + font-size: 12px; + line-height: 16px; + height: 48px; + } + .newsSlider .newsSlider__item-content-date { + font-size: 10px; + width: 100%; + padding: 8px 0; + } +} +@media (max-width: 540px) { + .swiper-slide-content-category { + position: absolute; + top: 12px; + right: 15px; + } + + .auto__container { + padding: 0 10px; + } + + .slider { + height: 300px; + } + .slider__item { + height: 300px; + } + + .partnerSlider { + overflow: hidden; + } + .partnerSlider__item { + margin-right: 0; + padding: 5px; + height: unset; + } + + .footer__social { + flex-wrap: wrap; + justify-content: center; + } + .footer__social-link { + margin: 5px; + } + + .subheader__inner .close { + width: 20px; + height: 20px; + top: 15px; + left: 15px; + } + .subheader .nav { + width: calc(100% - 50px); + } + .subheader .language { + width: calc(100% - 50px); + } + + .swiper-slide { + height: 300px; + } +} \ No newline at end of file diff --git a/themes/modern2/assets/css/main.scss b/themes/modern2/assets/css/main.scss new file mode 100755 index 000000000..79b69cbab --- /dev/null +++ b/themes/modern2/assets/css/main.scss @@ -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"; diff --git a/themes/modern2/assets/css/prepros.config b/themes/modern2/assets/css/prepros.config new file mode 100755 index 000000000..a8993a1ca --- /dev/null +++ b/themes/modern2/assets/css/prepros.config @@ -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": [] + } +} diff --git a/themes/modern2/assets/images/example.svg b/themes/modern2/assets/images/example.svg new file mode 100644 index 000000000..71a907ff8 --- /dev/null +++ b/themes/modern2/assets/images/example.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/images/logo.svg b/themes/modern2/assets/images/logo.svg new file mode 100644 index 000000000..eef276ad8 --- /dev/null +++ b/themes/modern2/assets/images/logo.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/news/1.png b/themes/modern2/assets/images/news/1.png new file mode 100644 index 000000000..c681bc55b Binary files /dev/null and b/themes/modern2/assets/images/news/1.png differ diff --git a/themes/modern2/assets/images/news/2.png b/themes/modern2/assets/images/news/2.png new file mode 100644 index 000000000..6b4363007 Binary files /dev/null and b/themes/modern2/assets/images/news/2.png differ diff --git a/themes/modern2/assets/images/news/3.png b/themes/modern2/assets/images/news/3.png new file mode 100644 index 000000000..1fdf6ab76 Binary files /dev/null and b/themes/modern2/assets/images/news/3.png differ diff --git a/themes/modern2/assets/images/polygon.svg b/themes/modern2/assets/images/polygon.svg new file mode 100644 index 000000000..14a0389a4 --- /dev/null +++ b/themes/modern2/assets/images/polygon.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/images/sideExample.svg b/themes/modern2/assets/images/sideExample.svg new file mode 100644 index 000000000..7a7aca8a3 --- /dev/null +++ b/themes/modern2/assets/images/sideExample.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/images/svg/ENG.svg b/themes/modern2/assets/images/svg/ENG.svg new file mode 100644 index 000000000..04057e511 --- /dev/null +++ b/themes/modern2/assets/images/svg/ENG.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/svg/Polygon 1.svg b/themes/modern2/assets/images/svg/Polygon 1.svg new file mode 100644 index 000000000..14a0389a4 --- /dev/null +++ b/themes/modern2/assets/images/svg/Polygon 1.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/images/svg/RUS.svg b/themes/modern2/assets/images/svg/RUS.svg new file mode 100644 index 000000000..52e689812 --- /dev/null +++ b/themes/modern2/assets/images/svg/RUS.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/svg/TKM.svg b/themes/modern2/assets/images/svg/TKM.svg new file mode 100644 index 000000000..c820cb33f --- /dev/null +++ b/themes/modern2/assets/images/svg/TKM.svg @@ -0,0 +1,490 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/svg/Telegram.svg b/themes/modern2/assets/images/svg/Telegram.svg new file mode 100644 index 000000000..2dfb9ef77 --- /dev/null +++ b/themes/modern2/assets/images/svg/Telegram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/arrow-right-1.svg b/themes/modern2/assets/images/svg/arrow-right-1.svg new file mode 100644 index 000000000..c00174942 --- /dev/null +++ b/themes/modern2/assets/images/svg/arrow-right-1.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/images/svg/arrow-right.svg b/themes/modern2/assets/images/svg/arrow-right.svg new file mode 100644 index 000000000..f15ab9a2a --- /dev/null +++ b/themes/modern2/assets/images/svg/arrow-right.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/images/svg/cancel.svg b/themes/modern2/assets/images/svg/cancel.svg new file mode 100644 index 000000000..7ed9756e6 --- /dev/null +++ b/themes/modern2/assets/images/svg/cancel.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/svg/eye.svg b/themes/modern2/assets/images/svg/eye.svg new file mode 100644 index 000000000..a56895a3f --- /dev/null +++ b/themes/modern2/assets/images/svg/eye.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/images/svg/facebook.svg b/themes/modern2/assets/images/svg/facebook.svg new file mode 100644 index 000000000..acdea8f95 --- /dev/null +++ b/themes/modern2/assets/images/svg/facebook.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/header 2.svg b/themes/modern2/assets/images/svg/header 2.svg new file mode 100644 index 000000000..eef276ad8 --- /dev/null +++ b/themes/modern2/assets/images/svg/header 2.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/images/svg/instagram.svg b/themes/modern2/assets/images/svg/instagram.svg new file mode 100644 index 000000000..ac1763e0b --- /dev/null +++ b/themes/modern2/assets/images/svg/instagram.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/linkedin.svg b/themes/modern2/assets/images/svg/linkedin.svg new file mode 100644 index 000000000..672ab69b9 --- /dev/null +++ b/themes/modern2/assets/images/svg/linkedin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/odnoklassniki.svg b/themes/modern2/assets/images/svg/odnoklassniki.svg new file mode 100644 index 000000000..1ced7bdb2 --- /dev/null +++ b/themes/modern2/assets/images/svg/odnoklassniki.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/images/svg/twitter.svg b/themes/modern2/assets/images/svg/twitter.svg new file mode 100644 index 000000000..51d7afd4b --- /dev/null +++ b/themes/modern2/assets/images/svg/twitter.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/vk.svg b/themes/modern2/assets/images/svg/vk.svg new file mode 100644 index 000000000..146425379 --- /dev/null +++ b/themes/modern2/assets/images/svg/vk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/themes/modern2/assets/images/svg/youtube.svg b/themes/modern2/assets/images/svg/youtube.svg new file mode 100644 index 000000000..7f61679cf --- /dev/null +++ b/themes/modern2/assets/images/svg/youtube.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/images/svg/Иконка (Поиск).svg b/themes/modern2/assets/images/svg/Иконка (Поиск).svg new file mode 100644 index 000000000..10d901e4e --- /dev/null +++ b/themes/modern2/assets/images/svg/Иконка (Поиск).svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/themes/modern2/assets/js/calendar.js b/themes/modern2/assets/js/calendar.js new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/themes/modern2/assets/js/calendar.js @@ -0,0 +1 @@ + diff --git a/themes/modern2/assets/js/jquery.js b/themes/modern2/assets/js/jquery.js new file mode 100644 index 000000000..c4c6022f2 --- /dev/null +++ b/themes/modern2/assets/js/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("