diff --git a/plugins/ahmadfatoni/apigenerator/controllers/api/CategoriesV2Controller.php b/plugins/ahmadfatoni/apigenerator/controllers/api/CategoriesV2Controller.php new file mode 100644 index 000000000..d4d0f5045 --- /dev/null +++ b/plugins/ahmadfatoni/apigenerator/controllers/api/CategoriesV2Controller.php @@ -0,0 +1,46 @@ +Category = $Category; + $this->helpers = $helpers; + } + + public function index(){ + + //categories list + $data = $this->Category->select('id','name') + ->with(['translations:model_id,locale,attribute_data']) + ->where('status',1) + ->get() + ->toArray(); + + return $this->helpers->apiArrayResponseBuilder(200, 'success', $data); + } + + //categories item + public function show($id){ + + $data = $this->Category::find($id); + + if ($data){ + return $this->helpers->apiArrayResponseBuilder(200, 'success', [$data]); + } else { + $this->helpers->apiArrayResponseBuilder(404, 'not found', ['error' => 'Resource id=' . $id . ' could not be found']); + } + } +} diff --git a/plugins/ahmadfatoni/apigenerator/routes.php b/plugins/ahmadfatoni/apigenerator/routes.php index 395aad3b9..663b12f44 100644 --- a/plugins/ahmadfatoni/apigenerator/routes.php +++ b/plugins/ahmadfatoni/apigenerator/routes.php @@ -7,6 +7,10 @@ Route::get('fatoni/delete/api/{id}', array('as' => 'fatoni.delete.api', 'uses' = Route::resource('api/categories', 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesController', ['except' => ['destroy', 'create', 'edit']]); Route::resource('api/advetisements', 'AhmadFatoni\ApiGenerator\Controllers\API\AdvertisementsController', ['except' => ['destroy', 'create', 'edit']]); Route::resource('{locale}/api/posts', 'AhmadFatoni\ApiGenerator\Controllers\API\postsController', ['except' => ['destroy', 'create', 'edit']]); + + +Route::resource('api/v2/categories', 'AhmadFatoni\ApiGenerator\Controllers\API\CategoriesV2Controller', ['except' => ['destroy', 'create', 'edit']]); + Route::get('api/version',function (){ return '2.0.8'; }); diff --git a/plugins/bedard/blogtags/Plugin.php b/plugins/bedard/blogtags/Plugin.php index d4e793cd8..843e83c65 100644 --- a/plugins/bedard/blogtags/Plugin.php +++ b/plugins/bedard/blogtags/Plugin.php @@ -82,6 +82,14 @@ class Plugin extends PluginBase 'order' => 'name', 'conditions' => 'bedard_blogtags_tags.locale = "en"' ]; + $model->belongsToMany['tags_tm'] = [ + 'Bedard\BlogTags\Models\Tag', + 'table' => 'bedard_blogtags_post_tag', + 'key' => 'post_id', + 'other_key' =>'tag_id', + 'order' => 'name', + 'conditions' => 'bedard_blogtags_tags.locale = "tm"' + ]; }); @@ -105,6 +113,13 @@ class Plugin extends PluginBase 'dependsOn' => 'locale', 'tab' => 'rainlab.blog::lang.post.tab_categories', 'type' => 'taglist' + ], + 'tags_tm' => [ + 'label' => 'Tags tm', + 'mode' => 'relation', + 'dependsOn' => 'locale', + 'tab' => 'rainlab.blog::lang.post.tab_categories', + 'type' => 'taglist' ] ]); }); diff --git a/plugins/rainlab/blog/controllers/Posts.php b/plugins/rainlab/blog/controllers/Posts.php index 60a3234b1..31183ce88 100644 --- a/plugins/rainlab/blog/controllers/Posts.php +++ b/plugins/rainlab/blog/controllers/Posts.php @@ -5,6 +5,7 @@ use Flash; use Lang; use Backend\Classes\Controller; use RainLab\Blog\Models\Post; +use October\Rain\Network\Http; class Posts extends Controller { @@ -28,7 +29,39 @@ class Posts extends Controller } public function onNotify($id) { - return $id; + $result = Http::post('https://fcm.googleapis.com/fcm/send', function($http) use ($id){ + $http->header('Content-Type', 'application/json'); + $http->header('Authorization', 'key=AAAAxAUM6JY:APA91bFhUTph1MyI8BiDdgICwvR4YVim7rgW5cohk7j8Y5AGj3NLkQlw9gGc9vj9TtCzL8asMYijmbN47cQA0sAwW2L7CuhDI_Is3iqUuN7YQk4QjSGxjGbcGqgF-Lzy97A8eIKAPhDG'); + + $post = Post::find($id); + $data = [ + "data"=>[ + "click_action" => "FLUTTER_NOTIFICATION_CLICK", + "type" => "news", + "post" => [ + "id" => $post->id, + "title" => $post->title, + "content" => $post->excerpt + ], + ], + "priority" => "high", + "notification" => [ + "title" => $post->title, + "body" => $post->excerpt + ], + "to" => "/topics/notifications_".$post->locale + ]; + + $http->setOption(CURLOPT_POSTFIELDS, json_encode($data)); + + }); + + return $result; + if($result->message_id){ + return Flash::success('Notification ugradyldy.'); + }elseif($result->error){ + return Flash::error('Ýalňyşlyk Ýüze Çykdy!!!'); + } } public function index() diff --git a/plugins/rainlab/blog/controllers/posts/config_filter.yaml b/plugins/rainlab/blog/controllers/posts/config_filter.yaml index 5981aeab9..7c8b36851 100644 --- a/plugins/rainlab/blog/controllers/posts/config_filter.yaml +++ b/plugins/rainlab/blog/controllers/posts/config_filter.yaml @@ -59,4 +59,5 @@ scopes: # options options: ru: RU - en: EN \ No newline at end of file + en: EN + tm: TM \ No newline at end of file diff --git a/plugins/rainlab/blog/lang/en/lang.php b/plugins/rainlab/blog/lang/en/lang.php index bf8637e43..742a346d6 100644 --- a/plugins/rainlab/blog/lang/en/lang.php +++ b/plugins/rainlab/blog/lang/en/lang.php @@ -1,9 +1,7 @@ - [ 'name' => 'Blog', - 'description' => 'A robust blogging platform.' + 'description' => 'A robust blogging platform.', ], 'blog' => [ 'menu_label' => 'Blog', @@ -26,7 +24,7 @@ return [ 'settings_description' => 'Manage blog settings', 'show_all_posts_label' => 'Show all posts to backend users', 'show_all_posts_comment' => 'Display both published and unpublished posts on the frontend to backend users', - 'tab_general' => 'General' + 'tab_general' => 'General', ], 'posts' => [ 'list_title' => 'Manage the blog posts', @@ -35,7 +33,7 @@ return [ 'filter_date' => 'Date', 'new_post' => 'New post', 'export_post' => 'Export posts', - 'import_post' => 'Import posts' + 'import_post' => 'Import posts', ], 'post' => [ 'title' => 'Title', @@ -75,7 +73,7 @@ return [ 'categories' => [ 'list_title' => 'Manage the blog categories', 'new_category' => 'New category', - 'uncategorized' => 'Uncategorized' + 'uncategorized' => 'Uncategorized', ], 'category' => [ 'name' => 'Name', @@ -87,20 +85,20 @@ return [ 'delete_confirm' => 'Delete this category?', 'delete_success' => 'Successfully deleted those categories.', 'return_to_categories' => 'Return to the blog category list', - 'reorder' => 'Reorder Categories' + 'reorder' => 'Reorder Categories', ], 'menuitem' => [ 'blog_category' => 'Blog category', 'all_blog_categories' => 'All blog categories', 'blog_post' => 'Blog post', 'all_blog_posts' => 'All blog posts', - 'category_blog_posts' => 'Blog category posts' + 'category_blog_posts' => 'Blog category posts', ], 'settings' => [ 'category_title' => 'Category List', 'category_description' => 'Displays a list of blog categories on the page.', 'category_slug' => 'Category slug', - 'category_slug_description' => "Look up the blog category using the supplied slug value. This property is used by the default component partial for marking the currently active category.", + 'category_slug_description' => 'Look up the blog category using the supplied slug value. This property is used by the default component partial for marking the currently active category.', 'category_display_empty' => 'Display empty categories', 'category_display_empty_description' => 'Show categories that do not have any posts.', 'category_page' => 'Category page', @@ -108,7 +106,7 @@ return [ 'post_title' => 'Post', 'post_description' => 'Displays a blog post on the page.', 'post_slug' => 'Post slug', - 'post_slug_description' => "Look up the blog post using the supplied slug value.", + 'post_slug_description' => 'Look up the blog post using the supplied slug value.', 'post_category' => 'Category page', 'post_category_description' => 'Name of the category page file for the category links. This property is used by the default component partial.', 'posts_title' => 'Post List', @@ -139,7 +137,7 @@ return [ 'rssfeed_title' => 'RSS Feed', 'rssfeed_description' => 'Generates an RSS feed containing posts from the blog.', 'group_links' => 'Links', - 'group_exceptions' => 'Exceptions' + 'group_exceptions' => 'Exceptions', ], 'sorting' => [ 'title_asc' => 'Title (ascending)', @@ -150,7 +148,7 @@ return [ 'updated_desc' => 'Updated (descending)', 'published_asc' => 'Published (ascending)', 'published_desc' => 'Published (descending)', - 'random' => 'Random' + 'random' => 'Random', ], 'import' => [ 'update_existing_label' => 'Update existing posts', @@ -161,6 +159,7 @@ return [ 'categories_comment' => 'Select the categories that imported posts will belong to (optional).', 'default_author_label' => 'Default post author (optional)', 'default_author_comment' => 'The import will try to use an existing author if you match the Author Email column, otherwise the author specified above is used.', - 'default_author_placeholder' => '-- select author --' - ] -]; + 'default_author_placeholder' => '-- select author --', + ], + 'ru' => 'Russian', +]; \ No newline at end of file diff --git a/plugins/rainlab/blog/models/Post.php b/plugins/rainlab/blog/models/Post.php index d3c9427eb..e2f63192f 100644 --- a/plugins/rainlab/blog/models/Post.php +++ b/plugins/rainlab/blog/models/Post.php @@ -97,7 +97,7 @@ class Post extends Model 'active_categories' => [ 'RainLab\Blog\Models\Category', 'table' => 'rainlab_blog_posts_categories', - 'conditions' => 'status = 1', + //'conditions' => 'status = 1', 'order' => 'name' ], // 'tags_ru' =>[ @@ -140,9 +140,27 @@ class Post extends Model { $fields->tags_en->hidden = false; $fields->tags_ru->hidden = true; - }else{ + $fields->tags_tm->hidden = true; + + $fields->id_en->disabled = true; + $fields->id_ru->disabled = false; + $fields->id_tm->disabled = false; + }else if ($this->locale == 'ru'){ $fields->tags_en->hidden = true; $fields->tags_ru->hidden = false; + $fields->tags_tm->hidden = true; + + $fields->id_en->disabled = false; + $fields->id_ru->disabled = true; + $fields->id_tm->disabled = false; + }else if ($this->locale == 'tm'){ + $fields->tags_en->hidden = true; + $fields->tags_ru->hidden = true; + $fields->tags_tm->hidden = false; + + $fields->id_en->disabled = false; + $fields->id_ru->disabled = false; + $fields->id_tm->disabled = true; } } if (!isset($fields->published, $fields->published_at)) { @@ -187,6 +205,7 @@ class Post extends Model { $this->tags_ru()->attach($this->tags_ru); $this->tags_en()->attach($this->tags_en); + $this->tags_tm()->attach($this->tags_tm); } /** @@ -431,6 +450,9 @@ class Post extends Model case 'ru': return $query->where('locale', 'ru'); break; + case 'tm': + return $query->where('locale', 'tm'); + break; } } @@ -484,19 +506,19 @@ class Post extends Model public function getFullTextAttribute(){ return preg_replace("/]+\>/i", " ", $this->content_html); } - public function getTranslatedPostAttribute(){ - if($this->locale === 'en') - return $this->id_ru; - return $this->id_en; - } + //public function getTranslatedPostAttribute(){ + // if($this->locale === 'en') + // return $this->id_ru; + //return $this->id_en; + //} - public function setTranslatedPostAttribute($value){ + //public function setTranslatedPostAttribute($value){ - if($this->attributes['locale'] === 'en') - $this->attributes['id_ru'] = $value; - else - $this->attributes['id_en'] = $value; - } + // if($this->attributes['locale'] === 'en') + // $this->attributes['id_ru'] = $value; + //else + // $this->attributes['id_en'] = $value; + //} public function getRssDateAttribute(){ setlocale(LC_TIME, 'en'); diff --git a/plugins/rainlab/blog/models/post/columns.yaml b/plugins/rainlab/blog/models/post/columns.yaml index 9aeee887b..845dc383e 100644 --- a/plugins/rainlab/blog/models/post/columns.yaml +++ b/plugins/rainlab/blog/models/post/columns.yaml @@ -32,3 +32,10 @@ columns: featured: label: Featured type: switch + user_id: + label: Author + type: text + searchable: true + sortable: true + select: login + relation: user diff --git a/plugins/rainlab/blog/models/post/fields.yaml b/plugins/rainlab/blog/models/post/fields.yaml index 48a186c5b..d63e57a75 100644 --- a/plugins/rainlab/blog/models/post/fields.yaml +++ b/plugins/rainlab/blog/models/post/fields.yaml @@ -23,24 +23,43 @@ secondaryTabs: stretch: true mode: split locale: - tab: 'rainlab.blog::lang.post.tab_categories' label: 'Language of Post' - span: left - type: dropdown - default: ru options: ru: Russian en: English - translated_post: - label: 'Translated Post id' + tm: Turkmen + showSearch: true + span: left + default: 'rainlab.blog::lang.ru' + type: dropdown + tab: 'rainlab.blog::lang.post.tab_categories' + id_en: + label: 'Translated Post ID En' + span: right + dependsOn: + - locale type: number tab: 'rainlab.blog::lang.post.tab_categories' + id_tm: + label: 'Translated Post ID Tm' span: right + dependsOn: + - locale + type: number + tab: 'rainlab.blog::lang.post.tab_categories' + id_ru: + label: 'Translated Post ID Ru' + span: right + dependsOn: + - locale + type: number + tab: 'rainlab.blog::lang.post.tab_categories' active_categories: tab: 'rainlab.blog::lang.post.tab_categories' type: relation commentAbove: 'rainlab.blog::lang.post.categories_comment' placeholder: 'rainlab.blog::lang.post.categories_placeholder' + span: auto author: label: 'Post author' span: auto diff --git a/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_2.php b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_2.php new file mode 100644 index 000000000..d3cc2473d --- /dev/null +++ b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_2.php @@ -0,0 +1,23 @@ +integer('id_tm')->nullable(); + }); + } + + public function down() + { + Schema::table('rainlab_blog_posts', function($table) + { + $table->dropColumn('id_tm'); + }); + } +} diff --git a/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_3.php b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_3.php new file mode 100644 index 000000000..20c1218bd --- /dev/null +++ b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_3.php @@ -0,0 +1,23 @@ +string('locale', 191)->default('ru')->change(); + }); + } + + public function down() + { + Schema::table('rainlab_blog_posts', function($table) + { + $table->string('locale', 191)->default(null)->change(); + }); + } +} diff --git a/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_4.php b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_4.php new file mode 100644 index 000000000..402d2c3df --- /dev/null +++ b/plugins/rainlab/blog/updates/builder_table_update_rainlab_blog_posts_4.php @@ -0,0 +1,23 @@ +string('locale', 191)->default(null)->change(); + }); + } + + public function down() + { + Schema::table('rainlab_blog_posts', function($table) + { + $table->string('locale', 191)->default('ru')->change(); + }); + } +} diff --git a/plugins/rainlab/blog/updates/version.yaml b/plugins/rainlab/blog/updates/version.yaml index 5f48b5037..2cb2067a4 100644 --- a/plugins/rainlab/blog/updates/version.yaml +++ b/plugins/rainlab/blog/updates/version.yaml @@ -72,3 +72,12 @@ 1.5.4: - 'Updated table rainlab_blog_posts' - builder_table_update_rainlab_blog_posts.php +1.5.5: + - 'Updated table rainlab_blog_posts' + - builder_table_update_rainlab_blog_posts_2.php +1.5.6: + - 'Updated table rainlab_blog_posts' + - builder_table_update_rainlab_blog_posts_3.php +1.5.7: + - 'Updated table rainlab_blog_posts' + - builder_table_update_rainlab_blog_posts_4.php diff --git a/plugins/tps/reklama/components/advertisement/carousel.htm b/plugins/tps/reklama/components/advertisement/carousel.htm index cefb4218c..a333c73f4 100644 --- a/plugins/tps/reklama/components/advertisement/carousel.htm +++ b/plugins/tps/reklama/components/advertisement/carousel.htm @@ -14,10 +14,11 @@
{% for reklama in __SELF__.group.adds %} diff --git a/plugins/tps/reklama/models/Reklama.php b/plugins/tps/reklama/models/Reklama.php index 0bce37b08..d0e385ed9 100644 --- a/plugins/tps/reklama/models/Reklama.php +++ b/plugins/tps/reklama/models/Reklama.php @@ -9,7 +9,7 @@ use Model; class Reklama extends Model { use \October\Rain\Database\Traits\Validation; - + public $implement = ['@RainLab.Translate.Behaviors.TranslatableModel']; /* * Disable timestamps by default. * Remove this line if timestamps are defined in the database table. @@ -21,6 +21,12 @@ class Reklama extends Model * @var string The database table used by the model. */ public $table = 'tps_reklama_item'; + + public $translatable = [ + 'media', + 'media_mobile', + 'web_media_mobile', + ]; /** * @var array Validation rules diff --git a/storage/framework/classes.php b/storage/framework/classes.php index e7e8f6c72..2ebae2590 100644 --- a/storage/framework/classes.php +++ b/storage/framework/classes.php @@ -463,4 +463,7 @@ 'ToughDeveloper\\ImageResizer\\Models\\Settings' => 'plugins/toughdeveloper/imageresizer/models/Settings.php', 'Rainlab\\Blog\\Models\\Category' => 'plugins/rainlab/blog/models/Category.php', 'AhmadFatoni\\ApiGenerator\\Controllers\\API\\AdvertisementsController' => 'plugins/ahmadfatoni/apigenerator/controllers/api/AdvertisementsController.php', + 'RainLab\\Builder\\Classes\\LanguageMixer' => 'plugins/rainlab/builder/classes/LanguageMixer.php', + 'RainLab\\Translate\\FormWidgets\\MLMediaFinder' => 'plugins/rainlab/translate/formwidgets/MLMediaFinder.php', + 'AhmadFatoni\\ApiGenerator\\Controllers\\API\\CategoriesV2Controller' => 'plugins/ahmadfatoni/apigenerator/controllers/api/CategoriesV2Controller.php', ); \ No newline at end of file diff --git a/themes/modern2/assets/css/style.css b/themes/modern2/assets/css/style.css index f5f795f09..e07da5bb7 100644 --- a/themes/modern2/assets/css/style.css +++ b/themes/modern2/assets/css/style.css @@ -12,6 +12,10 @@ body { font-family: 'Roboto', sans-serif; } +.form__input { + margin-bottom: 30px; +} + .right_top-up { max-width: 42.3rem; width: 100%; @@ -111,6 +115,17 @@ body { max-width: 47%; } } + +@media screen and (max-width: 1024px){ + + .form__input input, + .form__input-bg input, + .form__textarea textarea { + width: 100% !important; + } +} + + /* ========================================== */ diff --git a/themes/modern2/assets/new/icons/arrow-left-white.svg b/themes/modern2/assets/new/icons/arrow-left-white.svg new file mode 100644 index 000000000..6fc9182d1 --- /dev/null +++ b/themes/modern2/assets/new/icons/arrow-left-white.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/arrow-right-black.svg b/themes/modern2/assets/new/icons/arrow-right-black.svg new file mode 100644 index 000000000..f6124148f --- /dev/null +++ b/themes/modern2/assets/new/icons/arrow-right-black.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/arrow-right-white.svg b/themes/modern2/assets/new/icons/arrow-right-white.svg new file mode 100644 index 000000000..5f25f1a2b --- /dev/null +++ b/themes/modern2/assets/new/icons/arrow-right-white.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/burger.svg b/themes/modern2/assets/new/icons/burger.svg new file mode 100644 index 000000000..d41769a4f --- /dev/null +++ b/themes/modern2/assets/new/icons/burger.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/close.svg b/themes/modern2/assets/new/icons/close.svg new file mode 100644 index 000000000..1dc5553a3 --- /dev/null +++ b/themes/modern2/assets/new/icons/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/eye.svg b/themes/modern2/assets/new/icons/eye.svg new file mode 100644 index 000000000..b2f1e8530 --- /dev/null +++ b/themes/modern2/assets/new/icons/eye.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/fb.svg b/themes/modern2/assets/new/icons/fb.svg new file mode 100644 index 000000000..e943f1557 --- /dev/null +++ b/themes/modern2/assets/new/icons/fb.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/insta.svg b/themes/modern2/assets/new/icons/insta.svg new file mode 100644 index 000000000..af4dafb52 --- /dev/null +++ b/themes/modern2/assets/new/icons/insta.svg @@ -0,0 +1,4 @@ + + + + diff --git a/themes/modern2/assets/new/icons/location.svg b/themes/modern2/assets/new/icons/location.svg new file mode 100644 index 000000000..319855fc2 --- /dev/null +++ b/themes/modern2/assets/new/icons/location.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/loop.svg b/themes/modern2/assets/new/icons/loop.svg new file mode 100644 index 000000000..82ca7f16b --- /dev/null +++ b/themes/modern2/assets/new/icons/loop.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/marquee.svg b/themes/modern2/assets/new/icons/marquee.svg new file mode 100644 index 000000000..b9a6e537a --- /dev/null +++ b/themes/modern2/assets/new/icons/marquee.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/orientlogo.svg b/themes/modern2/assets/new/icons/orientlogo.svg new file mode 100644 index 000000000..831a3aa05 --- /dev/null +++ b/themes/modern2/assets/new/icons/orientlogo.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/phone.svg b/themes/modern2/assets/new/icons/phone.svg new file mode 100644 index 000000000..685861131 --- /dev/null +++ b/themes/modern2/assets/new/icons/phone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/ruflag.svg b/themes/modern2/assets/new/icons/ruflag.svg new file mode 100644 index 000000000..16d05badd --- /dev/null +++ b/themes/modern2/assets/new/icons/ruflag.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/search.svg b/themes/modern2/assets/new/icons/search.svg new file mode 100644 index 000000000..8d5c67697 --- /dev/null +++ b/themes/modern2/assets/new/icons/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/tg.svg b/themes/modern2/assets/new/icons/tg.svg new file mode 100644 index 000000000..25b131614 --- /dev/null +++ b/themes/modern2/assets/new/icons/tg.svg @@ -0,0 +1,3 @@ + + + diff --git a/themes/modern2/assets/new/icons/tmflag.svg b/themes/modern2/assets/new/icons/tmflag.svg new file mode 100644 index 000000000..5e3bd0e0f --- /dev/null +++ b/themes/modern2/assets/new/icons/tmflag.svg @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/twit.svg b/themes/modern2/assets/new/icons/twit.svg new file mode 100644 index 000000000..09a4fa836 --- /dev/null +++ b/themes/modern2/assets/new/icons/twit.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/themes/modern2/assets/new/icons/ukflag.svg b/themes/modern2/assets/new/icons/ukflag.svg new file mode 100644 index 000000000..418629724 --- /dev/null +++ b/themes/modern2/assets/new/icons/ukflag.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/themes/modern2/assets/new/images/affiche-item.jpg b/themes/modern2/assets/new/images/affiche-item.jpg new file mode 100644 index 000000000..240031d3b Binary files /dev/null and b/themes/modern2/assets/new/images/affiche-item.jpg differ diff --git a/themes/modern2/assets/new/images/affiche.jpg b/themes/modern2/assets/new/images/affiche.jpg new file mode 100644 index 000000000..fedf0b7f1 Binary files /dev/null and b/themes/modern2/assets/new/images/affiche.jpg differ diff --git a/themes/modern2/assets/new/images/antispam.jpg b/themes/modern2/assets/new/images/antispam.jpg new file mode 100644 index 000000000..8ace86347 Binary files /dev/null and b/themes/modern2/assets/new/images/antispam.jpg differ diff --git a/themes/modern2/assets/new/images/article.jpg b/themes/modern2/assets/new/images/article.jpg new file mode 100644 index 000000000..ac2b6bee0 Binary files /dev/null and b/themes/modern2/assets/new/images/article.jpg differ diff --git a/themes/modern2/assets/new/images/aside-ad.jpg b/themes/modern2/assets/new/images/aside-ad.jpg new file mode 100644 index 000000000..3ec2567b1 Binary files /dev/null and b/themes/modern2/assets/new/images/aside-ad.jpg differ diff --git a/themes/modern2/assets/new/images/banner.jpg b/themes/modern2/assets/new/images/banner.jpg new file mode 100644 index 000000000..6f9d46c23 Binary files /dev/null and b/themes/modern2/assets/new/images/banner.jpg differ diff --git a/themes/modern2/assets/new/images/bigbanner.jpg b/themes/modern2/assets/new/images/bigbanner.jpg new file mode 100644 index 000000000..b6c174587 Binary files /dev/null and b/themes/modern2/assets/new/images/bigbanner.jpg differ diff --git a/themes/modern2/assets/new/images/main-advert.jpg b/themes/modern2/assets/new/images/main-advert.jpg new file mode 100644 index 000000000..facd97c3f Binary files /dev/null and b/themes/modern2/assets/new/images/main-advert.jpg differ diff --git a/themes/modern2/assets/new/images/main-news-big.jpg b/themes/modern2/assets/new/images/main-news-big.jpg new file mode 100644 index 000000000..af4dcf2ea Binary files /dev/null and b/themes/modern2/assets/new/images/main-news-big.jpg differ diff --git a/themes/modern2/assets/new/images/main-news-min.jpg b/themes/modern2/assets/new/images/main-news-min.jpg new file mode 100644 index 000000000..7cd29a6eb Binary files /dev/null and b/themes/modern2/assets/new/images/main-news-min.jpg differ diff --git a/themes/modern2/assets/new/images/media-partner.jpg b/themes/modern2/assets/new/images/media-partner.jpg new file mode 100644 index 000000000..069068088 Binary files /dev/null and b/themes/modern2/assets/new/images/media-partner.jpg differ diff --git a/themes/modern2/assets/new/images/media.jpg b/themes/modern2/assets/new/images/media.jpg new file mode 100644 index 000000000..c1d91aa25 Binary files /dev/null and b/themes/modern2/assets/new/images/media.jpg differ diff --git a/themes/modern2/assets/new/images/partners.jpg b/themes/modern2/assets/new/images/partners.jpg new file mode 100644 index 000000000..5c16052d2 Binary files /dev/null and b/themes/modern2/assets/new/images/partners.jpg differ diff --git a/themes/modern2/assets/new/images/posts-sm.jpg b/themes/modern2/assets/new/images/posts-sm.jpg new file mode 100644 index 000000000..e7a219626 Binary files /dev/null and b/themes/modern2/assets/new/images/posts-sm.jpg differ diff --git a/themes/modern2/assets/new/images/posts.jpg b/themes/modern2/assets/new/images/posts.jpg new file mode 100644 index 000000000..d3a79792b Binary files /dev/null and b/themes/modern2/assets/new/images/posts.jpg differ diff --git a/themes/modern2/assets/new/images/read-banner.jpg b/themes/modern2/assets/new/images/read-banner.jpg new file mode 100644 index 000000000..22f80eee8 Binary files /dev/null and b/themes/modern2/assets/new/images/read-banner.jpg differ diff --git a/themes/modern2/assets/new/images/rubric.jpg b/themes/modern2/assets/new/images/rubric.jpg new file mode 100644 index 000000000..35230c1f5 Binary files /dev/null and b/themes/modern2/assets/new/images/rubric.jpg differ diff --git a/themes/modern2/assets/new/images/smallbanner.jpg b/themes/modern2/assets/new/images/smallbanner.jpg new file mode 100644 index 000000000..3b3b22987 Binary files /dev/null and b/themes/modern2/assets/new/images/smallbanner.jpg differ diff --git a/themes/modern2/assets/new/images/sub-news.jpg b/themes/modern2/assets/new/images/sub-news.jpg new file mode 100644 index 000000000..c9f4bf273 Binary files /dev/null and b/themes/modern2/assets/new/images/sub-news.jpg differ diff --git a/themes/modern2/assets/new/images/trending-main.jpg b/themes/modern2/assets/new/images/trending-main.jpg new file mode 100644 index 000000000..acc318bdb Binary files /dev/null and b/themes/modern2/assets/new/images/trending-main.jpg differ diff --git a/themes/modern2/assets/new/images/trending.jpg b/themes/modern2/assets/new/images/trending.jpg new file mode 100644 index 000000000..e197f6126 Binary files /dev/null and b/themes/modern2/assets/new/images/trending.jpg differ diff --git a/themes/modern2/assets/new/scripts/core/affiche-item.js b/themes/modern2/assets/new/scripts/core/affiche-item.js new file mode 100644 index 000000000..b3da6de49 --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/affiche-item.js @@ -0,0 +1,211 @@ +/** + * Query selector class + * @usage const ITEM_NAME = new Select(ITEM_CLASSNAME).select(); + */ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} + +/** + * News switcher button class + */ +class NewsBtn { + classname = ""; + /** + * @param {string} classname + * @param {HTMLButtonElement} previousBtn + */ + constructor(classname) { + this.classname = classname; + } + /** + * @returns HTMLButtonElement + */ + createBtn() { + return new Select(this.classname).select(); + } + + /** + * @param {HTMLButtonElement} previousBtn + * @param {string} switchedClass + * @param {{local: HTMLElement, global: HTMLElement} | undefined} customActivity + * @usage Activate to hop the `switchedClass` between buttons + */ + + activateSwitch(previousBtn, switchedClass, customActivity) { + const btn = this.createBtn(this.classname); + if (previousBtn) { + btn.addEventListener("click", () => { + if (customActivity) { + customActivity.local.classList.remove("active"); + customActivity.global.classList.add("active"); + } + btn.classList.add(switchedClass); + previousBtn.classList.remove(switchedClass); + }); + previousBtn.addEventListener("click", () => { + if (customActivity) { + customActivity.global.classList.remove("active"); + customActivity.local.classList.add("active"); + } + previousBtn.classList.add(switchedClass); + btn.classList.remove(switchedClass); + }); + } + } + + /** + * @param {HTMLButtonElement} button + * @usage Removes the event listener + */ + + abortSwitch(button) { + button.removeEventListener("click"); + } +} + +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + customBehaviour; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * @param {() => void} customBehaviour + */ + constructor( + identifier, + eventType, + actionType, + addedClass, + target, + customBehaviour + ) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + this.customBehaviour = customBehaviour; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + if (this.customBehaviour) { + this.customBehaviour(); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); + +const buttonLocal = new NewsBtn(".news-local").createBtn(); +const runBtns = new NewsBtn(".news-global").activateSwitch( + buttonLocal, + "active", + { + local: new Select(".aside-content.local").select(), + global: new Select(".aside-content.global").select(), + } +); diff --git a/themes/modern2/assets/new/scripts/core/affiche.js b/themes/modern2/assets/new/scripts/core/affiche.js new file mode 100644 index 000000000..f64a5dc9a --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/affiche.js @@ -0,0 +1,138 @@ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + customBehaviour; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * @param {() => void} customBehaviour + */ + constructor( + identifier, + eventType, + actionType, + addedClass, + target, + customBehaviour + ) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + this.customBehaviour = customBehaviour; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + if (this.customBehaviour) { + this.customBehaviour(); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/article.js b/themes/modern2/assets/new/scripts/core/article.js new file mode 100644 index 000000000..4a844bfd4 --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/article.js @@ -0,0 +1,227 @@ +/** + * Query selector class + * @usage const ITEM_NAME = new Select(ITEM_CLASSNAME).select(); + */ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} + +/** + * News switcher button class + */ +class NewsBtn { + classname = ""; + /** + * @param {string} classname + * @param {HTMLButtonElement} previousBtn + */ + constructor(classname) { + this.classname = classname; + } + /** + * @returns HTMLButtonElement + */ + createBtn() { + return new Select(this.classname).select(); + } + + /** + * @param {HTMLButtonElement} previousBtn + * @param {string} switchedClass + * @param {{local: HTMLElement, global: HTMLElement} | undefined} customActivity + * @usage Activate to hop the `switchedClass` between buttons + */ + + activateSwitch(previousBtn, switchedClass, customActivity) { + const btn = this.createBtn(this.classname); + if (previousBtn) { + btn.addEventListener("click", () => { + if (customActivity) { + customActivity.local.classList.remove("active"); + customActivity.global.classList.add("active"); + } + btn.classList.add(switchedClass); + previousBtn.classList.remove(switchedClass); + }); + previousBtn.addEventListener("click", () => { + if (customActivity) { + customActivity.global.classList.remove("active"); + customActivity.local.classList.add("active"); + } + previousBtn.classList.add(switchedClass); + btn.classList.remove(switchedClass); + }); + } + } + + /** + * @param {HTMLButtonElement} button + * @usage Removes the event listener + */ + + abortSwitch(button) { + button.removeEventListener("click"); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * + */ + constructor(identifier, eventType, actionType, addedClass, target) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +const buttonLocal = new NewsBtn(".news-local").createBtn(); +const runBtns = new NewsBtn(".news-global").activateSwitch( + buttonLocal, + "active", + { + local: new Select(".aside-content.local").select(), + global: new Select(".aside-content.global").select(), + } +); + +// Swiper +const articleSwiper = new Swiper(".articleSwiper", { + slidesPerView: 1, + spaceBetween: 0, + autoplay: { + delay: 3000, + disableOnInteraction: false, + }, + loop: true, + navigation: { + prevEl: ".article-prev", + nextEl: ".article-next", + }, +}); + +const articleBottomSwiper = new Swiper(".articleBottomSwiper", { + slidesPerView: 2, + spaceBetween: 50, + autoplay: { + delay: 3000, + disableOnInteraction: false, + }, + loop: true, + navigation: { + prevEl: ".article-bottom-prev", + nextEl: ".article-bottom-next", + }, +}); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/contact.js b/themes/modern2/assets/new/scripts/core/contact.js new file mode 100644 index 000000000..e72a4fc3f --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/contact.js @@ -0,0 +1,137 @@ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + customBehaviour; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * @param {() => void} customBehaviour + */ + constructor( + identifier, + eventType, + actionType, + addedClass, + target, + customBehaviour + ) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + this.customBehaviour = customBehaviour; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + if (this.customBehaviour) { + this.customBehaviour(); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/main.js b/themes/modern2/assets/new/scripts/core/main.js new file mode 100644 index 000000000..9e7e24448 --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/main.js @@ -0,0 +1,232 @@ +/** + * Query selector class + * @usage const ITEM_NAME = new Select(ITEM_CLASSNAME).select(); + */ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} + +/** + * News switcher button class + */ +class NewsBtn { + classname = ""; + /** + * @param {string} classname + * @param {HTMLButtonElement} previousBtn + */ + constructor(classname) { + this.classname = classname; + } + /** + * @returns HTMLButtonElement + */ + createBtn() { + return new Select(this.classname).select(); + } + + /** + * @param {HTMLButtonElement} previousBtn + * @param {string} switchedClass + * @param {{local: HTMLElement, global: HTMLElement} | undefined} customActivity + * @usage Activate to hop the `switchedClass` between buttons + */ + + activateSwitch(previousBtn, switchedClass, customActivity) { + const btn = this.createBtn(this.classname); + if (previousBtn) { + btn.addEventListener("click", () => { + if (customActivity) { + customActivity.local.classList.remove("active"); + customActivity.global.classList.add("active"); + } + btn.classList.add(switchedClass); + previousBtn.classList.remove(switchedClass); + }); + previousBtn.addEventListener("click", () => { + if (customActivity) { + customActivity.global.classList.remove("active"); + customActivity.local.classList.add("active"); + } + previousBtn.classList.add(switchedClass); + btn.classList.remove(switchedClass); + }); + } + } + + /** + * @param {HTMLButtonElement} button + * @usage Removes the event listener + */ + + abortSwitch(button) { + button.removeEventListener("click"); + } +} + +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * + */ + constructor(identifier, eventType, actionType, addedClass, target) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +const buttonLocal = new NewsBtn(".news-local").createBtn(); +const runBtns = new NewsBtn(".news-global").activateSwitch( + buttonLocal, + "active", + { + local: new Select(".aside-content.local").select(), + global: new Select(".aside-content.global").select(), + } +); + +// Swiper + +const videoSwiper = new Swiper(".videoSwiper", { + slidesPerView: 3, + spaceBetween: 60, + lazyLoading: true, + navigation: { + prevEl: ".video-prev", + nextEl: ".video-next", + }, +}); + +const photoSwiper = new Swiper(".photoSwiper", { + slidesPerView: 3, + spaceBetween: 60, + loop: true, + navigation: { + prevEl: ".photo-prev", + nextEl: ".photo-next", + }, +}); + +const partnerSwiper = new Swiper(".partnerSwiper", { + slidesPerView: 5, + spaceBetween: 60, + centeredSlides: true, + loop: true, + navigation: { + prevEl: ".partner-prev", + nextEl: ".partner-next", + }, +}); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/photo.js b/themes/modern2/assets/new/scripts/core/photo.js new file mode 100644 index 000000000..7a004dd43 --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/photo.js @@ -0,0 +1,126 @@ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * + */ + constructor(identifier, eventType, actionType, addedClass, target) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/rubric.js b/themes/modern2/assets/new/scripts/core/rubric.js new file mode 100644 index 000000000..7a004dd43 --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/rubric.js @@ -0,0 +1,126 @@ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} + +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * + */ + constructor(identifier, eventType, actionType, addedClass, target) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/core/video.js b/themes/modern2/assets/new/scripts/core/video.js new file mode 100644 index 000000000..63bd006ad --- /dev/null +++ b/themes/modern2/assets/new/scripts/core/video.js @@ -0,0 +1,125 @@ +class Select { + classname = ""; + /** + * @param {string} classname + */ + constructor(classname) { + this.classname = classname; + } + select() { + return document.querySelector(this.classname); + } +} +class AssignYear { + element; + /** + * @param {string} id + * ID of an element + */ + constructor(id) { + this.element = new Select(id).select(); + } + /** + * @returns `current year` + */ + assign() { + const year = new Date().getFullYear(); + this.element.innerText = year; + return year; + } +} +class AssignEvent { + identifier; + eventType; + actionType; + addedClass = "active"; + target = "self"; + /** + * ID or class of an HTML element + * @param {string} identifier + * Event type on which action is executed + * @param {string} eventType + * Type of action + * @param {"add" | "remove" | "toggle"} actionType + * Added classname + * @param {string} addedClass + * Target element identifier + * @param {string} target + * + */ + constructor(identifier, eventType, actionType, addedClass, target) { + this.identifier = identifier; + this.eventType = eventType; + this.actionType = actionType; + this.addedClass = addedClass; + this.target = target; + } + + listen() { + const element = new Select(this.identifier).select(); + let target; + if (this.target === "self") { + target = element; + } else { + target = new Select(this.target).select(); + } + element.addEventListener(this.eventType, () => { + switch (this.actionType) { + case "add": + target.classList.add(this.addedClass); + break; + case "remove": + target.classList.remove(this.addedClass); + break; + case "toggle": + target.classList.toggle(this.addedClass); + break; + default: + throw new Error("Bad action type!"); + } + }); + return [element, target]; + } +} + +// Year +const displayedYear = new AssignYear("#year").assign(); + +// Burger +const burgerPair = new AssignEvent( + ".header-burger", + "click", + "add", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "hidden"; + } +).listen(); + +const burgerClosePair = new AssignEvent( + ".burger-close", + "click", + "remove", + "active", + ".burger-wrapper", + () => { + document.body.style.overflowY = "auto"; + } +).listen(); + +const burgerNewsPair = new AssignEvent( + ".burger-news", + "click", + "toggle", + "active", + ".burger-news-items" +).listen(); + +const burgerAffichePair = new AssignEvent( + ".burger-affiche", + "click", + "toggle", + "active", + ".burger-affiche-items" +).listen(); diff --git a/themes/modern2/assets/new/scripts/swiper/swiper-bundle.min.js b/themes/modern2/assets/new/scripts/swiper/swiper-bundle.min.js new file mode 100644 index 000000000..9a4b87cf4 --- /dev/null +++ b/themes/modern2/assets/new/scripts/swiper/swiper-bundle.min.js @@ -0,0 +1 @@ +/** * Swiper 8.4.4 * Most modern mobile touch slider and framework with hardware accelerated transitions * https://swiperjs.com * * Copyright 2014-2022 Vladimir Kharlampidi * * Released under the MIT License * * Released on: October 12, 2022 */ !(function (e, t) { "object" == typeof exports && "undefined" != typeof module ? (module.exports = t()) : "function" == typeof define && define.amd ? define(t) : ((e = "undefined" != typeof globalThis ? globalThis : e || self).Swiper = t()); })(this, function () { "use strict"; function e(e) { return ( null !== e && "object" == typeof e && "constructor" in e && e.constructor === Object ); } function t(s, a) { void 0 === s && (s = {}), void 0 === a && (a = {}), Object.keys(a).forEach((i) => { void 0 === s[i] ? (s[i] = a[i]) : e(a[i]) && e(s[i]) && Object.keys(a[i]).length > 0 && t(s[i], a[i]); }); } const s = { body: {}, addEventListener() {}, removeEventListener() {}, activeElement: { blur() {}, nodeName: "" }, querySelector: () => null, querySelectorAll: () => [], getElementById: () => null, createEvent: () => ({ initEvent() {} }), createElement: () => ({ children: [], childNodes: [], style: {}, setAttribute() {}, getElementsByTagName: () => [], }), createElementNS: () => ({}), importNode: () => null, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "", }, }; function a() { const e = "undefined" != typeof document ? document : {}; return t(e, s), e; } const i = { document: s, navigator: { userAgent: "" }, location: { hash: "", host: "", hostname: "", href: "", origin: "", pathname: "", protocol: "", search: "", }, history: { replaceState() {}, pushState() {}, go() {}, back() {} }, CustomEvent: function () { return this; }, addEventListener() {}, removeEventListener() {}, getComputedStyle: () => ({ getPropertyValue: () => "" }), Image() {}, Date() {}, screen: {}, setTimeout() {}, clearTimeout() {}, matchMedia: () => ({}), requestAnimationFrame: (e) => "undefined" == typeof setTimeout ? (e(), null) : setTimeout(e, 0), cancelAnimationFrame(e) { "undefined" != typeof setTimeout && clearTimeout(e); }, }; function r() { const e = "undefined" != typeof window ? window : {}; return t(e, i), e; } class n extends Array { constructor(e) { "number" == typeof e ? super(e) : (super(...(e || [])), (function (e) { const t = e.__proto__; Object.defineProperty(e, "__proto__", { get: () => t, set(e) { t.__proto__ = e; }, }); })(this)); } } function l(e) { void 0 === e && (e = []); const t = []; return ( e.forEach((e) => { Array.isArray(e) ? t.push(...l(e)) : t.push(e); }), t ); } function o(e, t) { return Array.prototype.filter.call(e, t); } function d(e, t) { const s = r(), i = a(); let l = []; if (!t && e instanceof n) return e; if (!e) return new n(l); if ("string" == typeof e) { const s = e.trim(); if (s.indexOf("<") >= 0 && s.indexOf(">") >= 0) { let e = "div"; 0 === s.indexOf(" e.split(" "))); return ( this.forEach((e) => { e.classList.add(...a); }), this ); }, removeClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++) t[s] = arguments[s]; const a = l(t.map((e) => e.split(" "))); return ( this.forEach((e) => { e.classList.remove(...a); }), this ); }, hasClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++) t[s] = arguments[s]; const a = l(t.map((e) => e.split(" "))); return ( o(this, (e) => a.filter((t) => e.classList.contains(t)).length > 0) .length > 0 ); }, toggleClass: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++) t[s] = arguments[s]; const a = l(t.map((e) => e.split(" "))); this.forEach((e) => { a.forEach((t) => { e.classList.toggle(t); }); }); }, attr: function (e, t) { if (1 === arguments.length && "string" == typeof e) return this[0] ? this[0].getAttribute(e) : void 0; for (let s = 0; s < this.length; s += 1) if (2 === arguments.length) this[s].setAttribute(e, t); else for (const t in e) (this[s][t] = e[t]), this[s].setAttribute(t, e[t]); return this; }, removeAttr: function (e) { for (let t = 0; t < this.length; t += 1) this[t].removeAttribute(e); return this; }, transform: function (e) { for (let t = 0; t < this.length; t += 1) this[t].style.transform = e; return this; }, transition: function (e) { for (let t = 0; t < this.length; t += 1) this[t].style.transitionDuration = "string" != typeof e ? `${e}ms` : e; return this; }, on: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++) t[s] = arguments[s]; let [a, i, r, n] = t; function l(e) { const t = e.target; if (!t) return; const s = e.target.dom7EventData || []; if ((s.indexOf(e) < 0 && s.unshift(e), d(t).is(i))) r.apply(t, s); else { const e = d(t).parents(); for (let t = 0; t < e.length; t += 1) d(e[t]).is(i) && r.apply(e[t], s); } } function o(e) { const t = (e && e.target && e.target.dom7EventData) || []; t.indexOf(e) < 0 && t.unshift(e), r.apply(this, t); } "function" == typeof t[1] && (([a, r, n] = t), (i = void 0)), n || (n = !1); const c = a.split(" "); let p; for (let e = 0; e < this.length; e += 1) { const t = this[e]; if (i) for (p = 0; p < c.length; p += 1) { const e = c[p]; t.dom7LiveListeners || (t.dom7LiveListeners = {}), t.dom7LiveListeners[e] || (t.dom7LiveListeners[e] = []), t.dom7LiveListeners[e].push({ listener: r, proxyListener: l }), t.addEventListener(e, l, n); } else for (p = 0; p < c.length; p += 1) { const e = c[p]; t.dom7Listeners || (t.dom7Listeners = {}), t.dom7Listeners[e] || (t.dom7Listeners[e] = []), t.dom7Listeners[e].push({ listener: r, proxyListener: o }), t.addEventListener(e, o, n); } } return this; }, off: function () { for (var e = arguments.length, t = new Array(e), s = 0; s < e; s++) t[s] = arguments[s]; let [a, i, r, n] = t; "function" == typeof t[1] && (([a, r, n] = t), (i = void 0)), n || (n = !1); const l = a.split(" "); for (let e = 0; e < l.length; e += 1) { const t = l[e]; for (let e = 0; e < this.length; e += 1) { const s = this[e]; let a; if ( (!i && s.dom7Listeners ? (a = s.dom7Listeners[t]) : i && s.dom7LiveListeners && (a = s.dom7LiveListeners[t]), a && a.length) ) for (let e = a.length - 1; e >= 0; e -= 1) { const i = a[e]; (r && i.listener === r) || (r && i.listener && i.listener.dom7proxy && i.listener.dom7proxy === r) ? (s.removeEventListener(t, i.proxyListener, n), a.splice(e, 1)) : r || (s.removeEventListener(t, i.proxyListener, n), a.splice(e, 1)); } } } return this; }, trigger: function () { const e = r(); for (var t = arguments.length, s = new Array(t), a = 0; a < t; a++) s[a] = arguments[a]; const i = s[0].split(" "), n = s[1]; for (let t = 0; t < i.length; t += 1) { const a = i[t]; for (let t = 0; t < this.length; t += 1) { const i = this[t]; if (e.CustomEvent) { const t = new e.CustomEvent(a, { detail: n, bubbles: !0, cancelable: !0, }); (i.dom7EventData = s.filter((e, t) => t > 0)), i.dispatchEvent(t), (i.dom7EventData = []), delete i.dom7EventData; } } } return this; }, transitionEnd: function (e) { const t = this; return ( e && t.on("transitionend", function s(a) { a.target === this && (e.call(this, a), t.off("transitionend", s)); }), this ); }, outerWidth: function (e) { if (this.length > 0) { if (e) { const e = this.styles(); return ( this[0].offsetWidth + parseFloat(e.getPropertyValue("margin-right")) + parseFloat(e.getPropertyValue("margin-left")) ); } return this[0].offsetWidth; } return null; }, outerHeight: function (e) { if (this.length > 0) { if (e) { const e = this.styles(); return ( this[0].offsetHeight + parseFloat(e.getPropertyValue("margin-top")) + parseFloat(e.getPropertyValue("margin-bottom")) ); } return this[0].offsetHeight; } return null; }, styles: function () { const e = r(); return this[0] ? e.getComputedStyle(this[0], null) : {}; }, offset: function () { if (this.length > 0) { const e = r(), t = a(), s = this[0], i = s.getBoundingClientRect(), n = t.body, l = s.clientTop || n.clientTop || 0, o = s.clientLeft || n.clientLeft || 0, d = s === e ? e.scrollY : s.scrollTop, c = s === e ? e.scrollX : s.scrollLeft; return { top: i.top + d - l, left: i.left + c - o }; } return null; }, css: function (e, t) { const s = r(); let a; if (1 === arguments.length) { if ("string" != typeof e) { for (a = 0; a < this.length; a += 1) for (const t in e) this[a].style[t] = e[t]; return this; } if (this[0]) return s.getComputedStyle(this[0], null).getPropertyValue(e); } if (2 === arguments.length && "string" == typeof e) { for (a = 0; a < this.length; a += 1) this[a].style[e] = t; return this; } return this; }, each: function (e) { return e ? (this.forEach((t, s) => { e.apply(t, [t, s]); }), this) : this; }, html: function (e) { if (void 0 === e) return this[0] ? this[0].innerHTML : null; for (let t = 0; t < this.length; t += 1) this[t].innerHTML = e; return this; }, text: function (e) { if (void 0 === e) return this[0] ? this[0].textContent.trim() : null; for (let t = 0; t < this.length; t += 1) this[t].textContent = e; return this; }, is: function (e) { const t = r(), s = a(), i = this[0]; let l, o; if (!i || void 0 === e) return !1; if ("string" == typeof e) { if (i.matches) return i.matches(e); if (i.webkitMatchesSelector) return i.webkitMatchesSelector(e); if (i.msMatchesSelector) return i.msMatchesSelector(e); for (l = d(e), o = 0; o < l.length; o += 1) if (l[o] === i) return !0; return !1; } if (e === s) return i === s; if (e === t) return i === t; if (e.nodeType || e instanceof n) { for (l = e.nodeType ? [e] : e, o = 0; o < l.length; o += 1) if (l[o] === i) return !0; return !1; } return !1; }, index: function () { let e, t = this[0]; if (t) { for (e = 0; null !== (t = t.previousSibling); ) 1 === t.nodeType && (e += 1); return e; } }, eq: function (e) { if (void 0 === e) return this; const t = this.length; if (e > t - 1) return d([]); if (e < 0) { const s = t + e; return d(s < 0 ? [] : [this[s]]); } return d([this[e]]); }, append: function () { let e; const t = a(); for (let s = 0; s < arguments.length; s += 1) { e = s < 0 || arguments.length <= s ? void 0 : arguments[s]; for (let s = 0; s < this.length; s += 1) if ("string" == typeof e) { const a = t.createElement("div"); for (a.innerHTML = e; a.firstChild; ) this[s].appendChild(a.firstChild); } else if (e instanceof n) for (let t = 0; t < e.length; t += 1) this[s].appendChild(e[t]); else this[s].appendChild(e); } return this; }, prepend: function (e) { const t = a(); let s, i; for (s = 0; s < this.length; s += 1) if ("string" == typeof e) { const a = t.createElement("div"); for (a.innerHTML = e, i = a.childNodes.length - 1; i >= 0; i -= 1) this[s].insertBefore(a.childNodes[i], this[s].childNodes[0]); } else if (e instanceof n) for (i = 0; i < e.length; i += 1) this[s].insertBefore(e[i], this[s].childNodes[0]); else this[s].insertBefore(e, this[s].childNodes[0]); return this; }, next: function (e) { return this.length > 0 ? e ? this[0].nextElementSibling && d(this[0].nextElementSibling).is(e) ? d([this[0].nextElementSibling]) : d([]) : this[0].nextElementSibling ? d([this[0].nextElementSibling]) : d([]) : d([]); }, nextAll: function (e) { const t = []; let s = this[0]; if (!s) return d([]); for (; s.nextElementSibling; ) { const a = s.nextElementSibling; e ? d(a).is(e) && t.push(a) : t.push(a), (s = a); } return d(t); }, prev: function (e) { if (this.length > 0) { const t = this[0]; return e ? t.previousElementSibling && d(t.previousElementSibling).is(e) ? d([t.previousElementSibling]) : d([]) : t.previousElementSibling ? d([t.previousElementSibling]) : d([]); } return d([]); }, prevAll: function (e) { const t = []; let s = this[0]; if (!s) return d([]); for (; s.previousElementSibling; ) { const a = s.previousElementSibling; e ? d(a).is(e) && t.push(a) : t.push(a), (s = a); } return d(t); }, parent: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) null !== this[s].parentNode && (e ? d(this[s].parentNode).is(e) && t.push(this[s].parentNode) : t.push(this[s].parentNode)); return d(t); }, parents: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { let a = this[s].parentNode; for (; a; ) e ? d(a).is(e) && t.push(a) : t.push(a), (a = a.parentNode); } return d(t); }, closest: function (e) { let t = this; return void 0 === e ? d([]) : (t.is(e) || (t = t.parents(e).eq(0)), t); }, find: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { const a = this[s].querySelectorAll(e); for (let e = 0; e < a.length; e += 1) t.push(a[e]); } return d(t); }, children: function (e) { const t = []; for (let s = 0; s < this.length; s += 1) { const a = this[s].children; for (let s = 0; s < a.length; s += 1) (e && !d(a[s]).is(e)) || t.push(a[s]); } return d(t); }, filter: function (e) { return d(o(this, e)); }, remove: function () { for (let e = 0; e < this.length; e += 1) this[e].parentNode && this[e].parentNode.removeChild(this[e]); return this; }, }; function p(e, t) { return void 0 === t && (t = 0), setTimeout(e, t); } function u() { return Date.now(); } function h(e, t) { void 0 === t && (t = "x"); const s = r(); let a, i, n; const l = (function (e) { const t = r(); let s; return ( t.getComputedStyle && (s = t.getComputedStyle(e, null)), !s && e.currentStyle && (s = e.currentStyle), s || (s = e.style), s ); })(e); return ( s.WebKitCSSMatrix ? ((i = l.transform || l.webkitTransform), i.split(",").length > 6 && (i = i .split(", ") .map((e) => e.replace(",", ".")) .join(", ")), (n = new s.WebKitCSSMatrix("none" === i ? "" : i))) : ((n = l.MozTransform || l.OTransform || l.MsTransform || l.msTransform || l.transform || l .getPropertyValue("transform") .replace("translate(", "matrix(1, 0, 0, 1,")), (a = n.toString().split(","))), "x" === t && (i = s.WebKitCSSMatrix ? n.m41 : 16 === a.length ? parseFloat(a[12]) : parseFloat(a[4])), "y" === t && (i = s.WebKitCSSMatrix ? n.m42 : 16 === a.length ? parseFloat(a[13]) : parseFloat(a[5])), i || 0 ); } function m(e) { return ( "object" == typeof e && null !== e && e.constructor && "Object" === Object.prototype.toString.call(e).slice(8, -1) ); } function f(e) { return "undefined" != typeof window && void 0 !== window.HTMLElement ? e instanceof HTMLElement : e && (1 === e.nodeType || 11 === e.nodeType); } function g() { const e = Object(arguments.length <= 0 ? void 0 : arguments[0]), t = ["__proto__", "constructor", "prototype"]; for (let s = 1; s < arguments.length; s += 1) { const a = s < 0 || arguments.length <= s ? void 0 : arguments[s]; if (null != a && !f(a)) { const s = Object.keys(Object(a)).filter((e) => t.indexOf(e) < 0); for (let t = 0, i = s.length; t < i; t += 1) { const i = s[t], r = Object.getOwnPropertyDescriptor(a, i); void 0 !== r && r.enumerable && (m(e[i]) && m(a[i]) ? a[i].__swiper__ ? (e[i] = a[i]) : g(e[i], a[i]) : !m(e[i]) && m(a[i]) ? ((e[i] = {}), a[i].__swiper__ ? (e[i] = a[i]) : g(e[i], a[i])) : (e[i] = a[i])); } } } return e; } function v(e, t, s) { e.style.setProperty(t, s); } function w(e) { let { swiper: t, targetPosition: s, side: a } = e; const i = r(), n = -t.translate; let l, o = null; const d = t.params.speed; (t.wrapperEl.style.scrollSnapType = "none"), i.cancelAnimationFrame(t.cssModeFrameID); const c = s > n ? "next" : "prev", p = (e, t) => ("next" === c && e >= t) || ("prev" === c && e <= t), u = () => { (l = new Date().getTime()), null === o && (o = l); const e = Math.max(Math.min((l - o) / d, 1), 0), r = 0.5 - Math.cos(e * Math.PI) / 2; let c = n + r * (s - n); if ((p(c, s) && (c = s), t.wrapperEl.scrollTo({ [a]: c }), p(c, s))) return ( (t.wrapperEl.style.overflow = "hidden"), (t.wrapperEl.style.scrollSnapType = ""), setTimeout(() => { (t.wrapperEl.style.overflow = ""), t.wrapperEl.scrollTo({ [a]: c }); }), void i.cancelAnimationFrame(t.cssModeFrameID) ); t.cssModeFrameID = i.requestAnimationFrame(u); }; u(); } let b, x, y; function E() { return ( b || (b = (function () { const e = r(), t = a(); return { smoothScroll: t.documentElement && "scrollBehavior" in t.documentElement.style, touch: !!( "ontouchstart" in e || (e.DocumentTouch && t instanceof e.DocumentTouch) ), passiveListener: (function () { let t = !1; try { const s = Object.defineProperty({}, "passive", { get() { t = !0; }, }); e.addEventListener("testPassiveListener", null, s); } catch (e) {} return t; })(), gestures: "ongesturestart" in e, }; })()), b ); } function C(e) { return ( void 0 === e && (e = {}), x || (x = (function (e) { let { userAgent: t } = void 0 === e ? {} : e; const s = E(), a = r(), i = a.navigator.platform, n = t || a.navigator.userAgent, l = { ios: !1, android: !1 }, o = a.screen.width, d = a.screen.height, c = n.match(/(Android);?[\s\/]+([\d.]+)?/); let p = n.match(/(iPad).*OS\s([\d_]+)/); const u = n.match(/(iPod)(.*OS\s([\d_]+))?/), h = !p && n.match(/(iPhone\sOS|iOS)\s([\d_]+)/), m = "Win32" === i; let f = "MacIntel" === i; return ( !p && f && s.touch && [ "1024x1366", "1366x1024", "834x1194", "1194x834", "834x1112", "1112x834", "768x1024", "1024x768", "820x1180", "1180x820", "810x1080", "1080x810", ].indexOf(`${o}x${d}`) >= 0 && ((p = n.match(/(Version)\/([\d.]+)/)), p || (p = [0, 1, "13_0_0"]), (f = !1)), c && !m && ((l.os = "android"), (l.android = !0)), (p || h || u) && ((l.os = "ios"), (l.ios = !0)), l ); })(e)), x ); } function T() { return ( y || (y = (function () { const e = r(); return { isSafari: (function () { const t = e.navigator.userAgent.toLowerCase(); return ( t.indexOf("safari") >= 0 && t.indexOf("chrome") < 0 && t.indexOf("android") < 0 ); })(), isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test( e.navigator.userAgent ), }; })()), y ); } Object.keys(c).forEach((e) => { Object.defineProperty(d.fn, e, { value: c[e], writable: !0 }); }); var $ = { on(e, t, s) { const a = this; if (!a.eventsListeners || a.destroyed) return a; if ("function" != typeof t) return a; const i = s ? "unshift" : "push"; return ( e.split(" ").forEach((e) => { a.eventsListeners[e] || (a.eventsListeners[e] = []), a.eventsListeners[e][i](t); }), a ); }, once(e, t, s) { const a = this; if (!a.eventsListeners || a.destroyed) return a; if ("function" != typeof t) return a; function i() { a.off(e, i), i.__emitterProxy && delete i.__emitterProxy; for (var s = arguments.length, r = new Array(s), n = 0; n < s; n++) r[n] = arguments[n]; t.apply(a, r); } return (i.__emitterProxy = t), a.on(e, i, s); }, onAny(e, t) { const s = this; if (!s.eventsListeners || s.destroyed) return s; if ("function" != typeof e) return s; const a = t ? "unshift" : "push"; return ( s.eventsAnyListeners.indexOf(e) < 0 && s.eventsAnyListeners[a](e), s ); }, offAny(e) { const t = this; if (!t.eventsListeners || t.destroyed) return t; if (!t.eventsAnyListeners) return t; const s = t.eventsAnyListeners.indexOf(e); return s >= 0 && t.eventsAnyListeners.splice(s, 1), t; }, off(e, t) { const s = this; return !s.eventsListeners || s.destroyed ? s : s.eventsListeners ? (e.split(" ").forEach((e) => { void 0 === t ? (s.eventsListeners[e] = []) : s.eventsListeners[e] && s.eventsListeners[e].forEach((a, i) => { (a === t || (a.__emitterProxy && a.__emitterProxy === t)) && s.eventsListeners[e].splice(i, 1); }); }), s) : s; }, emit() { const e = this; if (!e.eventsListeners || e.destroyed) return e; if (!e.eventsListeners) return e; let t, s, a; for (var i = arguments.length, r = new Array(i), n = 0; n < i; n++) r[n] = arguments[n]; "string" == typeof r[0] || Array.isArray(r[0]) ? ((t = r[0]), (s = r.slice(1, r.length)), (a = e)) : ((t = r[0].events), (s = r[0].data), (a = r[0].context || e)), s.unshift(a); return ( (Array.isArray(t) ? t : t.split(" ")).forEach((t) => { e.eventsAnyListeners && e.eventsAnyListeners.length && e.eventsAnyListeners.forEach((e) => { e.apply(a, [t, ...s]); }), e.eventsListeners && e.eventsListeners[t] && e.eventsListeners[t].forEach((e) => { e.apply(a, s); }); }), e ); }, }; var S = { updateSize: function () { const e = this; let t, s; const a = e.$el; (t = void 0 !== e.params.width && null !== e.params.width ? e.params.width : a[0].clientWidth), (s = void 0 !== e.params.height && null !== e.params.height ? e.params.height : a[0].clientHeight), (0 === t && e.isHorizontal()) || (0 === s && e.isVertical()) || ((t = t - parseInt(a.css("padding-left") || 0, 10) - parseInt(a.css("padding-right") || 0, 10)), (s = s - parseInt(a.css("padding-top") || 0, 10) - parseInt(a.css("padding-bottom") || 0, 10)), Number.isNaN(t) && (t = 0), Number.isNaN(s) && (s = 0), Object.assign(e, { width: t, height: s, size: e.isHorizontal() ? t : s, })); }, updateSlides: function () { const e = this; function t(t) { return e.isHorizontal() ? t : { width: "height", "margin-top": "margin-left", "margin-bottom ": "margin-right", "margin-left": "margin-top", "margin-right": "margin-bottom", "padding-left": "padding-top", "padding-right": "padding-bottom", marginRight: "marginBottom", }[t]; } function s(e, s) { return parseFloat(e.getPropertyValue(t(s)) || 0); } const a = e.params, { $wrapperEl: i, size: r, rtlTranslate: n, wrongRTL: l } = e, o = e.virtual && a.virtual.enabled, d = o ? e.virtual.slides.length : e.slides.length, c = i.children(`.${e.params.slideClass}`), p = o ? e.virtual.slides.length : c.length; let u = []; const h = [], m = []; let f = a.slidesOffsetBefore; "function" == typeof f && (f = a.slidesOffsetBefore.call(e)); let g = a.slidesOffsetAfter; "function" == typeof g && (g = a.slidesOffsetAfter.call(e)); const w = e.snapGrid.length, b = e.slidesGrid.length; let x = a.spaceBetween, y = -f, E = 0, C = 0; if (void 0 === r) return; "string" == typeof x && x.indexOf("%") >= 0 && (x = (parseFloat(x.replace("%", "")) / 100) * r), (e.virtualSize = -x), n ? c.css({ marginLeft: "", marginBottom: "", marginTop: "" }) : c.css({ marginRight: "", marginBottom: "", marginTop: "" }), a.centeredSlides && a.cssMode && (v(e.wrapperEl, "--swiper-centered-offset-before", ""), v(e.wrapperEl, "--swiper-centered-offset-after", "")); const T = a.grid && a.grid.rows > 1 && e.grid; let $; T && e.grid.initSlides(p); const S = "auto" === a.slidesPerView && a.breakpoints && Object.keys(a.breakpoints).filter( (e) => void 0 !== a.breakpoints[e].slidesPerView ).length > 0; for (let i = 0; i < p; i += 1) { $ = 0; const n = c.eq(i); if ( (T && e.grid.updateSlide(i, n, p, t), "none" !== n.css("display")) ) { if ("auto" === a.slidesPerView) { S && (c[i].style[t("width")] = ""); const r = getComputedStyle(n[0]), l = n[0].style.transform, o = n[0].style.webkitTransform; if ( (l && (n[0].style.transform = "none"), o && (n[0].style.webkitTransform = "none"), a.roundLengths) ) $ = e.isHorizontal() ? n.outerWidth(!0) : n.outerHeight(!0); else { const e = s(r, "width"), t = s(r, "padding-left"), a = s(r, "padding-right"), i = s(r, "margin-left"), l = s(r, "margin-right"), o = r.getPropertyValue("box-sizing"); if (o && "border-box" === o) $ = e + i + l; else { const { clientWidth: s, offsetWidth: r } = n[0]; $ = e + t + a + i + l + (r - s); } } l && (n[0].style.transform = l), o && (n[0].style.webkitTransform = o), a.roundLengths && ($ = Math.floor($)); } else ($ = (r - (a.slidesPerView - 1) * x) / a.slidesPerView), a.roundLengths && ($ = Math.floor($)), c[i] && (c[i].style[t("width")] = `${$}px`); c[i] && (c[i].swiperSlideSize = $), m.push($), a.centeredSlides ? ((y = y + $ / 2 + E / 2 + x), 0 === E && 0 !== i && (y = y - r / 2 - x), 0 === i && (y = y - r / 2 - x), Math.abs(y) < 0.001 && (y = 0), a.roundLengths && (y = Math.floor(y)), C % a.slidesPerGroup == 0 && u.push(y), h.push(y)) : (a.roundLengths && (y = Math.floor(y)), (C - Math.min(e.params.slidesPerGroupSkip, C)) % e.params.slidesPerGroup == 0 && u.push(y), h.push(y), (y = y + $ + x)), (e.virtualSize += $ + x), (E = $), (C += 1); } } if ( ((e.virtualSize = Math.max(e.virtualSize, r) + g), n && l && ("slide" === a.effect || "coverflow" === a.effect) && i.css({ width: `${e.virtualSize + a.spaceBetween}px` }), a.setWrapperSize && i.css({ [t("width")]: `${e.virtualSize + a.spaceBetween}px` }), T && e.grid.updateWrapperSize($, u, t), !a.centeredSlides) ) { const t = []; for (let s = 0; s < u.length; s += 1) { let i = u[s]; a.roundLengths && (i = Math.floor(i)), u[s] <= e.virtualSize - r && t.push(i); } (u = t), Math.floor(e.virtualSize - r) - Math.floor(u[u.length - 1]) > 1 && u.push(e.virtualSize - r); } if ((0 === u.length && (u = [0]), 0 !== a.spaceBetween)) { const s = e.isHorizontal() && n ? "marginLeft" : t("marginRight"); c.filter((e, t) => !a.cssMode || t !== c.length - 1).css({ [s]: `${x}px`, }); } if (a.centeredSlides && a.centeredSlidesBounds) { let e = 0; m.forEach((t) => { e += t + (a.spaceBetween ? a.spaceBetween : 0); }), (e -= a.spaceBetween); const t = e - r; u = u.map((e) => (e < 0 ? -f : e > t ? t + g : e)); } if (a.centerInsufficientSlides) { let e = 0; if ( (m.forEach((t) => { e += t + (a.spaceBetween ? a.spaceBetween : 0); }), (e -= a.spaceBetween), e < r) ) { const t = (r - e) / 2; u.forEach((e, s) => { u[s] = e - t; }), h.forEach((e, s) => { h[s] = e + t; }); } } if ( (Object.assign(e, { slides: c, snapGrid: u, slidesGrid: h, slidesSizesGrid: m, }), a.centeredSlides && a.cssMode && !a.centeredSlidesBounds) ) { v(e.wrapperEl, "--swiper-centered-offset-before", -u[0] + "px"), v( e.wrapperEl, "--swiper-centered-offset-after", e.size / 2 - m[m.length - 1] / 2 + "px" ); const t = -e.snapGrid[0], s = -e.slidesGrid[0]; (e.snapGrid = e.snapGrid.map((e) => e + t)), (e.slidesGrid = e.slidesGrid.map((e) => e + s)); } if ( (p !== d && e.emit("slidesLengthChange"), u.length !== w && (e.params.watchOverflow && e.checkOverflow(), e.emit("snapGridLengthChange")), h.length !== b && e.emit("slidesGridLengthChange"), a.watchSlidesProgress && e.updateSlidesOffset(), !(o || a.cssMode || ("slide" !== a.effect && "fade" !== a.effect))) ) { const t = `${a.containerModifierClass}backface-hidden`, s = e.$el.hasClass(t); p <= a.maxBackfaceHiddenSlides ? s || e.$el.addClass(t) : s && e.$el.removeClass(t); } }, updateAutoHeight: function (e) { const t = this, s = [], a = t.virtual && t.params.virtual.enabled; let i, r = 0; "number" == typeof e ? t.setTransition(e) : !0 === e && t.setTransition(t.params.speed); const n = (e) => a ? t.slides.filter( (t) => parseInt(t.getAttribute("data-swiper-slide-index"), 10) === e )[0] : t.slides.eq(e)[0]; if ("auto" !== t.params.slidesPerView && t.params.slidesPerView > 1) if (t.params.centeredSlides) (t.visibleSlides || d([])).each((e) => { s.push(e); }); else for (i = 0; i < Math.ceil(t.params.slidesPerView); i += 1) { const e = t.activeIndex + i; if (e > t.slides.length && !a) break; s.push(n(e)); } else s.push(n(t.activeIndex)); for (i = 0; i < s.length; i += 1) if (void 0 !== s[i]) { const e = s[i].offsetHeight; r = e > r ? e : r; } (r || 0 === r) && t.$wrapperEl.css("height", `${r}px`); }, updateSlidesOffset: function () { const e = this, t = e.slides; for (let s = 0; s < t.length; s += 1) t[s].swiperSlideOffset = e.isHorizontal() ? t[s].offsetLeft : t[s].offsetTop; }, updateSlidesProgress: function (e) { void 0 === e && (e = (this && this.translate) || 0); const t = this, s = t.params, { slides: a, rtlTranslate: i, snapGrid: r } = t; if (0 === a.length) return; void 0 === a[0].swiperSlideOffset && t.updateSlidesOffset(); let n = -e; i && (n = e), a.removeClass(s.slideVisibleClass), (t.visibleSlidesIndexes = []), (t.visibleSlides = []); for (let e = 0; e < a.length; e += 1) { const l = a[e]; let o = l.swiperSlideOffset; s.cssMode && s.centeredSlides && (o -= a[0].swiperSlideOffset); const d = (n + (s.centeredSlides ? t.minTranslate() : 0) - o) / (l.swiperSlideSize + s.spaceBetween), c = (n - r[0] + (s.centeredSlides ? t.minTranslate() : 0) - o) / (l.swiperSlideSize + s.spaceBetween), p = -(n - o), u = p + t.slidesSizesGrid[e]; ((p >= 0 && p < t.size - 1) || (u > 1 && u <= t.size) || (p <= 0 && u >= t.size)) && (t.visibleSlides.push(l), t.visibleSlidesIndexes.push(e), a.eq(e).addClass(s.slideVisibleClass)), (l.progress = i ? -d : d), (l.originalProgress = i ? -c : c); } t.visibleSlides = d(t.visibleSlides); }, updateProgress: function (e) { const t = this; if (void 0 === e) { const s = t.rtlTranslate ? -1 : 1; e = (t && t.translate && t.translate * s) || 0; } const s = t.params, a = t.maxTranslate() - t.minTranslate(); let { progress: i, isBeginning: r, isEnd: n } = t; const l = r, o = n; 0 === a ? ((i = 0), (r = !0), (n = !0)) : ((i = (e - t.minTranslate()) / a), (r = i <= 0), (n = i >= 1)), Object.assign(t, { progress: i, isBeginning: r, isEnd: n }), (s.watchSlidesProgress || (s.centeredSlides && s.autoHeight)) && t.updateSlidesProgress(e), r && !l && t.emit("reachBeginning toEdge"), n && !o && t.emit("reachEnd toEdge"), ((l && !r) || (o && !n)) && t.emit("fromEdge"), t.emit("progress", i); }, updateSlidesClasses: function () { const e = this, { slides: t, params: s, $wrapperEl: a, activeIndex: i, realIndex: r, } = e, n = e.virtual && s.virtual.enabled; let l; t.removeClass( `${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}` ), (l = n ? e.$wrapperEl.find( `.${s.slideClass}[data-swiper-slide-index="${i}"]` ) : t.eq(i)), l.addClass(s.slideActiveClass), s.loop && (l.hasClass(s.slideDuplicateClass) ? a .children( `.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]` ) .addClass(s.slideDuplicateActiveClass) : a .children( `.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]` ) .addClass(s.slideDuplicateActiveClass)); let o = l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass); s.loop && 0 === o.length && ((o = t.eq(0)), o.addClass(s.slideNextClass)); let d = l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass); s.loop && 0 === d.length && ((d = t.eq(-1)), d.addClass(s.slidePrevClass)), s.loop && (o.hasClass(s.slideDuplicateClass) ? a .children( `.${s.slideClass}:not(.${ s.slideDuplicateClass })[data-swiper-slide-index="${o.attr( "data-swiper-slide-index" )}"]` ) .addClass(s.slideDuplicateNextClass) : a .children( `.${s.slideClass}.${ s.slideDuplicateClass }[data-swiper-slide-index="${o.attr( "data-swiper-slide-index" )}"]` ) .addClass(s.slideDuplicateNextClass), d.hasClass(s.slideDuplicateClass) ? a .children( `.${s.slideClass}:not(.${ s.slideDuplicateClass })[data-swiper-slide-index="${d.attr( "data-swiper-slide-index" )}"]` ) .addClass(s.slideDuplicatePrevClass) : a .children( `.${s.slideClass}.${ s.slideDuplicateClass }[data-swiper-slide-index="${d.attr( "data-swiper-slide-index" )}"]` ) .addClass(s.slideDuplicatePrevClass)), e.emitSlidesClasses(); }, updateActiveIndex: function (e) { const t = this, s = t.rtlTranslate ? t.translate : -t.translate, { slidesGrid: a, snapGrid: i, params: r, activeIndex: n, realIndex: l, snapIndex: o, } = t; let d, c = e; if (void 0 === c) { for (let e = 0; e < a.length; e += 1) void 0 !== a[e + 1] ? s >= a[e] && s < a[e + 1] - (a[e + 1] - a[e]) / 2 ? (c = e) : s >= a[e] && s < a[e + 1] && (c = e + 1) : s >= a[e] && (c = e); r.normalizeSlideIndex && (c < 0 || void 0 === c) && (c = 0); } if (i.indexOf(s) >= 0) d = i.indexOf(s); else { const e = Math.min(r.slidesPerGroupSkip, c); d = e + Math.floor((c - e) / r.slidesPerGroup); } if ((d >= i.length && (d = i.length - 1), c === n)) return void (d !== o && ((t.snapIndex = d), t.emit("snapIndexChange"))); const p = parseInt( t.slides.eq(c).attr("data-swiper-slide-index") || c, 10 ); Object.assign(t, { snapIndex: d, realIndex: p, previousIndex: n, activeIndex: c, }), t.emit("activeIndexChange"), t.emit("snapIndexChange"), l !== p && t.emit("realIndexChange"), (t.initialized || t.params.runCallbacksOnInit) && t.emit("slideChange"); }, updateClickedSlide: function (e) { const t = this, s = t.params, a = d(e).closest(`.${s.slideClass}`)[0]; let i, r = !1; if (a) for (let e = 0; e < t.slides.length; e += 1) if (t.slides[e] === a) { (r = !0), (i = e); break; } if (!a || !r) return (t.clickedSlide = void 0), void (t.clickedIndex = void 0); (t.clickedSlide = a), t.virtual && t.params.virtual.enabled ? (t.clickedIndex = parseInt( d(a).attr("data-swiper-slide-index"), 10 )) : (t.clickedIndex = i), s.slideToClickedSlide && void 0 !== t.clickedIndex && t.clickedIndex !== t.activeIndex && t.slideToClickedSlide(); }, }; var M = { getTranslate: function (e) { void 0 === e && (e = this.isHorizontal() ? "x" : "y"); const { params: t, rtlTranslate: s, translate: a, $wrapperEl: i } = this; if (t.virtualTranslate) return s ? -a : a; if (t.cssMode) return a; let r = h(i[0], e); return s && (r = -r), r || 0; }, setTranslate: function (e, t) { const s = this, { rtlTranslate: a, params: i, $wrapperEl: r, wrapperEl: n, progress: l, } = s; let o, d = 0, c = 0; s.isHorizontal() ? (d = a ? -e : e) : (c = e), i.roundLengths && ((d = Math.floor(d)), (c = Math.floor(c))), i.cssMode ? (n[s.isHorizontal() ? "scrollLeft" : "scrollTop"] = s.isHorizontal() ? -d : -c) : i.virtualTranslate || r.transform(`translate3d(${d}px, ${c}px, 0px)`), (s.previousTranslate = s.translate), (s.translate = s.isHorizontal() ? d : c); const p = s.maxTranslate() - s.minTranslate(); (o = 0 === p ? 0 : (e - s.minTranslate()) / p), o !== l && s.updateProgress(e), s.emit("setTranslate", s.translate, t); }, minTranslate: function () { return -this.snapGrid[0]; }, maxTranslate: function () { return -this.snapGrid[this.snapGrid.length - 1]; }, translateTo: function (e, t, s, a, i) { void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), void 0 === a && (a = !0); const r = this, { params: n, wrapperEl: l } = r; if (r.animating && n.preventInteractionOnTransition) return !1; const o = r.minTranslate(), d = r.maxTranslate(); let c; if ( ((c = a && e > o ? o : a && e < d ? d : e), r.updateProgress(c), n.cssMode) ) { const e = r.isHorizontal(); if (0 === t) l[e ? "scrollLeft" : "scrollTop"] = -c; else { if (!r.support.smoothScroll) return ( w({ swiper: r, targetPosition: -c, side: e ? "left" : "top" }), !0 ); l.scrollTo({ [e ? "left" : "top"]: -c, behavior: "smooth" }); } return !0; } return ( 0 === t ? (r.setTransition(0), r.setTranslate(c), s && (r.emit("beforeTransitionStart", t, i), r.emit("transitionEnd"))) : (r.setTransition(t), r.setTranslate(c), s && (r.emit("beforeTransitionStart", t, i), r.emit("transitionStart")), r.animating || ((r.animating = !0), r.onTranslateToWrapperTransitionEnd || (r.onTranslateToWrapperTransitionEnd = function (e) { r && !r.destroyed && e.target === this && (r.$wrapperEl[0].removeEventListener( "transitionend", r.onTranslateToWrapperTransitionEnd ), r.$wrapperEl[0].removeEventListener( "webkitTransitionEnd", r.onTranslateToWrapperTransitionEnd ), (r.onTranslateToWrapperTransitionEnd = null), delete r.onTranslateToWrapperTransitionEnd, s && r.emit("transitionEnd")); }), r.$wrapperEl[0].addEventListener( "transitionend", r.onTranslateToWrapperTransitionEnd ), r.$wrapperEl[0].addEventListener( "webkitTransitionEnd", r.onTranslateToWrapperTransitionEnd ))), !0 ); }, }; function P(e) { let { swiper: t, runCallbacks: s, direction: a, step: i } = e; const { activeIndex: r, previousIndex: n } = t; let l = a; if ( (l || (l = r > n ? "next" : r < n ? "prev" : "reset"), t.emit(`transition${i}`), s && r !== n) ) { if ("reset" === l) return void t.emit(`slideResetTransition${i}`); t.emit(`slideChangeTransition${i}`), "next" === l ? t.emit(`slideNextTransition${i}`) : t.emit(`slidePrevTransition${i}`); } } var k = { slideTo: function (e, t, s, a, i) { if ( (void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), "number" != typeof e && "string" != typeof e) ) throw new Error( `The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.` ); if ("string" == typeof e) { const t = parseInt(e, 10); if (!isFinite(t)) throw new Error( `The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.` ); e = t; } const r = this; let n = e; n < 0 && (n = 0); const { params: l, snapGrid: o, slidesGrid: d, previousIndex: c, activeIndex: p, rtlTranslate: u, wrapperEl: h, enabled: m, } = r; if ((r.animating && l.preventInteractionOnTransition) || (!m && !a && !i)) return !1; const f = Math.min(r.params.slidesPerGroupSkip, n); let g = f + Math.floor((n - f) / r.params.slidesPerGroup); g >= o.length && (g = o.length - 1); const v = -o[g]; if (l.normalizeSlideIndex) for (let e = 0; e < d.length; e += 1) { const t = -Math.floor(100 * v), s = Math.floor(100 * d[e]), a = Math.floor(100 * d[e + 1]); void 0 !== d[e + 1] ? t >= s && t < a - (a - s) / 2 ? (n = e) : t >= s && t < a && (n = e + 1) : t >= s && (n = e); } if (r.initialized && n !== p) { if (!r.allowSlideNext && v < r.translate && v < r.minTranslate()) return !1; if ( !r.allowSlidePrev && v > r.translate && v > r.maxTranslate() && (p || 0) !== n ) return !1; } let b; if ( (n !== (c || 0) && s && r.emit("beforeSlideChangeStart"), r.updateProgress(v), (b = n > p ? "next" : n < p ? "prev" : "reset"), (u && -v === r.translate) || (!u && v === r.translate)) ) return ( r.updateActiveIndex(n), l.autoHeight && r.updateAutoHeight(), r.updateSlidesClasses(), "slide" !== l.effect && r.setTranslate(v), "reset" !== b && (r.transitionStart(s, b), r.transitionEnd(s, b)), !1 ); if (l.cssMode) { const e = r.isHorizontal(), s = u ? v : -v; if (0 === t) { const t = r.virtual && r.params.virtual.enabled; t && ((r.wrapperEl.style.scrollSnapType = "none"), (r._immediateVirtual = !0)), (h[e ? "scrollLeft" : "scrollTop"] = s), t && requestAnimationFrame(() => { (r.wrapperEl.style.scrollSnapType = ""), (r._swiperImmediateVirtual = !1); }); } else { if (!r.support.smoothScroll) return ( w({ swiper: r, targetPosition: s, side: e ? "left" : "top" }), !0 ); h.scrollTo({ [e ? "left" : "top"]: s, behavior: "smooth" }); } return !0; } return ( r.setTransition(t), r.setTranslate(v), r.updateActiveIndex(n), r.updateSlidesClasses(), r.emit("beforeTransitionStart", t, a), r.transitionStart(s, b), 0 === t ? r.transitionEnd(s, b) : r.animating || ((r.animating = !0), r.onSlideToWrapperTransitionEnd || (r.onSlideToWrapperTransitionEnd = function (e) { r && !r.destroyed && e.target === this && (r.$wrapperEl[0].removeEventListener( "transitionend", r.onSlideToWrapperTransitionEnd ), r.$wrapperEl[0].removeEventListener( "webkitTransitionEnd", r.onSlideToWrapperTransitionEnd ), (r.onSlideToWrapperTransitionEnd = null), delete r.onSlideToWrapperTransitionEnd, r.transitionEnd(s, b)); }), r.$wrapperEl[0].addEventListener( "transitionend", r.onSlideToWrapperTransitionEnd ), r.$wrapperEl[0].addEventListener( "webkitTransitionEnd", r.onSlideToWrapperTransitionEnd )), !0 ); }, slideToLoop: function (e, t, s, a) { if ( (void 0 === e && (e = 0), void 0 === t && (t = this.params.speed), void 0 === s && (s = !0), "string" == typeof e) ) { const t = parseInt(e, 10); if (!isFinite(t)) throw new Error( `The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.` ); e = t; } const i = this; let r = e; return i.params.loop && (r += i.loopedSlides), i.slideTo(r, t, s, a); }, slideNext: function (e, t, s) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0); const a = this, { animating: i, enabled: r, params: n } = a; if (!r) return a; let l = n.slidesPerGroup; "auto" === n.slidesPerView && 1 === n.slidesPerGroup && n.slidesPerGroupAuto && (l = Math.max(a.slidesPerViewDynamic("current", !0), 1)); const o = a.activeIndex < n.slidesPerGroupSkip ? 1 : l; if (n.loop) { if (i && n.loopPreventsSlide) return !1; a.loopFix(), (a._clientLeft = a.$wrapperEl[0].clientLeft); } return n.rewind && a.isEnd ? a.slideTo(0, e, t, s) : a.slideTo(a.activeIndex + o, e, t, s); }, slidePrev: function (e, t, s) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0); const a = this, { params: i, animating: r, snapGrid: n, slidesGrid: l, rtlTranslate: o, enabled: d, } = a; if (!d) return a; if (i.loop) { if (r && i.loopPreventsSlide) return !1; a.loopFix(), (a._clientLeft = a.$wrapperEl[0].clientLeft); } function c(e) { return e < 0 ? -Math.floor(Math.abs(e)) : Math.floor(e); } const p = c(o ? a.translate : -a.translate), u = n.map((e) => c(e)); let h = n[u.indexOf(p) - 1]; if (void 0 === h && i.cssMode) { let e; n.forEach((t, s) => { p >= t && (e = s); }), void 0 !== e && (h = n[e > 0 ? e - 1 : e]); } let m = 0; if ( (void 0 !== h && ((m = l.indexOf(h)), m < 0 && (m = a.activeIndex - 1), "auto" === i.slidesPerView && 1 === i.slidesPerGroup && i.slidesPerGroupAuto && ((m = m - a.slidesPerViewDynamic("previous", !0) + 1), (m = Math.max(m, 0)))), i.rewind && a.isBeginning) ) { const i = a.params.virtual && a.params.virtual.enabled && a.virtual ? a.virtual.slides.length - 1 : a.slides.length - 1; return a.slideTo(i, e, t, s); } return a.slideTo(m, e, t, s); }, slideReset: function (e, t, s) { return ( void 0 === e && (e = this.params.speed), void 0 === t && (t = !0), this.slideTo(this.activeIndex, e, t, s) ); }, slideToClosest: function (e, t, s, a) { void 0 === e && (e = this.params.speed), void 0 === t && (t = !0), void 0 === a && (a = 0.5); const i = this; let r = i.activeIndex; const n = Math.min(i.params.slidesPerGroupSkip, r), l = n + Math.floor((r - n) / i.params.slidesPerGroup), o = i.rtlTranslate ? i.translate : -i.translate; if (o >= i.snapGrid[l]) { const e = i.snapGrid[l]; o - e > (i.snapGrid[l + 1] - e) * a && (r += i.params.slidesPerGroup); } else { const e = i.snapGrid[l - 1]; o - e <= (i.snapGrid[l] - e) * a && (r -= i.params.slidesPerGroup); } return ( (r = Math.max(r, 0)), (r = Math.min(r, i.slidesGrid.length - 1)), i.slideTo(r, e, t, s) ); }, slideToClickedSlide: function () { const e = this, { params: t, $wrapperEl: s } = e, a = "auto" === t.slidesPerView ? e.slidesPerViewDynamic() : t.slidesPerView; let i, r = e.clickedIndex; if (t.loop) { if (e.animating) return; (i = parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"), 10)), t.centeredSlides ? r < e.loopedSlides - a / 2 || r > e.slides.length - e.loopedSlides + a / 2 ? (e.loopFix(), (r = s .children( `.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})` ) .eq(0) .index()), p(() => { e.slideTo(r); })) : e.slideTo(r) : r > e.slides.length - a ? (e.loopFix(), (r = s .children( `.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})` ) .eq(0) .index()), p(() => { e.slideTo(r); })) : e.slideTo(r); } else e.slideTo(r); }, }; var z = { loopCreate: function () { const e = this, t = a(), { params: s, $wrapperEl: i } = e, r = i.children().length > 0 ? d(i.children()[0].parentNode) : i; r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove(); let n = r.children(`.${s.slideClass}`); if (s.loopFillGroupWithBlank) { const e = s.slidesPerGroup - (n.length % s.slidesPerGroup); if (e !== s.slidesPerGroup) { for (let a = 0; a < e; a += 1) { const e = d(t.createElement("div")).addClass( `${s.slideClass} ${s.slideBlankClass}` ); r.append(e); } n = r.children(`.${s.slideClass}`); } } "auto" !== s.slidesPerView || s.loopedSlides || (s.loopedSlides = n.length), (e.loopedSlides = Math.ceil( parseFloat(s.loopedSlides || s.slidesPerView, 10) )), (e.loopedSlides += s.loopAdditionalSlides), e.loopedSlides > n.length && e.params.loopedSlidesLimit && (e.loopedSlides = n.length); const l = [], o = []; n.each((e, t) => { d(e).attr("data-swiper-slide-index", t); }); for (let t = 0; t < e.loopedSlides; t += 1) { const e = t - Math.floor(t / n.length) * n.length; o.push(n.eq(e)[0]), l.unshift(n.eq(n.length - e - 1)[0]); } for (let e = 0; e < o.length; e += 1) r.append(d(o[e].cloneNode(!0)).addClass(s.slideDuplicateClass)); for (let e = l.length - 1; e >= 0; e -= 1) r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass)); }, loopFix: function () { const e = this; e.emit("beforeLoopFix"); const { activeIndex: t, slides: s, loopedSlides: a, allowSlidePrev: i, allowSlideNext: r, snapGrid: n, rtlTranslate: l, } = e; let o; (e.allowSlidePrev = !0), (e.allowSlideNext = !0); const d = -n[t] - e.getTranslate(); if (t < a) { (o = s.length - 3 * a + t), (o += a); e.slideTo(o, 0, !1, !0) && 0 !== d && e.setTranslate((l ? -e.translate : e.translate) - d); } else if (t >= s.length - a) { (o = -s.length + t + a), (o += a); e.slideTo(o, 0, !1, !0) && 0 !== d && e.setTranslate((l ? -e.translate : e.translate) - d); } (e.allowSlidePrev = i), (e.allowSlideNext = r), e.emit("loopFix"); }, loopDestroy: function () { const { $wrapperEl: e, params: t, slides: s } = this; e .children( `.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}` ) .remove(), s.removeAttr("data-swiper-slide-index"); }, }; function L(e) { const t = this, s = a(), i = r(), n = t.touchEventsData, { params: l, touches: o, enabled: c } = t; if (!c) return; if (t.animating && l.preventInteractionOnTransition) return; !t.animating && l.cssMode && l.loop && t.loopFix(); let p = e; p.originalEvent && (p = p.originalEvent); let h = d(p.target); if ("wrapper" === l.touchEventsTarget && !h.closest(t.wrapperEl).length) return; if ( ((n.isTouchEvent = "touchstart" === p.type), !n.isTouchEvent && "which" in p && 3 === p.which) ) return; if (!n.isTouchEvent && "button" in p && p.button > 0) return; if (n.isTouched && n.isMoved) return; const m = !!l.noSwipingClass && "" !== l.noSwipingClass, f = e.composedPath ? e.composedPath() : e.path; m && p.target && p.target.shadowRoot && f && (h = d(f[0])); const g = l.noSwipingSelector ? l.noSwipingSelector : `.${l.noSwipingClass}`, v = !(!p.target || !p.target.shadowRoot); if ( l.noSwiping && (v ? (function (e, t) { return ( void 0 === t && (t = this), (function t(s) { if (!s || s === a() || s === r()) return null; s.assignedSlot && (s = s.assignedSlot); const i = s.closest(e); return i || s.getRootNode ? i || t(s.getRootNode().host) : null; })(t) ); })(g, h[0]) : h.closest(g)[0]) ) return void (t.allowClick = !0); if (l.swipeHandler && !h.closest(l.swipeHandler)[0]) return; (o.currentX = "touchstart" === p.type ? p.targetTouches[0].pageX : p.pageX), (o.currentY = "touchstart" === p.type ? p.targetTouches[0].pageY : p.pageY); const w = o.currentX, b = o.currentY, x = l.edgeSwipeDetection || l.iOSEdgeSwipeDetection, y = l.edgeSwipeThreshold || l.iOSEdgeSwipeThreshold; if (x && (w <= y || w >= i.innerWidth - y)) { if ("prevent" !== x) return; e.preventDefault(); } if ( (Object.assign(n, { isTouched: !0, isMoved: !1, allowTouchCallbacks: !0, isScrolling: void 0, startMoving: void 0, }), (o.startX = w), (o.startY = b), (n.touchStartTime = u()), (t.allowClick = !0), t.updateSize(), (t.swipeDirection = void 0), l.threshold > 0 && (n.allowThresholdMove = !1), "touchstart" !== p.type) ) { let e = !0; h.is(n.focusableElements) && ((e = !1), "SELECT" === h[0].nodeName && (n.isTouched = !1)), s.activeElement && d(s.activeElement).is(n.focusableElements) && s.activeElement !== h[0] && s.activeElement.blur(); const a = e && t.allowTouchMove && l.touchStartPreventDefault; (!l.touchStartForcePreventDefault && !a) || h[0].isContentEditable || p.preventDefault(); } t.params.freeMode && t.params.freeMode.enabled && t.freeMode && t.animating && !l.cssMode && t.freeMode.onTouchStart(), t.emit("touchStart", p); } function O(e) { const t = a(), s = this, i = s.touchEventsData, { params: r, touches: n, rtlTranslate: l, enabled: o } = s; if (!o) return; let c = e; if ((c.originalEvent && (c = c.originalEvent), !i.isTouched)) return void ( i.startMoving && i.isScrolling && s.emit("touchMoveOpposite", c) ); if (i.isTouchEvent && "touchmove" !== c.type) return; const p = "touchmove" === c.type && c.targetTouches && (c.targetTouches[0] || c.changedTouches[0]), h = "touchmove" === c.type ? p.pageX : c.pageX, m = "touchmove" === c.type ? p.pageY : c.pageY; if (c.preventedByNestedSwiper) return (n.startX = h), void (n.startY = m); if (!s.allowTouchMove) return ( d(c.target).is(i.focusableElements) || (s.allowClick = !1), void ( i.isTouched && (Object.assign(n, { startX: h, startY: m, currentX: h, currentY: m }), (i.touchStartTime = u())) ) ); if (i.isTouchEvent && r.touchReleaseOnEdges && !r.loop) if (s.isVertical()) { if ( (m < n.startY && s.translate <= s.maxTranslate()) || (m > n.startY && s.translate >= s.minTranslate()) ) return (i.isTouched = !1), void (i.isMoved = !1); } else if ( (h < n.startX && s.translate <= s.maxTranslate()) || (h > n.startX && s.translate >= s.minTranslate()) ) return; if ( i.isTouchEvent && t.activeElement && c.target === t.activeElement && d(c.target).is(i.focusableElements) ) return (i.isMoved = !0), void (s.allowClick = !1); if ( (i.allowTouchCallbacks && s.emit("touchMove", c), c.targetTouches && c.targetTouches.length > 1) ) return; (n.currentX = h), (n.currentY = m); const f = n.currentX - n.startX, g = n.currentY - n.startY; if (s.params.threshold && Math.sqrt(f ** 2 + g ** 2) < s.params.threshold) return; if (void 0 === i.isScrolling) { let e; (s.isHorizontal() && n.currentY === n.startY) || (s.isVertical() && n.currentX === n.startX) ? (i.isScrolling = !1) : f * f + g * g >= 25 && ((e = (180 * Math.atan2(Math.abs(g), Math.abs(f))) / Math.PI), (i.isScrolling = s.isHorizontal() ? e > r.touchAngle : 90 - e > r.touchAngle)); } if ( (i.isScrolling && s.emit("touchMoveOpposite", c), void 0 === i.startMoving && ((n.currentX === n.startX && n.currentY === n.startY) || (i.startMoving = !0)), i.isScrolling) ) return void (i.isTouched = !1); if (!i.startMoving) return; (s.allowClick = !1), !r.cssMode && c.cancelable && c.preventDefault(), r.touchMoveStopPropagation && !r.nested && c.stopPropagation(), i.isMoved || (r.loop && !r.cssMode && s.loopFix(), (i.startTranslate = s.getTranslate()), s.setTransition(0), s.animating && s.$wrapperEl.trigger("webkitTransitionEnd transitionend"), (i.allowMomentumBounce = !1), !r.grabCursor || (!0 !== s.allowSlideNext && !0 !== s.allowSlidePrev) || s.setGrabCursor(!0), s.emit("sliderFirstMove", c)), s.emit("sliderMove", c), (i.isMoved = !0); let v = s.isHorizontal() ? f : g; (n.diff = v), (v *= r.touchRatio), l && (v = -v), (s.swipeDirection = v > 0 ? "prev" : "next"), (i.currentTranslate = v + i.startTranslate); let w = !0, b = r.resistanceRatio; if ( (r.touchReleaseOnEdges && (b = 0), v > 0 && i.currentTranslate > s.minTranslate() ? ((w = !1), r.resistance && (i.currentTranslate = s.minTranslate() - 1 + (-s.minTranslate() + i.startTranslate + v) ** b)) : v < 0 && i.currentTranslate < s.maxTranslate() && ((w = !1), r.resistance && (i.currentTranslate = s.maxTranslate() + 1 - (s.maxTranslate() - i.startTranslate - v) ** b)), w && (c.preventedByNestedSwiper = !0), !s.allowSlideNext && "next" === s.swipeDirection && i.currentTranslate < i.startTranslate && (i.currentTranslate = i.startTranslate), !s.allowSlidePrev && "prev" === s.swipeDirection && i.currentTranslate > i.startTranslate && (i.currentTranslate = i.startTranslate), s.allowSlidePrev || s.allowSlideNext || (i.currentTranslate = i.startTranslate), r.threshold > 0) ) { if (!(Math.abs(v) > r.threshold || i.allowThresholdMove)) return void (i.currentTranslate = i.startTranslate); if (!i.allowThresholdMove) return ( (i.allowThresholdMove = !0), (n.startX = n.currentX), (n.startY = n.currentY), (i.currentTranslate = i.startTranslate), void (n.diff = s.isHorizontal() ? n.currentX - n.startX : n.currentY - n.startY) ); } r.followFinger && !r.cssMode && (((r.freeMode && r.freeMode.enabled && s.freeMode) || r.watchSlidesProgress) && (s.updateActiveIndex(), s.updateSlidesClasses()), s.params.freeMode && r.freeMode.enabled && s.freeMode && s.freeMode.onTouchMove(), s.updateProgress(i.currentTranslate), s.setTranslate(i.currentTranslate)); } function I(e) { const t = this, s = t.touchEventsData, { params: a, touches: i, rtlTranslate: r, slidesGrid: n, enabled: l } = t; if (!l) return; let o = e; if ( (o.originalEvent && (o = o.originalEvent), s.allowTouchCallbacks && t.emit("touchEnd", o), (s.allowTouchCallbacks = !1), !s.isTouched) ) return ( s.isMoved && a.grabCursor && t.setGrabCursor(!1), (s.isMoved = !1), void (s.startMoving = !1) ); a.grabCursor && s.isMoved && s.isTouched && (!0 === t.allowSlideNext || !0 === t.allowSlidePrev) && t.setGrabCursor(!1); const d = u(), c = d - s.touchStartTime; if (t.allowClick) { const e = o.path || (o.composedPath && o.composedPath()); t.updateClickedSlide((e && e[0]) || o.target), t.emit("tap click", o), c < 300 && d - s.lastClickTime < 300 && t.emit("doubleTap doubleClick", o); } if ( ((s.lastClickTime = u()), p(() => { t.destroyed || (t.allowClick = !0); }), !s.isTouched || !s.isMoved || !t.swipeDirection || 0 === i.diff || s.currentTranslate === s.startTranslate) ) return (s.isTouched = !1), (s.isMoved = !1), void (s.startMoving = !1); let h; if ( ((s.isTouched = !1), (s.isMoved = !1), (s.startMoving = !1), (h = a.followFinger ? r ? t.translate : -t.translate : -s.currentTranslate), a.cssMode) ) return; if (t.params.freeMode && a.freeMode.enabled) return void t.freeMode.onTouchEnd({ currentPos: h }); let m = 0, f = t.slidesSizesGrid[0]; for ( let e = 0; e < n.length; e += e < a.slidesPerGroupSkip ? 1 : a.slidesPerGroup ) { const t = e < a.slidesPerGroupSkip - 1 ? 1 : a.slidesPerGroup; void 0 !== n[e + t] ? h >= n[e] && h < n[e + t] && ((m = e), (f = n[e + t] - n[e])) : h >= n[e] && ((m = e), (f = n[n.length - 1] - n[n.length - 2])); } let g = null, v = null; a.rewind && (t.isBeginning ? (v = t.params.virtual && t.params.virtual.enabled && t.virtual ? t.virtual.slides.length - 1 : t.slides.length - 1) : t.isEnd && (g = 0)); const w = (h - n[m]) / f, b = m < a.slidesPerGroupSkip - 1 ? 1 : a.slidesPerGroup; if (c > a.longSwipesMs) { if (!a.longSwipes) return void t.slideTo(t.activeIndex); "next" === t.swipeDirection && (w >= a.longSwipesRatio ? t.slideTo(a.rewind && t.isEnd ? g : m + b) : t.slideTo(m)), "prev" === t.swipeDirection && (w > 1 - a.longSwipesRatio ? t.slideTo(m + b) : null !== v && w < 0 && Math.abs(w) > a.longSwipesRatio ? t.slideTo(v) : t.slideTo(m)); } else { if (!a.shortSwipes) return void t.slideTo(t.activeIndex); t.navigation && (o.target === t.navigation.nextEl || o.target === t.navigation.prevEl) ? o.target === t.navigation.nextEl ? t.slideTo(m + b) : t.slideTo(m) : ("next" === t.swipeDirection && t.slideTo(null !== g ? g : m + b), "prev" === t.swipeDirection && t.slideTo(null !== v ? v : m)); } } function A() { const e = this, { params: t, el: s } = e; if (s && 0 === s.offsetWidth) return; t.breakpoints && e.setBreakpoint(); const { allowSlideNext: a, allowSlidePrev: i, snapGrid: r } = e; (e.allowSlideNext = !0), (e.allowSlidePrev = !0), e.updateSize(), e.updateSlides(), e.updateSlidesClasses(), ("auto" === t.slidesPerView || t.slidesPerView > 1) && e.isEnd && !e.isBeginning && !e.params.centeredSlides ? e.slideTo(e.slides.length - 1, 0, !1, !0) : e.slideTo(e.activeIndex, 0, !1, !0), e.autoplay && e.autoplay.running && e.autoplay.paused && e.autoplay.run(), (e.allowSlidePrev = i), (e.allowSlideNext = a), e.params.watchOverflow && r !== e.snapGrid && e.checkOverflow(); } function D(e) { const t = this; t.enabled && (t.allowClick || (t.params.preventClicks && e.preventDefault(), t.params.preventClicksPropagation && t.animating && (e.stopPropagation(), e.stopImmediatePropagation()))); } function G() { const e = this, { wrapperEl: t, rtlTranslate: s, enabled: a } = e; if (!a) return; let i; (e.previousTranslate = e.translate), e.isHorizontal() ? (e.translate = -t.scrollLeft) : (e.translate = -t.scrollTop), 0 === e.translate && (e.translate = 0), e.updateActiveIndex(), e.updateSlidesClasses(); const r = e.maxTranslate() - e.minTranslate(); (i = 0 === r ? 0 : (e.translate - e.minTranslate()) / r), i !== e.progress && e.updateProgress(s ? -e.translate : e.translate), e.emit("setTranslate", e.translate, !1); } let N = !1; function B() {} const H = (e, t) => { const s = a(), { params: i, touchEvents: r, el: n, wrapperEl: l, device: o, support: d, } = e, c = !!i.nested, p = "on" === t ? "addEventListener" : "removeEventListener", u = t; if (d.touch) { const t = !( "touchstart" !== r.start || !d.passiveListener || !i.passiveListeners ) && { passive: !0, capture: !1 }; n[p](r.start, e.onTouchStart, t), n[p]( r.move, e.onTouchMove, d.passiveListener ? { passive: !1, capture: c } : c ), n[p](r.end, e.onTouchEnd, t), r.cancel && n[p](r.cancel, e.onTouchEnd, t); } else n[p](r.start, e.onTouchStart, !1), s[p](r.move, e.onTouchMove, c), s[p](r.end, e.onTouchEnd, !1); (i.preventClicks || i.preventClicksPropagation) && n[p]("click", e.onClick, !0), i.cssMode && l[p]("scroll", e.onScroll), i.updateOnWindowResize ? e[u]( o.ios || o.android ? "resize orientationchange observerUpdate" : "resize observerUpdate", A, !0 ) : e[u]("observerUpdate", A, !0); }; var X = { attachEvents: function () { const e = this, t = a(), { params: s, support: i } = e; (e.onTouchStart = L.bind(e)), (e.onTouchMove = O.bind(e)), (e.onTouchEnd = I.bind(e)), s.cssMode && (e.onScroll = G.bind(e)), (e.onClick = D.bind(e)), i.touch && !N && (t.addEventListener("touchstart", B), (N = !0)), H(e, "on"); }, detachEvents: function () { H(this, "off"); }, }; const Y = (e, t) => e.grid && t.grid && t.grid.rows > 1; var R = { addClasses: function () { const e = this, { classNames: t, params: s, rtl: a, $el: i, device: r, support: n } = e, l = (function (e, t) { const s = []; return ( e.forEach((e) => { "object" == typeof e ? Object.keys(e).forEach((a) => { e[a] && s.push(t + a); }) : "string" == typeof e && s.push(t + e); }), s ); })( [ "initialized", s.direction, { "pointer-events": !n.touch }, { "free-mode": e.params.freeMode && s.freeMode.enabled }, { autoheight: s.autoHeight }, { rtl: a }, { grid: s.grid && s.grid.rows > 1 }, { "grid-column": s.grid && s.grid.rows > 1 && "column" === s.grid.fill, }, { android: r.android }, { ios: r.ios }, { "css-mode": s.cssMode }, { centered: s.cssMode && s.centeredSlides }, { "watch-progress": s.watchSlidesProgress }, ], s.containerModifierClass ); t.push(...l), i.addClass([...t].join(" ")), e.emitContainerClasses(); }, removeClasses: function () { const { $el: e, classNames: t } = this; e.removeClass(t.join(" ")), this.emitContainerClasses(); }, }; var W = { init: !0, direction: "horizontal", touchEventsTarget: "wrapper", initialSlide: 0, speed: 300, cssMode: !1, updateOnWindowResize: !0, resizeObserver: !0, nested: !1, createElements: !1, enabled: !0, focusableElements: "input, select, option, textarea, button, video, label", width: null, height: null, preventInteractionOnTransition: !1, userAgent: null, url: null, edgeSwipeDetection: !1, edgeSwipeThreshold: 20, autoHeight: !1, setWrapperSize: !1, virtualTranslate: !1, effect: "slide", breakpoints: void 0, breakpointsBase: "window", spaceBetween: 0, slidesPerView: 1, slidesPerGroup: 1, slidesPerGroupSkip: 0, slidesPerGroupAuto: !1, centeredSlides: !1, centeredSlidesBounds: !1, slidesOffsetBefore: 0, slidesOffsetAfter: 0, normalizeSlideIndex: !0, centerInsufficientSlides: !1, watchOverflow: !0, roundLengths: !1, touchRatio: 1, touchAngle: 45, simulateTouch: !0, shortSwipes: !0, longSwipes: !0, longSwipesRatio: 0.5, longSwipesMs: 300, followFinger: !0, allowTouchMove: !0, threshold: 0, touchMoveStopPropagation: !1, touchStartPreventDefault: !0, touchStartForcePreventDefault: !1, touchReleaseOnEdges: !1, uniqueNavElements: !0, resistance: !0, resistanceRatio: 0.85, watchSlidesProgress: !1, grabCursor: !1, preventClicks: !0, preventClicksPropagation: !0, slideToClickedSlide: !1, preloadImages: !0, updateOnImagesReady: !0, loop: !1, loopAdditionalSlides: 0, loopedSlides: null, loopedSlidesLimit: !0, loopFillGroupWithBlank: !1, loopPreventsSlide: !0, rewind: !1, allowSlidePrev: !0, allowSlideNext: !0, swipeHandler: null, noSwiping: !0, noSwipingClass: "swiper-no-swiping", noSwipingSelector: null, passiveListeners: !0, maxBackfaceHiddenSlides: 10, containerModifierClass: "swiper-", slideClass: "swiper-slide", slideBlankClass: "swiper-slide-invisible-blank", slideActiveClass: "swiper-slide-active", slideDuplicateActiveClass: "swiper-slide-duplicate-active", slideVisibleClass: "swiper-slide-visible", slideDuplicateClass: "swiper-slide-duplicate", slideNextClass: "swiper-slide-next", slideDuplicateNextClass: "swiper-slide-duplicate-next", slidePrevClass: "swiper-slide-prev", slideDuplicatePrevClass: "swiper-slide-duplicate-prev", wrapperClass: "swiper-wrapper", runCallbacksOnInit: !0, _emitClasses: !1, }; function q(e, t) { return function (s) { void 0 === s && (s = {}); const a = Object.keys(s)[0], i = s[a]; "object" == typeof i && null !== i ? (["navigation", "pagination", "scrollbar"].indexOf(a) >= 0 && !0 === e[a] && (e[a] = { auto: !0 }), a in e && "enabled" in i ? (!0 === e[a] && (e[a] = { enabled: !0 }), "object" != typeof e[a] || "enabled" in e[a] || (e[a].enabled = !0), e[a] || (e[a] = { enabled: !1 }), g(t, s)) : g(t, s)) : g(t, s); }; } const j = { eventsEmitter: $, update: S, translate: M, transition: { setTransition: function (e, t) { const s = this; s.params.cssMode || s.$wrapperEl.transition(e), s.emit("setTransition", e, t); }, transitionStart: function (e, t) { void 0 === e && (e = !0); const s = this, { params: a } = s; a.cssMode || (a.autoHeight && s.updateAutoHeight(), P({ swiper: s, runCallbacks: e, direction: t, step: "Start" })); }, transitionEnd: function (e, t) { void 0 === e && (e = !0); const s = this, { params: a } = s; (s.animating = !1), a.cssMode || (s.setTransition(0), P({ swiper: s, runCallbacks: e, direction: t, step: "End" })); }, }, slide: k, loop: z, grabCursor: { setGrabCursor: function (e) { const t = this; if ( t.support.touch || !t.params.simulateTouch || (t.params.watchOverflow && t.isLocked) || t.params.cssMode ) return; const s = "container" === t.params.touchEventsTarget ? t.el : t.wrapperEl; (s.style.cursor = "move"), (s.style.cursor = e ? "grabbing" : "grab"); }, unsetGrabCursor: function () { const e = this; e.support.touch || (e.params.watchOverflow && e.isLocked) || e.params.cssMode || (e[ "container" === e.params.touchEventsTarget ? "el" : "wrapperEl" ].style.cursor = ""); }, }, events: X, breakpoints: { setBreakpoint: function () { const e = this, { activeIndex: t, initialized: s, loopedSlides: a = 0, params: i, $el: r, } = e, n = i.breakpoints; if (!n || (n && 0 === Object.keys(n).length)) return; const l = e.getBreakpoint(n, e.params.breakpointsBase, e.el); if (!l || e.currentBreakpoint === l) return; const o = (l in n ? n[l] : void 0) || e.originalParams, d = Y(e, i), c = Y(e, o), p = i.enabled; d && !c ? (r.removeClass( `${i.containerModifierClass}grid ${i.containerModifierClass}grid-column` ), e.emitContainerClasses()) : !d && c && (r.addClass(`${i.containerModifierClass}grid`), ((o.grid.fill && "column" === o.grid.fill) || (!o.grid.fill && "column" === i.grid.fill)) && r.addClass(`${i.containerModifierClass}grid-column`), e.emitContainerClasses()), ["navigation", "pagination", "scrollbar"].forEach((t) => { const s = i[t] && i[t].enabled, a = o[t] && o[t].enabled; s && !a && e[t].disable(), !s && a && e[t].enable(); }); const u = o.direction && o.direction !== i.direction, h = i.loop && (o.slidesPerView !== i.slidesPerView || u); u && s && e.changeDirection(), g(e.params, o); const m = e.params.enabled; Object.assign(e, { allowTouchMove: e.params.allowTouchMove, allowSlideNext: e.params.allowSlideNext, allowSlidePrev: e.params.allowSlidePrev, }), p && !m ? e.disable() : !p && m && e.enable(), (e.currentBreakpoint = l), e.emit("_beforeBreakpoint", o), h && s && (e.loopDestroy(), e.loopCreate(), e.updateSlides(), e.slideTo(t - a + e.loopedSlides, 0, !1)), e.emit("breakpoint", o); }, getBreakpoint: function (e, t, s) { if ((void 0 === t && (t = "window"), !e || ("container" === t && !s))) return; let a = !1; const i = r(), n = "window" === t ? i.innerHeight : s.clientHeight, l = Object.keys(e).map((e) => { if ("string" == typeof e && 0 === e.indexOf("@")) { const t = parseFloat(e.substr(1)); return { value: n * t, point: e }; } return { value: e, point: e }; }); l.sort((e, t) => parseInt(e.value, 10) - parseInt(t.value, 10)); for (let e = 0; e < l.length; e += 1) { const { point: r, value: n } = l[e]; "window" === t ? i.matchMedia(`(min-width: ${n}px)`).matches && (a = r) : n <= s.clientWidth && (a = r); } return a || "max"; }, }, checkOverflow: { checkOverflow: function () { const e = this, { isLocked: t, params: s } = e, { slidesOffsetBefore: a } = s; if (a) { const t = e.slides.length - 1, s = e.slidesGrid[t] + e.slidesSizesGrid[t] + 2 * a; e.isLocked = e.size > s; } else e.isLocked = 1 === e.snapGrid.length; !0 === s.allowSlideNext && (e.allowSlideNext = !e.isLocked), !0 === s.allowSlidePrev && (e.allowSlidePrev = !e.isLocked), t && t !== e.isLocked && (e.isEnd = !1), t !== e.isLocked && e.emit(e.isLocked ? "lock" : "unlock"); }, }, classes: R, images: { loadImage: function (e, t, s, a, i, n) { const l = r(); let o; function c() { n && n(); } d(e).parent("picture")[0] || (e.complete && i) ? c() : t ? ((o = new l.Image()), (o.onload = c), (o.onerror = c), a && (o.sizes = a), s && (o.srcset = s), t && (o.src = t)) : c(); }, preloadImages: function () { const e = this; function t() { null != e && e && !e.destroyed && (void 0 !== e.imagesLoaded && (e.imagesLoaded += 1), e.imagesLoaded === e.imagesToLoad.length && (e.params.updateOnImagesReady && e.update(), e.emit("imagesReady"))); } e.imagesToLoad = e.$el.find("img"); for (let s = 0; s < e.imagesToLoad.length; s += 1) { const a = e.imagesToLoad[s]; e.loadImage( a, a.currentSrc || a.getAttribute("src"), a.srcset || a.getAttribute("srcset"), a.sizes || a.getAttribute("sizes"), !0, t ); } }, }, }, _ = {}; class V { constructor() { let e, t; for (var s = arguments.length, a = new Array(s), i = 0; i < s; i++) a[i] = arguments[i]; if ( (1 === a.length && a[0].constructor && "Object" === Object.prototype.toString.call(a[0]).slice(8, -1) ? (t = a[0]) : ([e, t] = a), t || (t = {}), (t = g({}, t)), e && !t.el && (t.el = e), t.el && d(t.el).length > 1) ) { const e = []; return ( d(t.el).each((s) => { const a = g({}, t, { el: s }); e.push(new V(a)); }), e ); } const r = this; (r.__swiper__ = !0), (r.support = E()), (r.device = C({ userAgent: t.userAgent })), (r.browser = T()), (r.eventsListeners = {}), (r.eventsAnyListeners = []), (r.modules = [...r.__modules__]), t.modules && Array.isArray(t.modules) && r.modules.push(...t.modules); const n = {}; r.modules.forEach((e) => { e({ swiper: r, extendParams: q(t, n), on: r.on.bind(r), once: r.once.bind(r), off: r.off.bind(r), emit: r.emit.bind(r), }); }); const l = g({}, W, n); return ( (r.params = g({}, l, _, t)), (r.originalParams = g({}, r.params)), (r.passedParams = g({}, t)), r.params && r.params.on && Object.keys(r.params.on).forEach((e) => { r.on(e, r.params.on[e]); }), r.params && r.params.onAny && r.onAny(r.params.onAny), (r.$ = d), Object.assign(r, { enabled: r.params.enabled, el: e, classNames: [], slides: d(), slidesGrid: [], snapGrid: [], slidesSizesGrid: [], isHorizontal: () => "horizontal" === r.params.direction, isVertical: () => "vertical" === r.params.direction, activeIndex: 0, realIndex: 0, isBeginning: !0, isEnd: !1, translate: 0, previousTranslate: 0, progress: 0, velocity: 0, animating: !1, allowSlideNext: r.params.allowSlideNext, allowSlidePrev: r.params.allowSlidePrev, touchEvents: (function () { const e = ["touchstart", "touchmove", "touchend", "touchcancel"], t = ["pointerdown", "pointermove", "pointerup"]; return ( (r.touchEventsTouch = { start: e[0], move: e[1], end: e[2], cancel: e[3], }), (r.touchEventsDesktop = { start: t[0], move: t[1], end: t[2] }), r.support.touch || !r.params.simulateTouch ? r.touchEventsTouch : r.touchEventsDesktop ); })(), touchEventsData: { isTouched: void 0, isMoved: void 0, allowTouchCallbacks: void 0, touchStartTime: void 0, isScrolling: void 0, currentTranslate: void 0, startTranslate: void 0, allowThresholdMove: void 0, focusableElements: r.params.focusableElements, lastClickTime: u(), clickTimeout: void 0, velocities: [], allowMomentumBounce: void 0, isTouchEvent: void 0, startMoving: void 0, }, allowClick: !0, allowTouchMove: r.params.allowTouchMove, touches: { startX: 0, startY: 0, currentX: 0, currentY: 0, diff: 0 }, imagesToLoad: [], imagesLoaded: 0, }), r.emit("_swiper"), r.params.init && r.init(), r ); } enable() { const e = this; e.enabled || ((e.enabled = !0), e.params.grabCursor && e.setGrabCursor(), e.emit("enable")); } disable() { const e = this; e.enabled && ((e.enabled = !1), e.params.grabCursor && e.unsetGrabCursor(), e.emit("disable")); } setProgress(e, t) { const s = this; e = Math.min(Math.max(e, 0), 1); const a = s.minTranslate(), i = (s.maxTranslate() - a) * e + a; s.translateTo(i, void 0 === t ? 0 : t), s.updateActiveIndex(), s.updateSlidesClasses(); } emitContainerClasses() { const e = this; if (!e.params._emitClasses || !e.el) return; const t = e.el.className .split(" ") .filter( (t) => 0 === t.indexOf("swiper") || 0 === t.indexOf(e.params.containerModifierClass) ); e.emit("_containerClasses", t.join(" ")); } getSlideClasses(e) { const t = this; return t.destroyed ? "" : e.className .split(" ") .filter( (e) => 0 === e.indexOf("swiper-slide") || 0 === e.indexOf(t.params.slideClass) ) .join(" "); } emitSlidesClasses() { const e = this; if (!e.params._emitClasses || !e.el) return; const t = []; e.slides.each((s) => { const a = e.getSlideClasses(s); t.push({ slideEl: s, classNames: a }), e.emit("_slideClass", s, a); }), e.emit("_slideClasses", t); } slidesPerViewDynamic(e, t) { void 0 === e && (e = "current"), void 0 === t && (t = !1); const { params: s, slides: a, slidesGrid: i, slidesSizesGrid: r, size: n, activeIndex: l, } = this; let o = 1; if (s.centeredSlides) { let e, t = a[l].swiperSlideSize; for (let s = l + 1; s < a.length; s += 1) a[s] && !e && ((t += a[s].swiperSlideSize), (o += 1), t > n && (e = !0)); for (let s = l - 1; s >= 0; s -= 1) a[s] && !e && ((t += a[s].swiperSlideSize), (o += 1), t > n && (e = !0)); } else if ("current" === e) for (let e = l + 1; e < a.length; e += 1) { (t ? i[e] + r[e] - i[l] < n : i[e] - i[l] < n) && (o += 1); } else for (let e = l - 1; e >= 0; e -= 1) { i[l] - i[e] < n && (o += 1); } return o; } update() { const e = this; if (!e || e.destroyed) return; const { snapGrid: t, params: s } = e; function a() { const t = e.rtlTranslate ? -1 * e.translate : e.translate, s = Math.min(Math.max(t, e.maxTranslate()), e.minTranslate()); e.setTranslate(s), e.updateActiveIndex(), e.updateSlidesClasses(); } let i; s.breakpoints && e.setBreakpoint(), e.updateSize(), e.updateSlides(), e.updateProgress(), e.updateSlidesClasses(), e.params.freeMode && e.params.freeMode.enabled ? (a(), e.params.autoHeight && e.updateAutoHeight()) : ((i = ("auto" === e.params.slidesPerView || e.params.slidesPerView > 1) && e.isEnd && !e.params.centeredSlides ? e.slideTo(e.slides.length - 1, 0, !1, !0) : e.slideTo(e.activeIndex, 0, !1, !0)), i || a()), s.watchOverflow && t !== e.snapGrid && e.checkOverflow(), e.emit("update"); } changeDirection(e, t) { void 0 === t && (t = !0); const s = this, a = s.params.direction; return ( e || (e = "horizontal" === a ? "vertical" : "horizontal"), e === a || ("horizontal" !== e && "vertical" !== e) || (s.$el .removeClass(`${s.params.containerModifierClass}${a}`) .addClass(`${s.params.containerModifierClass}${e}`), s.emitContainerClasses(), (s.params.direction = e), s.slides.each((t) => { "vertical" === e ? (t.style.width = "") : (t.style.height = ""); }), s.emit("changeDirection"), t && s.update()), s ); } changeLanguageDirection(e) { const t = this; (t.rtl && "rtl" === e) || (!t.rtl && "ltr" === e) || ((t.rtl = "rtl" === e), (t.rtlTranslate = "horizontal" === t.params.direction && t.rtl), t.rtl ? (t.$el.addClass(`${t.params.containerModifierClass}rtl`), (t.el.dir = "rtl")) : (t.$el.removeClass(`${t.params.containerModifierClass}rtl`), (t.el.dir = "ltr")), t.update()); } mount(e) { const t = this; if (t.mounted) return !0; const s = d(e || t.params.el); if (!(e = s[0])) return !1; e.swiper = t; const i = () => `.${(t.params.wrapperClass || "").trim().split(" ").join(".")}`; let r = (() => { if (e && e.shadowRoot && e.shadowRoot.querySelector) { const t = d(e.shadowRoot.querySelector(i())); return (t.children = (e) => s.children(e)), t; } return s.children ? s.children(i()) : d(s).children(i()); })(); if (0 === r.length && t.params.createElements) { const e = a().createElement("div"); (r = d(e)), (e.className = t.params.wrapperClass), s.append(e), s.children(`.${t.params.slideClass}`).each((e) => { r.append(e); }); } return ( Object.assign(t, { $el: s, el: e, $wrapperEl: r, wrapperEl: r[0], mounted: !0, rtl: "rtl" === e.dir.toLowerCase() || "rtl" === s.css("direction"), rtlTranslate: "horizontal" === t.params.direction && ("rtl" === e.dir.toLowerCase() || "rtl" === s.css("direction")), wrongRTL: "-webkit-box" === r.css("display"), }), !0 ); } init(e) { const t = this; if (t.initialized) return t; return ( !1 === t.mount(e) || (t.emit("beforeInit"), t.params.breakpoints && t.setBreakpoint(), t.addClasses(), t.params.loop && t.loopCreate(), t.updateSize(), t.updateSlides(), t.params.watchOverflow && t.checkOverflow(), t.params.grabCursor && t.enabled && t.setGrabCursor(), t.params.preloadImages && t.preloadImages(), t.params.loop ? t.slideTo( t.params.initialSlide + t.loopedSlides, 0, t.params.runCallbacksOnInit, !1, !0 ) : t.slideTo( t.params.initialSlide, 0, t.params.runCallbacksOnInit, !1, !0 ), t.attachEvents(), (t.initialized = !0), t.emit("init"), t.emit("afterInit")), t ); } destroy(e, t) { void 0 === e && (e = !0), void 0 === t && (t = !0); const s = this, { params: a, $el: i, $wrapperEl: r, slides: n } = s; return ( void 0 === s.params || s.destroyed || (s.emit("beforeDestroy"), (s.initialized = !1), s.detachEvents(), a.loop && s.loopDestroy(), t && (s.removeClasses(), i.removeAttr("style"), r.removeAttr("style"), n && n.length && n .removeClass( [ a.slideVisibleClass, a.slideActiveClass, a.slideNextClass, a.slidePrevClass, ].join(" ") ) .removeAttr("style") .removeAttr("data-swiper-slide-index")), s.emit("destroy"), Object.keys(s.eventsListeners).forEach((e) => { s.off(e); }), !1 !== e && ((s.$el[0].swiper = null), (function (e) { const t = e; Object.keys(t).forEach((e) => { try { t[e] = null; } catch (e) {} try { delete t[e]; } catch (e) {} }); })(s)), (s.destroyed = !0)), null ); } static extendDefaults(e) { g(_, e); } static get extendedDefaults() { return _; } static get defaults() { return W; } static installModule(e) { V.prototype.__modules__ || (V.prototype.__modules__ = []); const t = V.prototype.__modules__; "function" == typeof e && t.indexOf(e) < 0 && t.push(e); } static use(e) { return Array.isArray(e) ? (e.forEach((e) => V.installModule(e)), V) : (V.installModule(e), V); } } function F(e, t, s, i) { const r = a(); return ( e.params.createElements && Object.keys(i).forEach((a) => { if (!s[a] && !0 === s.auto) { let n = e.$el.children(`.${i[a]}`)[0]; n || ((n = r.createElement("div")), (n.className = i[a]), e.$el.append(n)), (s[a] = n), (t[a] = n); } }), s ); } function U(e) { return ( void 0 === e && (e = ""), `.${e .trim() .replace(/([\.:!\/])/g, "\\$1") .replace(/ /g, ".")}` ); } function K(e) { const t = this, { $wrapperEl: s, params: a } = t; if ((a.loop && t.loopDestroy(), "object" == typeof e && "length" in e)) for (let t = 0; t < e.length; t += 1) e[t] && s.append(e[t]); else s.append(e); a.loop && t.loopCreate(), a.observer || t.update(); } function Z(e) { const t = this, { params: s, $wrapperEl: a, activeIndex: i } = t; s.loop && t.loopDestroy(); let r = i + 1; if ("object" == typeof e && "length" in e) { for (let t = 0; t < e.length; t += 1) e[t] && a.prepend(e[t]); r = i + e.length; } else a.prepend(e); s.loop && t.loopCreate(), s.observer || t.update(), t.slideTo(r, 0, !1); } function Q(e, t) { const s = this, { $wrapperEl: a, params: i, activeIndex: r } = s; let n = r; i.loop && ((n -= s.loopedSlides), s.loopDestroy(), (s.slides = a.children(`.${i.slideClass}`))); const l = s.slides.length; if (e <= 0) return void s.prependSlide(t); if (e >= l) return void s.appendSlide(t); let o = n > e ? n + 1 : n; const d = []; for (let t = l - 1; t >= e; t -= 1) { const e = s.slides.eq(t); e.remove(), d.unshift(e); } if ("object" == typeof t && "length" in t) { for (let e = 0; e < t.length; e += 1) t[e] && a.append(t[e]); o = n > e ? n + t.length : n; } else a.append(t); for (let e = 0; e < d.length; e += 1) a.append(d[e]); i.loop && s.loopCreate(), i.observer || s.update(), i.loop ? s.slideTo(o + s.loopedSlides, 0, !1) : s.slideTo(o, 0, !1); } function J(e) { const t = this, { params: s, $wrapperEl: a, activeIndex: i } = t; let r = i; s.loop && ((r -= t.loopedSlides), t.loopDestroy(), (t.slides = a.children(`.${s.slideClass}`))); let n, l = r; if ("object" == typeof e && "length" in e) { for (let s = 0; s < e.length; s += 1) (n = e[s]), t.slides[n] && t.slides.eq(n).remove(), n < l && (l -= 1); l = Math.max(l, 0); } else (n = e), t.slides[n] && t.slides.eq(n).remove(), n < l && (l -= 1), (l = Math.max(l, 0)); s.loop && t.loopCreate(), s.observer || t.update(), s.loop ? t.slideTo(l + t.loopedSlides, 0, !1) : t.slideTo(l, 0, !1); } function ee() { const e = this, t = []; for (let s = 0; s < e.slides.length; s += 1) t.push(s); e.removeSlide(t); } function te(e) { const { effect: t, swiper: s, on: a, setTranslate: i, setTransition: r, overwriteParams: n, perspective: l, recreateShadows: o, getEffectParams: d, } = e; let c; a("beforeInit", () => { if (s.params.effect !== t) return; s.classNames.push(`${s.params.containerModifierClass}${t}`), l && l() && s.classNames.push(`${s.params.containerModifierClass}3d`); const e = n ? n() : {}; Object.assign(s.params, e), Object.assign(s.originalParams, e); }), a("setTranslate", () => { s.params.effect === t && i(); }), a("setTransition", (e, a) => { s.params.effect === t && r(a); }), a("transitionEnd", () => { if (s.params.effect === t && o) { if (!d || !d().slideShadows) return; s.slides.each((e) => { s.$(e) .find( ".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left" ) .remove(); }), o(); } }), a("virtualUpdate", () => { s.params.effect === t && (s.slides.length || (c = !0), requestAnimationFrame(() => { c && s.slides && s.slides.length && (i(), (c = !1)); })); }); } function se(e, t) { return e.transformEl ? t.find(e.transformEl).css({ "backface-visibility": "hidden", "-webkit-backface-visibility": "hidden", }) : t; } function ae(e) { let { swiper: t, duration: s, transformEl: a, allSlides: i } = e; const { slides: r, activeIndex: n, $wrapperEl: l } = t; if (t.params.virtualTranslate && 0 !== s) { let e, s = !1; (e = i ? (a ? r.find(a) : r) : a ? r.eq(n).find(a) : r.eq(n)), e.transitionEnd(() => { if (s) return; if (!t || t.destroyed) return; (s = !0), (t.animating = !1); const e = ["webkitTransitionEnd", "transitionend"]; for (let t = 0; t < e.length; t += 1) l.trigger(e[t]); }); } } function ie(e, t, s) { const a = "swiper-slide-shadow" + (s ? `-${s}` : ""), i = e.transformEl ? t.find(e.transformEl) : t; let r = i.children(`.${a}`); return ( r.length || ((r = d(`
`)), i.append(r)), r ); } Object.keys(j).forEach((e) => { Object.keys(j[e]).forEach((t) => { V.prototype[t] = j[e][t]; }); }), V.use([ function (e) { let { swiper: t, on: s, emit: a } = e; const i = r(); let n = null, l = null; const o = () => { t && !t.destroyed && t.initialized && (a("beforeResize"), a("resize")); }, d = () => { t && !t.destroyed && t.initialized && a("orientationchange"); }; s("init", () => { t.params.resizeObserver && void 0 !== i.ResizeObserver ? t && !t.destroyed && t.initialized && ((n = new ResizeObserver((e) => { l = i.requestAnimationFrame(() => { const { width: s, height: a } = t; let i = s, r = a; e.forEach((e) => { let { contentBoxSize: s, contentRect: a, target: n } = e; (n && n !== t.el) || ((i = a ? a.width : (s[0] || s).inlineSize), (r = a ? a.height : (s[0] || s).blockSize)); }), (i === s && r === a) || o(); }); })), n.observe(t.el)) : (i.addEventListener("resize", o), i.addEventListener("orientationchange", d)); }), s("destroy", () => { l && i.cancelAnimationFrame(l), n && n.unobserve && t.el && (n.unobserve(t.el), (n = null)), i.removeEventListener("resize", o), i.removeEventListener("orientationchange", d); }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = [], l = r(), o = function (e, t) { void 0 === t && (t = {}); const s = new (l.MutationObserver || l.WebkitMutationObserver)( (e) => { if (1 === e.length) return void i("observerUpdate", e[0]); const t = function () { i("observerUpdate", e[0]); }; l.requestAnimationFrame ? l.requestAnimationFrame(t) : l.setTimeout(t, 0); } ); s.observe(e, { attributes: void 0 === t.attributes || t.attributes, childList: void 0 === t.childList || t.childList, characterData: void 0 === t.characterData || t.characterData, }), n.push(s); }; s({ observer: !1, observeParents: !1, observeSlideChildren: !1 }), a("init", () => { if (t.params.observer) { if (t.params.observeParents) { const e = t.$el.parents(); for (let t = 0; t < e.length; t += 1) o(e[t]); } o(t.$el[0], { childList: t.params.observeSlideChildren }), o(t.$wrapperEl[0], { attributes: !1 }); } }), a("destroy", () => { n.forEach((e) => { e.disconnect(); }), n.splice(0, n.length); }); }, ]); const re = [ function (e) { let t, { swiper: s, extendParams: a, on: i, emit: r } = e; function n(e, t) { const a = s.params.virtual; if (a.cache && s.virtual.cache[t]) return s.virtual.cache[t]; const i = a.renderSlide ? d(a.renderSlide.call(s, e, t)) : d( `
${e}
` ); return ( i.attr("data-swiper-slide-index") || i.attr("data-swiper-slide-index", t), a.cache && (s.virtual.cache[t] = i), i ); } function l(e) { const { slidesPerView: t, slidesPerGroup: a, centeredSlides: i, } = s.params, { addSlidesBefore: l, addSlidesAfter: o } = s.params.virtual, { from: d, to: c, slides: p, slidesGrid: u, offset: h } = s.virtual; s.params.cssMode || s.updateActiveIndex(); const m = s.activeIndex || 0; let f, g, v; (f = s.rtlTranslate ? "right" : s.isHorizontal() ? "left" : "top"), i ? ((g = Math.floor(t / 2) + a + o), (v = Math.floor(t / 2) + a + l)) : ((g = t + (a - 1) + o), (v = a + l)); const w = Math.max((m || 0) - v, 0), b = Math.min((m || 0) + g, p.length - 1), x = (s.slidesGrid[w] || 0) - (s.slidesGrid[0] || 0); function y() { s.updateSlides(), s.updateProgress(), s.updateSlidesClasses(), s.lazy && s.params.lazy.enabled && s.lazy.load(), r("virtualUpdate"); } if ( (Object.assign(s.virtual, { from: w, to: b, offset: x, slidesGrid: s.slidesGrid, }), d === w && c === b && !e) ) return ( s.slidesGrid !== u && x !== h && s.slides.css(f, `${x}px`), s.updateProgress(), void r("virtualUpdate") ); if (s.params.virtual.renderExternal) return ( s.params.virtual.renderExternal.call(s, { offset: x, from: w, to: b, slides: (function () { const e = []; for (let t = w; t <= b; t += 1) e.push(p[t]); return e; })(), }), void (s.params.virtual.renderExternalUpdate ? y() : r("virtualUpdate")) ); const E = [], C = []; if (e) s.$wrapperEl.find(`.${s.params.slideClass}`).remove(); else for (let e = d; e <= c; e += 1) (e < w || e > b) && s.$wrapperEl .find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`) .remove(); for (let t = 0; t < p.length; t += 1) t >= w && t <= b && (void 0 === c || e ? C.push(t) : (t > c && C.push(t), t < d && E.push(t))); C.forEach((e) => { s.$wrapperEl.append(n(p[e], e)); }), E.sort((e, t) => t - e).forEach((e) => { s.$wrapperEl.prepend(n(p[e], e)); }), s.$wrapperEl.children(".swiper-slide").css(f, `${x}px`), y(); } a({ virtual: { enabled: !1, slides: [], cache: !0, renderSlide: null, renderExternal: null, renderExternalUpdate: !0, addSlidesBefore: 0, addSlidesAfter: 0, }, }), (s.virtual = { cache: {}, from: void 0, to: void 0, slides: [], offset: 0, slidesGrid: [], }), i("beforeInit", () => { s.params.virtual.enabled && ((s.virtual.slides = s.params.virtual.slides), s.classNames.push(`${s.params.containerModifierClass}virtual`), (s.params.watchSlidesProgress = !0), (s.originalParams.watchSlidesProgress = !0), s.params.initialSlide || l()); }), i("setTranslate", () => { s.params.virtual.enabled && (s.params.cssMode && !s._immediateVirtual ? (clearTimeout(t), (t = setTimeout(() => { l(); }, 100))) : l()); }), i("init update resize", () => { s.params.virtual.enabled && s.params.cssMode && v(s.wrapperEl, "--swiper-virtual-size", `${s.virtualSize}px`); }), Object.assign(s.virtual, { appendSlide: function (e) { if ("object" == typeof e && "length" in e) for (let t = 0; t < e.length; t += 1) e[t] && s.virtual.slides.push(e[t]); else s.virtual.slides.push(e); l(!0); }, prependSlide: function (e) { const t = s.activeIndex; let a = t + 1, i = 1; if (Array.isArray(e)) { for (let t = 0; t < e.length; t += 1) e[t] && s.virtual.slides.unshift(e[t]); (a = t + e.length), (i = e.length); } else s.virtual.slides.unshift(e); if (s.params.virtual.cache) { const e = s.virtual.cache, t = {}; Object.keys(e).forEach((s) => { const a = e[s], r = a.attr("data-swiper-slide-index"); r && a.attr("data-swiper-slide-index", parseInt(r, 10) + i), (t[parseInt(s, 10) + i] = a); }), (s.virtual.cache = t); } l(!0), s.slideTo(a, 0); }, removeSlide: function (e) { if (null == e) return; let t = s.activeIndex; if (Array.isArray(e)) for (let a = e.length - 1; a >= 0; a -= 1) s.virtual.slides.splice(e[a], 1), s.params.virtual.cache && delete s.virtual.cache[e[a]], e[a] < t && (t -= 1), (t = Math.max(t, 0)); else s.virtual.slides.splice(e, 1), s.params.virtual.cache && delete s.virtual.cache[e], e < t && (t -= 1), (t = Math.max(t, 0)); l(!0), s.slideTo(t, 0); }, removeAllSlides: function () { (s.virtual.slides = []), s.params.virtual.cache && (s.virtual.cache = {}), l(!0), s.slideTo(0, 0); }, update: l, }); }, function (e) { let { swiper: t, extendParams: s, on: i, emit: n } = e; const l = a(), o = r(); function c(e) { if (!t.enabled) return; const { rtlTranslate: s } = t; let a = e; a.originalEvent && (a = a.originalEvent); const i = a.keyCode || a.charCode, r = t.params.keyboard.pageUpDown, d = r && 33 === i, c = r && 34 === i, p = 37 === i, u = 39 === i, h = 38 === i, m = 40 === i; if ( !t.allowSlideNext && ((t.isHorizontal() && u) || (t.isVertical() && m) || c) ) return !1; if ( !t.allowSlidePrev && ((t.isHorizontal() && p) || (t.isVertical() && h) || d) ) return !1; if ( !( a.shiftKey || a.altKey || a.ctrlKey || a.metaKey || (l.activeElement && l.activeElement.nodeName && ("input" === l.activeElement.nodeName.toLowerCase() || "textarea" === l.activeElement.nodeName.toLowerCase())) ) ) { if ( t.params.keyboard.onlyInViewport && (d || c || p || u || h || m) ) { let e = !1; if ( t.$el.parents(`.${t.params.slideClass}`).length > 0 && 0 === t.$el.parents(`.${t.params.slideActiveClass}`).length ) return; const a = t.$el, i = a[0].clientWidth, r = a[0].clientHeight, n = o.innerWidth, l = o.innerHeight, d = t.$el.offset(); s && (d.left -= t.$el[0].scrollLeft); const c = [ [d.left, d.top], [d.left + i, d.top], [d.left, d.top + r], [d.left + i, d.top + r], ]; for (let t = 0; t < c.length; t += 1) { const s = c[t]; if (s[0] >= 0 && s[0] <= n && s[1] >= 0 && s[1] <= l) { if (0 === s[0] && 0 === s[1]) continue; e = !0; } } if (!e) return; } t.isHorizontal() ? ((d || c || p || u) && (a.preventDefault ? a.preventDefault() : (a.returnValue = !1)), (((c || u) && !s) || ((d || p) && s)) && t.slideNext(), (((d || p) && !s) || ((c || u) && s)) && t.slidePrev()) : ((d || c || h || m) && (a.preventDefault ? a.preventDefault() : (a.returnValue = !1)), (c || m) && t.slideNext(), (d || h) && t.slidePrev()), n("keyPress", i); } } function p() { t.keyboard.enabled || (d(l).on("keydown", c), (t.keyboard.enabled = !0)); } function u() { t.keyboard.enabled && (d(l).off("keydown", c), (t.keyboard.enabled = !1)); } (t.keyboard = { enabled: !1 }), s({ keyboard: { enabled: !1, onlyInViewport: !0, pageUpDown: !0 } }), i("init", () => { t.params.keyboard.enabled && p(); }), i("destroy", () => { t.keyboard.enabled && u(); }), Object.assign(t.keyboard, { enable: p, disable: u }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = r(); let l; s({ mousewheel: { enabled: !1, releaseOnEdges: !1, invert: !1, forceToAxis: !1, sensitivity: 1, eventsTarget: "container", thresholdDelta: null, thresholdTime: null, }, }), (t.mousewheel = { enabled: !1 }); let o, c = u(); const h = []; function m() { t.enabled && (t.mouseEntered = !0); } function f() { t.enabled && (t.mouseEntered = !1); } function g(e) { return ( !( t.params.mousewheel.thresholdDelta && e.delta < t.params.mousewheel.thresholdDelta ) && !( t.params.mousewheel.thresholdTime && u() - c < t.params.mousewheel.thresholdTime ) && ((e.delta >= 6 && u() - c < 60) || (e.direction < 0 ? (t.isEnd && !t.params.loop) || t.animating || (t.slideNext(), i("scroll", e.raw)) : (t.isBeginning && !t.params.loop) || t.animating || (t.slidePrev(), i("scroll", e.raw)), (c = new n.Date().getTime()), !1)) ); } function v(e) { let s = e, a = !0; if (!t.enabled) return; const r = t.params.mousewheel; t.params.cssMode && s.preventDefault(); let n = t.$el; if ( ("container" !== t.params.mousewheel.eventsTarget && (n = d(t.params.mousewheel.eventsTarget)), !t.mouseEntered && !n[0].contains(s.target) && !r.releaseOnEdges) ) return !0; s.originalEvent && (s = s.originalEvent); let c = 0; const m = t.rtlTranslate ? -1 : 1, f = (function (e) { let t = 0, s = 0, a = 0, i = 0; return ( "detail" in e && (s = e.detail), "wheelDelta" in e && (s = -e.wheelDelta / 120), "wheelDeltaY" in e && (s = -e.wheelDeltaY / 120), "wheelDeltaX" in e && (t = -e.wheelDeltaX / 120), "axis" in e && e.axis === e.HORIZONTAL_AXIS && ((t = s), (s = 0)), (a = 10 * t), (i = 10 * s), "deltaY" in e && (i = e.deltaY), "deltaX" in e && (a = e.deltaX), e.shiftKey && !a && ((a = i), (i = 0)), (a || i) && e.deltaMode && (1 === e.deltaMode ? ((a *= 40), (i *= 40)) : ((a *= 800), (i *= 800))), a && !t && (t = a < 1 ? -1 : 1), i && !s && (s = i < 1 ? -1 : 1), { spinX: t, spinY: s, pixelX: a, pixelY: i } ); })(s); if (r.forceToAxis) if (t.isHorizontal()) { if (!(Math.abs(f.pixelX) > Math.abs(f.pixelY))) return !0; c = -f.pixelX * m; } else { if (!(Math.abs(f.pixelY) > Math.abs(f.pixelX))) return !0; c = -f.pixelY; } else c = Math.abs(f.pixelX) > Math.abs(f.pixelY) ? -f.pixelX * m : -f.pixelY; if (0 === c) return !0; r.invert && (c = -c); let v = t.getTranslate() + c * r.sensitivity; if ( (v >= t.minTranslate() && (v = t.minTranslate()), v <= t.maxTranslate() && (v = t.maxTranslate()), (a = !!t.params.loop || !(v === t.minTranslate() || v === t.maxTranslate())), a && t.params.nested && s.stopPropagation(), t.params.freeMode && t.params.freeMode.enabled) ) { const e = { time: u(), delta: Math.abs(c), direction: Math.sign(c) }, a = o && e.time < o.time + 500 && e.delta <= o.delta && e.direction === o.direction; if (!a) { (o = void 0), t.params.loop && t.loopFix(); let n = t.getTranslate() + c * r.sensitivity; const d = t.isBeginning, u = t.isEnd; if ( (n >= t.minTranslate() && (n = t.minTranslate()), n <= t.maxTranslate() && (n = t.maxTranslate()), t.setTransition(0), t.setTranslate(n), t.updateProgress(), t.updateActiveIndex(), t.updateSlidesClasses(), ((!d && t.isBeginning) || (!u && t.isEnd)) && t.updateSlidesClasses(), t.params.freeMode.sticky) ) { clearTimeout(l), (l = void 0), h.length >= 15 && h.shift(); const s = h.length ? h[h.length - 1] : void 0, a = h[0]; if ( (h.push(e), s && (e.delta > s.delta || e.direction !== s.direction)) ) h.splice(0); else if ( h.length >= 15 && e.time - a.time < 500 && a.delta - e.delta >= 1 && e.delta <= 6 ) { const s = c > 0 ? 0.8 : 0.2; (o = e), h.splice(0), (l = p(() => { t.slideToClosest(t.params.speed, !0, void 0, s); }, 0)); } l || (l = p(() => { (o = e), h.splice(0), t.slideToClosest(t.params.speed, !0, void 0, 0.5); }, 500)); } if ( (a || i("scroll", s), t.params.autoplay && t.params.autoplayDisableOnInteraction && t.autoplay.stop(), n === t.minTranslate() || n === t.maxTranslate()) ) return !0; } } else { const s = { time: u(), delta: Math.abs(c), direction: Math.sign(c), raw: e, }; h.length >= 2 && h.shift(); const a = h.length ? h[h.length - 1] : void 0; if ( (h.push(s), a ? (s.direction !== a.direction || s.delta > a.delta || s.time > a.time + 150) && g(s) : g(s), (function (e) { const s = t.params.mousewheel; if (e.direction < 0) { if (t.isEnd && !t.params.loop && s.releaseOnEdges) return !0; } else if (t.isBeginning && !t.params.loop && s.releaseOnEdges) return !0; return !1; })(s)) ) return !0; } return s.preventDefault ? s.preventDefault() : (s.returnValue = !1), !1; } function w(e) { let s = t.$el; "container" !== t.params.mousewheel.eventsTarget && (s = d(t.params.mousewheel.eventsTarget)), s[e]("mouseenter", m), s[e]("mouseleave", f), s[e]("wheel", v); } function b() { return t.params.cssMode ? (t.wrapperEl.removeEventListener("wheel", v), !0) : !t.mousewheel.enabled && (w("on"), (t.mousewheel.enabled = !0), !0); } function x() { return t.params.cssMode ? (t.wrapperEl.addEventListener(event, v), !0) : !!t.mousewheel.enabled && (w("off"), (t.mousewheel.enabled = !1), !0); } a("init", () => { !t.params.mousewheel.enabled && t.params.cssMode && x(), t.params.mousewheel.enabled && b(); }), a("destroy", () => { t.params.cssMode && b(), t.mousewheel.enabled && x(); }), Object.assign(t.mousewheel, { enable: b, disable: x }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; function r(e) { let s; return ( e && ((s = d(e)), t.params.uniqueNavElements && "string" == typeof e && s.length > 1 && 1 === t.$el.find(e).length && (s = t.$el.find(e))), s ); } function n(e, s) { const a = t.params.navigation; e && e.length > 0 && (e[s ? "addClass" : "removeClass"](a.disabledClass), e[0] && "BUTTON" === e[0].tagName && (e[0].disabled = s), t.params.watchOverflow && t.enabled && e[t.isLocked ? "addClass" : "removeClass"](a.lockClass)); } function l() { if (t.params.loop) return; const { $nextEl: e, $prevEl: s } = t.navigation; n(s, t.isBeginning && !t.params.rewind), n(e, t.isEnd && !t.params.rewind); } function o(e) { e.preventDefault(), (!t.isBeginning || t.params.loop || t.params.rewind) && (t.slidePrev(), i("navigationPrev")); } function c(e) { e.preventDefault(), (!t.isEnd || t.params.loop || t.params.rewind) && (t.slideNext(), i("navigationNext")); } function p() { const e = t.params.navigation; if ( ((t.params.navigation = F( t, t.originalParams.navigation, t.params.navigation, { nextEl: "swiper-button-next", prevEl: "swiper-button-prev" } )), !e.nextEl && !e.prevEl) ) return; const s = r(e.nextEl), a = r(e.prevEl); s && s.length > 0 && s.on("click", c), a && a.length > 0 && a.on("click", o), Object.assign(t.navigation, { $nextEl: s, nextEl: s && s[0], $prevEl: a, prevEl: a && a[0], }), t.enabled || (s && s.addClass(e.lockClass), a && a.addClass(e.lockClass)); } function u() { const { $nextEl: e, $prevEl: s } = t.navigation; e && e.length && (e.off("click", c), e.removeClass(t.params.navigation.disabledClass)), s && s.length && (s.off("click", o), s.removeClass(t.params.navigation.disabledClass)); } s({ navigation: { nextEl: null, prevEl: null, hideOnClick: !1, disabledClass: "swiper-button-disabled", hiddenClass: "swiper-button-hidden", lockClass: "swiper-button-lock", navigationDisabledClass: "swiper-navigation-disabled", }, }), (t.navigation = { nextEl: null, $nextEl: null, prevEl: null, $prevEl: null, }), a("init", () => { !1 === t.params.navigation.enabled ? h() : (p(), l()); }), a("toEdge fromEdge lock unlock", () => { l(); }), a("destroy", () => { u(); }), a("enable disable", () => { const { $nextEl: e, $prevEl: s } = t.navigation; e && e[t.enabled ? "removeClass" : "addClass"]( t.params.navigation.lockClass ), s && s[t.enabled ? "removeClass" : "addClass"]( t.params.navigation.lockClass ); }), a("click", (e, s) => { const { $nextEl: a, $prevEl: r } = t.navigation, n = s.target; if (t.params.navigation.hideOnClick && !d(n).is(r) && !d(n).is(a)) { if ( t.pagination && t.params.pagination && t.params.pagination.clickable && (t.pagination.el === n || t.pagination.el.contains(n)) ) return; let e; a ? (e = a.hasClass(t.params.navigation.hiddenClass)) : r && (e = r.hasClass(t.params.navigation.hiddenClass)), i(!0 === e ? "navigationShow" : "navigationHide"), a && a.toggleClass(t.params.navigation.hiddenClass), r && r.toggleClass(t.params.navigation.hiddenClass); } }); const h = () => { t.$el.addClass(t.params.navigation.navigationDisabledClass), u(); }; Object.assign(t.navigation, { enable: () => { t.$el.removeClass(t.params.navigation.navigationDisabledClass), p(), l(); }, disable: h, update: l, init: p, destroy: u, }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const r = "swiper-pagination"; let n; s({ pagination: { el: null, bulletElement: "span", clickable: !1, hideOnClick: !1, renderBullet: null, renderProgressbar: null, renderFraction: null, renderCustom: null, progressbarOpposite: !1, type: "bullets", dynamicBullets: !1, dynamicMainBullets: 1, formatFractionCurrent: (e) => e, formatFractionTotal: (e) => e, bulletClass: `${r}-bullet`, bulletActiveClass: `${r}-bullet-active`, modifierClass: `${r}-`, currentClass: `${r}-current`, totalClass: `${r}-total`, hiddenClass: `${r}-hidden`, progressbarFillClass: `${r}-progressbar-fill`, progressbarOppositeClass: `${r}-progressbar-opposite`, clickableClass: `${r}-clickable`, lockClass: `${r}-lock`, horizontalClass: `${r}-horizontal`, verticalClass: `${r}-vertical`, paginationDisabledClass: `${r}-disabled`, }, }), (t.pagination = { el: null, $el: null, bullets: [] }); let l = 0; function o() { return ( !t.params.pagination.el || !t.pagination.el || !t.pagination.$el || 0 === t.pagination.$el.length ); } function c(e, s) { const { bulletActiveClass: a } = t.params.pagination; e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`); } function p() { const e = t.rtl, s = t.params.pagination; if (o()) return; const a = t.virtual && t.params.virtual.enabled ? t.virtual.slides.length : t.slides.length, r = t.pagination.$el; let p; const u = t.params.loop ? Math.ceil((a - 2 * t.loopedSlides) / t.params.slidesPerGroup) : t.snapGrid.length; if ( (t.params.loop ? ((p = Math.ceil( (t.activeIndex - t.loopedSlides) / t.params.slidesPerGroup )), p > a - 1 - 2 * t.loopedSlides && (p -= a - 2 * t.loopedSlides), p > u - 1 && (p -= u), p < 0 && "bullets" !== t.params.paginationType && (p = u + p)) : (p = void 0 !== t.snapIndex ? t.snapIndex : t.activeIndex || 0), "bullets" === s.type && t.pagination.bullets && t.pagination.bullets.length > 0) ) { const a = t.pagination.bullets; let i, o, u; if ( (s.dynamicBullets && ((n = a .eq(0) [t.isHorizontal() ? "outerWidth" : "outerHeight"](!0)), r.css( t.isHorizontal() ? "width" : "height", n * (s.dynamicMainBullets + 4) + "px" ), s.dynamicMainBullets > 1 && void 0 !== t.previousIndex && ((l += p - (t.previousIndex - t.loopedSlides || 0)), l > s.dynamicMainBullets - 1 ? (l = s.dynamicMainBullets - 1) : l < 0 && (l = 0)), (i = Math.max(p - l, 0)), (o = i + (Math.min(a.length, s.dynamicMainBullets) - 1)), (u = (o + i) / 2)), a.removeClass( ["", "-next", "-next-next", "-prev", "-prev-prev", "-main"] .map((e) => `${s.bulletActiveClass}${e}`) .join(" ") ), r.length > 1) ) a.each((e) => { const t = d(e), a = t.index(); a === p && t.addClass(s.bulletActiveClass), s.dynamicBullets && (a >= i && a <= o && t.addClass(`${s.bulletActiveClass}-main`), a === i && c(t, "prev"), a === o && c(t, "next")); }); else { const e = a.eq(p), r = e.index(); if ((e.addClass(s.bulletActiveClass), s.dynamicBullets)) { const e = a.eq(i), n = a.eq(o); for (let e = i; e <= o; e += 1) a.eq(e).addClass(`${s.bulletActiveClass}-main`); if (t.params.loop) if (r >= a.length) { for (let e = s.dynamicMainBullets; e >= 0; e -= 1) a.eq(a.length - e).addClass(`${s.bulletActiveClass}-main`); a.eq(a.length - s.dynamicMainBullets - 1).addClass( `${s.bulletActiveClass}-prev` ); } else c(e, "prev"), c(n, "next"); else c(e, "prev"), c(n, "next"); } } if (s.dynamicBullets) { const i = Math.min(a.length, s.dynamicMainBullets + 4), r = (n * i - n) / 2 - u * n, l = e ? "right" : "left"; a.css(t.isHorizontal() ? l : "top", `${r}px`); } } if ( ("fraction" === s.type && (r.find(U(s.currentClass)).text(s.formatFractionCurrent(p + 1)), r.find(U(s.totalClass)).text(s.formatFractionTotal(u))), "progressbar" === s.type) ) { let e; e = s.progressbarOpposite ? t.isHorizontal() ? "vertical" : "horizontal" : t.isHorizontal() ? "horizontal" : "vertical"; const a = (p + 1) / u; let i = 1, n = 1; "horizontal" === e ? (i = a) : (n = a), r .find(U(s.progressbarFillClass)) .transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`) .transition(t.params.speed); } "custom" === s.type && s.renderCustom ? (r.html(s.renderCustom(t, p + 1, u)), i("paginationRender", r[0])) : i("paginationUpdate", r[0]), t.params.watchOverflow && t.enabled && r[t.isLocked ? "addClass" : "removeClass"](s.lockClass); } function u() { const e = t.params.pagination; if (o()) return; const s = t.virtual && t.params.virtual.enabled ? t.virtual.slides.length : t.slides.length, a = t.pagination.$el; let r = ""; if ("bullets" === e.type) { let i = t.params.loop ? Math.ceil((s - 2 * t.loopedSlides) / t.params.slidesPerGroup) : t.snapGrid.length; t.params.freeMode && t.params.freeMode.enabled && !t.params.loop && i > s && (i = s); for (let s = 0; s < i; s += 1) e.renderBullet ? (r += e.renderBullet.call(t, s, e.bulletClass)) : (r += `<${e.bulletElement} class="${e.bulletClass}">`); a.html(r), (t.pagination.bullets = a.find(U(e.bulletClass))); } "fraction" === e.type && ((r = e.renderFraction ? e.renderFraction.call(t, e.currentClass, e.totalClass) : ` / `), a.html(r)), "progressbar" === e.type && ((r = e.renderProgressbar ? e.renderProgressbar.call(t, e.progressbarFillClass) : ``), a.html(r)), "custom" !== e.type && i("paginationRender", t.pagination.$el[0]); } function h() { t.params.pagination = F( t, t.originalParams.pagination, t.params.pagination, { el: "swiper-pagination" } ); const e = t.params.pagination; if (!e.el) return; let s = d(e.el); 0 !== s.length && (t.params.uniqueNavElements && "string" == typeof e.el && s.length > 1 && ((s = t.$el.find(e.el)), s.length > 1 && (s = s.filter((e) => d(e).parents(".swiper")[0] === t.el))), "bullets" === e.type && e.clickable && s.addClass(e.clickableClass), s.addClass(e.modifierClass + e.type), s.addClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), "bullets" === e.type && e.dynamicBullets && (s.addClass(`${e.modifierClass}${e.type}-dynamic`), (l = 0), e.dynamicMainBullets < 1 && (e.dynamicMainBullets = 1)), "progressbar" === e.type && e.progressbarOpposite && s.addClass(e.progressbarOppositeClass), e.clickable && s.on("click", U(e.bulletClass), function (e) { e.preventDefault(); let s = d(this).index() * t.params.slidesPerGroup; t.params.loop && (s += t.loopedSlides), t.slideTo(s); }), Object.assign(t.pagination, { $el: s, el: s[0] }), t.enabled || s.addClass(e.lockClass)); } function m() { const e = t.params.pagination; if (o()) return; const s = t.pagination.$el; s.removeClass(e.hiddenClass), s.removeClass(e.modifierClass + e.type), s.removeClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), t.pagination.bullets && t.pagination.bullets.removeClass && t.pagination.bullets.removeClass(e.bulletActiveClass), e.clickable && s.off("click", U(e.bulletClass)); } a("init", () => { !1 === t.params.pagination.enabled ? f() : (h(), u(), p()); }), a("activeIndexChange", () => { (t.params.loop || void 0 === t.snapIndex) && p(); }), a("snapIndexChange", () => { t.params.loop || p(); }), a("slidesLengthChange", () => { t.params.loop && (u(), p()); }), a("snapGridLengthChange", () => { t.params.loop || (u(), p()); }), a("destroy", () => { m(); }), a("enable disable", () => { const { $el: e } = t.pagination; e && e[t.enabled ? "removeClass" : "addClass"]( t.params.pagination.lockClass ); }), a("lock unlock", () => { p(); }), a("click", (e, s) => { const a = s.target, { $el: r } = t.pagination; if ( t.params.pagination.el && t.params.pagination.hideOnClick && r && r.length > 0 && !d(a).hasClass(t.params.pagination.bulletClass) ) { if ( t.navigation && ((t.navigation.nextEl && a === t.navigation.nextEl) || (t.navigation.prevEl && a === t.navigation.prevEl)) ) return; const e = r.hasClass(t.params.pagination.hiddenClass); i(!0 === e ? "paginationShow" : "paginationHide"), r.toggleClass(t.params.pagination.hiddenClass); } }); const f = () => { t.$el.addClass(t.params.pagination.paginationDisabledClass), t.pagination.$el && t.pagination.$el.addClass( t.params.pagination.paginationDisabledClass ), m(); }; Object.assign(t.pagination, { enable: () => { t.$el.removeClass(t.params.pagination.paginationDisabledClass), t.pagination.$el && t.pagination.$el.removeClass( t.params.pagination.paginationDisabledClass ), h(), u(), p(); }, disable: f, render: u, update: p, init: h, destroy: m, }); }, function (e) { let { swiper: t, extendParams: s, on: i, emit: r } = e; const n = a(); let l, o, c, u, h = !1, m = null, f = null; function g() { if (!t.params.scrollbar.el || !t.scrollbar.el) return; const { scrollbar: e, rtlTranslate: s, progress: a } = t, { $dragEl: i, $el: r } = e, n = t.params.scrollbar; let l = o, d = (c - o) * a; s ? ((d = -d), d > 0 ? ((l = o - d), (d = 0)) : -d + o > c && (l = c + d)) : d < 0 ? ((l = o + d), (d = 0)) : d + o > c && (l = c - d), t.isHorizontal() ? (i.transform(`translate3d(${d}px, 0, 0)`), (i[0].style.width = `${l}px`)) : (i.transform(`translate3d(0px, ${d}px, 0)`), (i[0].style.height = `${l}px`)), n.hide && (clearTimeout(m), (r[0].style.opacity = 1), (m = setTimeout(() => { (r[0].style.opacity = 0), r.transition(400); }, 1e3))); } function v() { if (!t.params.scrollbar.el || !t.scrollbar.el) return; const { scrollbar: e } = t, { $dragEl: s, $el: a } = e; (s[0].style.width = ""), (s[0].style.height = ""), (c = t.isHorizontal() ? a[0].offsetWidth : a[0].offsetHeight), (u = t.size / (t.virtualSize + t.params.slidesOffsetBefore - (t.params.centeredSlides ? t.snapGrid[0] : 0))), (o = "auto" === t.params.scrollbar.dragSize ? c * u : parseInt(t.params.scrollbar.dragSize, 10)), t.isHorizontal() ? (s[0].style.width = `${o}px`) : (s[0].style.height = `${o}px`), (a[0].style.display = u >= 1 ? "none" : ""), t.params.scrollbar.hide && (a[0].style.opacity = 0), t.params.watchOverflow && t.enabled && e.$el[t.isLocked ? "addClass" : "removeClass"]( t.params.scrollbar.lockClass ); } function w(e) { return t.isHorizontal() ? "touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0].clientX : e.clientX : "touchstart" === e.type || "touchmove" === e.type ? e.targetTouches[0].clientY : e.clientY; } function b(e) { const { scrollbar: s, rtlTranslate: a } = t, { $el: i } = s; let r; (r = (w(e) - i.offset()[t.isHorizontal() ? "left" : "top"] - (null !== l ? l : o / 2)) / (c - o)), (r = Math.max(Math.min(r, 1), 0)), a && (r = 1 - r); const n = t.minTranslate() + (t.maxTranslate() - t.minTranslate()) * r; t.updateProgress(n), t.setTranslate(n), t.updateActiveIndex(), t.updateSlidesClasses(); } function x(e) { const s = t.params.scrollbar, { scrollbar: a, $wrapperEl: i } = t, { $el: n, $dragEl: o } = a; (h = !0), (l = e.target === o[0] || e.target === o ? w(e) - e.target.getBoundingClientRect()[ t.isHorizontal() ? "left" : "top" ] : null), e.preventDefault(), e.stopPropagation(), i.transition(100), o.transition(100), b(e), clearTimeout(f), n.transition(0), s.hide && n.css("opacity", 1), t.params.cssMode && t.$wrapperEl.css("scroll-snap-type", "none"), r("scrollbarDragStart", e); } function y(e) { const { scrollbar: s, $wrapperEl: a } = t, { $el: i, $dragEl: n } = s; h && (e.preventDefault ? e.preventDefault() : (e.returnValue = !1), b(e), a.transition(0), i.transition(0), n.transition(0), r("scrollbarDragMove", e)); } function E(e) { const s = t.params.scrollbar, { scrollbar: a, $wrapperEl: i } = t, { $el: n } = a; h && ((h = !1), t.params.cssMode && (t.$wrapperEl.css("scroll-snap-type", ""), i.transition("")), s.hide && (clearTimeout(f), (f = p(() => { n.css("opacity", 0), n.transition(400); }, 1e3))), r("scrollbarDragEnd", e), s.snapOnRelease && t.slideToClosest()); } function C(e) { const { scrollbar: s, touchEventsTouch: a, touchEventsDesktop: i, params: r, support: l, } = t, o = s.$el; if (!o) return; const d = o[0], c = !(!l.passiveListener || !r.passiveListeners) && { passive: !1, capture: !1, }, p = !(!l.passiveListener || !r.passiveListeners) && { passive: !0, capture: !1, }; if (!d) return; const u = "on" === e ? "addEventListener" : "removeEventListener"; l.touch ? (d[u](a.start, x, c), d[u](a.move, y, c), d[u](a.end, E, p)) : (d[u](i.start, x, c), n[u](i.move, y, c), n[u](i.end, E, p)); } function T() { const { scrollbar: e, $el: s } = t; t.params.scrollbar = F( t, t.originalParams.scrollbar, t.params.scrollbar, { el: "swiper-scrollbar" } ); const a = t.params.scrollbar; if (!a.el) return; let i = d(a.el); t.params.uniqueNavElements && "string" == typeof a.el && i.length > 1 && 1 === s.find(a.el).length && (i = s.find(a.el)), i.addClass(t.isHorizontal() ? a.horizontalClass : a.verticalClass); let r = i.find(`.${t.params.scrollbar.dragClass}`); 0 === r.length && ((r = d(`
`)), i.append(r)), Object.assign(e, { $el: i, el: i[0], $dragEl: r, dragEl: r[0] }), a.draggable && t.params.scrollbar.el && t.scrollbar.el && C("on"), i && i[t.enabled ? "removeClass" : "addClass"]( t.params.scrollbar.lockClass ); } function $() { const e = t.params.scrollbar, s = t.scrollbar.$el; s && s.removeClass(t.isHorizontal() ? e.horizontalClass : e.verticalClass), t.params.scrollbar.el && t.scrollbar.el && C("off"); } s({ scrollbar: { el: null, dragSize: "auto", hide: !1, draggable: !1, snapOnRelease: !0, lockClass: "swiper-scrollbar-lock", dragClass: "swiper-scrollbar-drag", scrollbarDisabledClass: "swiper-scrollbar-disabled", horizontalClass: "swiper-scrollbar-horizontal", verticalClass: "swiper-scrollbar-vertical", }, }), (t.scrollbar = { el: null, dragEl: null, $el: null, $dragEl: null }), i("init", () => { !1 === t.params.scrollbar.enabled ? S() : (T(), v(), g()); }), i("update resize observerUpdate lock unlock", () => { v(); }), i("setTranslate", () => { g(); }), i("setTransition", (e, s) => { !(function (e) { t.params.scrollbar.el && t.scrollbar.el && t.scrollbar.$dragEl.transition(e); })(s); }), i("enable disable", () => { const { $el: e } = t.scrollbar; e && e[t.enabled ? "removeClass" : "addClass"]( t.params.scrollbar.lockClass ); }), i("destroy", () => { $(); }); const S = () => { t.$el.addClass(t.params.scrollbar.scrollbarDisabledClass), t.scrollbar.$el && t.scrollbar.$el.addClass(t.params.scrollbar.scrollbarDisabledClass), $(); }; Object.assign(t.scrollbar, { enable: () => { t.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass), t.scrollbar.$el && t.scrollbar.$el.removeClass( t.params.scrollbar.scrollbarDisabledClass ), T(), v(), g(); }, disable: S, updateSize: v, setTranslate: g, init: T, destroy: $, }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ parallax: { enabled: !1 } }); const i = (e, s) => { const { rtl: a } = t, i = d(e), r = a ? -1 : 1, n = i.attr("data-swiper-parallax") || "0"; let l = i.attr("data-swiper-parallax-x"), o = i.attr("data-swiper-parallax-y"); const c = i.attr("data-swiper-parallax-scale"), p = i.attr("data-swiper-parallax-opacity"); if ( (l || o ? ((l = l || "0"), (o = o || "0")) : t.isHorizontal() ? ((l = n), (o = "0")) : ((o = n), (l = "0")), (l = l.indexOf("%") >= 0 ? parseInt(l, 10) * s * r + "%" : l * s * r + "px"), (o = o.indexOf("%") >= 0 ? parseInt(o, 10) * s + "%" : o * s + "px"), null != p) ) { const e = p - (p - 1) * (1 - Math.abs(s)); i[0].style.opacity = e; } if (null == c) i.transform(`translate3d(${l}, ${o}, 0px)`); else { const e = c - (c - 1) * (1 - Math.abs(s)); i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`); } }, r = () => { const { $el: e, slides: s, progress: a, snapGrid: r } = t; e .children( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ) .each((e) => { i(e, a); }), s.each((e, s) => { let n = e.progress; t.params.slidesPerGroup > 1 && "auto" !== t.params.slidesPerView && (n += Math.ceil(s / 2) - a * (r.length - 1)), (n = Math.min(Math.max(n, -1), 1)), d(e) .find( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ) .each((e) => { i(e, n); }); }); }; a("beforeInit", () => { t.params.parallax.enabled && ((t.params.watchSlidesProgress = !0), (t.originalParams.watchSlidesProgress = !0)); }), a("init", () => { t.params.parallax.enabled && r(); }), a("setTranslate", () => { t.params.parallax.enabled && r(); }), a("setTransition", (e, s) => { t.params.parallax.enabled && (function (e) { void 0 === e && (e = t.params.speed); const { $el: s } = t; s.find( "[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]" ).each((t) => { const s = d(t); let a = parseInt(s.attr("data-swiper-parallax-duration"), 10) || e; 0 === e && (a = 0), s.transition(a); }); })(s); }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; const n = r(); s({ zoom: { enabled: !1, maxRatio: 3, minRatio: 1, toggle: !0, containerClass: "swiper-zoom-container", zoomedSlideClass: "swiper-slide-zoomed", }, }), (t.zoom = { enabled: !1 }); let l, o, c, p = 1, u = !1; const m = { $slideEl: void 0, slideWidth: void 0, slideHeight: void 0, $imageEl: void 0, $imageWrapEl: void 0, maxRatio: 3, }, f = { isTouched: void 0, isMoved: void 0, currentX: void 0, currentY: void 0, minX: void 0, minY: void 0, maxX: void 0, maxY: void 0, width: void 0, height: void 0, startX: void 0, startY: void 0, touchesStart: {}, touchesCurrent: {}, }, g = { x: void 0, y: void 0, prevPositionX: void 0, prevPositionY: void 0, prevTime: void 0, }; let v = 1; function w(e) { if (e.targetTouches.length < 2) return 1; const t = e.targetTouches[0].pageX, s = e.targetTouches[0].pageY, a = e.targetTouches[1].pageX, i = e.targetTouches[1].pageY; return Math.sqrt((a - t) ** 2 + (i - s) ** 2); } function b(e) { const s = t.support, a = t.params.zoom; if (((o = !1), (c = !1), !s.gestures)) { if ( "touchstart" !== e.type || ("touchstart" === e.type && e.targetTouches.length < 2) ) return; (o = !0), (m.scaleStart = w(e)); } (m.$slideEl && m.$slideEl.length) || ((m.$slideEl = d(e.target).closest(`.${t.params.slideClass}`)), 0 === m.$slideEl.length && (m.$slideEl = t.slides.eq(t.activeIndex)), (m.$imageEl = m.$slideEl .find(`.${a.containerClass}`) .eq(0) .find("picture, img, svg, canvas, .swiper-zoom-target") .eq(0)), (m.$imageWrapEl = m.$imageEl.parent(`.${a.containerClass}`)), (m.maxRatio = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio), 0 !== m.$imageWrapEl.length) ? (m.$imageEl && m.$imageEl.transition(0), (u = !0)) : (m.$imageEl = void 0); } function x(e) { const s = t.support, a = t.params.zoom, i = t.zoom; if (!s.gestures) { if ( "touchmove" !== e.type || ("touchmove" === e.type && e.targetTouches.length < 2) ) return; (c = !0), (m.scaleMove = w(e)); } m.$imageEl && 0 !== m.$imageEl.length ? (s.gestures ? (i.scale = e.scale * p) : (i.scale = (m.scaleMove / m.scaleStart) * p), i.scale > m.maxRatio && (i.scale = m.maxRatio - 1 + (i.scale - m.maxRatio + 1) ** 0.5), i.scale < a.minRatio && (i.scale = a.minRatio + 1 - (a.minRatio - i.scale + 1) ** 0.5), m.$imageEl.transform(`translate3d(0,0,0) scale(${i.scale})`)) : "gesturechange" === e.type && b(e); } function y(e) { const s = t.device, a = t.support, i = t.params.zoom, r = t.zoom; if (!a.gestures) { if (!o || !c) return; if ( "touchend" !== e.type || ("touchend" === e.type && e.changedTouches.length < 2 && !s.android) ) return; (o = !1), (c = !1); } m.$imageEl && 0 !== m.$imageEl.length && ((r.scale = Math.max(Math.min(r.scale, m.maxRatio), i.minRatio)), m.$imageEl .transition(t.params.speed) .transform(`translate3d(0,0,0) scale(${r.scale})`), (p = r.scale), (u = !1), 1 === r.scale && (m.$slideEl = void 0)); } function E(e) { const s = t.zoom; if (!m.$imageEl || 0 === m.$imageEl.length) return; if (((t.allowClick = !1), !f.isTouched || !m.$slideEl)) return; f.isMoved || ((f.width = m.$imageEl[0].offsetWidth), (f.height = m.$imageEl[0].offsetHeight), (f.startX = h(m.$imageWrapEl[0], "x") || 0), (f.startY = h(m.$imageWrapEl[0], "y") || 0), (m.slideWidth = m.$slideEl[0].offsetWidth), (m.slideHeight = m.$slideEl[0].offsetHeight), m.$imageWrapEl.transition(0)); const a = f.width * s.scale, i = f.height * s.scale; if (!(a < m.slideWidth && i < m.slideHeight)) { if ( ((f.minX = Math.min(m.slideWidth / 2 - a / 2, 0)), (f.maxX = -f.minX), (f.minY = Math.min(m.slideHeight / 2 - i / 2, 0)), (f.maxY = -f.minY), (f.touchesCurrent.x = "touchmove" === e.type ? e.targetTouches[0].pageX : e.pageX), (f.touchesCurrent.y = "touchmove" === e.type ? e.targetTouches[0].pageY : e.pageY), !f.isMoved && !u) ) { if ( t.isHorizontal() && ((Math.floor(f.minX) === Math.floor(f.startX) && f.touchesCurrent.x < f.touchesStart.x) || (Math.floor(f.maxX) === Math.floor(f.startX) && f.touchesCurrent.x > f.touchesStart.x)) ) return void (f.isTouched = !1); if ( !t.isHorizontal() && ((Math.floor(f.minY) === Math.floor(f.startY) && f.touchesCurrent.y < f.touchesStart.y) || (Math.floor(f.maxY) === Math.floor(f.startY) && f.touchesCurrent.y > f.touchesStart.y)) ) return void (f.isTouched = !1); } e.cancelable && e.preventDefault(), e.stopPropagation(), (f.isMoved = !0), (f.currentX = f.touchesCurrent.x - f.touchesStart.x + f.startX), (f.currentY = f.touchesCurrent.y - f.touchesStart.y + f.startY), f.currentX < f.minX && (f.currentX = f.minX + 1 - (f.minX - f.currentX + 1) ** 0.8), f.currentX > f.maxX && (f.currentX = f.maxX - 1 + (f.currentX - f.maxX + 1) ** 0.8), f.currentY < f.minY && (f.currentY = f.minY + 1 - (f.minY - f.currentY + 1) ** 0.8), f.currentY > f.maxY && (f.currentY = f.maxY - 1 + (f.currentY - f.maxY + 1) ** 0.8), g.prevPositionX || (g.prevPositionX = f.touchesCurrent.x), g.prevPositionY || (g.prevPositionY = f.touchesCurrent.y), g.prevTime || (g.prevTime = Date.now()), (g.x = (f.touchesCurrent.x - g.prevPositionX) / (Date.now() - g.prevTime) / 2), (g.y = (f.touchesCurrent.y - g.prevPositionY) / (Date.now() - g.prevTime) / 2), Math.abs(f.touchesCurrent.x - g.prevPositionX) < 2 && (g.x = 0), Math.abs(f.touchesCurrent.y - g.prevPositionY) < 2 && (g.y = 0), (g.prevPositionX = f.touchesCurrent.x), (g.prevPositionY = f.touchesCurrent.y), (g.prevTime = Date.now()), m.$imageWrapEl.transform( `translate3d(${f.currentX}px, ${f.currentY}px,0)` ); } } function C() { const e = t.zoom; m.$slideEl && t.previousIndex !== t.activeIndex && (m.$imageEl && m.$imageEl.transform("translate3d(0,0,0) scale(1)"), m.$imageWrapEl && m.$imageWrapEl.transform("translate3d(0,0,0)"), (e.scale = 1), (p = 1), (m.$slideEl = void 0), (m.$imageEl = void 0), (m.$imageWrapEl = void 0)); } function T(e) { const s = t.zoom, a = t.params.zoom; if ( (m.$slideEl || (e && e.target && (m.$slideEl = d(e.target).closest(`.${t.params.slideClass}`)), m.$slideEl || (t.params.virtual && t.params.virtual.enabled && t.virtual ? (m.$slideEl = t.$wrapperEl.children( `.${t.params.slideActiveClass}` )) : (m.$slideEl = t.slides.eq(t.activeIndex))), (m.$imageEl = m.$slideEl .find(`.${a.containerClass}`) .eq(0) .find("picture, img, svg, canvas, .swiper-zoom-target") .eq(0)), (m.$imageWrapEl = m.$imageEl.parent(`.${a.containerClass}`))), !m.$imageEl || 0 === m.$imageEl.length || !m.$imageWrapEl || 0 === m.$imageWrapEl.length) ) return; let i, r, l, o, c, u, h, g, v, w, b, x, y, E, C, T, $, S; t.params.cssMode && ((t.wrapperEl.style.overflow = "hidden"), (t.wrapperEl.style.touchAction = "none")), m.$slideEl.addClass(`${a.zoomedSlideClass}`), void 0 === f.touchesStart.x && e ? ((i = "touchend" === e.type ? e.changedTouches[0].pageX : e.pageX), (r = "touchend" === e.type ? e.changedTouches[0].pageY : e.pageY)) : ((i = f.touchesStart.x), (r = f.touchesStart.y)), (s.scale = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio), (p = m.$imageWrapEl.attr("data-swiper-zoom") || a.maxRatio), e ? (($ = m.$slideEl[0].offsetWidth), (S = m.$slideEl[0].offsetHeight), (l = m.$slideEl.offset().left + n.scrollX), (o = m.$slideEl.offset().top + n.scrollY), (c = l + $ / 2 - i), (u = o + S / 2 - r), (v = m.$imageEl[0].offsetWidth), (w = m.$imageEl[0].offsetHeight), (b = v * s.scale), (x = w * s.scale), (y = Math.min($ / 2 - b / 2, 0)), (E = Math.min(S / 2 - x / 2, 0)), (C = -y), (T = -E), (h = c * s.scale), (g = u * s.scale), h < y && (h = y), h > C && (h = C), g < E && (g = E), g > T && (g = T)) : ((h = 0), (g = 0)), m.$imageWrapEl .transition(300) .transform(`translate3d(${h}px, ${g}px,0)`), m.$imageEl .transition(300) .transform(`translate3d(0,0,0) scale(${s.scale})`); } function $() { const e = t.zoom, s = t.params.zoom; m.$slideEl || (t.params.virtual && t.params.virtual.enabled && t.virtual ? (m.$slideEl = t.$wrapperEl.children( `.${t.params.slideActiveClass}` )) : (m.$slideEl = t.slides.eq(t.activeIndex)), (m.$imageEl = m.$slideEl .find(`.${s.containerClass}`) .eq(0) .find("picture, img, svg, canvas, .swiper-zoom-target") .eq(0)), (m.$imageWrapEl = m.$imageEl.parent(`.${s.containerClass}`))), m.$imageEl && 0 !== m.$imageEl.length && m.$imageWrapEl && 0 !== m.$imageWrapEl.length && (t.params.cssMode && ((t.wrapperEl.style.overflow = ""), (t.wrapperEl.style.touchAction = "")), (e.scale = 1), (p = 1), m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"), m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"), m.$slideEl.removeClass(`${s.zoomedSlideClass}`), (m.$slideEl = void 0)); } function S(e) { const s = t.zoom; s.scale && 1 !== s.scale ? $() : T(e); } function M() { const e = t.support; return { passiveListener: !( "touchstart" !== t.touchEvents.start || !e.passiveListener || !t.params.passiveListeners ) && { passive: !0, capture: !1 }, activeListenerWithCapture: !e.passiveListener || { passive: !1, capture: !0, }, }; } function P() { return `.${t.params.slideClass}`; } function k(e) { const { passiveListener: s } = M(), a = P(); t.$wrapperEl[e]("gesturestart", a, b, s), t.$wrapperEl[e]("gesturechange", a, x, s), t.$wrapperEl[e]("gestureend", a, y, s); } function z() { l || ((l = !0), k("on")); } function L() { l && ((l = !1), k("off")); } function O() { const e = t.zoom; if (e.enabled) return; e.enabled = !0; const s = t.support, { passiveListener: a, activeListenerWithCapture: i } = M(), r = P(); s.gestures ? (t.$wrapperEl.on(t.touchEvents.start, z, a), t.$wrapperEl.on(t.touchEvents.end, L, a)) : "touchstart" === t.touchEvents.start && (t.$wrapperEl.on(t.touchEvents.start, r, b, a), t.$wrapperEl.on(t.touchEvents.move, r, x, i), t.$wrapperEl.on(t.touchEvents.end, r, y, a), t.touchEvents.cancel && t.$wrapperEl.on(t.touchEvents.cancel, r, y, a)), t.$wrapperEl.on( t.touchEvents.move, `.${t.params.zoom.containerClass}`, E, i ); } function I() { const e = t.zoom; if (!e.enabled) return; const s = t.support; e.enabled = !1; const { passiveListener: a, activeListenerWithCapture: i } = M(), r = P(); s.gestures ? (t.$wrapperEl.off(t.touchEvents.start, z, a), t.$wrapperEl.off(t.touchEvents.end, L, a)) : "touchstart" === t.touchEvents.start && (t.$wrapperEl.off(t.touchEvents.start, r, b, a), t.$wrapperEl.off(t.touchEvents.move, r, x, i), t.$wrapperEl.off(t.touchEvents.end, r, y, a), t.touchEvents.cancel && t.$wrapperEl.off(t.touchEvents.cancel, r, y, a)), t.$wrapperEl.off( t.touchEvents.move, `.${t.params.zoom.containerClass}`, E, i ); } Object.defineProperty(t.zoom, "scale", { get: () => v, set(e) { if (v !== e) { const t = m.$imageEl ? m.$imageEl[0] : void 0, s = m.$slideEl ? m.$slideEl[0] : void 0; i("zoomChange", e, t, s); } v = e; }, }), a("init", () => { t.params.zoom.enabled && O(); }), a("destroy", () => { I(); }), a("touchStart", (e, s) => { t.zoom.enabled && (function (e) { const s = t.device; m.$imageEl && 0 !== m.$imageEl.length && (f.isTouched || (s.android && e.cancelable && e.preventDefault(), (f.isTouched = !0), (f.touchesStart.x = "touchstart" === e.type ? e.targetTouches[0].pageX : e.pageX), (f.touchesStart.y = "touchstart" === e.type ? e.targetTouches[0].pageY : e.pageY))); })(s); }), a("touchEnd", (e, s) => { t.zoom.enabled && (function () { const e = t.zoom; if (!m.$imageEl || 0 === m.$imageEl.length) return; if (!f.isTouched || !f.isMoved) return (f.isTouched = !1), void (f.isMoved = !1); (f.isTouched = !1), (f.isMoved = !1); let s = 300, a = 300; const i = g.x * s, r = f.currentX + i, n = g.y * a, l = f.currentY + n; 0 !== g.x && (s = Math.abs((r - f.currentX) / g.x)), 0 !== g.y && (a = Math.abs((l - f.currentY) / g.y)); const o = Math.max(s, a); (f.currentX = r), (f.currentY = l); const d = f.width * e.scale, c = f.height * e.scale; (f.minX = Math.min(m.slideWidth / 2 - d / 2, 0)), (f.maxX = -f.minX), (f.minY = Math.min(m.slideHeight / 2 - c / 2, 0)), (f.maxY = -f.minY), (f.currentX = Math.max(Math.min(f.currentX, f.maxX), f.minX)), (f.currentY = Math.max(Math.min(f.currentY, f.maxY), f.minY)), m.$imageWrapEl .transition(o) .transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`); })(); }), a("doubleTap", (e, s) => { !t.animating && t.params.zoom.enabled && t.zoom.enabled && t.params.zoom.toggle && S(s); }), a("transitionEnd", () => { t.zoom.enabled && t.params.zoom.enabled && C(); }), a("slideChange", () => { t.zoom.enabled && t.params.zoom.enabled && t.params.cssMode && C(); }), Object.assign(t.zoom, { enable: O, disable: I, in: T, out: $, toggle: S, }); }, function (e) { let { swiper: t, extendParams: s, on: a, emit: i } = e; s({ lazy: { checkInView: !1, enabled: !1, loadPrevNext: !1, loadPrevNextAmount: 1, loadOnTransitionStart: !1, scrollingElement: "", elementClass: "swiper-lazy", loadingClass: "swiper-lazy-loading", loadedClass: "swiper-lazy-loaded", preloaderClass: "swiper-lazy-preloader", }, }), (t.lazy = {}); let n = !1, l = !1; function o(e, s) { void 0 === s && (s = !0); const a = t.params.lazy; if (void 0 === e) return; if (0 === t.slides.length) return; const r = t.virtual && t.params.virtual.enabled ? t.$wrapperEl.children( `.${t.params.slideClass}[data-swiper-slide-index="${e}"]` ) : t.slides.eq(e), n = r.find( `.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})` ); !r.hasClass(a.elementClass) || r.hasClass(a.loadedClass) || r.hasClass(a.loadingClass) || n.push(r[0]), 0 !== n.length && n.each((e) => { const n = d(e); n.addClass(a.loadingClass); const l = n.attr("data-background"), c = n.attr("data-src"), p = n.attr("data-srcset"), u = n.attr("data-sizes"), h = n.parent("picture"); t.loadImage(n[0], c || l, p, u, !1, () => { if (null != t && t && (!t || t.params) && !t.destroyed) { if ( (l ? (n.css("background-image", `url("${l}")`), n.removeAttr("data-background")) : (p && (n.attr("srcset", p), n.removeAttr("data-srcset")), u && (n.attr("sizes", u), n.removeAttr("data-sizes")), h.length && h.children("source").each((e) => { const t = d(e); t.attr("data-srcset") && (t.attr("srcset", t.attr("data-srcset")), t.removeAttr("data-srcset")); }), c && (n.attr("src", c), n.removeAttr("data-src"))), n.addClass(a.loadedClass).removeClass(a.loadingClass), r.find(`.${a.preloaderClass}`).remove(), t.params.loop && s) ) { const e = r.attr("data-swiper-slide-index"); if (r.hasClass(t.params.slideDuplicateClass)) { o( t.$wrapperEl .children( `[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})` ) .index(), !1 ); } else { o( t.$wrapperEl .children( `.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]` ) .index(), !1 ); } } i("lazyImageReady", r[0], n[0]), t.params.autoHeight && t.updateAutoHeight(); } }), i("lazyImageLoad", r[0], n[0]); }); } function c() { const { $wrapperEl: e, params: s, slides: a, activeIndex: i } = t, r = t.virtual && s.virtual.enabled, n = s.lazy; let c = s.slidesPerView; function p(t) { if (r) { if ( e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`) .length ) return !0; } else if (a[t]) return !0; return !1; } function u(e) { return r ? d(e).attr("data-swiper-slide-index") : d(e).index(); } if ( ("auto" === c && (c = 0), l || (l = !0), t.params.watchSlidesProgress) ) e.children(`.${s.slideVisibleClass}`).each((e) => { o(r ? d(e).attr("data-swiper-slide-index") : d(e).index()); }); else if (c > 1) for (let e = i; e < i + c; e += 1) p(e) && o(e); else o(i); if (n.loadPrevNext) if (c > 1 || (n.loadPrevNextAmount && n.loadPrevNextAmount > 1)) { const e = n.loadPrevNextAmount, t = Math.ceil(c), s = Math.min(i + t + Math.max(e, t), a.length), r = Math.max(i - Math.max(t, e), 0); for (let e = i + t; e < s; e += 1) p(e) && o(e); for (let e = r; e < i; e += 1) p(e) && o(e); } else { const t = e.children(`.${s.slideNextClass}`); t.length > 0 && o(u(t)); const a = e.children(`.${s.slidePrevClass}`); a.length > 0 && o(u(a)); } } function p() { const e = r(); if (!t || t.destroyed) return; const s = t.params.lazy.scrollingElement ? d(t.params.lazy.scrollingElement) : d(e), a = s[0] === e, i = a ? e.innerWidth : s[0].offsetWidth, l = a ? e.innerHeight : s[0].offsetHeight, o = t.$el.offset(), { rtlTranslate: u } = t; let h = !1; u && (o.left -= t.$el[0].scrollLeft); const m = [ [o.left, o.top], [o.left + t.width, o.top], [o.left, o.top + t.height], [o.left + t.width, o.top + t.height], ]; for (let e = 0; e < m.length; e += 1) { const t = m[e]; if (t[0] >= 0 && t[0] <= i && t[1] >= 0 && t[1] <= l) { if (0 === t[0] && 0 === t[1]) continue; h = !0; } } const f = !( "touchstart" !== t.touchEvents.start || !t.support.passiveListener || !t.params.passiveListeners ) && { passive: !0, capture: !1 }; h ? (c(), s.off("scroll", p, f)) : n || ((n = !0), s.on("scroll", p, f)); } a("beforeInit", () => { t.params.lazy.enabled && t.params.preloadImages && (t.params.preloadImages = !1); }), a("init", () => { t.params.lazy.enabled && (t.params.lazy.checkInView ? p() : c()); }), a("scroll", () => { t.params.freeMode && t.params.freeMode.enabled && !t.params.freeMode.sticky && c(); }), a("scrollbarDragMove resize _freeModeNoMomentumRelease", () => { t.params.lazy.enabled && (t.params.lazy.checkInView ? p() : c()); }), a("transitionStart", () => { t.params.lazy.enabled && (t.params.lazy.loadOnTransitionStart || (!t.params.lazy.loadOnTransitionStart && !l)) && (t.params.lazy.checkInView ? p() : c()); }), a("transitionEnd", () => { t.params.lazy.enabled && !t.params.lazy.loadOnTransitionStart && (t.params.lazy.checkInView ? p() : c()); }), a("slideChange", () => { const { lazy: e, cssMode: s, watchSlidesProgress: a, touchReleaseOnEdges: i, resistanceRatio: r, } = t.params; e.enabled && (s || (a && (i || 0 === r))) && c(); }), a("destroy", () => { t.$el && t.$el .find(`.${t.params.lazy.loadingClass}`) .removeClass(t.params.lazy.loadingClass); }), Object.assign(t.lazy, { load: c, loadInSlide: o }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; function i(e, t) { const s = (function () { let e, t, s; return (a, i) => { for (t = -1, e = a.length; e - t > 1; ) (s = (e + t) >> 1), a[s] <= i ? (t = s) : (e = s); return e; }; })(); let a, i; return ( (this.x = e), (this.y = t), (this.lastIndex = e.length - 1), (this.interpolate = function (e) { return e ? ((i = s(this.x, e)), (a = i - 1), ((e - this.x[a]) * (this.y[i] - this.y[a])) / (this.x[i] - this.x[a]) + this.y[a]) : 0; }), this ); } function r() { t.controller.control && t.controller.spline && ((t.controller.spline = void 0), delete t.controller.spline); } s({ controller: { control: void 0, inverse: !1, by: "slide" } }), (t.controller = { control: void 0 }), a("beforeInit", () => { t.controller.control = t.params.controller.control; }), a("update", () => { r(); }), a("resize", () => { r(); }), a("observerUpdate", () => { r(); }), a("setTranslate", (e, s, a) => { t.controller.control && t.controller.setTranslate(s, a); }), a("setTransition", (e, s, a) => { t.controller.control && t.controller.setTransition(s, a); }), Object.assign(t.controller, { setTranslate: function (e, s) { const a = t.controller.control; let r, n; const l = t.constructor; function o(e) { const s = t.rtlTranslate ? -t.translate : t.translate; "slide" === t.params.controller.by && (!(function (e) { t.controller.spline || (t.controller.spline = t.params.loop ? new i(t.slidesGrid, e.slidesGrid) : new i(t.snapGrid, e.snapGrid)); })(e), (n = -t.controller.spline.interpolate(-s))), (n && "container" !== t.params.controller.by) || ((r = (e.maxTranslate() - e.minTranslate()) / (t.maxTranslate() - t.minTranslate())), (n = (s - t.minTranslate()) * r + e.minTranslate())), t.params.controller.inverse && (n = e.maxTranslate() - n), e.updateProgress(n), e.setTranslate(n, t), e.updateActiveIndex(), e.updateSlidesClasses(); } if (Array.isArray(a)) for (let e = 0; e < a.length; e += 1) a[e] !== s && a[e] instanceof l && o(a[e]); else a instanceof l && s !== a && o(a); }, setTransition: function (e, s) { const a = t.constructor, i = t.controller.control; let r; function n(s) { s.setTransition(e, t), 0 !== e && (s.transitionStart(), s.params.autoHeight && p(() => { s.updateAutoHeight(); }), s.$wrapperEl.transitionEnd(() => { i && (s.params.loop && "slide" === t.params.controller.by && s.loopFix(), s.transitionEnd()); })); } if (Array.isArray(i)) for (r = 0; r < i.length; r += 1) i[r] !== s && i[r] instanceof a && n(i[r]); else i instanceof a && s !== i && n(i); }, }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ a11y: { enabled: !0, notificationClass: "swiper-notification", prevSlideMessage: "Previous slide", nextSlideMessage: "Next slide", firstSlideMessage: "This is the first slide", lastSlideMessage: "This is the last slide", paginationBulletMessage: "Go to slide {{index}}", slideLabelMessage: "{{index}} / {{slidesLength}}", containerMessage: null, containerRoleDescriptionMessage: null, itemRoleDescriptionMessage: null, slideRole: "group", id: null, }, }), (t.a11y = { clicked: !1 }); let i = null; function r(e) { const t = i; 0 !== t.length && (t.html(""), t.html(e)); } function n(e) { e.attr("tabIndex", "0"); } function l(e) { e.attr("tabIndex", "-1"); } function o(e, t) { e.attr("role", t); } function c(e, t) { e.attr("aria-roledescription", t); } function p(e, t) { e.attr("aria-label", t); } function u(e) { e.attr("aria-disabled", !0); } function h(e) { e.attr("aria-disabled", !1); } function m(e) { if (13 !== e.keyCode && 32 !== e.keyCode) return; const s = t.params.a11y, a = d(e.target); t.navigation && t.navigation.$nextEl && a.is(t.navigation.$nextEl) && ((t.isEnd && !t.params.loop) || t.slideNext(), t.isEnd ? r(s.lastSlideMessage) : r(s.nextSlideMessage)), t.navigation && t.navigation.$prevEl && a.is(t.navigation.$prevEl) && ((t.isBeginning && !t.params.loop) || t.slidePrev(), t.isBeginning ? r(s.firstSlideMessage) : r(s.prevSlideMessage)), t.pagination && a.is(U(t.params.pagination.bulletClass)) && a[0].click(); } function f() { return ( t.pagination && t.pagination.bullets && t.pagination.bullets.length ); } function g() { return f() && t.params.pagination.clickable; } const v = (e, t, s) => { n(e), "BUTTON" !== e[0].tagName && (o(e, "button"), e.on("keydown", m)), p(e, s), (function (e, t) { e.attr("aria-controls", t); })(e, t); }, w = () => { t.a11y.clicked = !0; }, b = () => { requestAnimationFrame(() => { requestAnimationFrame(() => { t.a11y.clicked = !1; }); }); }, x = (e) => { if (t.a11y.clicked) return; const s = e.target.closest(`.${t.params.slideClass}`); if (!s || !t.slides.includes(s)) return; const a = t.slides.indexOf(s) === t.activeIndex, i = t.params.watchSlidesProgress && t.visibleSlides && t.visibleSlides.includes(s); a || i || (t.isHorizontal() ? (t.el.scrollLeft = 0) : (t.el.scrollTop = 0), t.slideTo(t.slides.indexOf(s), 0)); }, y = () => { const e = t.params.a11y; e.itemRoleDescriptionMessage && c(d(t.slides), e.itemRoleDescriptionMessage), e.slideRole && o(d(t.slides), e.slideRole); const s = t.params.loop ? t.slides.filter( (e) => !e.classList.contains(t.params.slideDuplicateClass) ).length : t.slides.length; e.slideLabelMessage && t.slides.each((a, i) => { const r = d(a), n = t.params.loop ? parseInt(r.attr("data-swiper-slide-index"), 10) : i; p( r, e.slideLabelMessage .replace(/\{\{index\}\}/, n + 1) .replace(/\{\{slidesLength\}\}/, s) ); }); }, E = () => { const e = t.params.a11y; t.$el.append(i); const s = t.$el; e.containerRoleDescriptionMessage && c(s, e.containerRoleDescriptionMessage), e.containerMessage && p(s, e.containerMessage); const a = t.$wrapperEl, r = e.id || a.attr("id") || `swiper-wrapper-${ ((n = 16), void 0 === n && (n = 16), "x" .repeat(n) .replace(/x/g, () => Math.round(16 * Math.random()).toString(16) )) }`; var n; const l = t.params.autoplay && t.params.autoplay.enabled ? "off" : "polite"; var o; let d, u; (o = r), a.attr("id", o), (function (e, t) { e.attr("aria-live", t); })(a, l), y(), t.navigation && t.navigation.$nextEl && (d = t.navigation.$nextEl), t.navigation && t.navigation.$prevEl && (u = t.navigation.$prevEl), d && d.length && v(d, r, e.nextSlideMessage), u && u.length && v(u, r, e.prevSlideMessage), g() && t.pagination.$el.on( "keydown", U(t.params.pagination.bulletClass), m ), t.$el.on("focus", x, !0), t.$el.on("pointerdown", w, !0), t.$el.on("pointerup", b, !0); }; a("beforeInit", () => { i = d( `` ); }), a("afterInit", () => { t.params.a11y.enabled && E(); }), a( "slidesLengthChange snapGridLengthChange slidesGridLengthChange", () => { t.params.a11y.enabled && y(); } ), a("fromEdge toEdge afterInit lock unlock", () => { t.params.a11y.enabled && (function () { if (t.params.loop || t.params.rewind || !t.navigation) return; const { $nextEl: e, $prevEl: s } = t.navigation; s && s.length > 0 && (t.isBeginning ? (u(s), l(s)) : (h(s), n(s))), e && e.length > 0 && (t.isEnd ? (u(e), l(e)) : (h(e), n(e))); })(); }), a("paginationUpdate", () => { t.params.a11y.enabled && (function () { const e = t.params.a11y; f() && t.pagination.bullets.each((s) => { const a = d(s); t.params.pagination.clickable && (n(a), t.params.pagination.renderBullet || (o(a, "button"), p( a, e.paginationBulletMessage.replace( /\{\{index\}\}/, a.index() + 1 ) ))), a.is(`.${t.params.pagination.bulletActiveClass}`) ? a.attr("aria-current", "true") : a.removeAttr("aria-current"); }); })(); }), a("destroy", () => { t.params.a11y.enabled && (function () { let e, s; i && i.length > 0 && i.remove(), t.navigation && t.navigation.$nextEl && (e = t.navigation.$nextEl), t.navigation && t.navigation.$prevEl && (s = t.navigation.$prevEl), e && e.off("keydown", m), s && s.off("keydown", m), g() && t.pagination.$el.off( "keydown", U(t.params.pagination.bulletClass), m ), t.$el.off("focus", x, !0), t.$el.off("pointerdown", w, !0), t.$el.off("pointerup", b, !0); })(); }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ history: { enabled: !1, root: "", replaceState: !1, key: "slides", keepQuery: !1, }, }); let i = !1, n = {}; const l = (e) => e .toString() .replace(/\s+/g, "-") .replace(/[^\w-]+/g, "") .replace(/--+/g, "-") .replace(/^-+/, "") .replace(/-+$/, ""), o = (e) => { const t = r(); let s; s = e ? new URL(e) : t.location; const a = s.pathname .slice(1) .split("/") .filter((e) => "" !== e), i = a.length; return { key: a[i - 2], value: a[i - 1] }; }, d = (e, s) => { const a = r(); if (!i || !t.params.history.enabled) return; let n; n = t.params.url ? new URL(t.params.url) : a.location; const o = t.slides.eq(s); let d = l(o.attr("data-history")); if (t.params.history.root.length > 0) { let s = t.params.history.root; "/" === s[s.length - 1] && (s = s.slice(0, s.length - 1)), (d = `${s}/${e}/${d}`); } else n.pathname.includes(e) || (d = `${e}/${d}`); t.params.history.keepQuery && (d += n.search); const c = a.history.state; (c && c.value === d) || (t.params.history.replaceState ? a.history.replaceState({ value: d }, null, d) : a.history.pushState({ value: d }, null, d)); }, c = (e, s, a) => { if (s) for (let i = 0, r = t.slides.length; i < r; i += 1) { const r = t.slides.eq(i); if ( l(r.attr("data-history")) === s && !r.hasClass(t.params.slideDuplicateClass) ) { const s = r.index(); t.slideTo(s, e, a); } } else t.slideTo(0, e, a); }, p = () => { (n = o(t.params.url)), c(t.params.speed, n.value, !1); }; a("init", () => { t.params.history.enabled && (() => { const e = r(); if (t.params.history) { if (!e.history || !e.history.pushState) return ( (t.params.history.enabled = !1), void (t.params.hashNavigation.enabled = !0) ); (i = !0), (n = o(t.params.url)), (n.key || n.value) && (c(0, n.value, t.params.runCallbacksOnInit), t.params.history.replaceState || e.addEventListener("popstate", p)); } })(); }), a("destroy", () => { t.params.history.enabled && (() => { const e = r(); t.params.history.replaceState || e.removeEventListener("popstate", p); })(); }), a("transitionEnd _freeModeNoMomentumRelease", () => { i && d(t.params.history.key, t.activeIndex); }), a("slideChange", () => { i && t.params.cssMode && d(t.params.history.key, t.activeIndex); }); }, function (e) { let { swiper: t, extendParams: s, emit: i, on: n } = e, l = !1; const o = a(), c = r(); s({ hashNavigation: { enabled: !1, replaceState: !1, watchState: !1 } }); const p = () => { i("hashChange"); const e = o.location.hash.replace("#", ""); if (e !== t.slides.eq(t.activeIndex).attr("data-hash")) { const s = t.$wrapperEl .children(`.${t.params.slideClass}[data-hash="${e}"]`) .index(); if (void 0 === s) return; t.slideTo(s); } }, u = () => { if (l && t.params.hashNavigation.enabled) if ( t.params.hashNavigation.replaceState && c.history && c.history.replaceState ) c.history.replaceState( null, null, `#${t.slides.eq(t.activeIndex).attr("data-hash")}` || "" ), i("hashSet"); else { const e = t.slides.eq(t.activeIndex), s = e.attr("data-hash") || e.attr("data-history"); (o.location.hash = s || ""), i("hashSet"); } }; n("init", () => { t.params.hashNavigation.enabled && (() => { if ( !t.params.hashNavigation.enabled || (t.params.history && t.params.history.enabled) ) return; l = !0; const e = o.location.hash.replace("#", ""); if (e) { const s = 0; for (let a = 0, i = t.slides.length; a < i; a += 1) { const i = t.slides.eq(a); if ( (i.attr("data-hash") || i.attr("data-history")) === e && !i.hasClass(t.params.slideDuplicateClass) ) { const e = i.index(); t.slideTo(e, s, t.params.runCallbacksOnInit, !0); } } } t.params.hashNavigation.watchState && d(c).on("hashchange", p); })(); }), n("destroy", () => { t.params.hashNavigation.enabled && t.params.hashNavigation.watchState && d(c).off("hashchange", p); }), n("transitionEnd _freeModeNoMomentumRelease", () => { l && u(); }), n("slideChange", () => { l && t.params.cssMode && u(); }); }, function (e) { let t, { swiper: s, extendParams: i, on: r, emit: n } = e; function l() { if (!s.size) return (s.autoplay.running = !1), void (s.autoplay.paused = !1); const e = s.slides.eq(s.activeIndex); let a = s.params.autoplay.delay; e.attr("data-swiper-autoplay") && (a = e.attr("data-swiper-autoplay") || s.params.autoplay.delay), clearTimeout(t), (t = p(() => { let e; s.params.autoplay.reverseDirection ? s.params.loop ? (s.loopFix(), (e = s.slidePrev(s.params.speed, !0, !0)), n("autoplay")) : s.isBeginning ? s.params.autoplay.stopOnLastSlide ? d() : ((e = s.slideTo( s.slides.length - 1, s.params.speed, !0, !0 )), n("autoplay")) : ((e = s.slidePrev(s.params.speed, !0, !0)), n("autoplay")) : s.params.loop ? (s.loopFix(), (e = s.slideNext(s.params.speed, !0, !0)), n("autoplay")) : s.isEnd ? s.params.autoplay.stopOnLastSlide ? d() : ((e = s.slideTo(0, s.params.speed, !0, !0)), n("autoplay")) : ((e = s.slideNext(s.params.speed, !0, !0)), n("autoplay")), ((s.params.cssMode && s.autoplay.running) || !1 === e) && l(); }, a)); } function o() { return ( void 0 === t && !s.autoplay.running && ((s.autoplay.running = !0), n("autoplayStart"), l(), !0) ); } function d() { return ( !!s.autoplay.running && void 0 !== t && (t && (clearTimeout(t), (t = void 0)), (s.autoplay.running = !1), n("autoplayStop"), !0) ); } function c(e) { s.autoplay.running && (s.autoplay.paused || (t && clearTimeout(t), (s.autoplay.paused = !0), 0 !== e && s.params.autoplay.waitForTransition ? ["transitionend", "webkitTransitionEnd"].forEach((e) => { s.$wrapperEl[0].addEventListener(e, h); }) : ((s.autoplay.paused = !1), l()))); } function u() { const e = a(); "hidden" === e.visibilityState && s.autoplay.running && c(), "visible" === e.visibilityState && s.autoplay.paused && (l(), (s.autoplay.paused = !1)); } function h(e) { s && !s.destroyed && s.$wrapperEl && e.target === s.$wrapperEl[0] && (["transitionend", "webkitTransitionEnd"].forEach((e) => { s.$wrapperEl[0].removeEventListener(e, h); }), (s.autoplay.paused = !1), s.autoplay.running ? l() : d()); } function m() { s.params.autoplay.disableOnInteraction ? d() : (n("autoplayPause"), c()), ["transitionend", "webkitTransitionEnd"].forEach((e) => { s.$wrapperEl[0].removeEventListener(e, h); }); } function f() { s.params.autoplay.disableOnInteraction || ((s.autoplay.paused = !1), n("autoplayResume"), l()); } (s.autoplay = { running: !1, paused: !1 }), i({ autoplay: { enabled: !1, delay: 3e3, waitForTransition: !0, disableOnInteraction: !0, stopOnLastSlide: !1, reverseDirection: !1, pauseOnMouseEnter: !1, }, }), r("init", () => { if (s.params.autoplay.enabled) { o(); a().addEventListener("visibilitychange", u), s.params.autoplay.pauseOnMouseEnter && (s.$el.on("mouseenter", m), s.$el.on("mouseleave", f)); } }), r("beforeTransitionStart", (e, t, a) => { s.autoplay.running && (a || !s.params.autoplay.disableOnInteraction ? s.autoplay.pause(t) : d()); }), r("sliderFirstMove", () => { s.autoplay.running && (s.params.autoplay.disableOnInteraction ? d() : c()); }), r("touchEnd", () => { s.params.cssMode && s.autoplay.paused && !s.params.autoplay.disableOnInteraction && l(); }), r("destroy", () => { s.$el.off("mouseenter", m), s.$el.off("mouseleave", f), s.autoplay.running && d(); a().removeEventListener("visibilitychange", u); }), Object.assign(s.autoplay, { pause: c, run: l, start: o, stop: d }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ thumbs: { swiper: null, multipleActiveThumbs: !0, autoScrollOffset: 0, slideThumbActiveClass: "swiper-slide-thumb-active", thumbsContainerClass: "swiper-thumbs", }, }); let i = !1, r = !1; function n() { const e = t.thumbs.swiper; if (!e || e.destroyed) return; const s = e.clickedIndex, a = e.clickedSlide; if (a && d(a).hasClass(t.params.thumbs.slideThumbActiveClass)) return; if (null == s) return; let i; if ( ((i = e.params.loop ? parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"), 10) : s), t.params.loop) ) { let e = t.activeIndex; t.slides.eq(e).hasClass(t.params.slideDuplicateClass) && (t.loopFix(), (t._clientLeft = t.$wrapperEl[0].clientLeft), (e = t.activeIndex)); const s = t.slides .eq(e) .prevAll(`[data-swiper-slide-index="${i}"]`) .eq(0) .index(), a = t.slides .eq(e) .nextAll(`[data-swiper-slide-index="${i}"]`) .eq(0) .index(); i = void 0 === s ? a : void 0 === a ? s : a - e < e - s ? a : s; } t.slideTo(i); } function l() { const { thumbs: e } = t.params; if (i) return !1; i = !0; const s = t.constructor; if (e.swiper instanceof s) (t.thumbs.swiper = e.swiper), Object.assign(t.thumbs.swiper.originalParams, { watchSlidesProgress: !0, slideToClickedSlide: !1, }), Object.assign(t.thumbs.swiper.params, { watchSlidesProgress: !0, slideToClickedSlide: !1, }); else if (m(e.swiper)) { const a = Object.assign({}, e.swiper); Object.assign(a, { watchSlidesProgress: !0, slideToClickedSlide: !1, }), (t.thumbs.swiper = new s(a)), (r = !0); } return ( t.thumbs.swiper.$el.addClass(t.params.thumbs.thumbsContainerClass), t.thumbs.swiper.on("tap", n), !0 ); } function o(e) { const s = t.thumbs.swiper; if (!s || s.destroyed) return; const a = "auto" === s.params.slidesPerView ? s.slidesPerViewDynamic() : s.params.slidesPerView; let i = 1; const r = t.params.thumbs.slideThumbActiveClass; if ( (t.params.slidesPerView > 1 && !t.params.centeredSlides && (i = t.params.slidesPerView), t.params.thumbs.multipleActiveThumbs || (i = 1), (i = Math.floor(i)), s.slides.removeClass(r), s.params.loop || (s.params.virtual && s.params.virtual.enabled)) ) for (let e = 0; e < i; e += 1) s.$wrapperEl .children(`[data-swiper-slide-index="${t.realIndex + e}"]`) .addClass(r); else for (let e = 0; e < i; e += 1) s.slides.eq(t.realIndex + e).addClass(r); const n = t.params.thumbs.autoScrollOffset, l = n && !s.params.loop; if (t.realIndex !== s.realIndex || l) { let i, r, o = s.activeIndex; if (s.params.loop) { s.slides.eq(o).hasClass(s.params.slideDuplicateClass) && (s.loopFix(), (s._clientLeft = s.$wrapperEl[0].clientLeft), (o = s.activeIndex)); const e = s.slides .eq(o) .prevAll(`[data-swiper-slide-index="${t.realIndex}"]`) .eq(0) .index(), a = s.slides .eq(o) .nextAll(`[data-swiper-slide-index="${t.realIndex}"]`) .eq(0) .index(); (i = void 0 === e ? a : void 0 === a ? e : a - o == o - e ? s.params.slidesPerGroup > 1 ? a : o : a - o < o - e ? a : e), (r = t.activeIndex > t.previousIndex ? "next" : "prev"); } else (i = t.realIndex), (r = i > t.previousIndex ? "next" : "prev"); l && (i += "next" === r ? n : -1 * n), s.visibleSlidesIndexes && s.visibleSlidesIndexes.indexOf(i) < 0 && (s.params.centeredSlides ? (i = i > o ? i - Math.floor(a / 2) + 1 : i + Math.floor(a / 2) - 1) : i > o && s.params.slidesPerGroup, s.slideTo(i, e ? 0 : void 0)); } } (t.thumbs = { swiper: null }), a("beforeInit", () => { const { thumbs: e } = t.params; e && e.swiper && (l(), o(!0)); }), a("slideChange update resize observerUpdate", () => { o(); }), a("setTransition", (e, s) => { const a = t.thumbs.swiper; a && !a.destroyed && a.setTransition(s); }), a("beforeDestroy", () => { const e = t.thumbs.swiper; e && !e.destroyed && r && e.destroy(); }), Object.assign(t.thumbs, { init: l, update: o }); }, function (e) { let { swiper: t, extendParams: s, emit: a, once: i } = e; s({ freeMode: { enabled: !1, momentum: !0, momentumRatio: 1, momentumBounce: !0, momentumBounceRatio: 1, momentumVelocityRatio: 1, sticky: !1, minimumVelocity: 0.02, }, }), Object.assign(t, { freeMode: { onTouchStart: function () { const e = t.getTranslate(); t.setTranslate(e), t.setTransition(0), (t.touchEventsData.velocities.length = 0), t.freeMode.onTouchEnd({ currentPos: t.rtl ? t.translate : -t.translate, }); }, onTouchMove: function () { const { touchEventsData: e, touches: s } = t; 0 === e.velocities.length && e.velocities.push({ position: s[t.isHorizontal() ? "startX" : "startY"], time: e.touchStartTime, }), e.velocities.push({ position: s[t.isHorizontal() ? "currentX" : "currentY"], time: u(), }); }, onTouchEnd: function (e) { let { currentPos: s } = e; const { params: r, $wrapperEl: n, rtlTranslate: l, snapGrid: o, touchEventsData: d, } = t, c = u() - d.touchStartTime; if (s < -t.minTranslate()) t.slideTo(t.activeIndex); else if (s > -t.maxTranslate()) t.slides.length < o.length ? t.slideTo(o.length - 1) : t.slideTo(t.slides.length - 1); else { if (r.freeMode.momentum) { if (d.velocities.length > 1) { const e = d.velocities.pop(), s = d.velocities.pop(), a = e.position - s.position, i = e.time - s.time; (t.velocity = a / i), (t.velocity /= 2), Math.abs(t.velocity) < r.freeMode.minimumVelocity && (t.velocity = 0), (i > 150 || u() - e.time > 300) && (t.velocity = 0); } else t.velocity = 0; (t.velocity *= r.freeMode.momentumVelocityRatio), (d.velocities.length = 0); let e = 1e3 * r.freeMode.momentumRatio; const s = t.velocity * e; let c = t.translate + s; l && (c = -c); let p, h = !1; const m = 20 * Math.abs(t.velocity) * r.freeMode.momentumBounceRatio; let f; if (c < t.maxTranslate()) r.freeMode.momentumBounce ? (c + t.maxTranslate() < -m && (c = t.maxTranslate() - m), (p = t.maxTranslate()), (h = !0), (d.allowMomentumBounce = !0)) : (c = t.maxTranslate()), r.loop && r.centeredSlides && (f = !0); else if (c > t.minTranslate()) r.freeMode.momentumBounce ? (c - t.minTranslate() > m && (c = t.minTranslate() + m), (p = t.minTranslate()), (h = !0), (d.allowMomentumBounce = !0)) : (c = t.minTranslate()), r.loop && r.centeredSlides && (f = !0); else if (r.freeMode.sticky) { let e; for (let t = 0; t < o.length; t += 1) if (o[t] > -c) { e = t; break; } (c = Math.abs(o[e] - c) < Math.abs(o[e - 1] - c) || "next" === t.swipeDirection ? o[e] : o[e - 1]), (c = -c); } if ( (f && i("transitionEnd", () => { t.loopFix(); }), 0 !== t.velocity) ) { if ( ((e = l ? Math.abs((-c - t.translate) / t.velocity) : Math.abs((c - t.translate) / t.velocity)), r.freeMode.sticky) ) { const s = Math.abs((l ? -c : c) - t.translate), a = t.slidesSizesGrid[t.activeIndex]; e = s < a ? r.speed : s < 2 * a ? 1.5 * r.speed : 2.5 * r.speed; } } else if (r.freeMode.sticky) return void t.slideToClosest(); r.freeMode.momentumBounce && h ? (t.updateProgress(p), t.setTransition(e), t.setTranslate(c), t.transitionStart(!0, t.swipeDirection), (t.animating = !0), n.transitionEnd(() => { t && !t.destroyed && d.allowMomentumBounce && (a("momentumBounce"), t.setTransition(r.speed), setTimeout(() => { t.setTranslate(p), n.transitionEnd(() => { t && !t.destroyed && t.transitionEnd(); }); }, 0)); })) : t.velocity ? (a("_freeModeNoMomentumRelease"), t.updateProgress(c), t.setTransition(e), t.setTranslate(c), t.transitionStart(!0, t.swipeDirection), t.animating || ((t.animating = !0), n.transitionEnd(() => { t && !t.destroyed && t.transitionEnd(); }))) : t.updateProgress(c), t.updateActiveIndex(), t.updateSlidesClasses(); } else { if (r.freeMode.sticky) return void t.slideToClosest(); r.freeMode && a("_freeModeNoMomentumRelease"); } (!r.freeMode.momentum || c >= r.longSwipesMs) && (t.updateProgress(), t.updateActiveIndex(), t.updateSlidesClasses()); } }, }, }); }, function (e) { let t, s, a, { swiper: i, extendParams: r } = e; r({ grid: { rows: 1, fill: "column" } }), (i.grid = { initSlides: (e) => { const { slidesPerView: r } = i.params, { rows: n, fill: l } = i.params.grid; (s = t / n), (a = Math.floor(e / n)), (t = Math.floor(e / n) === e / n ? e : Math.ceil(e / n) * n), "auto" !== r && "row" === l && (t = Math.max(t, r * n)); }, updateSlide: (e, r, n, l) => { const { slidesPerGroup: o, spaceBetween: d } = i.params, { rows: c, fill: p } = i.params.grid; let u, h, m; if ("row" === p && o > 1) { const s = Math.floor(e / (o * c)), a = e - c * o * s, i = 0 === s ? o : Math.min(Math.ceil((n - s * c * o) / c), o); (m = Math.floor(a / i)), (h = a - m * i + s * o), (u = h + (m * t) / c), r.css({ "-webkit-order": u, order: u }); } else "column" === p ? ((h = Math.floor(e / c)), (m = e - h * c), (h > a || (h === a && m === c - 1)) && ((m += 1), m >= c && ((m = 0), (h += 1)))) : ((m = Math.floor(e / s)), (h = e - m * s)); r.css(l("margin-top"), 0 !== m ? d && `${d}px` : ""); }, updateWrapperSize: (e, s, a) => { const { spaceBetween: r, centeredSlides: n, roundLengths: l, } = i.params, { rows: o } = i.params.grid; if ( ((i.virtualSize = (e + r) * t), (i.virtualSize = Math.ceil(i.virtualSize / o) - r), i.$wrapperEl.css({ [a("width")]: `${i.virtualSize + r}px` }), n) ) { s.splice(0, s.length); const e = []; for (let t = 0; t < s.length; t += 1) { let a = s[t]; l && (a = Math.floor(a)), s[t] < i.virtualSize + s[0] && e.push(a); } s.push(...e); } }, }); }, function (e) { let { swiper: t } = e; Object.assign(t, { appendSlide: K.bind(t), prependSlide: Z.bind(t), addSlide: Q.bind(t), removeSlide: J.bind(t), removeAllSlides: ee.bind(t), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ fadeEffect: { crossFade: !1, transformEl: null } }), te({ effect: "fade", swiper: t, on: a, setTranslate: () => { const { slides: e } = t, s = t.params.fadeEffect; for (let a = 0; a < e.length; a += 1) { const e = t.slides.eq(a); let i = -e[0].swiperSlideOffset; t.params.virtualTranslate || (i -= t.translate); let r = 0; t.isHorizontal() || ((r = i), (i = 0)); const n = t.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(e[0].progress), 0) : 1 + Math.min(Math.max(e[0].progress, -1), 0); se(s, e) .css({ opacity: n }) .transform(`translate3d(${i}px, ${r}px, 0px)`); } }, setTransition: (e) => { const { transformEl: s } = t.params.fadeEffect; (s ? t.slides.find(s) : t.slides).transition(e), ae({ swiper: t, duration: e, transformEl: s, allSlides: !0 }); }, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !t.params.cssMode, }), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ cubeEffect: { slideShadows: !0, shadow: !0, shadowOffset: 20, shadowScale: 0.94, }, }); const i = (e, t, s) => { let a = s ? e.find(".swiper-slide-shadow-left") : e.find(".swiper-slide-shadow-top"), i = s ? e.find(".swiper-slide-shadow-right") : e.find(".swiper-slide-shadow-bottom"); 0 === a.length && ((a = d( `
` )), e.append(a)), 0 === i.length && ((i = d( `
` )), e.append(i)), a.length && (a[0].style.opacity = Math.max(-t, 0)), i.length && (i[0].style.opacity = Math.max(t, 0)); }; te({ effect: "cube", swiper: t, on: a, setTranslate: () => { const { $el: e, $wrapperEl: s, slides: a, width: r, height: n, rtlTranslate: l, size: o, browser: c, } = t, p = t.params.cubeEffect, u = t.isHorizontal(), h = t.virtual && t.params.virtual.enabled; let m, f = 0; p.shadow && (u ? ((m = s.find(".swiper-cube-shadow")), 0 === m.length && ((m = d('
')), s.append(m)), m.css({ height: `${r}px` })) : ((m = e.find(".swiper-cube-shadow")), 0 === m.length && ((m = d('
')), e.append(m)))); for (let e = 0; e < a.length; e += 1) { const t = a.eq(e); let s = e; h && (s = parseInt(t.attr("data-swiper-slide-index"), 10)); let r = 90 * s, n = Math.floor(r / 360); l && ((r = -r), (n = Math.floor(-r / 360))); const d = Math.max(Math.min(t[0].progress, 1), -1); let c = 0, m = 0, g = 0; s % 4 == 0 ? ((c = 4 * -n * o), (g = 0)) : (s - 1) % 4 == 0 ? ((c = 0), (g = 4 * -n * o)) : (s - 2) % 4 == 0 ? ((c = o + 4 * n * o), (g = o)) : (s - 3) % 4 == 0 && ((c = -o), (g = 3 * o + 4 * o * n)), l && (c = -c), u || ((m = c), (c = 0)); const v = `rotateX(${u ? 0 : -r}deg) rotateY(${ u ? r : 0 }deg) translate3d(${c}px, ${m}px, ${g}px)`; d <= 1 && d > -1 && ((f = 90 * s + 90 * d), l && (f = 90 * -s - 90 * d)), t.transform(v), p.slideShadows && i(t, d, u); } if ( (s.css({ "-webkit-transform-origin": `50% 50% -${o / 2}px`, "transform-origin": `50% 50% -${o / 2}px`, }), p.shadow) ) if (u) m.transform( `translate3d(0px, ${r / 2 + p.shadowOffset}px, ${ -r / 2 }px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})` ); else { const e = Math.abs(f) - 90 * Math.floor(Math.abs(f) / 90), t = 1.5 - (Math.sin((2 * e * Math.PI) / 360) / 2 + Math.cos((2 * e * Math.PI) / 360) / 2), s = p.shadowScale, a = p.shadowScale / t, i = p.shadowOffset; m.transform( `scale3d(${s}, 1, ${a}) translate3d(0px, ${n / 2 + i}px, ${ -n / 2 / a }px) rotateX(-90deg)` ); } const g = c.isSafari || c.isWebView ? -o / 2 : 0; s.transform( `translate3d(0px,0,${g}px) rotateX(${ t.isHorizontal() ? 0 : f }deg) rotateY(${t.isHorizontal() ? -f : 0}deg)` ), s[0].style.setProperty("--swiper-cube-translate-z", `${g}px`); }, setTransition: (e) => { const { $el: s, slides: a } = t; a .transition(e) .find( ".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left" ) .transition(e), t.params.cubeEffect.shadow && !t.isHorizontal() && s.find(".swiper-cube-shadow").transition(e); }, recreateShadows: () => { const e = t.isHorizontal(); t.slides.each((t) => { const s = Math.max(Math.min(t.progress, 1), -1); i(d(t), s, e); }); }, getEffectParams: () => t.params.cubeEffect, perspective: () => !0, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, resistanceRatio: 0, spaceBetween: 0, centeredSlides: !1, virtualTranslate: !0, }), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ flipEffect: { slideShadows: !0, limitRotation: !0, transformEl: null }, }); const i = (e, s, a) => { let i = t.isHorizontal() ? e.find(".swiper-slide-shadow-left") : e.find(".swiper-slide-shadow-top"), r = t.isHorizontal() ? e.find(".swiper-slide-shadow-right") : e.find(".swiper-slide-shadow-bottom"); 0 === i.length && (i = ie(a, e, t.isHorizontal() ? "left" : "top")), 0 === r.length && (r = ie(a, e, t.isHorizontal() ? "right" : "bottom")), i.length && (i[0].style.opacity = Math.max(-s, 0)), r.length && (r[0].style.opacity = Math.max(s, 0)); }; te({ effect: "flip", swiper: t, on: a, setTranslate: () => { const { slides: e, rtlTranslate: s } = t, a = t.params.flipEffect; for (let r = 0; r < e.length; r += 1) { const n = e.eq(r); let l = n[0].progress; t.params.flipEffect.limitRotation && (l = Math.max(Math.min(n[0].progress, 1), -1)); const o = n[0].swiperSlideOffset; let d = -180 * l, c = 0, p = t.params.cssMode ? -o - t.translate : -o, u = 0; t.isHorizontal() ? s && (d = -d) : ((u = p), (p = 0), (c = -d), (d = 0)), (n[0].style.zIndex = -Math.abs(Math.round(l)) + e.length), a.slideShadows && i(n, l, a); const h = `translate3d(${p}px, ${u}px, 0px) rotateX(${c}deg) rotateY(${d}deg)`; se(a, n).transform(h); } }, setTransition: (e) => { const { transformEl: s } = t.params.flipEffect; (s ? t.slides.find(s) : t.slides) .transition(e) .find( ".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left" ) .transition(e), ae({ swiper: t, duration: e, transformEl: s }); }, recreateShadows: () => { const e = t.params.flipEffect; t.slides.each((s) => { const a = d(s); let r = a[0].progress; t.params.flipEffect.limitRotation && (r = Math.max(Math.min(s.progress, 1), -1)), i(a, r, e); }); }, getEffectParams: () => t.params.flipEffect, perspective: () => !0, overwriteParams: () => ({ slidesPerView: 1, slidesPerGroup: 1, watchSlidesProgress: !0, spaceBetween: 0, virtualTranslate: !t.params.cssMode, }), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ coverflowEffect: { rotate: 50, stretch: 0, depth: 100, scale: 1, modifier: 1, slideShadows: !0, transformEl: null, }, }), te({ effect: "coverflow", swiper: t, on: a, setTranslate: () => { const { width: e, height: s, slides: a, slidesSizesGrid: i } = t, r = t.params.coverflowEffect, n = t.isHorizontal(), l = t.translate, o = n ? e / 2 - l : s / 2 - l, d = n ? r.rotate : -r.rotate, c = r.depth; for (let e = 0, t = a.length; e < t; e += 1) { const t = a.eq(e), s = i[e], l = (o - t[0].swiperSlideOffset - s / 2) / s, p = "function" == typeof r.modifier ? r.modifier(l) : l * r.modifier; let u = n ? d * p : 0, h = n ? 0 : d * p, m = -c * Math.abs(p), f = r.stretch; "string" == typeof f && -1 !== f.indexOf("%") && (f = (parseFloat(r.stretch) / 100) * s); let g = n ? 0 : f * p, v = n ? f * p : 0, w = 1 - (1 - r.scale) * Math.abs(p); Math.abs(v) < 0.001 && (v = 0), Math.abs(g) < 0.001 && (g = 0), Math.abs(m) < 0.001 && (m = 0), Math.abs(u) < 0.001 && (u = 0), Math.abs(h) < 0.001 && (h = 0), Math.abs(w) < 0.001 && (w = 0); const b = `translate3d(${v}px,${g}px,${m}px) rotateX(${h}deg) rotateY(${u}deg) scale(${w})`; if ( (se(r, t).transform(b), (t[0].style.zIndex = 1 - Math.abs(Math.round(p))), r.slideShadows) ) { let e = n ? t.find(".swiper-slide-shadow-left") : t.find(".swiper-slide-shadow-top"), s = n ? t.find(".swiper-slide-shadow-right") : t.find(".swiper-slide-shadow-bottom"); 0 === e.length && (e = ie(r, t, n ? "left" : "top")), 0 === s.length && (s = ie(r, t, n ? "right" : "bottom")), e.length && (e[0].style.opacity = p > 0 ? p : 0), s.length && (s[0].style.opacity = -p > 0 ? -p : 0); } } }, setTransition: (e) => { const { transformEl: s } = t.params.coverflowEffect; (s ? t.slides.find(s) : t.slides) .transition(e) .find( ".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left" ) .transition(e); }, perspective: () => !0, overwriteParams: () => ({ watchSlidesProgress: !0 }), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ creativeEffect: { transformEl: null, limitProgress: 1, shadowPerProgress: !1, progressMultiplier: 1, perspective: !0, prev: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1, }, next: { translate: [0, 0, 0], rotate: [0, 0, 0], opacity: 1, scale: 1, }, }, }); const i = (e) => ("string" == typeof e ? e : `${e}px`); te({ effect: "creative", swiper: t, on: a, setTranslate: () => { const { slides: e, $wrapperEl: s, slidesSizesGrid: a } = t, r = t.params.creativeEffect, { progressMultiplier: n } = r, l = t.params.centeredSlides; if (l) { const e = a[0] / 2 - t.params.slidesOffsetBefore || 0; s.transform(`translateX(calc(50% - ${e}px))`); } for (let s = 0; s < e.length; s += 1) { const a = e.eq(s), o = a[0].progress, d = Math.min( Math.max(a[0].progress, -r.limitProgress), r.limitProgress ); let c = d; l || (c = Math.min( Math.max(a[0].originalProgress, -r.limitProgress), r.limitProgress )); const p = a[0].swiperSlideOffset, u = [t.params.cssMode ? -p - t.translate : -p, 0, 0], h = [0, 0, 0]; let m = !1; t.isHorizontal() || ((u[1] = u[0]), (u[0] = 0)); let f = { translate: [0, 0, 0], rotate: [0, 0, 0], scale: 1, opacity: 1, }; d < 0 ? ((f = r.next), (m = !0)) : d > 0 && ((f = r.prev), (m = !0)), u.forEach((e, t) => { u[t] = `calc(${e}px + (${i(f.translate[t])} * ${Math.abs( d * n )}))`; }), h.forEach((e, t) => { h[t] = f.rotate[t] * Math.abs(d * n); }), (a[0].style.zIndex = -Math.abs(Math.round(o)) + e.length); const g = u.join(", "), v = `rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`, w = c < 0 ? `scale(${1 + (1 - f.scale) * c * n})` : `scale(${1 - (1 - f.scale) * c * n})`, b = c < 0 ? 1 + (1 - f.opacity) * c * n : 1 - (1 - f.opacity) * c * n, x = `translate3d(${g}) ${v} ${w}`; if ((m && f.shadow) || !m) { let e = a.children(".swiper-slide-shadow"); if ((0 === e.length && f.shadow && (e = ie(r, a)), e.length)) { const t = r.shadowPerProgress ? d * (1 / r.limitProgress) : d; e[0].style.opacity = Math.min(Math.max(Math.abs(t), 0), 1); } } const y = se(r, a); y.transform(x).css({ opacity: b }), f.origin && y.css("transform-origin", f.origin); } }, setTransition: (e) => { const { transformEl: s } = t.params.creativeEffect; (s ? t.slides.find(s) : t.slides) .transition(e) .find(".swiper-slide-shadow") .transition(e), ae({ swiper: t, duration: e, transformEl: s, allSlides: !0 }); }, perspective: () => t.params.creativeEffect.perspective, overwriteParams: () => ({ watchSlidesProgress: !0, virtualTranslate: !t.params.cssMode, }), }); }, function (e) { let { swiper: t, extendParams: s, on: a } = e; s({ cardsEffect: { slideShadows: !0, transformEl: null, rotate: !0, perSlideRotate: 2, perSlideOffset: 8, }, }), te({ effect: "cards", swiper: t, on: a, setTranslate: () => { const { slides: e, activeIndex: s } = t, a = t.params.cardsEffect, { startTranslate: i, isTouched: r } = t.touchEventsData, n = t.translate; for (let l = 0; l < e.length; l += 1) { const o = e.eq(l), d = o[0].progress, c = Math.min(Math.max(d, -4), 4); let p = o[0].swiperSlideOffset; t.params.centeredSlides && !t.params.cssMode && t.$wrapperEl.transform(`translateX(${t.minTranslate()}px)`), t.params.centeredSlides && t.params.cssMode && (p -= e[0].swiperSlideOffset); let u = t.params.cssMode ? -p - t.translate : -p, h = 0; const m = -100 * Math.abs(c); let f = 1, g = -a.perSlideRotate * c, v = a.perSlideOffset - 0.75 * Math.abs(c); const w = t.virtual && t.params.virtual.enabled ? t.virtual.from + l : l, b = (w === s || w === s - 1) && c > 0 && c < 1 && (r || t.params.cssMode) && n < i, x = (w === s || w === s + 1) && c < 0 && c > -1 && (r || t.params.cssMode) && n > i; if (b || x) { const e = (1 - Math.abs((Math.abs(c) - 0.5) / 0.5)) ** 0.5; (g += -28 * c * e), (f += -0.5 * e), (v += 96 * e), (h = -25 * e * Math.abs(c) + "%"); } if ( ((u = c < 0 ? `calc(${u}px + (${v * Math.abs(c)}%))` : c > 0 ? `calc(${u}px + (-${v * Math.abs(c)}%))` : `${u}px`), !t.isHorizontal()) ) { const e = h; (h = u), (u = e); } const y = c < 0 ? "" + (1 + (1 - f) * c) : "" + (1 - (1 - f) * c), E = `\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${ a.rotate ? g : 0 }deg)\n scale(${y})\n `; if (a.slideShadows) { let e = o.find(".swiper-slide-shadow"); 0 === e.length && (e = ie(a, o)), e.length && (e[0].style.opacity = Math.min( Math.max((Math.abs(c) - 0.5) / 0.5, 0), 1 )); } o[0].style.zIndex = -Math.abs(Math.round(d)) + e.length; se(a, o).transform(E); } }, setTransition: (e) => { const { transformEl: s } = t.params.cardsEffect; (s ? t.slides.find(s) : t.slides) .transition(e) .find(".swiper-slide-shadow") .transition(e), ae({ swiper: t, duration: e, transformEl: s }); }, perspective: () => !0, overwriteParams: () => ({ watchSlidesProgress: !0, virtualTranslate: !t.params.cssMode, }), }); }, ]; return V.use(re), V; }); //# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/themes/modern2/assets/new/styles/_affiche.scss b/themes/modern2/assets/new/styles/_affiche.scss new file mode 100644 index 000000000..34e375e3b --- /dev/null +++ b/themes/modern2/assets/new/styles/_affiche.scss @@ -0,0 +1,2 @@ +@import "./affiche/affiche-main"; +@import "./affiche/affiche-item"; diff --git a/themes/modern2/assets/new/styles/_article.scss b/themes/modern2/assets/new/styles/_article.scss new file mode 100644 index 000000000..78fe74981 --- /dev/null +++ b/themes/modern2/assets/new/styles/_article.scss @@ -0,0 +1,143 @@ +.article-inner { + padding: 3rem 0 4rem; + @include grid(false, 67% auto); + gap: 4rem; +} + +.article-content-top { + @include flex(column); + gap: 1.2rem; +} + +.article-item { + @include imgStyle($objFit: cover); +} + +.article-prev, +.article-next { + top: 45%; +} + +.article-head { + @include flex(column); + gap: 1.2rem; + h2 { + font-size: 2.4rem; + font-weight: bold; + line-height: 3.3rem; + } + + span { + font-weight: 600; + font-size: 1.5rem; + color: $base-green; + } +} + +.article-content { + @include flex(column); + gap: 4rem; +} + +.article-desc { + padding-top: 1.8rem; + @include flex(column); + gap: 2.4rem; + p, + h5 { + font-size: 1.5rem; + line-height: 2.5rem; + } +} + +.article-links { + padding-top: 2.8rem; +} + +.article-content-bottom { + @include flex(column); + gap: 3.2rem; + + h3 { + font-size: 2.4rem; + } +} + +.article-bottom-head { + h4, + span { + color: $base-black; + font-weight: 300; + } +} + +.article-content-info { + color: $base-black !important; + + font-weight: bold !important; +} + +.article-items { + display: none; +} + +// Media +@media screen and (max-width: 1080px) { + .article-aside { + display: none; + } + .article-inner { + display: block; + } +} + +@media screen and (max-width: 800px) { + .article-inner { + padding: 2.2rem 0 5rem; + } + .article-head { + flex-direction: column-reverse; + + h2 { + font-size: 1.7rem; + } + + span { + font-size: 1.3rem; + color: $mild-gray; + } + } + .article-content-top { + gap: 2.5rem; + } + .article-content-bottom { + gap: 2.5rem; + h3 { + font-size: 2rem; + letter-spacing: 0.1em; + text-align: center; + } + } +} + +@media screen and (max-width: 700px) { + .article-swiper-wrapper-lower { + display: none; + } + .article-items { + @include flex(column); + gap: 2.5rem; + } + .article-content-info { + font-size: 1.5rem; + } + .article-bottom-head { + font-size: 1.3rem; + } + .sub-news-left-content-item-content { + gap: 0.5rem; + } + .article-bottom-item { + gap: 1.4rem; + } +} diff --git a/themes/modern2/assets/new/styles/_contact.scss b/themes/modern2/assets/new/styles/_contact.scss new file mode 100644 index 000000000..93c6d2526 --- /dev/null +++ b/themes/modern2/assets/new/styles/_contact.scss @@ -0,0 +1,79 @@ +.contact-inner { + padding: 4.3rem 0 8rem; + @include flex(column); + gap: 4.3rem; +} + +.contact-left, +.contact-form, +.contact-content { + @include flex(column); + gap: 4rem; +} + +.contact-block { + @include flex(column); + gap: 1.4rem; + + label { + color: $base-black; + font-size: 1.6rem; + font-weight: bold; + + span { + color: red; + } + } + + input, + textarea { + @include input; + resize: none; + outline: none; + } +} + +.contact-antispam { + @include imgStyle(17.8rem, 3.2rem, contain); +} + +.contact-content { + button { + cursor: pointer; + color: $base-white; + background: $base-green; + padding: 1rem 0; + width: 100%; + max-width: 17rem; + } +} + +// Media +@media screen and (max-width: 800px) { + .contact-inner { + padding: 2.2rem 0 5rem; + } + + .contact-left { + gap: 3.4rem; + } + .contact-form, + .contact-content { + gap: 3rem; + } +} + +@media screen and (max-width: 600px) { + .contact-block { + textarea { + height: 100%; + max-height: 7rem; + } + } + + .contact-content { + button { + max-width: unset; + } + } +} diff --git a/themes/modern2/assets/new/styles/_footer.scss b/themes/modern2/assets/new/styles/_footer.scss new file mode 100644 index 000000000..25db52e36 --- /dev/null +++ b/themes/modern2/assets/new/styles/_footer.scss @@ -0,0 +1,20 @@ +.footer { + @include grid(false, 1fr); + min-height: 23.6rem; + @include stretch; + background: $light-black; +} + +.footer-inner { + @include stretch; + @include flex; + align-items: center; + justify-content: center; + + p { + font-size: 1.3rem; + color: $base-white; + font-weight: bold; + text-align: center; + } +} diff --git a/themes/modern2/assets/new/styles/_general.scss b/themes/modern2/assets/new/styles/_general.scss new file mode 100644 index 000000000..5a492cca7 --- /dev/null +++ b/themes/modern2/assets/new/styles/_general.scss @@ -0,0 +1,49 @@ +@import url("https://fonts.googleapis.com/css2?family=Open+Sans&display=swap"); + +* { + padding: 0; + margin: 0; + box-sizing: border-box; + font-family: "Open Sans", sans-serif; +} + +html { + font-size: 62.5%; + min-height: 100%; + @include flex(column); +} + +body { + flex-grow: 1; +} + +input, +button { + background: none; + outline: none; + border: none; +} + +ul { + list-style-type: none; +} + +a { + color: #000; + text-decoration: none; +} + +.container { + @include stretch; + max-width: 174rem; + padding: 0 4rem; + margin: 0 auto; +} + +// Media + +@media screen and (max-width: 1000px) { + .container { + padding: 0 2rem; + } +} diff --git a/themes/modern2/assets/new/styles/_header.scss b/themes/modern2/assets/new/styles/_header.scss new file mode 100644 index 000000000..c2cdf43db --- /dev/null +++ b/themes/modern2/assets/new/styles/_header.scss @@ -0,0 +1,77 @@ +.big-banner { + a { + display: block; + @include imgStyle($objFit: cover); + } + + * { + display: block; + } +} + +.header { + border-top: 0.2rem black solid; +} + +.header-inner { + padding: 1.2rem 0; + gap: 4rem; + display: grid; + grid-template-columns: 68% auto; + align-items: center; +} + +.header-left { + @include flex; + align-items: center; + justify-content: flex-start; +} + +.header-right { + @include flex; + align-items: center; + justify-content: space-between; + gap: 2.6rem; +} + +.header-ext { + @include flex; + gap: 1.6rem; + align-items: center; +} + +.header-search { + @include flex; + align-items: center; + + input { + @include input; + width: 100%; + font-weight: bold; + } + + button { + @include flex; + align-items: center; + justify-content: center; + cursor: pointer; + padding: 0.85rem; + height: 100%; + border: 0.1rem solid $border-black; + } +} + +.search-icon { + img { + width: 2.5rem; + height: 2.5rem; + } + @include stretch; +} + +@media screen and (max-width: 950px) { + .header-inner { + @include flex; + justify-content: space-between; + } +} diff --git a/themes/modern2/assets/new/styles/_main.scss b/themes/modern2/assets/new/styles/_main.scss new file mode 100644 index 000000000..cab9ad626 --- /dev/null +++ b/themes/modern2/assets/new/styles/_main.scss @@ -0,0 +1,48 @@ +.main-inner { + padding: 2.8rem 0; + @include grid(false, 67% auto); + gap: 4rem; +} + +.main-advert { + a { + display: block; + @include imgStyle($objFit: cover); + } +} + +.banners-inner { + @include grid(false, 1fr 1fr); + gap: 2.5rem; + @include stretch; +} + +.banner { + @include imgStyle($objFit: cover); +} + +// Media + +@media screen and (max-width: 950px) { + .banner-container { + max-width: unset; + padding: 0; + } + .banner { + &:last-child { + display: none; + } + } + .banners-inner { + grid-template-columns: 1fr; + } +} + +// PAGE CONTENT +@import "./main/main-news"; +@import "./main/aside"; +@import "./main/sub-news"; +@import "./main/trending"; +@import "./main/posts"; +@import "./main/media"; +@import "./main/useful"; diff --git a/themes/modern2/assets/new/styles/_nav.scss b/themes/modern2/assets/new/styles/_nav.scss new file mode 100644 index 000000000..21b72fafe --- /dev/null +++ b/themes/modern2/assets/new/styles/_nav.scss @@ -0,0 +1,330 @@ +.nav { + background: $base-black; + box-shadow: 0 0.4rem 0.4rem 0 rgba(0, 0, 0, 0.25); + position: relative; + margin-bottom: 4rem; + + &.removed-mq { + margin-bottom: 0; + } +} + +.nav-inner { + padding: 0.2rem 0; + // @include flex; + // justify-content: space-between; + display: grid; + grid-template-columns: 68% auto; + gap: 4rem; + align-items: center; +} + +.nav-ul { + @include flex; + align-items: center; + justify-content: flex-start; + gap: 3.2rem; + a { + display: block; + font-weight: bold; + padding: 1rem 0; + position: relative; + color: $base-white; + font-size: 1.4rem; + + &::after { + left: 0; + bottom: 0.5rem; + position: absolute; + content: ""; + width: 100%; + height: 0; + border-top: 0.1rem solid $base-white; + display: block; + opacity: 0; + } + &.active { + &::after { + opacity: 1; + } + } + } +} + +.nav-right { + @include flex; + align-items: center; + justify-content: space-between; + gap: 5rem; +} + +.nav-right-link { + display: block; + background: $base-green; + font-size: 1.4rem; + padding: 0.4rem 7.8rem; + color: $base-white; + max-width: 18.6rem; + @include stretch; +} + +.nav-lang { + @include flex; + align-items: center; + gap: 1rem; +} + +.marquee { + position: absolute; + width: 100%; +} + +.marquee-inner { + position: relative; + @include stretch; + background: $base-green; + @include flex; + gap: 0.8rem; +} + +.marquee-title { + position: absolute; + left: 0; + top: 0; + z-index: 2; + padding: 1rem 3rem; + padding-right: 4rem; + font-size: 1.3rem; + color: $base-white; + font-weight: bold; + max-width: 12rem; + @include stretch; + background-image: url(../icons/marquee.svg); + background-repeat: no-repeat; + background-position: 0% center; +} + +.ticker { + @include stretch; + @include flex; +} + +.ticker-wrapper { + @include flex; + @include stretch; + gap: 2.4rem; + + a { + display: block; + color: $base-white; + font-size: 1.3rem; + font-weight: bold; + padding: 1.1rem 0; + } +} + +.nav-bottom-inner { + overflow-x: auto; + background: $base-green; + padding: 0 3.5rem; + ul { + @include flex; + align-items: center; + gap: 3.3rem; + } + a { + display: block; + font-weight: bold; + padding: 1rem; + position: relative; + color: $base-white; + font-size: 1.4rem; + + &::after { + left: 0; + bottom: 0.5rem; + position: absolute; + content: ""; + width: 100%; + height: 0; + border-top: 0.1rem solid $base-white; + display: block; + opacity: 0; + } + &.active { + &::after { + opacity: 1; + } + } + } +} + +.header-search-icon, +.header-burger { + cursor: pointer; + display: none; + @include imgStyle(3.9rem, 3.9rem, contain); +} + +// Burger + +.burger-wrapper { + @include grid(false, 22% 1fr); + position: fixed; + z-index: 1000; + top: 0; + right: 0; + width: 100vw; + height: 100vh; + transform: translateX(100%); + @include transition-std; + + .burger-close { + width: 0; + height: 100%; + background: rgba(0, 0, 0, 0.5); + @include transition-std; + + img { + padding: 1rem 0 0 2.7rem; + } + } + .burger-content { + @include flex(column); + gap: 4rem; + justify-content: space-between; + color: black; + width: 100%; + background: $light-black; + padding: 3rem 2rem; + overflow-y: auto; + } + + &.active { + transform: translateX(0); + + .burger-close { + width: 100%; + } + } +} + +.burger-list { + @include flex(column); +} + +.burger-list-li { + @include flex(column); + + &.green { + align-items: center; + padding-top: 1.3rem; + .burger-item { + background: $base-green; + padding: 0.8rem; + max-width: 15rem; + width: 100%; + } + } +} + +.burger-item { + font-size: 2rem; + color: $base-white; + text-align: center; + letter-spacing: 0.1em; + cursor: pointer; + font-weight: bold; + padding: 2rem 0; +} + +.burger-nested-list { + overflow: hidden; + max-height: 0; + @include transition-std; + @include flex(column); + align-items: center; + li { + @include stretch; + @include grid(false, 1fr); + } + a { + justify-self: center; + width: 50%; + color: $base-white; + text-align: center; + font-size: 1.4rem; + font-weight: bold; + padding: 1.5rem 0; + background: $light-gray; + @include transition-std; + + &:hover { + background: $mild-gray; + @include transition-std; + } + } + + &.active { + max-height: 50rem; + @include transition-std; + } +} + +.burger-lang { + @include flex; + align-items: center; + gap: 1.6rem; + justify-content: center; + + ul { + @include flex; + align-items: center; + gap: 1.6rem; + justify-content: center; + + button { + width: 4.3rem; + height: 3rem; + + img { + width: 4.3rem; + height: 3rem; + } + } + } +} + +// Media + +@media screen and (max-width: 1300px) { + .nav-right-link { + width: 11rem; + padding: 0.4rem 0; + text-align: center; + } +} +@media screen and (max-width: 1100px) { + .nav-ul { + gap: 1.6rem; + } +} +@media screen and (max-width: 1070px) { + .nav-inner { + @include flex; + grid-template-columns: unset; + justify-content: space-between; + } +} + +@media screen and (max-width: 950px) { + .nav, + .header-right, + .nav-bottom-inner { + display: none; + } + .header-search-icon, + .header-burger { + display: block; + } +} diff --git a/themes/modern2/assets/new/styles/_photo.scss b/themes/modern2/assets/new/styles/_photo.scss new file mode 100644 index 000000000..f8a900d71 --- /dev/null +++ b/themes/modern2/assets/new/styles/_photo.scss @@ -0,0 +1 @@ +@import "./photo/photo-main"; diff --git a/themes/modern2/assets/new/styles/_rubric.scss b/themes/modern2/assets/new/styles/_rubric.scss new file mode 100644 index 000000000..d204045e2 --- /dev/null +++ b/themes/modern2/assets/new/styles/_rubric.scss @@ -0,0 +1 @@ +@import "./rubric/_rubric-main"; diff --git a/themes/modern2/assets/new/styles/_variables.scss b/themes/modern2/assets/new/styles/_variables.scss new file mode 100644 index 000000000..5e533ebf9 --- /dev/null +++ b/themes/modern2/assets/new/styles/_variables.scss @@ -0,0 +1,67 @@ +$base-white: rgba(255, 255, 255, 1); +$base-red: rgba(255, 12, 0, 1); +$base-green: rgba(0, 130, 44, 1); +$base-black: rgba(36, 36, 36, 1); +$light-black: rgba(56, 56, 56, 1); +$base-gray: rgba(0, 0, 0, 0.6); +$mild-gray: rgba(85, 85, 85, 1); +$light-gray: rgba(101, 101, 101, 1); + +$border-black: rgba(0, 0, 0, 1); // Mixins +@mixin flex($dir: row) { + display: flex; + flex-direction: $dir; +} + +@mixin stretch { + width: 100%; + height: 100%; +} + +@mixin transition-std($duration: 0.3s) { + transition: $duration all ease; +} + +@mixin imgStyle($mWidth: unset, $mHeight: unset, $objFit: cover) { + max-width: $mWidth; + max-height: $mHeight; + @include stretch; + + img { + @include stretch; + object-fit: $objFit; + } +} + +@mixin grid($row, $layout) { + display: grid; + + @if ($row) { + grid-template-rows: $layout; + } @else { + grid-template-columns: $layout; + } +} + +@mixin input { + border: 0.1rem solid $border-black; + font-size: 1.2rem; + padding: 1rem 0.8rem; + @include stretch; + + &::placeholder { + color: $base-gray; + } +} + +@mixin sectionTitle { + font-size: 2.4rem; + color: $base-black; + letter-spacing: 0.1em; + line-height: 3.3rem; +} + +@mixin input { + border: 1px solid #00822c; + padding: 1.4rem; +} diff --git a/themes/modern2/assets/new/styles/_video.scss b/themes/modern2/assets/new/styles/_video.scss new file mode 100644 index 000000000..f8b2e0272 --- /dev/null +++ b/themes/modern2/assets/new/styles/_video.scss @@ -0,0 +1,58 @@ +.video-main-inner { + padding: 4.7rem 0 8rem 0; + @include flex(column); + gap: 4.3rem; +} + +.video-main-top { + @include grid(false, repeat(3, 1fr)); + gap: 6rem; + + h4, + span, + p { + color: $border-black; + } +} + +.video-main-bottom { + padding-top: 3.7rem; + @include flex; + gap: 2.6rem; + align-items: center; + justify-content: flex-start; + + span { + font-size: 1.6rem; + color: $base-green; + } +} + +.video-main-pagination { + cursor: pointer; + @include imgStyle(4.1rem, 3.8rem, contain); + background: $light-black; + width: 4.1rem; + height: 3.8rem; +} + +// Media +@media screen and (max-width: 950px) { + .video-main-top { + grid-template-columns: 1fr 1fr; + gap: 4rem; + } +} + +@media screen and (max-width: 800px) { + .video-main-inner { + padding: 2.2rem 0 5rem; + gap: 1.3rem; + } +} + +@media screen and (max-width: 800px) { + .video-main-top { + grid-template-columns: 1fr; + } +} diff --git a/themes/modern2/assets/new/styles/affiche/_affiche-item.scss b/themes/modern2/assets/new/styles/affiche/_affiche-item.scss new file mode 100644 index 000000000..d1724ca7f --- /dev/null +++ b/themes/modern2/assets/new/styles/affiche/_affiche-item.scss @@ -0,0 +1,88 @@ +.affiche-item-inner { + padding: 4.6rem 0 8rem 0; + @include grid(false, 67% auto); + gap: 5rem; +} + +.affiche-item-content { + @include flex(column); + gap: 2.3rem; +} + +.affiche-item-head { + @include flex(column); + gap: 1.5rem; + + h1 { + font-size: 2.4rem; + } + span { + font-size: 1.5rem; + color: $base-green; + } +} + +.affiche-item-img { + @include imgStyle(unset, unset, cover); + justify-self: center; + align-self: center; +} +.affiche-item-top { + @include grid(false, 64% auto); + gap: 1.8rem; + + .affiche-item-data { + gap: 1.5rem; + justify-self: flex-start; + align-self: center; + } +} + +.affiche-item-bottom { + @include flex(column); + gap: 1rem; + font-size: 1.6rem; +} + +.affiche-item-item { + @include flex(column); + gap: 2.3rem; +} + +// Media +@media screen and (max-width: 1080px) { + .affiche-item-inner { + grid-template-columns: 1fr; + } + .affiche-item-aside { + display: none; + } + .affiche-item-top { + @include flex(column-reverse); + } + + .affiche-item-top { + .affiche-item-data { + justify-self: unset; + align-self: unset; + } + } +} + +@media screen and (max-width: 800px) { + .affiche-item-head { + flex-direction: column-reverse; + gap: 1rem; + h1 { + font-size: 1.7rem; + } + + span { + font-size: 1.3rem; + color: $mild-gray; + } + } + .affiche-item-bottom { + font-size: 1.5rem; + } +} diff --git a/themes/modern2/assets/new/styles/affiche/_affiche-main.scss b/themes/modern2/assets/new/styles/affiche/_affiche-main.scss new file mode 100644 index 000000000..ec4e856e1 --- /dev/null +++ b/themes/modern2/assets/new/styles/affiche/_affiche-main.scss @@ -0,0 +1,64 @@ +.affiche-inner { + padding: 4.4rem 0 8rem 0; + @include flex(column); + gap: 4.3rem; +} + +.affiche-item-data { + @include flex(column); + gap: 1rem; +} + +.affiche-item-data-row { + @include flex; + align-items: center; + gap: 1.6rem; + + span { + font-size: 1.5rem; + } +} + +.affiche-item-data-img { + width: 1.3rem; + height: 1.3rem; + + img { + width: 1.3rem; + height: 1.3rem; + object-fit: contain; + } +} + +// Media +@media screen and (max-width: 850px) { + .affiche-inner { + gap: 2.8rem; + } + .affiche-items { + gap: 4rem; + } + + .affiche-item { + flex-direction: column; + + .sub-news-left-content-item-img { + max-width: unset; + max-height: unset; + } + + .sub-news-left-content-item-date-content-head { + font-size: 1.3rem; + } + + h3 { + font-size: 1.5rem; + } + } +} + +@media screen and (max-width: 800px) { + .affiche-inner { + padding: 2.2rem 0 5rem; + } +} diff --git a/themes/modern2/assets/new/styles/main/_aside.scss b/themes/modern2/assets/new/styles/main/_aside.scss new file mode 100644 index 000000000..c572732f6 --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_aside.scss @@ -0,0 +1,189 @@ +.aside { + position: sticky; + height: fit-content; + top: 4.6rem; + right: 0; + width: 100%; + // max-width: 35rem; + @include flex(column); + gap: 3.4rem; +} + +.aside-content-wrapper { + display: grid; + grid-template-columns: 1fr; + gap: 2.5rem; + overflow: hidden; +} + +.aside-title { + @include sectionTitle; +} + +.aside-btns { + list-style-type: disc; + @include grid(false, 1fr 1fr); + button { + text-align: left; + position: relative; + padding: 0.6rem; + padding-left: 1.7rem; + cursor: pointer; + width: 100%; + border: 0.1rem solid $base-green; + color: $base-green; + background: $base-white; + @include transition-std; + + &::before { + content: ""; + border-radius: 50%; + display: block; + width: 0.4rem; + height: 0.4rem; + background: $base-green; + position: absolute; + left: 0.6rem; + top: 50%; + transform: translateY(-50%); + @include transition-std; + } + + &.active { + color: $base-white; + background: $base-green; + @include transition-std; + + &::before { + background: $base-white; + @include transition-std; + } + } + } +} + +.aside-content { + z-index: 1; + grid-column: 1/1; + grid-row: 3/3; + @include flex(column); + gap: 1rem; + top: 12rem; + transform: translate(-100%, -20%) scale(0.7); + opacity: 0; + width: 100%; + @include transition-std(0.5s); + + &.active { + z-index: 2; + transform: translate(0%, 0%) scale(1); + opacity: 1; + @include transition-std(0.5s); + } +} + +.aside-content-item { + @include flex(column); + gap: 1.8rem; + + &:not(:last-child) { + padding-bottom: 2rem; + } +} + +.aside-content-item-title { + @include flex; + align-items: center; + gap: 0.4rem; + + h3 { + color: $base-red; + font-size: 1.2rem; + letter-spacing: 0.1em; + } + + h4, + span { + color: $mild-gray; + font-size: 1.2rem; + font-weight: normal; + } +} + +.aside-content-item-info { + font-size: 1.3rem; + line-height: 1.77rem; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.aside-content-more { + @include flex; + align-items: center; + justify-content: center; + gap: 1rem; + font-size: 1.3rem; + border: 0.1rem solid $base-green; + padding: 0.6rem 1rem; + background: transparent; + color: $base-black; + @include transition-std; + + img { + opacity: 1; + @include transition-std; + } + + &:hover { + color: $base-white; + background: $base-green; + @include transition-std; + + img { + opacity: 0; + @include transition-std; + } + } +} + +.aside-ad-wrapper { + @include imgStyle($objFit: cover); +} + +.aside-container { + width: 100%; + padding: 0 4rem 0 0; + max-width: unset; +} + +// Media +@media screen and (max-width: 1070px) { + .aside { + max-width: unset; + } + .aside-ad-wrapper { + a { + @include stretch; + @include flex; + justify-content: center; + } + } + .aside-container { + max-width: 174rem; + padding: 0 3rem; + margin: 0 auto; + } +} + +@media screen and (max-width: 800px) { + .aside-title { + text-align: center; + font-size: 1.8rem; + } + .aside-content-wrapper { + gap: 2.2rem; + } +} diff --git a/themes/modern2/assets/new/styles/main/_main-news.scss b/themes/modern2/assets/new/styles/main/_main-news.scss new file mode 100644 index 000000000..608cdbae3 --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_main-news.scss @@ -0,0 +1,139 @@ +.main-news-inner { + @include flex; + gap: 1.5rem; +} + +.main-inner-content { + @include stretch; + @include flex(column); + gap: 4.2rem; +} + +.main-news-lead { + width: 100%; + max-width: 71%; + position: relative; + @include flex; + justify-content: flex-start; + align-items: flex-end; +} + +.main-news-bg { + @include imgStyle($objFit: cover); +} + +.main-news-overlay { + z-index: 1; + @include stretch; + position: absolute; + top: 0; + left: 0; + background: linear-gradient( + 180deg, + rgba(0, 0, 0, 0) 0%, + rgba(0, 0, 0, 0.7) 100% + ); +} + +.main-news-info { + padding: 0 2.7rem; + z-index: 2; + position: absolute; + bottom: 3.2rem; + left: 0rem; + width: 100%; + @include flex(column); +} + +.main-news-info-title { + @include flex; + gap: 0.4rem; + + span { + font-size: 1.2rem; + color: $base-white; + } + + h3 { + font-size: 1.2rem; + color: $base-red; + letter-spacing: 0.1em; + } + + h4 { + font-size: 1.2rem; + color: $base-white; + } +} + +.main-news-info-content { + font-size: 1.6rem; + color: $base-white; + line-height: 2.179rem; + font-weight: bold; +} + +.main-news-container { + padding-right: 0; +} + +.main-news-min { + @include stretch; + max-width: 29%; + @include flex(column); + gap: 1.7rem; +} + +.main-news-min-item { + position: relative; +} + +.main-news-min-bg { + @include imgStyle($objFit: cover); +} + +.main-news-min-info { + position: absolute; + padding: 0 1.2rem; + left: 0; + bottom: 0.7rem; + display: block; + font-size: 1rem; + line-height: 1.362rem; + color: $base-white; + z-index: 2; + font-weight: bold; + text-shadow: 0 0.4rem 0.4rem rgba(0, 0, 0, 0.25); +} + +// Media +@media screen and (max-width: 1070px) { + .main-news-container { + padding-right: 4rem; + } + .main-inner { + @include flex(column); + } +} + +@media screen and (max-width: 950px) { + .main-news-min { + display: none; + } + .main-news-lead { + max-width: unset; + } + .main-news-container { + max-width: unset; + padding: 0; + } + .main-news-info-title { + font-size: 1.3rem; + } + .main-news-info-content { + font-size: 1.5rem; + } + .main-inner-content { + gap: 2.5rem; + } +} diff --git a/themes/modern2/assets/new/styles/main/_media.scss b/themes/modern2/assets/new/styles/main/_media.scss new file mode 100644 index 000000000..7a8ccd17f --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_media.scss @@ -0,0 +1,134 @@ +.media { + background: $mild-gray; +} + +.media-inner { + padding: 4rem 0; + @include flex(column); + gap: 5.2rem; +} + +.media-head { + h2 { + color: $base-white; + } + span { + border: 0.1rem solid $base-white; + } +} + +.media-videos { + @include flex(column); + gap: 4rem; +} + +.video-item { + @include flex(column); + gap: 0.8rem; +} + +.video { + @include stretch; + + video { + @include stretch; + object-fit: contain; + } + + img { + @include stretch; + object-fit: contain; + } +} + +.video-info { + h4, + span, + p { + color: $base-white; + font-weight: normal; + } +} + +.swiper { + position: relative !important; +} + +.video-prev { + @include flex; + align-items: center; + justify-content: center; + left: 0; + top: 30%; + position: absolute; + background: rgba(39, 39, 39, 0.7); + height: 6rem; + width: 4rem; + z-index: 2; + cursor: pointer; + + img { + width: 3.2rem; + height: 3.2rem; + } +} + +.video-next { + @include flex; + align-items: center; + justify-content: center; + right: 0; + top: 30%; + position: absolute; + background: rgba(39, 39, 39, 0.7); + height: 6rem; + width: 4rem; + z-index: 2; + cursor: pointer; + + img { + width: 3.2rem; + height: 3.2rem; + } +} + +.partners { + @include flex(column); + gap: 4.6rem; + + .swiper-slide { + @include flex; + justify-content: center; + } + + .swiper-slide-active { + .partners-item { + transform: scale(1.1); + @include transition-std; + } + } +} + +.partners-item { + @include imgStyle(16.7rem, 8.7rem, contain); + transform: scale(0.8); + @include transition-std; +} + +.partners-head { + @include sectionTitle; + text-align: center; + color: $base-white; +} + +.partner-prev, +.partner-next { + background: none; +} + +// Media +@media screen and (max-width: 950px) { + .media { + display: none; + } +} diff --git a/themes/modern2/assets/new/styles/main/_posts.scss b/themes/modern2/assets/new/styles/main/_posts.scss new file mode 100644 index 000000000..d15cc0411 --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_posts.scss @@ -0,0 +1,63 @@ +.posts { + padding: 4rem 0; +} + +.posts-inner { + @include flex(column); + gap: 4rem; +} + +.posts-content { + display: grid; + grid-template-areas: "big big sm1 sm2" "big big sm3 sm4" "sm5 sm6 sm7 sm8"; + gap: 2.5rem; +} + +.posts-item { + &.sm { + .trending-img { + overflow: hidden; + } + } + &.big { + grid-area: big; + } + &.sm1 { + grid-area: sm1; + } + &.sm2 { + grid-area: sm2; + } + &.sm3 { + grid-area: sm3; + } + &.sm4 { + grid-area: sm4; + } + &.sm5 { + grid-area: sm5; + } + &.sm6 { + grid-area: sm6; + } + &.sm7 { + grid-area: sm7; + } + &.sm8 { + grid-area: sm8; + } +} + +// Media +@media screen and (max-width: 950px) { + .posts-item.big { + grid-area: none; + @include stretch; + } + .posts-content { + @include flex; + } + .posts-item.sm { + display: none; + } +} diff --git a/themes/modern2/assets/new/styles/main/_sub-news.scss b/themes/modern2/assets/new/styles/main/_sub-news.scss new file mode 100644 index 000000000..81805bd1a --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_sub-news.scss @@ -0,0 +1,181 @@ +.sub-news-left { + @include flex(column); + gap: 1.8rem; + + h2 { + @include sectionTitle; + font-weight: 600; + } +} + +.sub-news-left-content { + @include flex(column); + gap: 2rem; + height: 100%; + justify-content: space-between; +} + +.sub-news-inner { + @include grid(false, 1fr 1fr); + gap: 3.5rem; + height: 100%; +} + +.sub-news-left-content-item { + @include flex; + gap: 0.8rem; +} + +.sub-news-left-content-item-img { + @include imgStyle(11.7rem, 7.5rem, cover); +} + +.sub-news-left-content-item-content { + @include stretch; + @include flex(column); + gap: 0.4rem; +} + +.sub-news-left-content-item-date-content-head { + @include flex; + align-items: center; + gap: 0.4rem; + color: $base-green; + font-size: 1.2rem; +} + +.sub-news-left-content-item-date-content-info { + font-size: 1.2rem; + color: $base-black; + line-height: 1.6rem; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +// SUB NEWS RIGHT +.sub-news { + height: 100%; +} + +.sub-news-right { + @include flex(column); + gap: 2rem; + justify-content: space-between; + height: 100%; +} + +.sub-news-right-top { + @include flex(column); + gap: 1.5rem; + h2 { + padding-bottom: 0.3rem; + @include sectionTitle; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.sub-news-right-top-content { + @include flex(column); + gap: 1.5rem; + height: 100%; + justify-content: space-between; +} + +.sub-news-right-top-item { + @include flex; + align-items: center; + min-height: 7.5rem; + + p { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.sub-news-right-bottom { + @include flex(column); + gap: 1.8rem; + + h2 { + @include sectionTitle; + font-weight: 600; + } +} + +.sub-news-right-bottom-content { + @include grid(false, 1fr 1fr 1fr); + gap: 0.8rem; +} + +.sub-news-right-bottom-item { + display: block; + position: relative; + font-size: 1.3rem; + background: $base-green; + padding: 0.6rem 1rem; + padding-left: 2rem; + @include transition-std; + color: $base-white; + letter-spacing: 0.05em; + + &:hover { + background: $base-red; + @include transition-std; + } + + &::before { + content: ""; + border-radius: 50%; + display: block; + width: 0.4rem; + height: 0.4rem; + background: #00822c; + position: absolute; + left: 0.6rem; + top: 50%; + background: $base-white; + } +} + +// Media +@media screen and (max-width: 800px) { + .sub-news-left, + .sub-news-right-top, + .sub-news-right-bottom { + h2 { + text-align: center; + font-size: 1.8rem; + } + } + .sub-news-right-bottom-content { + grid-template-columns: 1fr 1fr; + } + + .sub-news-right-top-item { + min-height: unset; + } + .sub-news-right-top-content { + gap: 2.5rem; + } + .sub-news-right { + @include flex(column); + gap: 5rem; + } + .main-inner { + gap: 5rem; + } +} + +@media screen and (max-width: 780px) { + .sub-news-inner { + grid-template-columns: 1fr; + } +} diff --git a/themes/modern2/assets/new/styles/main/_trending.scss b/themes/modern2/assets/new/styles/main/_trending.scss new file mode 100644 index 000000000..e552d0c29 --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_trending.scss @@ -0,0 +1,105 @@ +.trending { + padding: 4.6rem 0 4rem 0; +} + +.trending-inner { + @include grid(false, 1fr 1fr 1fr); + gap: 3.6rem; +} + +.trending-banner { + @include imgStyle(unset, unset, contain); +} + +.trending-head { + @include flex; + align-items: center; + gap: 1.5rem; + h2 { + @include sectionTitle; + white-space: nowrap; + } + span { + width: 100%; + border-top: 0.1rem solid $base-green; + } +} + +.trending-aside, +.trending-main { + @include flex(column); + gap: 2.5rem; +} + +.trending-aside-item { + @include flex(column); + gap: 1.6rem; +} + +.trending-img { + @include imgStyle($objFit: cover); +} + +.trending-aside-content { + @include stretch; + @include flex(column); + gap: 0.4rem; +} + +.trending-aside-content-head { + h3 { + color: $base-green; + } + + h4, + span { + color: $mild-gray; + font-weight: normal; + } +} + +.trending-main-content { + @include grid(false, 1fr); + gap: 3.5rem; +} + +.trending-item { + @include flex; + gap: 0.8rem; + + .trending-img { + @include imgStyle(11.7rem, 7.5rem, cover); + } +} + +.trending-main-content-inner { + @include stretch; + @include flex(column); + gap: 0.4rem; +} + +// Media +@media screen and (max-width: 1150px) { + .trending-banner { + display: none; + } + .trending-inner { + grid-template-columns: 1fr 1fr; + } +} +@media screen and (max-width: 950px) { + .trending-inner { + @include flex(column-reverse); + } +} + +@media screen and (max-width: 800px) { + .trending-head { + h2 { + font-size: 2rem; + } + } + .trending-main-content { + gap: 2.5rem; + } +} diff --git a/themes/modern2/assets/new/styles/main/_useful.scss b/themes/modern2/assets/new/styles/main/_useful.scss new file mode 100644 index 000000000..7a6ec192c --- /dev/null +++ b/themes/modern2/assets/new/styles/main/_useful.scss @@ -0,0 +1,77 @@ +.useful-inner { + padding: 4rem 0; + display: grid; + grid-template-columns: 67% auto; + gap: 3.6rem; +} + +.useful-aside-item-top { + @include flex; + gap: 1rem; + align-items: center; + + span { + font-size: 1.2rem; + color: $base-green; + font-weight: 300; + } +} + +.useful-aside-img { + @include imgStyle(7.7rem, 8.5rem, cover); +} + +.useful-aside-item { + @include flex(column); + gap: 1rem; + max-height: 7.5rem; +} + +.useful-aside-item-bottom { + p { + font-size: 1.3rem; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + } +} + +.useful-aside-content { + @include flex(column); + gap: 3.5rem; +} + +.useful-aside { + @include flex(column); + gap: 2.5rem; +} + +.useful-main-content { + grid-template-columns: 1fr 1fr; +} + +// Media +@media screen and (max-width: 1250px) { + .useful-inner { + grid-template-columns: 2fr 1fr; + } +} +@media screen and (max-width: 1100px) { + .useful-inner { + grid-template-columns: 1fr; + } +} +@media screen and (max-width: 950px) { + .useful-main-content { + grid-template-columns: 1fr; + } + .trending-item { + &:nth-child(6), + &:nth-child(7), + &:nth-child(8) { + display: none; + } + } +} diff --git a/themes/modern2/assets/new/styles/photo/_photo-main.scss b/themes/modern2/assets/new/styles/photo/_photo-main.scss new file mode 100644 index 000000000..e69de29bb diff --git a/themes/modern2/assets/new/styles/rubric/_rubric-main.scss b/themes/modern2/assets/new/styles/rubric/_rubric-main.scss new file mode 100644 index 000000000..b8868eb09 --- /dev/null +++ b/themes/modern2/assets/new/styles/rubric/_rubric-main.scss @@ -0,0 +1,59 @@ +.rubric-inner { + padding: 4.7rem 0 8rem 0; + @include flex(column); + gap: 4.3rem; +} + +.rubric-items { + padding: 0 6.7rem; + @include flex(column); + gap: 8rem; +} +.rubric-item { + align-items: center; + gap: 1.5rem; + .sub-news-left-content-item-date-content-info { + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + font-size: 1.5rem; + line-height: 2.5rem; + } + .sub-news-left-content-item-img { + @include imgStyle(35rem, 20rem, cover); + } + .sub-news-left-content-item-content { + gap: 0.8rem; + h3 { + font-size: 1.8rem; + } + } + .sub-news-left-content-item-date-content-head { + font-size: 1.4rem; + color: $base-gray; + } +} + +.rubric-bottom { + padding: 0 6.7rem; +} + +@media screen and (max-width: 1080px) { + .rubric-items, + .rubric-bottom { + padding: 0; + } +} + +@media screen and (max-width: 900px) { + .rubric-item { + flex-direction: column; + + .sub-news-left-content-item-img { + max-width: unset; + max-height: unset; + } + } +} diff --git a/themes/modern2/assets/new/styles/style.css b/themes/modern2/assets/new/styles/style.css new file mode 100644 index 000000000..7f768829e --- /dev/null +++ b/themes/modern2/assets/new/styles/style.css @@ -0,0 +1,2055 @@ +@import "./swiper-bundle.min.css"; +@import url("https://fonts.googleapis.com/css2?family=Open+Sans&display=swap"); +* { + padding: 0; + margin: 0; + box-sizing: border-box; + font-family: "Open Sans", sans-serif; +} + +html { + font-size: 62.5%; + min-height: 100%; + display: flex; + flex-direction: column; +} + +body { + flex-grow: 1; +} + +input, +button { + background: none; + outline: none; + border: none; +} + +ul { + list-style-type: none; +} + +a { + color: #000; + text-decoration: none; +} + +.container { + width: 100%; + height: 100%; + max-width: 174rem; + padding: 0 4rem; + margin: 0 auto; +} + +@media screen and (max-width: 1000px) { + .container { + padding: 0 2rem; + } +} +.big-banner a { + display: block; + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.big-banner a img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.big-banner * { + display: block; +} + +.header { + border-top: 0.2rem black solid; +} + +.header-inner { + padding: 1.2rem 0; + gap: 4rem; + display: grid; + grid-template-columns: 68% auto; + align-items: center; +} + +.header-left { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; +} + +.header-right { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + gap: 2.6rem; +} + +.header-ext { + display: flex; + flex-direction: row; + gap: 1.6rem; + align-items: center; +} + +.header-search { + display: flex; + flex-direction: row; + align-items: center; +} +.header-search input { + border: 1px solid #00822c; + padding: 1.4rem; + width: 100%; + font-weight: bold; +} +.header-search button { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + cursor: pointer; + padding: 0.85rem; + height: 100%; + border: 0.1rem solid rgb(0, 0, 0); +} + +.search-icon { + width: 100%; + height: 100%; +} +.search-icon img { + width: 2.5rem; + height: 2.5rem; +} + +@media screen and (max-width: 950px) { + .header-inner { + display: flex; + flex-direction: row; + justify-content: space-between; + } +} +.nav { + background: rgb(36, 36, 36); + box-shadow: 0 0.4rem 0.4rem 0 rgba(0, 0, 0, 0.25); + position: relative; + margin-bottom: 4rem; +} +.nav.removed-mq { + margin-bottom: 0; +} + +.nav-inner { + padding: 0.2rem 0; + display: grid; + grid-template-columns: 68% auto; + gap: 4rem; + align-items: center; +} + +.nav-ul { + display: flex; + flex-direction: row; + align-items: center; + justify-content: flex-start; + gap: 3.2rem; +} +.nav-ul a { + display: block; + font-weight: bold; + padding: 1rem 0; + position: relative; + color: rgb(255, 255, 255); + font-size: 1.4rem; +} +.nav-ul a::after { + left: 0; + bottom: 0.5rem; + position: absolute; + content: ""; + width: 100%; + height: 0; + border-top: 0.1rem solid rgb(255, 255, 255); + display: block; + opacity: 0; +} +.nav-ul a.active::after { + opacity: 1; +} + +.nav-right { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + gap: 5rem; +} + +.nav-right-link { + display: block; + background: rgb(0, 130, 44); + font-size: 1.4rem; + padding: 0.4rem 7.8rem; + color: rgb(255, 255, 255); + max-width: 18.6rem; + width: 100%; + height: 100%; +} + +.nav-lang { + display: flex; + flex-direction: row; + align-items: center; + gap: 1rem; +} + +.marquee { + position: absolute; + width: 100%; +} + +.marquee-inner { + position: relative; + width: 100%; + height: 100%; + background: rgb(0, 130, 44); + display: flex; + flex-direction: row; + gap: 0.8rem; +} + +.marquee-title { + position: absolute; + left: 0; + top: 0; + z-index: 2; + padding: 1rem 3rem; + padding-right: 4rem; + font-size: 1.3rem; + color: rgb(255, 255, 255); + font-weight: bold; + max-width: 12rem; + width: 100%; + height: 100%; + background-image: url(../icons/marquee.svg); + background-repeat: no-repeat; + background-position: 0% center; +} + +.ticker { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; +} + +.ticker-wrapper { + display: flex; + flex-direction: row; + width: 100%; + height: 100%; + gap: 2.4rem; +} +.ticker-wrapper a { + display: block; + color: rgb(255, 255, 255); + font-size: 1.3rem; + font-weight: bold; + padding: 1.1rem 0; +} + +.nav-bottom-inner { + overflow-x: auto; + background: rgb(0, 130, 44); + padding: 0 3.5rem; +} +.nav-bottom-inner ul { + display: flex; + flex-direction: row; + align-items: center; + gap: 3.3rem; +} +.nav-bottom-inner a { + display: block; + font-weight: bold; + padding: 1rem; + position: relative; + color: rgb(255, 255, 255); + font-size: 1.4rem; +} +.nav-bottom-inner a::after { + left: 0; + bottom: 0.5rem; + position: absolute; + content: ""; + width: 100%; + height: 0; + border-top: 0.1rem solid rgb(255, 255, 255); + display: block; + opacity: 0; +} +.nav-bottom-inner a.active::after { + opacity: 1; +} + +.header-search-icon, +.header-burger { + cursor: pointer; + display: none; + max-width: 3.9rem; + max-height: 3.9rem; + width: 100%; + height: 100%; +} +.header-search-icon img, +.header-burger img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.burger-wrapper { + display: grid; + grid-template-columns: 22% 1fr; + position: fixed; + z-index: 1000; + top: 0; + right: 0; + width: 100vw; + height: 100vh; + transform: translateX(100%); + transition: 0.3s all ease; +} +.burger-wrapper .burger-close { + width: 0; + height: 100%; + background: rgba(0, 0, 0, 0.5); + transition: 0.3s all ease; +} +.burger-wrapper .burger-close img { + padding: 1rem 0 0 2.7rem; +} +.burger-wrapper .burger-content { + display: flex; + flex-direction: column; + gap: 4rem; + justify-content: space-between; + color: black; + width: 100%; + background: rgb(56, 56, 56); + padding: 3rem 2rem; + overflow-y: auto; +} +.burger-wrapper.active { + transform: translateX(0); +} +.burger-wrapper.active .burger-close { + width: 100%; +} + +.burger-list { + display: flex; + flex-direction: column; +} + +.burger-list-li { + display: flex; + flex-direction: column; +} +.burger-list-li.green { + align-items: center; + padding-top: 1.3rem; +} +.burger-list-li.green .burger-item { + background: rgb(0, 130, 44); + padding: 0.8rem; + max-width: 15rem; + width: 100%; +} + +.burger-item { + font-size: 2rem; + color: rgb(255, 255, 255); + text-align: center; + letter-spacing: 0.1em; + cursor: pointer; + font-weight: bold; + padding: 2rem 0; +} + +.burger-nested-list { + overflow: hidden; + max-height: 0; + transition: 0.3s all ease; + display: flex; + flex-direction: column; + align-items: center; +} +.burger-nested-list li { + width: 100%; + height: 100%; + display: grid; + grid-template-columns: 1fr; +} +.burger-nested-list a { + justify-self: center; + width: 50%; + color: rgb(255, 255, 255); + text-align: center; + font-size: 1.4rem; + font-weight: bold; + padding: 1.5rem 0; + background: rgb(101, 101, 101); + transition: 0.3s all ease; +} +.burger-nested-list a:hover { + background: rgb(85, 85, 85); + transition: 0.3s all ease; +} +.burger-nested-list.active { + max-height: 50rem; + transition: 0.3s all ease; +} + +.burger-lang { + display: flex; + flex-direction: row; + align-items: center; + gap: 1.6rem; + justify-content: center; +} +.burger-lang ul { + display: flex; + flex-direction: row; + align-items: center; + gap: 1.6rem; + justify-content: center; +} +.burger-lang ul button { + width: 4.3rem; + height: 3rem; +} +.burger-lang ul button img { + width: 4.3rem; + height: 3rem; +} + +@media screen and (max-width: 1300px) { + .nav-right-link { + width: 11rem; + padding: 0.4rem 0; + text-align: center; + } +} +@media screen and (max-width: 1100px) { + .nav-ul { + gap: 1.6rem; + } +} +@media screen and (max-width: 1070px) { + .nav-inner { + display: flex; + flex-direction: row; + grid-template-columns: unset; + justify-content: space-between; + } +} +@media screen and (max-width: 950px) { + .nav, +.header-right, +.nav-bottom-inner { + display: none; + } + .header-search-icon, +.header-burger { + display: block; + } +} +.main-inner { + padding: 2.8rem 0; + display: grid; + grid-template-columns: 67% auto; + gap: 4rem; +} + +.main-advert a { + display: block; + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.main-advert a img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.banners-inner { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 2.5rem; + width: 100%; + height: 100%; +} + +.banner { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.banner img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +@media screen and (max-width: 950px) { + .banner-container { + max-width: unset; + padding: 0; + } + .banner:last-child { + display: none; + } + .banners-inner { + grid-template-columns: 1fr; + } +} +.main-news-inner { + display: flex; + flex-direction: row; + gap: 1.5rem; +} + +.main-inner-content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 4.2rem; +} + +.main-news-lead { + width: 100%; + max-width: 71%; + position: relative; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-end; +} + +.main-news-bg { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.main-news-bg img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.main-news-overlay { + z-index: 1; + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.7) 100%); +} + +.main-news-info { + padding: 0 2.7rem; + z-index: 2; + position: absolute; + bottom: 3.2rem; + left: 0rem; + width: 100%; + display: flex; + flex-direction: column; +} + +.main-news-info-title { + display: flex; + flex-direction: row; + gap: 0.4rem; +} +.main-news-info-title span { + font-size: 1.2rem; + color: rgb(255, 255, 255); +} +.main-news-info-title h3 { + font-size: 1.2rem; + color: rgb(255, 12, 0); + letter-spacing: 0.1em; +} +.main-news-info-title h4 { + font-size: 1.2rem; + color: rgb(255, 255, 255); +} + +.main-news-info-content { + font-size: 1.6rem; + color: rgb(255, 255, 255); + line-height: 2.179rem; + font-weight: bold; +} + +.main-news-container { + padding-right: 0; +} + +.main-news-min { + width: 100%; + height: 100%; + max-width: 29%; + display: flex; + flex-direction: column; + gap: 1.7rem; +} + +.main-news-min-item { + position: relative; +} + +.main-news-min-bg { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.main-news-min-bg img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.main-news-min-info { + position: absolute; + padding: 0 1.2rem; + left: 0; + bottom: 0.7rem; + display: block; + font-size: 1rem; + line-height: 1.362rem; + color: rgb(255, 255, 255); + z-index: 2; + font-weight: bold; + text-shadow: 0 0.4rem 0.4rem rgba(0, 0, 0, 0.25); +} + +@media screen and (max-width: 1070px) { + .main-news-container { + padding-right: 4rem; + } + .main-inner { + display: flex; + flex-direction: column; + } +} +@media screen and (max-width: 950px) { + .main-news-min { + display: none; + } + .main-news-lead { + max-width: unset; + } + .main-news-container { + max-width: unset; + padding: 0; + } + .main-news-info-title { + font-size: 1.3rem; + } + .main-news-info-content { + font-size: 1.5rem; + } + .main-inner-content { + gap: 2.5rem; + } +} +.aside { + position: -webkit-sticky; + position: sticky; + height: -webkit-fit-content; + height: -moz-fit-content; + height: fit-content; + top: 4.6rem; + right: 0; + width: 100%; + display: flex; + flex-direction: column; + gap: 3.4rem; +} + +.aside-content-wrapper { + display: grid; + grid-template-columns: 1fr; + gap: 2.5rem; + overflow: hidden; +} + +.aside-title { + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; +} + +.aside-btns { + list-style-type: disc; + display: grid; + grid-template-columns: 1fr 1fr; +} +.aside-btns button { + text-align: left; + position: relative; + padding: 0.6rem; + padding-left: 1.7rem; + cursor: pointer; + width: 100%; + border: 0.1rem solid rgb(0, 130, 44); + color: rgb(0, 130, 44); + background: rgb(255, 255, 255); + transition: 0.3s all ease; +} +.aside-btns button::before { + content: ""; + border-radius: 50%; + display: block; + width: 0.4rem; + height: 0.4rem; + background: rgb(0, 130, 44); + position: absolute; + left: 0.6rem; + top: 50%; + transform: translateY(-50%); + transition: 0.3s all ease; +} +.aside-btns button.active { + color: rgb(255, 255, 255); + background: rgb(0, 130, 44); + transition: 0.3s all ease; +} +.aside-btns button.active::before { + background: rgb(255, 255, 255); + transition: 0.3s all ease; +} + +.aside-content { + z-index: 1; + grid-column: 1/1; + grid-row: 3/3; + display: flex; + flex-direction: column; + gap: 1rem; + top: 12rem; + transform: translate(-100%, -20%) scale(0.7); + opacity: 0; + width: 100%; + transition: 0.5s all ease; +} +.aside-content.active { + z-index: 2; + transform: translate(0%, 0%) scale(1); + opacity: 1; + transition: 0.5s all ease; +} + +.aside-content-item { + display: flex; + flex-direction: column; + gap: 1.8rem; +} +.aside-content-item:not(:last-child) { + padding-bottom: 2rem; +} + +.aside-content-item-title { + display: flex; + flex-direction: row; + align-items: center; + gap: 0.4rem; +} +.aside-content-item-title h3 { + color: rgb(255, 12, 0); + font-size: 1.2rem; + letter-spacing: 0.1em; +} +.aside-content-item-title h4, +.aside-content-item-title span { + color: rgb(85, 85, 85); + font-size: 1.2rem; + font-weight: normal; +} + +.aside-content-item-info { + font-size: 1.3rem; + line-height: 1.77rem; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.aside-content-more { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + gap: 1rem; + font-size: 1.3rem; + border: 0.1rem solid rgb(0, 130, 44); + padding: 0.6rem 1rem; + background: transparent; + color: rgb(36, 36, 36); + transition: 0.3s all ease; +} +.aside-content-more img { + opacity: 1; + transition: 0.3s all ease; +} +.aside-content-more:hover { + color: rgb(255, 255, 255); + background: rgb(0, 130, 44); + transition: 0.3s all ease; +} +.aside-content-more:hover img { + opacity: 0; + transition: 0.3s all ease; +} + +.aside-ad-wrapper { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.aside-ad-wrapper img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.aside-container { + width: 100%; + padding: 0 4rem 0 0; + max-width: unset; +} + +@media screen and (max-width: 1070px) { + .aside { + max-width: unset; + } + .aside-ad-wrapper a { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + justify-content: center; + } + .aside-container { + max-width: 174rem; + padding: 0 3rem; + margin: 0 auto; + } +} +@media screen and (max-width: 800px) { + .aside-title { + text-align: center; + font-size: 1.8rem; + } + .aside-content-wrapper { + gap: 2.2rem; + } +} +.sub-news-left { + display: flex; + flex-direction: column; + gap: 1.8rem; +} +.sub-news-left h2 { + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; + font-weight: 600; +} + +.sub-news-left-content { + display: flex; + flex-direction: column; + gap: 2rem; + height: 100%; + justify-content: space-between; +} + +.sub-news-inner { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 3.5rem; + height: 100%; +} + +.sub-news-left-content-item { + display: flex; + flex-direction: row; + gap: 0.8rem; +} + +.sub-news-left-content-item-img { + max-width: 11.7rem; + max-height: 7.5rem; + width: 100%; + height: 100%; +} +.sub-news-left-content-item-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.sub-news-left-content-item-content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.sub-news-left-content-item-date-content-head { + display: flex; + flex-direction: row; + align-items: center; + gap: 0.4rem; + color: rgb(0, 130, 44); + font-size: 1.2rem; +} + +.sub-news-left-content-item-date-content-info { + font-size: 1.2rem; + color: rgb(36, 36, 36); + line-height: 1.6rem; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.sub-news { + height: 100%; +} + +.sub-news-right { + display: flex; + flex-direction: column; + gap: 2rem; + justify-content: space-between; + height: 100%; +} + +.sub-news-right-top { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.sub-news-right-top h2 { + padding-bottom: 0.3rem; + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; + font-weight: 600; + overflow: hidden; + text-overflow: ellipsis; +} + +.sub-news-right-top-content { + display: flex; + flex-direction: column; + gap: 1.5rem; + height: 100%; + justify-content: space-between; +} + +.sub-news-right-top-item { + display: flex; + flex-direction: row; + align-items: center; + min-height: 7.5rem; +} +.sub-news-right-top-item p { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.sub-news-right-bottom { + display: flex; + flex-direction: column; + gap: 1.8rem; +} +.sub-news-right-bottom h2 { + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; + font-weight: 600; +} + +.sub-news-right-bottom-content { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 0.8rem; +} + +.sub-news-right-bottom-item { + display: block; + position: relative; + font-size: 1.3rem; + background: rgb(0, 130, 44); + padding: 0.6rem 1rem; + padding-left: 2rem; + transition: 0.3s all ease; + color: rgb(255, 255, 255); + letter-spacing: 0.05em; +} +.sub-news-right-bottom-item:hover { + background: rgb(255, 12, 0); + transition: 0.3s all ease; +} +.sub-news-right-bottom-item::before { + content: ""; + border-radius: 50%; + display: block; + width: 0.4rem; + height: 0.4rem; + background: #00822c; + position: absolute; + left: 0.6rem; + top: 50%; + background: rgb(255, 255, 255); +} + +@media screen and (max-width: 800px) { + .sub-news-left h2, +.sub-news-right-top h2, +.sub-news-right-bottom h2 { + text-align: center; + font-size: 1.8rem; + } + .sub-news-right-bottom-content { + grid-template-columns: 1fr 1fr; + } + .sub-news-right-top-item { + min-height: unset; + } + .sub-news-right-top-content { + gap: 2.5rem; + } + .sub-news-right { + display: flex; + flex-direction: column; + gap: 5rem; + } + .main-inner { + gap: 5rem; + } +} +@media screen and (max-width: 780px) { + .sub-news-inner { + grid-template-columns: 1fr; + } +} +.trending { + padding: 4.6rem 0 4rem 0; +} + +.trending-inner { + display: grid; + grid-template-columns: 1fr 1fr 1fr; + gap: 3.6rem; +} + +.trending-banner { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.trending-banner img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.trending-head { + display: flex; + flex-direction: row; + align-items: center; + gap: 1.5rem; +} +.trending-head h2 { + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; + white-space: nowrap; +} +.trending-head span { + width: 100%; + border-top: 0.1rem solid rgb(0, 130, 44); +} + +.trending-aside, +.trending-main { + display: flex; + flex-direction: column; + gap: 2.5rem; +} + +.trending-aside-item { + display: flex; + flex-direction: column; + gap: 1.6rem; +} + +.trending-img { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.trending-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.trending-aside-content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +.trending-aside-content-head h3 { + color: rgb(0, 130, 44); +} +.trending-aside-content-head h4, +.trending-aside-content-head span { + color: rgb(85, 85, 85); + font-weight: normal; +} + +.trending-main-content { + display: grid; + grid-template-columns: 1fr; + gap: 3.5rem; +} + +.trending-item { + display: flex; + flex-direction: row; + gap: 0.8rem; +} +.trending-item .trending-img { + max-width: 11.7rem; + max-height: 7.5rem; + width: 100%; + height: 100%; +} +.trending-item .trending-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.trending-main-content-inner { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: 0.4rem; +} + +@media screen and (max-width: 1150px) { + .trending-banner { + display: none; + } + .trending-inner { + grid-template-columns: 1fr 1fr; + } +} +@media screen and (max-width: 950px) { + .trending-inner { + display: flex; + flex-direction: column-reverse; + } +} +@media screen and (max-width: 800px) { + .trending-head h2 { + font-size: 2rem; + } + .trending-main-content { + gap: 2.5rem; + } +} +.posts { + padding: 4rem 0; +} + +.posts-inner { + display: flex; + flex-direction: column; + gap: 4rem; +} + +.posts-content { + display: grid; + grid-template-areas: "big big sm1 sm2" "big big sm3 sm4" "sm5 sm6 sm7 sm8"; + gap: 2.5rem; +} + +.posts-item.sm .trending-img { + overflow: hidden; +} +.posts-item.big { + grid-area: big; +} +.posts-item.sm1 { + grid-area: sm1; +} +.posts-item.sm2 { + grid-area: sm2; +} +.posts-item.sm3 { + grid-area: sm3; +} +.posts-item.sm4 { + grid-area: sm4; +} +.posts-item.sm5 { + grid-area: sm5; +} +.posts-item.sm6 { + grid-area: sm6; +} +.posts-item.sm7 { + grid-area: sm7; +} +.posts-item.sm8 { + grid-area: sm8; +} + +@media screen and (max-width: 950px) { + .posts-item.big { + grid-area: none; + width: 100%; + height: 100%; + } + .posts-content { + display: flex; + flex-direction: row; + } + .posts-item.sm { + display: none; + } +} +.media { + background: rgb(85, 85, 85); +} + +.media-inner { + padding: 4rem 0; + display: flex; + flex-direction: column; + gap: 5.2rem; +} + +.media-head h2 { + color: rgb(255, 255, 255); +} +.media-head span { + border: 0.1rem solid rgb(255, 255, 255); +} + +.media-videos { + display: flex; + flex-direction: column; + gap: 4rem; +} + +.video-item { + display: flex; + flex-direction: column; + gap: 0.8rem; +} + +.video { + width: 100%; + height: 100%; +} +.video video { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} +.video img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.video-info h4, +.video-info span, +.video-info p { + color: rgb(255, 255, 255); + font-weight: normal; +} + +.swiper { + position: relative !important; +} + +.video-prev { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + left: 0; + top: 30%; + position: absolute; + background: rgba(39, 39, 39, 0.7); + height: 6rem; + width: 4rem; + z-index: 2; + cursor: pointer; +} +.video-prev img { + width: 3.2rem; + height: 3.2rem; +} + +.video-next { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + right: 0; + top: 30%; + position: absolute; + background: rgba(39, 39, 39, 0.7); + height: 6rem; + width: 4rem; + z-index: 2; + cursor: pointer; +} +.video-next img { + width: 3.2rem; + height: 3.2rem; +} + +.partners { + display: flex; + flex-direction: column; + gap: 4.6rem; +} +.partners .swiper-slide { + display: flex; + flex-direction: row; + justify-content: center; +} +.partners .swiper-slide-active .partners-item { + transform: scale(1.1); + transition: 0.3s all ease; +} + +.partners-item { + max-width: 16.7rem; + max-height: 8.7rem; + width: 100%; + height: 100%; + transform: scale(0.8); + transition: 0.3s all ease; +} +.partners-item img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.partners-head { + font-size: 2.4rem; + color: rgb(36, 36, 36); + letter-spacing: 0.1em; + line-height: 3.3rem; + text-align: center; + color: rgb(255, 255, 255); +} + +.partner-prev, +.partner-next { + background: none; +} + +@media screen and (max-width: 950px) { + .media { + display: none; + } +} +.useful-inner { + padding: 4rem 0; + display: grid; + grid-template-columns: 67% auto; + gap: 3.6rem; +} + +.useful-aside-item-top { + display: flex; + flex-direction: row; + gap: 1rem; + align-items: center; +} +.useful-aside-item-top span { + font-size: 1.2rem; + color: rgb(0, 130, 44); + font-weight: 300; +} + +.useful-aside-img { + max-width: 7.7rem; + max-height: 8.5rem; + width: 100%; + height: 100%; +} +.useful-aside-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.useful-aside-item { + display: flex; + flex-direction: column; + gap: 1rem; + max-height: 7.5rem; +} + +.useful-aside-item-bottom p { + font-size: 1.3rem; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; +} + +.useful-aside-content { + display: flex; + flex-direction: column; + gap: 3.5rem; +} + +.useful-aside { + display: flex; + flex-direction: column; + gap: 2.5rem; +} + +.useful-main-content { + grid-template-columns: 1fr 1fr; +} + +@media screen and (max-width: 1250px) { + .useful-inner { + grid-template-columns: 2fr 1fr; + } +} +@media screen and (max-width: 1100px) { + .useful-inner { + grid-template-columns: 1fr; + } +} +@media screen and (max-width: 950px) { + .useful-main-content { + grid-template-columns: 1fr; + } + .trending-item:nth-child(6), .trending-item:nth-child(7), .trending-item:nth-child(8) { + display: none; + } +} +.footer { + display: grid; + grid-template-columns: 1fr; + min-height: 23.6rem; + width: 100%; + height: 100%; + background: rgb(56, 56, 56); +} + +.footer-inner { + width: 100%; + height: 100%; + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} +.footer-inner p { + font-size: 1.3rem; + color: rgb(255, 255, 255); + font-weight: bold; + text-align: center; +} + +.video-main-inner { + padding: 4.7rem 0 8rem 0; + display: flex; + flex-direction: column; + gap: 4.3rem; +} + +.video-main-top { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 6rem; +} +.video-main-top h4, +.video-main-top span, +.video-main-top p { + color: rgb(0, 0, 0); +} + +.video-main-bottom { + padding-top: 3.7rem; + display: flex; + flex-direction: row; + gap: 2.6rem; + align-items: center; + justify-content: flex-start; +} +.video-main-bottom span { + font-size: 1.6rem; + color: rgb(0, 130, 44); +} + +.video-main-pagination { + cursor: pointer; + max-width: 4.1rem; + max-height: 3.8rem; + width: 100%; + height: 100%; + background: rgb(56, 56, 56); + width: 4.1rem; + height: 3.8rem; +} +.video-main-pagination img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +@media screen and (max-width: 950px) { + .video-main-top { + grid-template-columns: 1fr 1fr; + gap: 4rem; + } +} +@media screen and (max-width: 800px) { + .video-main-inner { + padding: 2.2rem 0 5rem; + gap: 1.3rem; + } +} +@media screen and (max-width: 800px) { + .video-main-top { + grid-template-columns: 1fr; + } +} +.rubric-inner { + padding: 4.7rem 0 8rem 0; + display: flex; + flex-direction: column; + gap: 4.3rem; +} + +.rubric-items { + padding: 0 6.7rem; + display: flex; + flex-direction: column; + gap: 8rem; +} + +.rubric-item { + align-items: center; + gap: 1.5rem; +} +.rubric-item .sub-news-left-content-item-date-content-info { + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + font-size: 1.5rem; + line-height: 2.5rem; +} +.rubric-item .sub-news-left-content-item-img { + max-width: 35rem; + max-height: 20rem; + width: 100%; + height: 100%; +} +.rubric-item .sub-news-left-content-item-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} +.rubric-item .sub-news-left-content-item-content { + gap: 0.8rem; +} +.rubric-item .sub-news-left-content-item-content h3 { + font-size: 1.8rem; +} +.rubric-item .sub-news-left-content-item-date-content-head { + font-size: 1.4rem; + color: rgba(0, 0, 0, 0.6); +} + +.rubric-bottom { + padding: 0 6.7rem; +} + +@media screen and (max-width: 1080px) { + .rubric-items, +.rubric-bottom { + padding: 0; + } +} +@media screen and (max-width: 900px) { + .rubric-item { + flex-direction: column; + } + .rubric-item .sub-news-left-content-item-img { + max-width: unset; + max-height: unset; + } +} +.article-inner { + padding: 3rem 0 4rem; + display: grid; + grid-template-columns: 67% auto; + gap: 4rem; +} + +.article-content-top { + display: flex; + flex-direction: column; + gap: 1.2rem; +} + +.article-item { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; +} +.article-item img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.article-prev, +.article-next { + top: 45%; +} + +.article-head { + display: flex; + flex-direction: column; + gap: 1.2rem; +} +.article-head h2 { + font-size: 2.4rem; + font-weight: bold; + line-height: 3.3rem; +} +.article-head span { + font-weight: 600; + font-size: 1.5rem; + color: rgb(0, 130, 44); +} + +.article-content { + display: flex; + flex-direction: column; + gap: 4rem; +} + +.article-desc { + padding-top: 1.8rem; + display: flex; + flex-direction: column; + gap: 2.4rem; +} +.article-desc p, +.article-desc h5 { + font-size: 1.5rem; + line-height: 2.5rem; +} + +.article-links { + padding-top: 2.8rem; +} + +.article-content-bottom { + display: flex; + flex-direction: column; + gap: 3.2rem; +} +.article-content-bottom h3 { + font-size: 2.4rem; +} + +.article-bottom-head h4, +.article-bottom-head span { + color: rgb(36, 36, 36); + font-weight: 300; +} + +.article-content-info { + color: rgb(36, 36, 36) !important; + font-weight: bold !important; +} + +.article-items { + display: none; +} + +@media screen and (max-width: 1080px) { + .article-aside { + display: none; + } + .article-inner { + display: block; + } +} +@media screen and (max-width: 800px) { + .article-inner { + padding: 2.2rem 0 5rem; + } + .article-head { + flex-direction: column-reverse; + } + .article-head h2 { + font-size: 1.7rem; + } + .article-head span { + font-size: 1.3rem; + color: rgb(85, 85, 85); + } + .article-content-top { + gap: 2.5rem; + } + .article-content-bottom { + gap: 2.5rem; + } + .article-content-bottom h3 { + font-size: 2rem; + letter-spacing: 0.1em; + text-align: center; + } +} +@media screen and (max-width: 700px) { + .article-swiper-wrapper-lower { + display: none; + } + .article-items { + display: flex; + flex-direction: column; + gap: 2.5rem; + } + .article-content-info { + font-size: 1.5rem; + } + .article-bottom-head { + font-size: 1.3rem; + } + .sub-news-left-content-item-content { + gap: 0.5rem; + } + .article-bottom-item { + gap: 1.4rem; + } +} +.affiche-inner { + padding: 4.4rem 0 8rem 0; + display: flex; + flex-direction: column; + gap: 4.3rem; +} + +.affiche-item-data { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.affiche-item-data-row { + display: flex; + flex-direction: row; + align-items: center; + gap: 1.6rem; +} +.affiche-item-data-row span { + font-size: 1.5rem; +} + +.affiche-item-data-img { + width: 1.3rem; + height: 1.3rem; +} +.affiche-item-data-img img { + width: 1.3rem; + height: 1.3rem; + -o-object-fit: contain; + object-fit: contain; +} + +@media screen and (max-width: 850px) { + .affiche-inner { + gap: 2.8rem; + } + .affiche-items { + gap: 4rem; + } + .affiche-item { + flex-direction: column; + } + .affiche-item .sub-news-left-content-item-img { + max-width: unset; + max-height: unset; + } + .affiche-item .sub-news-left-content-item-date-content-head { + font-size: 1.3rem; + } + .affiche-item h3 { + font-size: 1.5rem; + } +} +@media screen and (max-width: 800px) { + .affiche-inner { + padding: 2.2rem 0 5rem; + } +} +.affiche-item-inner { + padding: 4.6rem 0 8rem 0; + display: grid; + grid-template-columns: 67% auto; + gap: 5rem; +} + +.affiche-item-content { + display: flex; + flex-direction: column; + gap: 2.3rem; +} + +.affiche-item-head { + display: flex; + flex-direction: column; + gap: 1.5rem; +} +.affiche-item-head h1 { + font-size: 2.4rem; +} +.affiche-item-head span { + font-size: 1.5rem; + color: rgb(0, 130, 44); +} + +.affiche-item-img { + max-width: unset; + max-height: unset; + width: 100%; + height: 100%; + justify-self: center; + align-self: center; +} +.affiche-item-img img { + width: 100%; + height: 100%; + -o-object-fit: cover; + object-fit: cover; +} + +.affiche-item-top { + display: grid; + grid-template-columns: 64% auto; + gap: 1.8rem; +} +.affiche-item-top .affiche-item-data { + gap: 1.5rem; + justify-self: flex-start; + align-self: center; +} + +.affiche-item-bottom { + display: flex; + flex-direction: column; + gap: 1rem; + font-size: 1.6rem; +} + +.affiche-item-item { + display: flex; + flex-direction: column; + gap: 2.3rem; +} + +@media screen and (max-width: 1080px) { + .affiche-item-inner { + grid-template-columns: 1fr; + } + .affiche-item-aside { + display: none; + } + .affiche-item-top { + display: flex; + flex-direction: column-reverse; + } + .affiche-item-top .affiche-item-data { + justify-self: unset; + align-self: unset; + } +} +@media screen and (max-width: 800px) { + .affiche-item-head { + flex-direction: column-reverse; + gap: 1rem; + } + .affiche-item-head h1 { + font-size: 1.7rem; + } + .affiche-item-head span { + font-size: 1.3rem; + color: rgb(85, 85, 85); + } + .affiche-item-bottom { + font-size: 1.5rem; + } +} +.contact-inner { + padding: 4.3rem 0 8rem; + display: flex; + flex-direction: column; + gap: 4.3rem; +} + +.contact-left, +.contact-form, +.contact-content { + display: flex; + flex-direction: column; + gap: 4rem; +} + +.contact-block { + display: flex; + flex-direction: column; + gap: 1.4rem; +} +.contact-block label { + color: rgb(36, 36, 36); + font-size: 1.6rem; + font-weight: bold; +} +.contact-block label span { + color: red; +} +.contact-block input, +.contact-block textarea { + border: 1px solid #00822c; + padding: 1.4rem; + resize: none; + outline: none; +} + +.contact-antispam { + max-width: 17.8rem; + max-height: 3.2rem; + width: 100%; + height: 100%; +} +.contact-antispam img { + width: 100%; + height: 100%; + -o-object-fit: contain; + object-fit: contain; +} + +.contact-content button { + cursor: pointer; + color: rgb(255, 255, 255); + background: rgb(0, 130, 44); + padding: 1rem 0; + width: 100%; + max-width: 17rem; +} + +@media screen and (max-width: 800px) { + .contact-inner { + padding: 2.2rem 0 5rem; + } + .contact-left { + gap: 3.4rem; + } + .contact-form, +.contact-content { + gap: 3rem; + } +} +@media screen and (max-width: 600px) { + .contact-block textarea { + height: 100%; + max-height: 7rem; + } + .contact-content button { + max-width: unset; + } +}/*# sourceMappingURL=style.css.map */ \ No newline at end of file diff --git a/themes/modern2/assets/new/styles/style.css.map b/themes/modern2/assets/new/styles/style.css.map new file mode 100644 index 000000000..3664e08e9 --- /dev/null +++ b/themes/modern2/assets/new/styles/style.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["style.scss","_general.scss","style.css","_variables.scss","_header.scss","_nav.scss","_main.scss","main/_main-news.scss","main/_aside.scss","main/_sub-news.scss","main/_trending.scss","main/_posts.scss","main/_media.scss","main/_useful.scss","_footer.scss","_video.scss","rubric/_rubric-main.scss","_article.scss","affiche/_affiche-main.scss","affiche/_affiche-item.scss","_contact.scss"],"names":[],"mappings":"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","file":"style.css"} \ No newline at end of file diff --git a/themes/modern2/assets/new/styles/style.scss b/themes/modern2/assets/new/styles/style.scss new file mode 100644 index 000000000..3c54a5116 --- /dev/null +++ b/themes/modern2/assets/new/styles/style.scss @@ -0,0 +1,13 @@ +@import "./variables"; +@import "./swiper-bundle.min.css"; +@import "./general"; +@import "./header"; +@import "./nav"; +@import "./main"; +@import "./footer"; +@import "./video"; +@import "./photo"; +@import "./rubric"; +@import "./article"; +@import "./affiche"; +@import "./contact"; diff --git a/themes/modern2/assets/new/styles/swiper-bundle.min.css b/themes/modern2/assets/new/styles/swiper-bundle.min.css new file mode 100644 index 000000000..2405e608a --- /dev/null +++ b/themes/modern2/assets/new/styles/swiper-bundle.min.css @@ -0,0 +1,651 @@ +/** + * Swiper 8.4.4 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2022 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: October 12, 2022 + */ + +@font-face { + font-family: swiper-icons; + src: url("data:application/font-woff;charset=utf-8;base64, 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"); + font-weight: 400; + font-style: normal; +} +:root { + --swiper-theme-color: #007aff; +} +.swiper { + margin-left: auto; + margin-right: auto; + position: relative; + overflow: hidden; + list-style: none; + padding: 0; + z-index: 1; +} +.swiper-vertical > .swiper-wrapper { + flex-direction: column; +} +.swiper-wrapper { + position: relative; + width: 100%; + height: 100%; + z-index: 1; + display: flex; + transition-property: transform; + box-sizing: content-box; +} +.swiper-android .swiper-slide, +.swiper-wrapper { + transform: translate3d(0px, 0, 0); +} +.swiper-pointer-events { + touch-action: pan-y; +} +.swiper-pointer-events.swiper-vertical { + touch-action: pan-x; +} +.swiper-slide { + flex-shrink: 0; + width: 100%; + height: 100%; + position: relative; + transition-property: transform; +} +.swiper-slide-invisible-blank { + visibility: hidden; +} +.swiper-autoheight, +.swiper-autoheight .swiper-slide { + height: auto; +} +.swiper-autoheight .swiper-wrapper { + align-items: flex-start; + transition-property: transform, height; +} +.swiper-backface-hidden .swiper-slide { + transform: translateZ(0); + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.swiper-3d, +.swiper-3d.swiper-css-mode .swiper-wrapper { + perspective: 1200px; +} +.swiper-3d .swiper-cube-shadow, +.swiper-3d .swiper-slide, +.swiper-3d .swiper-slide-shadow, +.swiper-3d .swiper-slide-shadow-bottom, +.swiper-3d .swiper-slide-shadow-left, +.swiper-3d .swiper-slide-shadow-right, +.swiper-3d .swiper-slide-shadow-top, +.swiper-3d .swiper-wrapper { + transform-style: preserve-3d; +} +.swiper-3d .swiper-slide-shadow, +.swiper-3d .swiper-slide-shadow-bottom, +.swiper-3d .swiper-slide-shadow-left, +.swiper-3d .swiper-slide-shadow-right, +.swiper-3d .swiper-slide-shadow-top { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 10; +} +.swiper-3d .swiper-slide-shadow { + background: rgba(0, 0, 0, 0.15); +} +.swiper-3d .swiper-slide-shadow-left { + background-image: linear-gradient( + to left, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); +} +.swiper-3d .swiper-slide-shadow-right { + background-image: linear-gradient( + to right, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); +} +.swiper-3d .swiper-slide-shadow-top { + background-image: linear-gradient( + to top, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); +} +.swiper-3d .swiper-slide-shadow-bottom { + background-image: linear-gradient( + to bottom, + rgba(0, 0, 0, 0.5), + rgba(0, 0, 0, 0) + ); +} +.swiper-css-mode > .swiper-wrapper { + overflow: auto; + scrollbar-width: none; + -ms-overflow-style: none; +} +.swiper-css-mode > .swiper-wrapper::-webkit-scrollbar { + display: none; +} +.swiper-css-mode > .swiper-wrapper > .swiper-slide { + scroll-snap-align: start start; +} +.swiper-horizontal.swiper-css-mode > .swiper-wrapper { + scroll-snap-type: x mandatory; +} +.swiper-vertical.swiper-css-mode > .swiper-wrapper { + scroll-snap-type: y mandatory; +} +.swiper-centered > .swiper-wrapper::before { + content: ""; + flex-shrink: 0; + order: 9999; +} +.swiper-centered.swiper-horizontal + > .swiper-wrapper + > .swiper-slide:first-child { + margin-inline-start: var(--swiper-centered-offset-before); +} +.swiper-centered.swiper-horizontal > .swiper-wrapper::before { + height: 100%; + min-height: 1px; + width: var(--swiper-centered-offset-after); +} +.swiper-centered.swiper-vertical > .swiper-wrapper > .swiper-slide:first-child { + margin-block-start: var(--swiper-centered-offset-before); +} +.swiper-centered.swiper-vertical > .swiper-wrapper::before { + width: 100%; + min-width: 1px; + height: var(--swiper-centered-offset-after); +} +.swiper-centered > .swiper-wrapper > .swiper-slide { + scroll-snap-align: center center; +} +.swiper-virtual .swiper-slide { + -webkit-backface-visibility: hidden; + transform: translateZ(0); +} +.swiper-virtual.swiper-css-mode .swiper-wrapper::after { + content: ""; + position: absolute; + left: 0; + top: 0; + pointer-events: none; +} +.swiper-virtual.swiper-css-mode.swiper-horizontal .swiper-wrapper::after { + height: 1px; + width: var(--swiper-virtual-size); +} +.swiper-virtual.swiper-css-mode.swiper-vertical .swiper-wrapper::after { + width: 1px; + height: var(--swiper-virtual-size); +} +:root { + --swiper-navigation-size: 44px; +} +.swiper-button-next, +.swiper-button-prev { + position: absolute; + top: 50%; + width: calc(var(--swiper-navigation-size) / 44 * 27); + height: var(--swiper-navigation-size); + margin-top: calc(0px - (var(--swiper-navigation-size) / 2)); + z-index: 10; + cursor: pointer; + display: flex; + align-items: center; + justify-content: center; + color: var(--swiper-navigation-color, var(--swiper-theme-color)); +} +.swiper-button-next.swiper-button-disabled, +.swiper-button-prev.swiper-button-disabled { + opacity: 0.35; + cursor: auto; + pointer-events: none; +} +.swiper-button-next.swiper-button-hidden, +.swiper-button-prev.swiper-button-hidden { + opacity: 0; + cursor: auto; + pointer-events: none; +} +.swiper-navigation-disabled .swiper-button-next, +.swiper-navigation-disabled .swiper-button-prev { + display: none !important; +} +.swiper-button-next:after, +.swiper-button-prev:after { + font-family: swiper-icons; + font-size: var(--swiper-navigation-size); + text-transform: none !important; + letter-spacing: 0; + font-variant: initial; + line-height: 1; +} +.swiper-button-prev, +.swiper-rtl .swiper-button-next { + left: 10px; + right: auto; +} +.swiper-button-prev:after, +.swiper-rtl .swiper-button-next:after { + content: "prev"; +} +.swiper-button-next, +.swiper-rtl .swiper-button-prev { + right: 10px; + left: auto; +} +.swiper-button-next:after, +.swiper-rtl .swiper-button-prev:after { + content: "next"; +} +.swiper-button-lock { + display: none; +} +.swiper-pagination { + position: absolute; + text-align: center; + transition: 0.3s opacity; + transform: translate3d(0, 0, 0); + z-index: 10; +} +.swiper-pagination.swiper-pagination-hidden { + opacity: 0; +} +.swiper-pagination-disabled > .swiper-pagination, +.swiper-pagination.swiper-pagination-disabled { + display: none !important; +} +.swiper-horizontal > .swiper-pagination-bullets, +.swiper-pagination-bullets.swiper-pagination-horizontal, +.swiper-pagination-custom, +.swiper-pagination-fraction { + bottom: 10px; + left: 0; + width: 100%; +} +.swiper-pagination-bullets-dynamic { + overflow: hidden; + font-size: 0; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet { + transform: scale(0.33); + position: relative; +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active { + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main { + transform: scale(1); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev { + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev { + transform: scale(0.33); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next { + transform: scale(0.66); +} +.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next { + transform: scale(0.33); +} +.swiper-pagination-bullet { + width: var( + --swiper-pagination-bullet-width, + var(--swiper-pagination-bullet-size, 8px) + ); + height: var( + --swiper-pagination-bullet-height, + var(--swiper-pagination-bullet-size, 8px) + ); + display: inline-block; + border-radius: 50%; + background: var(--swiper-pagination-bullet-inactive-color, #000); + opacity: var(--swiper-pagination-bullet-inactive-opacity, 0.2); +} +button.swiper-pagination-bullet { + border: none; + margin: 0; + padding: 0; + box-shadow: none; + -webkit-appearance: none; + appearance: none; +} +.swiper-pagination-clickable .swiper-pagination-bullet { + cursor: pointer; +} +.swiper-pagination-bullet:only-child { + display: none !important; +} +.swiper-pagination-bullet-active { + opacity: var(--swiper-pagination-bullet-opacity, 1); + background: var(--swiper-pagination-color, var(--swiper-theme-color)); +} +.swiper-pagination-vertical.swiper-pagination-bullets, +.swiper-vertical > .swiper-pagination-bullets { + right: 10px; + top: 50%; + transform: translate3d(0px, -50%, 0); +} +.swiper-pagination-vertical.swiper-pagination-bullets .swiper-pagination-bullet, +.swiper-vertical > .swiper-pagination-bullets .swiper-pagination-bullet { + margin: var(--swiper-pagination-bullet-vertical-gap, 6px) 0; + display: block; +} +.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic, +.swiper-vertical + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + top: 50%; + transform: translateY(-50%); + width: 8px; +} +.swiper-pagination-vertical.swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet, +.swiper-vertical + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + display: inline-block; + transition: 0.2s transform, 0.2s top; +} +.swiper-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet, +.swiper-pagination-horizontal.swiper-pagination-bullets + .swiper-pagination-bullet { + margin: 0 var(--swiper-pagination-bullet-horizontal-gap, 4px); +} +.swiper-horizontal + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic, +.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic { + left: 50%; + transform: translateX(-50%); + white-space: nowrap; +} +.swiper-horizontal + > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet, +.swiper-pagination-horizontal.swiper-pagination-bullets.swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s left; +} +.swiper-horizontal.swiper-rtl + > .swiper-pagination-bullets-dynamic + .swiper-pagination-bullet { + transition: 0.2s transform, 0.2s right; +} +.swiper-pagination-progressbar { + background: rgba(0, 0, 0, 0.25); + position: absolute; +} +.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: var(--swiper-pagination-color, var(--swiper-theme-color)); + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + transform: scale(0); + transform-origin: left top; +} +.swiper-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + transform-origin: right top; +} +.swiper-horizontal > .swiper-pagination-progressbar, +.swiper-pagination-progressbar.swiper-pagination-horizontal, +.swiper-pagination-progressbar.swiper-pagination-vertical.swiper-pagination-progressbar-opposite, +.swiper-vertical + > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite { + width: 100%; + height: 4px; + left: 0; + top: 0; +} +.swiper-horizontal + > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite, +.swiper-pagination-progressbar.swiper-pagination-horizontal.swiper-pagination-progressbar-opposite, +.swiper-pagination-progressbar.swiper-pagination-vertical, +.swiper-vertical > .swiper-pagination-progressbar { + width: 4px; + height: 100%; + left: 0; + top: 0; +} +.swiper-pagination-lock { + display: none; +} +.swiper-scrollbar { + border-radius: 10px; + position: relative; + -ms-touch-action: none; + background: rgba(0, 0, 0, 0.1); +} +.swiper-scrollbar-disabled > .swiper-scrollbar, +.swiper-scrollbar.swiper-scrollbar-disabled { + display: none !important; +} +.swiper-horizontal > .swiper-scrollbar, +.swiper-scrollbar.swiper-scrollbar-horizontal { + position: absolute; + left: 1%; + bottom: 3px; + z-index: 50; + height: 5px; + width: 98%; +} +.swiper-scrollbar.swiper-scrollbar-vertical, +.swiper-vertical > .swiper-scrollbar { + position: absolute; + right: 3px; + top: 1%; + z-index: 50; + width: 5px; + height: 98%; +} +.swiper-scrollbar-drag { + height: 100%; + width: 100%; + position: relative; + background: rgba(0, 0, 0, 0.5); + border-radius: 10px; + left: 0; + top: 0; +} +.swiper-scrollbar-cursor-drag { + cursor: move; +} +.swiper-scrollbar-lock { + display: none; +} +.swiper-zoom-container { + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} +.swiper-zoom-container > canvas, +.swiper-zoom-container > img, +.swiper-zoom-container > svg { + max-width: 100%; + max-height: 100%; + object-fit: contain; +} +.swiper-slide-zoomed { + cursor: move; +} +.swiper-lazy-preloader { + width: 42px; + height: 42px; + position: absolute; + left: 50%; + top: 50%; + margin-left: -21px; + margin-top: -21px; + z-index: 10; + transform-origin: 50%; + box-sizing: border-box; + border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color)); + border-radius: 50%; + border-top-color: transparent; +} +.swiper-watch-progress .swiper-slide-visible .swiper-lazy-preloader, +.swiper:not(.swiper-watch-progress) .swiper-lazy-preloader { + animation: swiper-preloader-spin 1s infinite linear; +} +.swiper-lazy-preloader-white { + --swiper-preloader-color: #fff; +} +.swiper-lazy-preloader-black { + --swiper-preloader-color: #000; +} +@keyframes swiper-preloader-spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} +.swiper .swiper-notification { + position: absolute; + left: 0; + top: 0; + pointer-events: none; + opacity: 0; + z-index: -1000; +} +.swiper-free-mode > .swiper-wrapper { + transition-timing-function: ease-out; + margin: 0 auto; +} +.swiper-grid > .swiper-wrapper { + flex-wrap: wrap; +} +.swiper-grid-column > .swiper-wrapper { + flex-wrap: wrap; + flex-direction: column; +} +.swiper-fade.swiper-free-mode .swiper-slide { + transition-timing-function: ease-out; +} +.swiper-fade .swiper-slide { + pointer-events: none; + transition-property: opacity; +} +.swiper-fade .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-fade .swiper-slide-active, +.swiper-fade .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-cube { + overflow: visible; +} +.swiper-cube .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; + visibility: hidden; + transform-origin: 0 0; + width: 100%; + height: 100%; +} +.swiper-cube .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-cube.swiper-rtl .swiper-slide { + transform-origin: 100% 0; +} +.swiper-cube .swiper-slide-active, +.swiper-cube .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-cube .swiper-slide-active, +.swiper-cube .swiper-slide-next, +.swiper-cube .swiper-slide-next + .swiper-slide, +.swiper-cube .swiper-slide-prev { + pointer-events: auto; + visibility: visible; +} +.swiper-cube .swiper-slide-shadow-bottom, +.swiper-cube .swiper-slide-shadow-left, +.swiper-cube .swiper-slide-shadow-right, +.swiper-cube .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.swiper-cube .swiper-cube-shadow { + position: absolute; + left: 0; + bottom: 0px; + width: 100%; + height: 100%; + opacity: 0.6; + z-index: 0; +} +.swiper-cube .swiper-cube-shadow:before { + content: ""; + background: #000; + position: absolute; + left: 0; + top: 0; + bottom: 0; + right: 0; + filter: blur(50px); +} +.swiper-flip { + overflow: visible; +} +.swiper-flip .swiper-slide { + pointer-events: none; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + z-index: 1; +} +.swiper-flip .swiper-slide .swiper-slide { + pointer-events: none; +} +.swiper-flip .swiper-slide-active, +.swiper-flip .swiper-slide-active .swiper-slide-active { + pointer-events: auto; +} +.swiper-flip .swiper-slide-shadow-bottom, +.swiper-flip .swiper-slide-shadow-left, +.swiper-flip .swiper-slide-shadow-right, +.swiper-flip .swiper-slide-shadow-top { + z-index: 0; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.swiper-creative .swiper-slide { + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + overflow: hidden; + transition-property: transform, opacity, height; +} +.swiper-cards { + overflow: visible; +} +.swiper-cards .swiper-slide { + transform-origin: center bottom; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + overflow: hidden; +} diff --git a/themes/modern2/assets/new/videos/placeholder.mp4 b/themes/modern2/assets/new/videos/placeholder.mp4 new file mode 100644 index 000000000..972952182 Binary files /dev/null and b/themes/modern2/assets/new/videos/placeholder.mp4 differ diff --git a/themes/modern2/content/static-pages-en/about.htm b/themes/modern2/content/static-pages-en/about.htm index 6650989c8..9e929e745 100644 --- a/themes/modern2/content/static-pages-en/about.htm +++ b/themes/modern2/content/static-pages-en/about.htm @@ -4,24 +4,22 @@ meta_title = "About us" meta_description = "english" meta_keywords = "en en en" == -

Информационный портал ORIENT

+

ORIENT Informational Portal – your opinion is valuable

-

ORIENT – ваше мнение ценно

+

Website ORIENT.tm – a new player in the information market of Turkmenistan.

-

Сайт ORIENT.tm – новый игрок на информационном рынке Туркменистана.

+

The economic society "Media Turkmen" is the first non–governmental news agency in Turkmenistan, registered with the official bodies of the country in April 2017. It includes two divisions operating under the same brand: the ORIENT website and a production studio that create news, photo, video and advertising content.

-

Индивидуальное предприятие «Media Turkmen» – первое негосударственное информационное агентство в Туркменистане, зарегистрированное в официальных органах страны в апреле 2017 года. Оно включает в себя два подразделения, работающие под одним брендом: сайт ORIENT и продакшн-студию, которые создают новостной, фото, видео и рекламный контент.

+

The ORIENT team consists mainly of young journalists, graduates of Turkmen and foreign universities. The Media Turkmen news Agency also attracts experienced journalists to cooperate, who conduct master classes and seminars to improve the skills of the team.

-

Команда ORIENT – это, в основном, молодые журналисты, выпускники туркменских и зарубежных вузов. Информационное агентство «Media Turkmen» также привлекает к сотрудничеству опытных журналистов, которые проводят мастер-классы и семинары для повышения квалификации команды.

+

In 2018, ORIENT became the General Media Partner of the World Weightlifting Championships held in Ashgabat and the region's largest profile forum "Oil and Gas of Turkmenistan 2018".

-

В 2018 году ORIENT стал Генеральным медиа-партнером Чемпионата мира по тяжелой атлетике, прошедшего в Ашхабаде, и крупнейшего в регионе профильного форума «Нефть и Газ Туркменистана 2018».

+

This year ORIENT became the General Media Partner of the 10th International Gas Congress TGC-2019 and in May there were publications about this forum, participants and sponsors.

-

В этом году ORIENT стал Генеральным медиа-партнером 10-го Международного Газового конгресса TGC-2019 и в мае месяце были публикации об этом форуме, участниках и спонсорах.

+

On July 12, 2019, ORIENT signed an agreement with China Daily Multimedia Co., Ltd., on cooperation in the mutual exchange of news and their promotion on their platforms, as well as the implementation of joint media projects.

-

12 июля 2019 года ORIENT подписал соглашение с изданием China Daily Multimedia Co., Ltd., о сотрудничестве по взаимному обмену новостями и продвижению их на своих площадках, а также осуществлению совместных медиа проектов.

+

On August 15, 2019, ORIENT signed a Memorandum of cooperation in the exchange of news materials with the Austrian-Turkmen Society.

-

15 августа 2019 года ORIENT подписал Меморандум о сотрудничестве в сфере обмена новостными материалами с Австрийско-туркменским обществом.

+

On November 11, 2019, ORIENT signed a Memorandum of cooperation in the exchange of news materials with the magazine "International Life" of the Ministry of Foreign Affairs of the Russian Federation.

-

11 ноября 2019 года ORIENT подписал Меморандум о сотрудничестве в сфере обмена новостными материалами с журналом «Международная жизнь» Министерства иностранных дел Российской Федерации.

- -

У сайта имеются свои страницы в социальных сетях Facebook, Twitter, YouTube, LinkedIn, Instagram, Telegramm, Vkontakte, Odnoklassniki – где также есть возможность обсуждения читателями тем и статей.

\ No newline at end of file +

Instagram Facebook, Twitter, YouTube, LinkedIn, Instagram, Telegram, Vkontakte, Odnoklassniki have their own pages on social networks – where readers can also discuss topics and articles.

\ No newline at end of file diff --git a/themes/modern2/content/static-pages-en/contact.htm b/themes/modern2/content/static-pages-en/contact.htm index 13be870bc..4b8a2754c 100644 --- a/themes/modern2/content/static-pages-en/contact.htm +++ b/themes/modern2/content/static-pages-en/contact.htm @@ -3,11 +3,12 @@ title = "Contact us" == {% put form %}
Feedback
-
 
+
 
+ {% endput %} ==
Contacts
\ No newline at end of file +
Address: Turkmenistan, Ashgabat city, Makhtumkuli avenue, 72
+
Phone: (+99312) 940786
+
\ No newline at end of file diff --git a/themes/modern2/content/static-pages-en/user-agreement.htm b/themes/modern2/content/static-pages-en/user-agreement.htm new file mode 100644 index 000000000..9b5db7160 --- /dev/null +++ b/themes/modern2/content/static-pages-en/user-agreement.htm @@ -0,0 +1,3 @@ +[viewBag] +title = "User Agreement" +== \ No newline at end of file diff --git a/themes/modern2/content/static-pages-tm/about.htm b/themes/modern2/content/static-pages-tm/about.htm new file mode 100644 index 000000000..b54b5bf37 --- /dev/null +++ b/themes/modern2/content/static-pages-tm/about.htm @@ -0,0 +1,26 @@ +[viewBag] +title = "Biz barada" +meta_title = "Biz Barada" +meta_description = "turkmen" +== +

ORIENT habarlar portaly

+ +

ORIENT – Siziň pikiriňiz gymmatly

+ +

ORIENT.tm saýty – Türkmenistanyň habarlar ulgamynda täze sepgit.

+ +

«Media Türkmen» hojalyk jemgyýeti – Türkmenistanda 2017-nji ýylyň aprel aýynda ýurdumyzyň resmi edaralarynda bellige alnan döwlete degişli bolmadyk ilkinji habarlar agentligi. Ol täzelikler, foto, wideo we mahabat kontentini döredýän bir nyşan astynda işleýän iki bölümi: ORIENT saýtyny we prodakşn-studiýany özünde birleşdirýär.

+ +

ORIENT topary – ol, esasan, ýaş žurnalistler, türkmen we daşary ýurtlaryň ýokary okuw mekdepleriniň uçurymlardyr. “Media Türkmen” habarlar agentligi, şeýle hem ussatlyk sapaklaryny we toparyň hünär derejesini ýokarlandyrmak üçin okuw maslahatlaryny geçirýän tejribeli žurnalistleri hyzmatdaşlyk etmäge çagyrýar.

+ +

2018-nji ýylda ORIENT Aşgabatda geçirilen Agyr atletiko boýunça dünýä çempionatynyň hem-de “Türkmenistanyň nebiti we gazy 2018” atly sebitde hünär ugurly iri forumyň Baş media-hyzmatdaşy boldy.

+ +

Şu ýyl ORIENT TGS-2019 10-njy Halka Gaz kongresiniň Baş media-hyzmatdaşy boldy we maý aýynda bu forum, oňa gatnaşyjylar we hemaýatkärleri barada habarlardyr makalalar ýerleşdirildi.

+ +

2019-njy ýylyň 12-nji iýulynda ORIENT täzelikleri özara alyşmak we olary öz meýdançalarynda ýerleşdirmek hem-de bilelikde media-taslamalary amala aşyrmak boýunça hyzmatdaşlyk etmek hakynda China Daily Multimedia Co., Ltd., neşiri bilen ylalaşyga gol çekdi.

+ +

2019-njy ýylyň 15-nji awgustynda ORIENT Awstriýa-türkmen jemgyýeti bilen täzelikleri alyşmak babatda hyzmatdaşlyk etmek hakynda Ähtnama gol çekdi.

+ +

2019-njy ýylyň 11-nji noýabrynda ORIENT Russiýa Federasiýasynyň Daşary işler ministrliginiň “Halkara durmuşy” atly žurnaly bilen täzelikleri alyşmak babatda hyzmatdaşlyk etmek hakynda Ähtnama gol çekdi.

+ +

Saýtyň Facebook, Twitter, YouTube, LinkedIn, Instagram, Telegramm, Vkontakte, Odnoklassniki diýen Internet ulgamlarynda öz sahypalary bolup, şolarda hem okyjylar bilen meseleleri hem-de makalalary ara alyp maslahatlaşmaga mümkinçiligi bar.

\ No newline at end of file diff --git a/themes/modern2/content/static-pages-tm/contact.htm b/themes/modern2/content/static-pages-tm/contact.htm new file mode 100644 index 000000000..fc8422ed0 --- /dev/null +++ b/themes/modern2/content/static-pages-tm/contact.htm @@ -0,0 +1,14 @@ +[viewBag] +title = "Habarlaşmak üçin" +== +{% put form %} +
Habarlaşmak üçin
+
 
+ +{% endput %} +== +
Biziň kontaktlarymyz:
+
+
Salgymyz: Türkmenistan, Aşgabat ş., Magtymguly şaýoly, 72
+
Tel: (+99312) 940786
+
\ No newline at end of file diff --git a/themes/modern2/content/static-pages-tm/policy-privacy.htm b/themes/modern2/content/static-pages-tm/policy-privacy.htm new file mode 100644 index 000000000..7971c3b42 --- /dev/null +++ b/themes/modern2/content/static-pages-tm/policy-privacy.htm @@ -0,0 +1,3 @@ +[viewBag] +title = "Gizlinlik syýasaty" +== \ No newline at end of file diff --git a/themes/modern2/content/static-pages-tm/user-agreement.htm b/themes/modern2/content/static-pages-tm/user-agreement.htm new file mode 100644 index 000000000..5f4e72eee --- /dev/null +++ b/themes/modern2/content/static-pages-tm/user-agreement.htm @@ -0,0 +1,3 @@ +[viewBag] +title = "Ulanyjy ylalaşygy" +== \ No newline at end of file diff --git a/themes/modern2/content/static-pages/about.htm b/themes/modern2/content/static-pages/about.htm index 65b8d4afa..82eb93411 100644 --- a/themes/modern2/content/static-pages/about.htm +++ b/themes/modern2/content/static-pages/about.htm @@ -8,6 +8,7 @@ meta_title = "О нас" meta_description = "russian" robot_index = "index" robot_follow = "nofollow" +localeUrl[tm] = "/biz-barada" ==

Информационный портал ORIENT

diff --git a/themes/modern2/content/static-pages/contact.htm b/themes/modern2/content/static-pages/contact.htm index 9504add0b..286cd8be2 100644 --- a/themes/modern2/content/static-pages/contact.htm +++ b/themes/modern2/content/static-pages/contact.htm @@ -6,15 +6,15 @@ is_hidden = 0 navigation_hidden = 0 robot_index = "index" robot_follow = "follow" +localeUrl[tm] = "/habarlasmak-ucin" == {% put form %}
Обратная связь
-
 
- +
 
{% endput %} ==
Наши контакты:
-
Наш адрес: Туркменистан, г.Ашхабад, проспект Махтумкули, 72
-
Тел: (+99312) 940786
-
\ No newline at end of file +
Наш адрес: Туркменистан, г.Ашхабад, проспект Махтумкули, 72
+
Тел: (+99312) 940786
+
Email: info@orient.tm
\ No newline at end of file diff --git a/themes/modern2/content/static-pages/policy-privacy.htm b/themes/modern2/content/static-pages/policy-privacy.htm index 5c1e9e99c..e2cdc86c1 100644 --- a/themes/modern2/content/static-pages/policy-privacy.htm +++ b/themes/modern2/content/static-pages/policy-privacy.htm @@ -1,7 +1,10 @@ [viewBag] -title = "Политика привата" +title = "Политика конфиденциальности" url = "/privacy-policy" layout = "static" is_hidden = 0 navigation_hidden = 1 +robot_index = "index" +robot_follow = "follow" +localeUrl[tm] = "/gizlinlik-syyasaty" == \ No newline at end of file diff --git a/themes/modern2/content/static-pages/user-agreement.htm b/themes/modern2/content/static-pages/user-agreement.htm index 07a2ac336..e345ed39b 100644 --- a/themes/modern2/content/static-pages/user-agreement.htm +++ b/themes/modern2/content/static-pages/user-agreement.htm @@ -4,25 +4,74 @@ url = "/user-agreement" layout = "static" is_hidden = 0 navigation_hidden = 1 +robot_index = "index" +robot_follow = "follow" +localeUrl[tm] = "/ulanyjy-ylalasygy" == + +

ПОЛЬЗОВАТЕЛЬСКОЕ СОГЛАШЕНИЕ

1. ОБЩИЕ ПОЛОЖЕНИЯ

-

1.1 Настоящие Правила определяют порядок и условия использования информационных, новостных и иных материалов, размещенных на сайте orient.tm (далее по тексту – «Администрация Сайта») www.orient.tm – новостной раздел интернет-сайта, размещенный по адресу www.orient.tm (далее указанный раздел интернет-сайта именуется Сайт), а также правила использования материалов Сайтом и порядок взаимодействия с Администрацией Сайта. 1.2 Любые материалы, размещенные на Сайте, являются объектами интеллектуальной собственности (объектами авторского права или смежных прав, а также прав на средства индивидуализации). Права Администрации Сайта на указанные материалы охраняются законодательством Туркменистана «Об авторском праве и смежных правах». 1.3 Использование материалов, размещенных на Сайте, допускается только с письменного согласия Администрации Сайта или иного правообладателя, прямо указанного на конкретном материале, размещенном на Сайте, или в непосредственной близости от указанного материала. 1.4 Права на использование и разрешение использования материалов, размещенных на Сайте, принадлежащих иным правообладателям, нежели Администрация Сайта, допускается с разрешения таких правообладателей или в соответствии с условиями, установленными такими правообладателями. Никакое из положений настоящих Правил не дает прав третьим лицам на использование материалов правообладателей, прямо указанных на конкретном материале, размещенном на Сайте, или в непосредственной близости от указанного материала. 1.5 Настоящие Правила распространяют свое действие на следующих пользователей: информационные агентства, электронные и печатные средства массовой информации, любые физические и юридические лица, а также индивидуальные предприниматели (далее по тексту – «Пользователи»).

+

1.1 Настоящие Правила определяют порядок и условия использования информационных, новостных и иных материалов, размещенных на сайте orient.tm (далее по тексту – «Администрация Сайта») www.orient.tm – новостной раздел интернет-сайта, размещенный по адресу www.orient.tm (далее указанный раздел интернет-сайта именуется Сайт), а также правила использования материалов Сайтом и порядок взаимодействия с Администрацией Сайта. 

+ +

1.2 Любые материалы, размещенные на Сайте, являются объектами интеллектуальной собственности (объектами авторского права или смежных прав, а также прав на средства индивидуализации). Права Администрации Сайта на указанные материалы охраняются законодательством Туркменистана «Об авторском праве и смежных правах». 

+ +

1.3 Использование материалов, размещенных на Сайте, допускается только с письменного согласия Администрации Сайта или иного правообладателя, прямо указанного на конкретном материале, размещенном на Сайте, или в непосредственной близости от указанного материала. 

+ +

1.4 Права на использование и разрешение использования материалов, размещенных на Сайте, принадлежащих иным правообладателям, нежели Администрация Сайта, допускается с разрешения таких правообладателей или в соответствии с условиями, установленными такими правообладателями. Никакое из положений настоящих Правил не дает прав третьим лицам на использование материалов правообладателей, прямо указанных на конкретном материале, размещенном на Сайте, или в непосредственной близости от указанного материала. 

+ +

1.5 Настоящие Правила распространяют свое действие на следующих пользователей: информационные агентства, электронные и печатные средства массовой информации, любые физические и юридические лица, а также индивидуальные предприниматели (далее по тексту – «Пользователи»).

2. ИСПОЛЬЗОВАНИЕ МАТЕРИАЛОВ. ВИДЫ ИСПОЛЬЗОВАНИЯ

-

2.1 Под использованием материалов Сайта понимается воспроизведение, распространение, публичный показ, сообщение в эфир, сообщение по кабелю, перевод, переработка, доведение до всеобщего сведения и иные способы использования, предусмотренные действующим законодательством Туркменистана. 2.2 Использование материалов Сайта без получения разрешения от Администрации Сайта не допустимо. 2.3 Внесение каких-либо изменений и/или дополнений в материалы Сайта, а также любая переработка материалов запрещена. 2.4 Использование материалов Сайта осуществляется на основании договоров с Администрацией Сайта, заключенных в письменной форме, или на основании письменного разрешения, выданного Администрацией Сайта. 2.5 Запрещается любое использование (бездоговорное/без разрешения) фото-, графических, видео-, аудио- и иных материалов, размещенных на Сайте, принадлежащих Администрации Сайта и иным правообладателям (третьим лицам). 2.6 Стоимость использования каждого конкретного материала или выдача разрешения на его использование согласуется Пользователем и Администрацией Сайта в каждом конкретном случае. 2.7 В случае необходимости использования материалов Сайта, права на которые принадлежат третьим лицам (иным правообладателям, нежели Администрация Сайта, о чем прямо указано на таких материалах либо в непосредственной близости от них), Пользователи обязаны обращаться к правообладателям таких материалов для получения разрешения на использование материалов.

+

2.1 Под использованием материалов Сайта понимается воспроизведение, распространение, публичный показ, сообщение в эфир, сообщение по кабелю, перевод, переработка, доведение до всеобщего сведения и иные способы использования, предусмотренные действующим законодательством Туркменистана. 

+ +

2.2 Использование материалов Сайта без получения разрешения от Администрации Сайта не допустимо. 

+ +

2.3 Внесение каких-либо изменений и/или дополнений в материалы Сайта, а также любая переработка материалов запрещена. 

+ +

2.4 Использование материалов Сайта осуществляется на основании договоров с Администрацией Сайта, заключенных в письменной форме, или на основании письменного разрешения, выданного Администрацией Сайта. 

+ +

2.5 Запрещается любое использование (бездоговорное/без разрешения) фото-, графических, видео-, аудио- и иных материалов, размещенных на Сайте, принадлежащих Администрации Сайта и иным правообладателям (третьим лицам). 

+ +

2.6 Стоимость использования каждого конкретного материала или выдача разрешения на его использование согласуется Пользователем и Администрацией Сайта в каждом конкретном случае. 

+ +

2.7 В случае необходимости использования материалов Сайта, права на которые принадлежат третьим лицам (иным правообладателям, нежели Администрация Сайта, о чем прямо указано на таких материалах либо в непосредственной близости от них), Пользователи обязаны обращаться к правообладателям таких материалов для получения разрешения на использование материалов.

3. ОБЯЗАННОСТИ ПОЛЬЗОВАТЕЛЕЙ ПРИ ИСПОЛЬЗОВАНИИ МАТЕРИАЛОВ САЙТА

-

3.1 При использовании материалов Сайта в любых целях при наличии разрешения Администрации Сайта, ссылка на Сайт обязательна и осуществляется в следующем виде: 3.1.1 в печатных изданиях или в иных формах на материальных носителях Пользователи обязаны в каждом случае использования материалов указать источник – Сайт «orient.tm». 3.1.2 в Интернете или иных формах использования в электронном виде не на материальных носителях, Пользователи в каждом случае использования материалов обязаны разместить гиперссылку на Сайт — «orient.tm», гиперссылка должна являться активной и прямой, при нажатии на которую Пользователь переходит на конкретную страницу Сайта, с которой заимствован материал. 3.2 Ссылка на источник или гиперссылка, указанные в пп. 3.1.1 и 3.1.2. настоящих Правил, должны быть помещены Пользователем в начале используемого текстового материала, а также непосредственно под используемым аудио-, видео-, фотоматериалом, графическим материалом Администрации Сайта. Размеры шрифта ссылки на источник или гиперссылки не должны быть меньше размера шрифта текста, в котором используются материалы Сайта, либо размера шрифта текста Пользователя, сопровождающего аудио-, видео-, фотоматериалы и графические материалы Сайта, а так же цвет ссылки должен быть идентичен цветам ссылок на Сайте и должен быть видимым Пользователю. 3.3 Использование материалов с Сайта, полученных из вторичных источников (от иных правообладателей, нежели Администрация Сайта, о чем прямо указано на таких материалах либо в непосредственной близости от них), возможно только со ссылкой на эти источники и в случае необходимости, установленной такими источниками (правообладателями), – с их разрешения. 3.4 Не допускается переработка оригинального материала (произведения), взятого с Сайта, в том числе сокращение материала, иная его переработка, в том числе приводящая к искажению его смысла. 3.5 При использовании материалов Сайта в любых целях при наличии разрешения Администрации Сайта, при использовании информационных, новостных материалов Сайта Пользователи не должны указывать у себя на сайтах и в RSS-рассылках время выхода информационных, новостных материалов идентичное или раньше времени их выхода на Сайте.

+

3.1 При использовании материалов Сайта в любых целях при наличии разрешения Администрации Сайта, ссылка на Сайт обязательна и осуществляется в следующем виде: 

+ +

3.1.1 в печатных изданиях или в иных формах на материальных носителях Пользователи обязаны в каждом случае использования материалов указать источник – Сайт «orient.tm». 

+ +

3.1.2 в Интернете или иных формах использования в электронном виде не на материальных носителях, Пользователи в каждом случае использования материалов обязаны разместить гиперссылку на Сайт — «orient.tm», гиперссылка должна являться активной и прямой, при нажатии на которую Пользователь переходит на конкретную страницу Сайта, с которой заимствован материал. 

+ +

3.2 Ссылка на источник или гиперссылка, указанные в пп. 3.1.1 и 3.1.2. настоящих Правил, должны быть помещены Пользователем в начале используемого текстового материала, а также непосредственно под используемым аудио-, видео-, фотоматериалом, графическим материалом Администрации Сайта. Размеры шрифта ссылки на источник или гиперссылки не должны быть меньше размера шрифта текста, в котором используются материалы Сайта, либо размера шрифта текста Пользователя, сопровождающего аудио-, видео-, фотоматериалы и графические материалы Сайта, а так же цвет ссылки должен быть идентичен цветам ссылок на Сайте и должен быть видимым Пользователю. 

+ +

3.3 Использование материалов с Сайта, полученных из вторичных источников (от иных правообладателей, нежели Администрация Сайта, о чем прямо указано на таких материалах либо в непосредственной близости от них), возможно только со ссылкой на эти источники и в случае необходимости, установленной такими источниками (правообладателями), – с их разрешения. 

+ +

3.4 Не допускается переработка оригинального материала (произведения), взятого с Сайта, в том числе сокращение материала, иная его переработка, в том числе приводящая к искажению его смысла. 

+ +

3.5 При использовании материалов Сайта в любых целях при наличии разрешения Администрации Сайта, при использовании информационных, новостных материалов Сайта Пользователи не должны указывать у себя на сайтах и в RSS-рассылках время выхода информационных, новостных материалов идентичное или раньше времени их выхода на Сайте.

4. ПРАВА НА МАТЕРИАЛЫ ТРЕТЬИХ ЛИЦ, УРЕГУЛИРОВАНИЕ ПРЕТЕНЗИЙ

-

4.1 Материалы, права на которые принадлежат третьим лицам, размещенные на Сайте, размещены либо с разрешения правообладателя, полученного Администрацией Сайта, либо, в случае, если таковое использование прямо не запрещено правообладателем, в соответствии с законодательством Туркменистана в информационных целях с обязательным указанием имени автора, материал которого используется, и источника заимствования. 4.2 В случае, если в обозначении авторства материалов в соответствии с п.4.1. настоящих Правил содержится ошибка, или в случае использования материала с предполагаемым или реальным нарушением прав третьих лиц, или в иных спорных случаях использования объектов интеллектуальной собственности, размещенных на Сайте, в том числе в случае, когда права третьего лица тем или иным образом нарушаются с использованием Сайта, применяется следующая схема урегулирования претензий третьих лиц к Администрации Сайта: 4.2.1 в адрес Администрации Сайта по электронной почте на адрес info@orient.tm направляется претензия, содержащая информацию об объекте интеллектуальной собственности, права на который принадлежат заявителю и который используется незаконно посредством Сайта или с нарушением правил использования, или иным образом права заявителя как обладателя исключительного права на объект интеллектуальной собственности, размещенный на Сайте, нарушены посредством Сайта, с приложением документов, подтверждающих правомочия заявителя, данные о правообладателе и копия доверенности на действия от лица правообладателя, если лицо, направляющее претензию, не является руководителем компании правообладателя или непосредственно физическим лицом – правообладателем. В претензии так же указывается адрес страницы Сайта, которая содержит данные, нарушающие права, и излагается полное описание сути нарушения прав. Заявитель так же обязуется в течение одного дня с даты направления претензии посредством электронной почты, направить претензию в адрес Администрации Сайта в письменном виде по адресу info@orient.tm. 4.2.2 Администрация Сайта обязуется рассмотреть надлежаще оформленную претензию в срок не менее 5 (пяти) рабочих дней с даты ее получения по электронной почте, но в любом случае не более 5 (пяти) рабочих дней с даты получения претензии в письменном виде. Администрация Сайта обязуется уведомить заявителя о результатах рассмотрения его заявления (претензии) посредством отправки письма по электронной почте, на адрес, указанный заявителем, а так же направить ответ в письменном виде на адрес, указанный заявителем (в случае не указания такового адреса отправки, обязательство по предоставлению письменного ответа на претензию с Администрации Сайта снимается). В том числе, Администрация Сайта вправе запросить дополнительные документы, свидетельства, данные, подтверждающие законность предъявляемой претензии. В случае признания претензии правомерной, Администрация Сайта примет все возможные меры, необходимые для прекращения нарушения прав заявителя и урегулирования претензии. 4.2.3 Администрация Сайта в любом случае предпринимает все возможные меры к скорейшему удовлетворению обоснованных претензий третьих лиц и стремиться к максимально скорому урегулированию всех спорных вопросов.

+

4.1 Материалы, права на которые принадлежат третьим лицам, размещенные на Сайте, размещены либо с разрешения правообладателя, полученного Администрацией Сайта, либо, в случае, если таковое использование прямо не запрещено правообладателем, в соответствии с законодательством Туркменистана в информационных целях с обязательным указанием имени автора, материал которого используется, и источника заимствования. 

+ +

4.2 В случае, если в обозначении авторства материалов в соответствии с п.4.1. настоящих Правил содержится ошибка, или в случае использования материала с предполагаемым или реальным нарушением прав третьих лиц, или в иных спорных случаях использования объектов интеллектуальной собственности, размещенных на Сайте, в том числе в случае, когда права третьего лица тем или иным образом нарушаются с использованием Сайта, применяется следующая схема урегулирования претензий третьих лиц к Администрации Сайта: 

+ +

4.2.1 в адрес Администрации Сайта по электронной почте на адрес info@orient.tm направляется претензия, содержащая информацию об объекте интеллектуальной собственности, права на который принадлежат заявителю и который используется незаконно посредством Сайта или с нарушением правил использования, или иным образом права заявителя как обладателя исключительного права на объект интеллектуальной собственности, размещенный на Сайте, нарушены посредством Сайта, с приложением документов, подтверждающих правомочия заявителя, данные о правообладателе и копия доверенности на действия от лица правообладателя, если лицо, направляющее претензию, не является руководителем компании правообладателя или непосредственно физическим лицом – правообладателем. В претензии так же указывается адрес страницы Сайта, которая содержит данные, нарушающие права, и излагается полное описание сути нарушения прав. Заявитель так же обязуется в течение одного дня с даты направления претензии посредством электронной почты, направить претензию в адрес Администрации Сайта в письменном виде по адресу info@orient.tm. 

+ +

4.2.2 Администрация Сайта обязуется рассмотреть надлежаще оформленную претензию в срок не менее 5 (пяти) рабочих дней с даты ее получения по электронной почте, но в любом случае не более 5 (пяти) рабочих дней с даты получения претензии в письменном виде. Администрация Сайта обязуется уведомить заявителя о результатах рассмотрения его заявления (претензии) посредством отправки письма по электронной почте, на адрес, указанный заявителем, а так же направить ответ в письменном виде на адрес, указанный заявителем (в случае не указания такового адреса отправки, обязательство по предоставлению письменного ответа на претензию с Администрации Сайта снимается). В том числе, Администрация Сайта вправе запросить дополнительные документы, свидетельства, данные, подтверждающие законность предъявляемой претензии. В случае признания претензии правомерной, Администрация Сайта примет все возможные меры, необходимые для прекращения нарушения прав заявителя и урегулирования претензии. 

+ +

4.2.3 Администрация Сайта в любом случае предпринимает все возможные меры к скорейшему удовлетворению обоснованных претензий третьих лиц и стремиться к максимально скорому урегулированию всех спорных вопросов.

5. ПРОЧИЕ УСЛОВИЯ

-

5.1 Администрация Сайта оставляет за собой право изменять настоящие Правила в одностороннем порядке в любое время без уведомления Пользователей. Любые изменения будут размещены на Сайте. Изменения вступают в силу с момента их опубликования на Сайте. 5.2 По всем вопросам использования материалов Сайта Пользователи могут обращаться к Администрации Сайта по следующим координатам: info@orient.tm 5.3 Во всем, что не урегулировано настоящими Правилами в отношении вопросов использования материалов на Сайте, стороны руководствуются положениями законодательства Туркменистана.

\ No newline at end of file +

5.1 Администрация Сайта оставляет за собой право изменять настоящие Правила в одностороннем порядке в любое время без уведомления Пользователей. Любые изменения будут размещены на Сайте. Изменения вступают в силу с момента их опубликования на Сайте. 

+ +

5.2 По всем вопросам использования материалов Сайта Пользователи могут обращаться к Администрации Сайта по следующим координатам: info@orient.tm 

+ +

5.3 Во всем, что не урегулировано настоящими Правилами в отношении вопросов использования материалов на Сайте, стороны руководствуются положениями законодательства Туркменистана.

\ No newline at end of file diff --git a/themes/modern2/layouts/new/master.htm b/themes/modern2/layouts/new/master.htm new file mode 100644 index 000000000..d9dc0d71b --- /dev/null +++ b/themes/modern2/layouts/new/master.htm @@ -0,0 +1,115 @@ +[localePicker] +forceUrl = 1 + +[adverts] +code = "samsung" +type = "slider" +random = 0 +== + + + + + + + + + Orient + + {% styles %} + + + +
+ + + + {% component 'adverts'%} + + + +
+ + + + +
+
+
+ + + {% partial 'new/mobile-menu' %} + + + +
+ +
+ +
+ +
+
+ + +
+ +
+ +
+ + +
+
+
+ + + + + {% page %} + + {% partial 'new/footer' %} + + + + + {% scripts %} + + + \ No newline at end of file diff --git a/themes/modern2/layouts/report.htm b/themes/modern2/layouts/report.htm new file mode 100644 index 000000000..524098ccb --- /dev/null +++ b/themes/modern2/layouts/report.htm @@ -0,0 +1,25 @@ +== + + + + {% partial 'head' %} + + + +{% page %} + + + + + + +{% framework extras %} +{% scripts %} + + + + + + \ No newline at end of file diff --git a/themes/modern2/meta/menus/new-top-menui.yaml b/themes/modern2/meta/menus/new-top-menui.yaml new file mode 100644 index 000000000..a88a09315 --- /dev/null +++ b/themes/modern2/meta/menus/new-top-menui.yaml @@ -0,0 +1,2 @@ +items: { } +name: new-top-menui diff --git a/themes/modern2/meta/menus/top-menu.yaml b/themes/modern2/meta/menus/top-menu.yaml index 19e341fb4..a3c5f921d 100644 --- a/themes/modern2/meta/menus/top-menu.yaml +++ b/themes/modern2/meta/menus/top-menu.yaml @@ -1,18 +1,16 @@ items: - title: Разделы - nesting: null type: header - url: null code: '' - reference: null - cmsPage: null - replace: null viewBag: locale: en: title: Categories url: '' + tm: + title: Bölümler + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -31,6 +29,9 @@ items: en: title: Events url: '' + tm: + title: Wakalar + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -46,7 +47,10 @@ items: viewBag: locale: en: - title: Social + title: Society + url: '' + tm: + title: Jemgyýet url: '' isHidden: '0' cssClass: '' @@ -65,6 +69,9 @@ items: en: title: Economy url: '' + tm: + title: Ykdysadyýet + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -82,6 +89,9 @@ items: en: title: Culture url: '' + tm: + title: Medeniýet + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -99,6 +109,9 @@ items: en: title: Eco-world url: '' + tm: + title: Ekodünýä + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -116,6 +129,9 @@ items: en: title: Sport url: '' + tm: + title: Sport + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -131,7 +147,10 @@ items: viewBag: locale: en: - title: Science + title: Technologies + url: '' + tm: + title: Tehnologiýalar url: '' isHidden: '0' cssClass: '' @@ -150,6 +169,9 @@ items: en: title: Elections-2022 url: '' + tm: + title: Saýlaw-2022 + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -167,6 +189,9 @@ items: en: title: Photos url: '' + tm: + title: Foto + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -184,6 +209,9 @@ items: en: title: Video url: '' + tm: + title: Wideo + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -201,6 +229,9 @@ items: en: title: Tenders url: '' + tm: + title: Tender + url: '' isHidden: '0' cssClass: '' isExternal: '0' @@ -218,6 +249,9 @@ items: en: title: Announcements url: '' + tm: + title: Bildirişler + url: '' isHidden: '0' cssClass: '' isExternal: '0' diff --git a/themes/modern2/pages/adstxt.htm b/themes/modern2/pages/adstxt.htm new file mode 100644 index 000000000..232dc9007 --- /dev/null +++ b/themes/modern2/pages/adstxt.htm @@ -0,0 +1,7 @@ +title = "ads.txt" +url = "/ads.txt" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" +== +google.com, pub-4375305456879458, DIRECT, f08c47fec0942fa0 \ No newline at end of file diff --git a/themes/modern2/pages/home2.htm b/themes/modern2/pages/home2.htm index e96e5d757..0dd62a0c2 100644 --- a/themes/modern2/pages/home2.htm +++ b/themes/modern2/pages/home2.htm @@ -73,6 +73,7 @@ random = 0 +
@@ -139,6 +140,8 @@ random = 0
+ +

{{ blogCategories.categories.shift.name }}

{% partial 'index/mobile_app' %} @@ -146,4 +149,4 @@ random = 0 ================================================ --> +================================================ --> \ No newline at end of file diff --git a/themes/modern2/pages/index.htm b/themes/modern2/pages/index.htm index e929a7991..24d2a6e0d 100644 --- a/themes/modern2/pages/index.htm +++ b/themes/modern2/pages/index.htm @@ -11,6 +11,7 @@ robot_follow = "follow" [viewBag] localeTitle[en] = "Home" localeMeta_title[en] = "All main news of Turkmenistan today. Latest news of the region." +localeMeta_title[tm] = "Türkmenistanyň we dünýä habarlary" localeMeta_description[en] = "Events. The main and latest news of politics for today. Latest political news of Turkmenistan" [blogCategories] diff --git a/themes/modern2/pages/new/categories.htm b/themes/modern2/pages/new/categories.htm new file mode 100644 index 000000000..6ffbb1779 --- /dev/null +++ b/themes/modern2/pages/new/categories.htm @@ -0,0 +1,31 @@ +title = "new/categories" +url = "/new/categories" +layout = "new/master" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" + +[blogCategories] +slug = "{{ :slug }}" +displayEmpty = 1 +categoryPage = "newcategories" +== +{% if blogCategories.categories|length > 0 %} + +{% else %} +

No categories were found.

+{% endif %} + + + +{% for post in blogCategories.categories %} + +

{{ post.name }}


+

{{ post }}


+ +{% endfor%} \ No newline at end of file diff --git a/themes/modern2/pages/new/category.htm b/themes/modern2/pages/new/category.htm new file mode 100644 index 000000000..e0877146c --- /dev/null +++ b/themes/modern2/pages/new/category.htm @@ -0,0 +1,42 @@ +title = "new/category" +url = "/new/category/:slug/:page?" +layout = "new/master" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" + +[blogPosts] +pageNumber = "{{ :page }}" +categoryFilter = "{{ :slug }}" +postsPerPage = 10 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = "new/category" +postPage = "new/newPost" +== + +
+
+
+ + + +
+ + {% for post in blogPosts.posts %} + {% partial 'new/post_list_item' post = post %} + {% else %} +

No posts found

+ {% endfor %} + +
+ + {% partial 'new/pagination' items = blogPosts.posts %} + + +
+
+
\ No newline at end of file diff --git a/themes/modern2/pages/new/home.htm b/themes/modern2/pages/new/home.htm new file mode 100644 index 000000000..e2501a16c --- /dev/null +++ b/themes/modern2/pages/new/home.htm @@ -0,0 +1,55 @@ +title = "new/home" +url = "/new" +layout = "new/master" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" +== +{% partial 'newHome/main' %} +{% partial 'newHome/main-popular' %} + +
+ +
+ +{% partial 'newHome/publication' %} + +
+ +
+ +{% partial 'newHome/poleznoe' header="Полезное" header2="Новости медиа партнеров" %} + +
+
+
+
+ {% partial 'newHome/video' header="Видеоархив" %} +
+ +
+ {% partial 'newHome/photo' header="Фотоархив" %} +
+ + {% partial 'newHome/partners' header="" %} +
+
+
\ No newline at end of file diff --git a/themes/modern2/pages/new/newPost.htm b/themes/modern2/pages/new/newPost.htm new file mode 100644 index 000000000..1d28cd369 --- /dev/null +++ b/themes/modern2/pages/new/newPost.htm @@ -0,0 +1,82 @@ +title = "newPost" +url = "/new/post/:id/:slug" +layout = "new/master" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" + +[views] +slug = "{{ :slug }}" + +[blogPost] +slug = "{{ :slug }}" +id = "{{ :id }}" +categoryPage = "blog/category" +== +{% put styles %} + + + +{% endput %} + +{% set post = blogPost.post %} + +
+
+
+
+
+
+

+ {{post.title}} +

+ {{post.published_at|date('d.m.Y')}} | {{post.published_at|date('H:i')}} +
+
+
+
+ + +
+
+  {{post.title}} +
+
+ + +
+
+ +
+
+ +
+
+
+
+ {{post.content|md}} + +
ORIENT NEWS
+
Фото: figma.com
+
+ + {% partial 'new/social' %} + +
+ + + {% partial 'new/post-featured' %} + +
+ {% partial 'newHome/right-sidebar.htm' %} +
+
+
+ + {% put scripts %} + + {% endput %} \ No newline at end of file diff --git a/themes/modern2/pages/report/report.htm b/themes/modern2/pages/report/report.htm new file mode 100644 index 000000000..5baf5f75d --- /dev/null +++ b/themes/modern2/pages/report/report.htm @@ -0,0 +1,72 @@ +title = "report/report" +url = "/reportq/qreport/:year" +layout = "report" +is_hidden = 0 +robot_index = "index" +robot_follow = "follow" +== +param('year'); + $this['allPost'] = $this['posts'] = RainLab\Blog\Models\Post::count(); + $this['allPostYear'] = $this['posts'] = RainLab\Blog\Models\Post::whereYear('published_at', $this['yearq'])->count(); +} +?> +== + +
+
+

{{ yearq }} report

+
+ + + + + + + + + + + + + + + + + + + + {% for index, record in backendUsers %} + {% partial 'report/report' user = record index = index userId = record.id year = yearq %} + {% endfor %} + + + + + {% partial 'report/yearAll' month = 1 %} + {% partial 'report/yearAll' month = 2 %} + {% partial 'report/yearAll' month = 3 %} + {% partial 'report/yearAll' month = 4 %} + {% partial 'report/yearAll' month = 5 %} + {% partial 'report/yearAll' month = 6 %} + {% partial 'report/yearAll' month = 7 %} + {% partial 'report/yearAll' month = 8 %} + {% partial 'report/yearAll' month = 9 %} + {% partial 'report/yearAll' month = 10 %} + {% partial 'report/yearAll' month = 11 %} + {% partial 'report/yearAll' month = 12 %} + +
NO:UsersALLALL ({{ yearq }})YanwarFewralMartAprelMayIyunIyulAwgustSentyabrOktyabrNoyabrDekabr
HEMMESI{{ allPost }}{{ allPostYear }}
+
\ No newline at end of file diff --git a/themes/modern2/partials/footer.htm b/themes/modern2/partials/footer.htm index cc3ad1141..6cfc00931 100644 --- a/themes/modern2/partials/footer.htm +++ b/themes/modern2/partials/footer.htm @@ -1,10 +1,12 @@ +[viewBag] +== +================================================ --> \ No newline at end of file diff --git a/themes/modern2/partials/header.htm b/themes/modern2/partials/header.htm index ae914fbfb..91eb547d4 100644 --- a/themes/modern2/partials/header.htm +++ b/themes/modern2/partials/header.htm @@ -139,9 +139,9 @@ code = "top-menu" - - - + @@ -151,4 +151,4 @@ code = "top-menu" +================================================--> \ No newline at end of file diff --git a/themes/modern2/partials/index/post_item.htm b/themes/modern2/partials/index/post_item.htm index e9aeaa07a..7dd3b62c2 100644 --- a/themes/modern2/partials/index/post_item.htm +++ b/themes/modern2/partials/index/post_item.htm @@ -23,4 +23,4 @@ {{post.title}} - + \ No newline at end of file diff --git a/themes/modern2/partials/new/footer.htm b/themes/modern2/partials/new/footer.htm new file mode 100644 index 000000000..54fab1239 --- /dev/null +++ b/themes/modern2/partials/new/footer.htm @@ -0,0 +1,12 @@ +[viewBag] +== + \ No newline at end of file diff --git a/themes/modern2/partials/new/menu.htm b/themes/modern2/partials/new/menu.htm new file mode 100644 index 000000000..ba5ac0268 --- /dev/null +++ b/themes/modern2/partials/new/menu.htm @@ -0,0 +1,43 @@ +[viewBag] +== +
+ +
\ No newline at end of file diff --git a/themes/modern2/partials/new/mobile-menu.htm b/themes/modern2/partials/new/mobile-menu.htm new file mode 100644 index 000000000..63455b691 --- /dev/null +++ b/themes/modern2/partials/new/mobile-menu.htm @@ -0,0 +1,73 @@ +[viewBag] +== +
+
+ +
+ + +
\ No newline at end of file diff --git a/themes/modern2/partials/new/morque.htm b/themes/modern2/partials/new/morque.htm new file mode 100644 index 000000000..b848d4ba7 --- /dev/null +++ b/themes/modern2/partials/new/morque.htm @@ -0,0 +1,34 @@ +[viewBag] + +[blogPosts marque] +pageNumber = "{{ :page }}" +featured = "yes" +postsPerPage = 5 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +
+
+
+
+ Главное +
+ +
+ + + {% for post in marque.posts %} + + {% endfor %} + +
+
+
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/new/pagination.htm b/themes/modern2/partials/new/pagination.htm new file mode 100644 index 000000000..cf4d51d66 --- /dev/null +++ b/themes/modern2/partials/new/pagination.htm @@ -0,0 +1,40 @@ +[viewBag] +== +{% if items.total > items.perPage %} +
+ + + + + + + +
+ +
+ + + + + + {{(items.total/items.perPage)|round(0,'ceil')}} {{'paginate.from'|_}} +
+{% endif %} \ No newline at end of file diff --git a/themes/modern2/partials/new/post-featured.htm b/themes/modern2/partials/new/post-featured.htm new file mode 100644 index 000000000..34ca19216 --- /dev/null +++ b/themes/modern2/partials/new/post-featured.htm @@ -0,0 +1,50 @@ +[viewBag] + +[blogPosts] +pageNumber = "{{ :page }}" +featured = "yes" +postsPerPage = 10 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +{% set posts = blogPosts.posts %} + +
+

Читайте также

+
+
+
+ + {% for post in posts %} +
+
+
+ +
+
+
+

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+ +
+
+
+ {% endfor %} + +
+ +
+ +
+
+ +
+
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/new/post_list_item.htm b/themes/modern2/partials/new/post_list_item.htm new file mode 100644 index 000000000..17ff6bd19 --- /dev/null +++ b/themes/modern2/partials/new/post_list_item.htm @@ -0,0 +1,22 @@ +[viewBag] +== + +
+ {% if post.featured_image %} + {{post.title}} + {% endif %} +
+
+

+ {{post.title}} +

+
+

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+ +
+
\ No newline at end of file diff --git a/themes/modern2/partials/new/social.htm b/themes/modern2/partials/new/social.htm new file mode 100644 index 000000000..3b518d185 --- /dev/null +++ b/themes/modern2/partials/new/social.htm @@ -0,0 +1,36 @@ +[viewBag] +== +
+ +
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/main-bussiness.htm b/themes/modern2/partials/newHome/main-bussiness.htm new file mode 100644 index 000000000..cbd46e38a --- /dev/null +++ b/themes/modern2/partials/newHome/main-bussiness.htm @@ -0,0 +1,11 @@ +[viewBag] +== +
+

{{categoryPosts[0].categories.implode('name', ', ')}}

+
+ + {% for post in categoryPosts %} + {% partial 'newHome/post-item-img' post = post %} + {% endfor %} +
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/main-popular.htm b/themes/modern2/partials/newHome/main-popular.htm new file mode 100644 index 000000000..11ee85544 --- /dev/null +++ b/themes/modern2/partials/newHome/main-popular.htm @@ -0,0 +1,53 @@ +[viewBag] + +[blogPosts byEditor] +pageNumber = "{{ :page }}" +categoryFilter = "technology" +postsPerPage = 1 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +{% set post = byEditor.posts %} + + \ No newline at end of file diff --git a/themes/modern2/partials/newHome/main-slider.htm b/themes/modern2/partials/newHome/main-slider.htm new file mode 100644 index 000000000..b6ccb886f --- /dev/null +++ b/themes/modern2/partials/newHome/main-slider.htm @@ -0,0 +1,76 @@ +[viewBag] + +[blogPosts slider] +pageNumber = "{{ :page }}" +featured = "yes" +postsPerPage = 10 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +{% set posts = slider.posts %} + +
+ +
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/main-tender.htm b/themes/modern2/partials/newHome/main-tender.htm new file mode 100644 index 000000000..faefd0cb8 --- /dev/null +++ b/themes/modern2/partials/newHome/main-tender.htm @@ -0,0 +1,38 @@ +[viewBag] +== +
+
+

Тендеры

+ +
+ +
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/main.htm b/themes/modern2/partials/newHome/main.htm new file mode 100644 index 000000000..f6cadd7f7 --- /dev/null +++ b/themes/modern2/partials/newHome/main.htm @@ -0,0 +1,72 @@ +[viewBag] + +[blogPosts postsMainLeft] +pageNumber = "{{ :page }}" +categoryFilter = "economy" +postsPerPage = 5 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[blogPosts postsMainRight] +pageNumber = "{{ :page }}" +categoryFilter = "tendery" +postsPerPage = 4 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[adverts adv_center_1] +code = "bank" +type = "slider" +random = 0 +== +{% set postsMainLeft = postsMainLeft.posts %} +{% set postsMainRight = postsMainRight.posts %} + + + + +
+
+
+ + + {% partial 'newHome/main-slider' %} + + +
+
+
+ + + +
+
+
+ +
+ +
+
+ + {% partial 'newHome/main-bussiness' categoryPosts = postsMainLeft %} + + {% partial 'newHome/main-tender' categoryPosts = postsMainRight %} + +
+
+
+
+ + + + {% partial 'newHome/right-sidebar' %} + + + +
+
+ \ No newline at end of file diff --git a/themes/modern2/partials/newHome/media-post-item.htm b/themes/modern2/partials/newHome/media-post-item.htm new file mode 100644 index 000000000..18322c1b0 --- /dev/null +++ b/themes/modern2/partials/newHome/media-post-item.htm @@ -0,0 +1,15 @@ +[viewBag] +== + +
+
+ +
+ {{post.published_at|date('d.m.Y')}} | {{post.published_at|date('H:i')}} +
+
+

+ {{post.title}} +

+
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/partners.htm b/themes/modern2/partials/newHome/partners.htm new file mode 100644 index 000000000..f76e5db17 --- /dev/null +++ b/themes/modern2/partials/newHome/partners.htm @@ -0,0 +1,57 @@ +[adverts partners] +code = "media" +type = "slider" +random = 0 + +[viewBag] +== +
+

Наши партнеры

+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/photo-item.htm b/themes/modern2/partials/newHome/photo-item.htm new file mode 100644 index 000000000..71338d29a --- /dev/null +++ b/themes/modern2/partials/newHome/photo-item.htm @@ -0,0 +1,19 @@ +[viewBag] +== +
+
+
+ +
+
+
+

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+ +
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/photo.htm b/themes/modern2/partials/newHome/photo.htm new file mode 100644 index 000000000..3a488872c --- /dev/null +++ b/themes/modern2/partials/newHome/photo.htm @@ -0,0 +1,37 @@ +[blogPosts photo] +pageNumber = "{{ :page }}" +categoryFilter = "photo" +postsPerPage = 10 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[viewBag] +== +{% set posts = photo.posts %} + + + \ No newline at end of file diff --git a/themes/modern2/partials/newHome/poleznoe.htm b/themes/modern2/partials/newHome/poleznoe.htm new file mode 100644 index 000000000..71318a354 --- /dev/null +++ b/themes/modern2/partials/newHome/poleznoe.htm @@ -0,0 +1,62 @@ +[blogPosts poleznoe] +pageNumber = "{{ :page }}" +postsPerPage = 8 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[blogPosts mediaPosts] +pageNumber = "{{ :page }}" +categoryFilter = "technology" +postsPerPage = 4 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[viewBag] +== +{% set posts = poleznoe.posts %} +{% set mediaPosts = mediaPosts.posts %} + +
+
+
+ + + +
+ +
+ + + {% for post in mediaPosts %} + + {% partial 'newHome/media-post-item' post=post %} + + {% endfor %} + +
+
+ +
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/popular-item.htm b/themes/modern2/partials/newHome/popular-item.htm new file mode 100644 index 000000000..002ac7481 --- /dev/null +++ b/themes/modern2/partials/newHome/popular-item.htm @@ -0,0 +1,26 @@ +[popularPosts] +category = "{{ :category }}" +postsLimit = 4 +noPostsMessage = "No posts found" +postPage = 404 + +[viewBag] +== +{% set posts = popularPosts.posts %} + + + \ No newline at end of file diff --git a/themes/modern2/partials/newHome/post-item-img-cat.htm b/themes/modern2/partials/newHome/post-item-img-cat.htm new file mode 100644 index 000000000..a9fc73392 --- /dev/null +++ b/themes/modern2/partials/newHome/post-item-img-cat.htm @@ -0,0 +1,19 @@ +[viewBag] +== + + +
+ + +
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/post-item-img.htm b/themes/modern2/partials/newHome/post-item-img.htm new file mode 100644 index 000000000..7ec74cda0 --- /dev/null +++ b/themes/modern2/partials/newHome/post-item-img.htm @@ -0,0 +1,17 @@ +[viewBag] +== + +
+ +
+
+
+

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+ +
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/publication.htm b/themes/modern2/partials/newHome/publication.htm new file mode 100644 index 000000000..943dd7a5f --- /dev/null +++ b/themes/modern2/partials/newHome/publication.htm @@ -0,0 +1,237 @@ +[viewBag] + +[blogPosts] +pageNumber = "{{ :page }}" +featured = "yes" +postsPerPage = 14 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +{% set posts = blogPosts.posts %} + +
+ + +
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/right-sidebar-post-item.htm b/themes/modern2/partials/newHome/right-sidebar-post-item.htm new file mode 100644 index 000000000..fa62db9ee --- /dev/null +++ b/themes/modern2/partials/newHome/right-sidebar-post-item.htm @@ -0,0 +1,14 @@ +[viewBag] +== + +
+

{{post.categories.implode('name', ', ')}}

+ | +

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+

+ {{post.title}} +

+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/right-sidebar.htm b/themes/modern2/partials/newHome/right-sidebar.htm new file mode 100644 index 000000000..a507d26ae --- /dev/null +++ b/themes/modern2/partials/newHome/right-sidebar.htm @@ -0,0 +1,74 @@ +[viewBag] + +[blogPosts turkmenistan] +pageNumber = "{{ :page }}" +categoryFilter = "turkmenistan" +postsPerPage = 6 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[blogPosts world] +pageNumber = "{{ :page }}" +categoryFilter = "world" +postsPerPage = 6 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 +== +{% set turkmenPosts = turkmenistan.posts %} +{% set worldPosts = world.posts %} + + +
+ +
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/video-item.htm b/themes/modern2/partials/newHome/video-item.htm new file mode 100644 index 000000000..084d73d81 --- /dev/null +++ b/themes/modern2/partials/newHome/video-item.htm @@ -0,0 +1,19 @@ +[viewBag] +== +
+
+
+ +
+
+
+

{{post.published_at|date('d.m.Y')}}

+ | +

{{post.published_at|date('H:i')}}

+
+ +
+
+
\ No newline at end of file diff --git a/themes/modern2/partials/newHome/video.htm b/themes/modern2/partials/newHome/video.htm new file mode 100644 index 000000000..5c8fd2918 --- /dev/null +++ b/themes/modern2/partials/newHome/video.htm @@ -0,0 +1,37 @@ +[blogPosts videos] +pageNumber = "{{ :page }}" +categoryFilter = "video" +postsPerPage = 10 +noPostsMessage = "No posts found" +sortOrder = "published_at desc" +categoryPage = 404 +postPage = 404 + +[viewBag] +== +{% set posts = videos.posts %} + + + \ No newline at end of file diff --git a/themes/modern2/partials/pagination.htm b/themes/modern2/partials/pagination.htm index 7087c0b8e..344c62264 100644 --- a/themes/modern2/partials/pagination.htm +++ b/themes/modern2/partials/pagination.htm @@ -41,6 +41,6 @@ - {{'paginate.from'|_}} {{(items.total/items.perPage)|round(0,'ceil')}} + {{(items.total/items.perPage)|round(0,'ceil')}} {{'paginate.from'|_}} {% endif %} \ No newline at end of file diff --git a/themes/modern2/partials/report/month.htm b/themes/modern2/partials/report/month.htm new file mode 100644 index 000000000..d08803c5b --- /dev/null +++ b/themes/modern2/partials/report/month.htm @@ -0,0 +1,14 @@ +[viewBag] +== +userId; + $month = $this->month; + $year = $this->year; + //dd($userId); + $this['countByMonth'] = Db::table('rainlab_blog_posts')->where('user_id', $userId)->whereMonth('published_at', $month)->whereYear('published_at', $year)->count(); +} +?> +== +{{ countByMonth == 0 ? '' : countByMonth }} \ No newline at end of file diff --git a/themes/modern2/partials/report/report.htm b/themes/modern2/partials/report/report.htm new file mode 100644 index 000000000..c711d2649 --- /dev/null +++ b/themes/modern2/partials/report/report.htm @@ -0,0 +1,30 @@ +[viewBag] +== +userId; + $year = $this->year; + //dd($userId); + $this['postCount'] = Db::table('rainlab_blog_posts')->where('user_id', $userId)->count(); +} +?> +== + + {{ index + 1 }} + {{user.login}} - ({{ user.first_name }} {{ user.last_name }}) + {{ postCount == 0 ? "" : postCount }} + {% partial 'report/year' year = year userId = userId %} + {% partial 'report/month' month = 1 year = year userId = userId %} + {% partial 'report/month' month = 2 year = year userId = userId %} + {% partial 'report/month' month = 3 year = year userId = userId %} + {% partial 'report/month' month = 4 year = year userId = userId %} + {% partial 'report/month' month = 5 year = year userId = userId %} + {% partial 'report/month' month = 6 year = year userId = userId %} + {% partial 'report/month' month = 7 year = year userId = userId %} + {% partial 'report/month' month = 8 year = year userId = userId %} + {% partial 'report/month' month = 9 year = year userId = userId %} + {% partial 'report/month' month = 10 year = year userId = userId %} + {% partial 'report/month' month = 11 year = year userId = userId %} + {% partial 'report/month' month = 12 year = year userId = userId %} + \ No newline at end of file diff --git a/themes/modern2/partials/report/year.htm b/themes/modern2/partials/report/year.htm new file mode 100644 index 000000000..5a2608f5f --- /dev/null +++ b/themes/modern2/partials/report/year.htm @@ -0,0 +1,13 @@ +[viewBag] +== +userId; + $year = $this->year; + //dd($userId); + $this['countByYear'] = Db::table('rainlab_blog_posts')->where('user_id', $userId)->whereYear('published_at', $year)->count(); +} +?> +== +{{ countByYear == 0 ? '' : countByYear }} \ No newline at end of file diff --git a/themes/modern2/partials/report/yearAll.htm b/themes/modern2/partials/report/yearAll.htm new file mode 100644 index 000000000..a297c697a --- /dev/null +++ b/themes/modern2/partials/report/yearAll.htm @@ -0,0 +1,13 @@ +[viewBag] +== +month; + $year = $this->param('year'); + //dd($userId); + $this['countByYearAll'] = Db::table('rainlab_blog_posts')->whereYear('published_at', $year)->whereMonth('published_at', $month)->count(); +} +?> +== +{{ countByYearAll == 0 ? "" : countByYearAll }} \ No newline at end of file diff --git a/themes/modern2/partials/slider.htm b/themes/modern2/partials/slider.htm index d6df15b68..812dc5452 100644 --- a/themes/modern2/partials/slider.htm +++ b/themes/modern2/partials/slider.htm @@ -55,9 +55,9 @@ postPage = 404 @@ -111,4 +111,4 @@ postPage = 404 {% endfor %} - + \ No newline at end of file