PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.1.0
ShopBuilder – WooCommerce Builder For Elementor v3.1.0
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
← All changes | app/Controllers/AssetsController.php +194 -68 2.0.23.1.0 View file →
@@ -1,11 +1,16 @@
1 1 <?php
2 +/**
3 + * Assets Controller Class
4 + *
5 + * @package RadiusTheme\SB
6 + */
2 7
3 8 namespace RadiusTheme\SB\Controllers;
4 9
5 -use RadiusTheme\SB\Helpers\BuilderFns;
6 10 use RadiusTheme\SB\Helpers\Fns;
7 11 use RadiusTheme\SB\Models\Settings;
12 +use RadiusTheme\SB\Helpers\BuilderFns;
8 13 use RadiusTheme\SB\Traits\SingletonTrait;
9 14
10 15 // Do not allow directly accessing this file.
11 16 if ( ! defined( 'ABSPATH' ) ) {
@@ -11,8 +16,11 @@
11 16 if ( ! defined( 'ABSPATH' ) ) {
12 17 exit( 'This script cannot be accessed directly.' );
13 18 }
14 19
20 +/**
21 + * Assets Controller Class
22 + */
15 23 class AssetsController {
16 24
17 25 use SingletonTrait;
18 26
@@ -44,13 +52,21 @@
44 52 */
45 53 private $scripts = [];
46 54
47 55 /**
56 + * Cached bundled assets.
57 + *
58 + * @var array|null
59 + */
60 + private $cached_bundled_assets = null;
61 +
62 + /**
48 63 * Class Constructor
49 64 */
50 65 public function __construct() {
51 66 $this->version = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? time() : RTSB_VERSION;
52 67
68 + // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
53 69 if ( in_array( 'sitepress-multilingual-cms/sitepress.php', get_option( 'active_plugins' ) ) ) {
54 70 self::$ajaxurl = admin_url( 'admin-ajax.php?lang=' . ICL_LANGUAGE_CODE );
55 71 } else {
56 72 self::$ajaxurl = admin_url( 'admin-ajax.php' );
@@ -64,9 +80,9 @@
64 80
65 81 /**
66 82 * Public scripts.
67 83 */
68 - add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_public_scripts' ], 15 );
84 + add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_public_scripts' ], 25 );
69 85 /**
70 86 * General scripts.
71 87 */
72 88 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_general_public_scripts' ], 30 );
@@ -87,13 +103,19 @@
87 103 * @return object
88 104 */
89 105 private function get_public_styles() {
90 106 $rtl_suffix = is_rtl() ? '-rtl' : '';
107 + $rtl_dir = is_rtl() ? trailingslashit( 'rtl' ) : trailingslashit( 'css' );
108 +
91 109 $this->styles[] = [
110 + 'handle' => 'rtsb-odometer',
111 + 'src' => rtsb()->get_assets_uri( 'vendor/odometer/css/odometer.min.css' ),
112 + ];
113 +
114 + $this->styles[] = [
92 115 'handle' => 'rtsb-fonts',
93 116 'src' => rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ),
94 117 ];
95 -
96 118 if ( rtsb()->has_pro() ) {
97 119 $this->styles[] = [
98 120 'handle' => 'rtsb-noui-slider',
99 121 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.css' ),
@@ -99,18 +121,25 @@
99 121 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.css' ),
100 122 ];
101 123 }
102 124
103 - $this->styles[] = [
104 - 'handle' => 'rtsb-frontend',
105 - 'src' => rtsb()->get_assets_uri( 'css/frontend/frontend' . $rtl_suffix . '.css' ),
106 - ];
125 + $pro_version = defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0';
126 + $addon_condition = version_compare( $pro_version, '1.9.0', '<' );
107 127
108 - $this->styles[] = [
109 - 'handle' => 'swiper',
110 - 'src' => rtsb()->get_assets_uri( 'vendor/swiper/css/swiper-bundle.min.css' ),
111 - ];
112 -
128 + if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
129 + $this->styles[] = AssetRegistry::instance()->load_optimized_assets();
130 + } else {
131 + if ( $addon_condition ) {
132 + $this->styles[] = [
133 + 'handle' => 'rtsb-general-addons',
134 + 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/general-addons' . $rtl_suffix . '.css' ),
135 + ];
136 + }
137 + $this->styles[] = [
138 + 'handle' => 'rtsb-frontend',
139 + 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/frontend' . $rtl_suffix . '.css' ),
140 + ];
141 + }
113 142 if ( BuilderFns::is_builder_preview() && 'elementor' == Fns::page_edit_with( get_the_ID() ) ) {
114 143 $this->styles[] = [
115 144 'handle' => 'photoswipe',
116 145 'src' => plugins_url( 'assets/css/photoswipe/photoswipe.min.css', WC_PLUGIN_FILE ),
@@ -138,19 +167,24 @@
138 167 */
139 168 private function get_public_scripts() {
140 169 $this->scripts[] = [
141 170 'handle' => 'swiper',
142 - 'src' => rtsb()->get_assets_uri( 'vendor/swiper/js/swiper-bundle.min.js' ),
171 + 'src' => esc_url( $this->get_swiper_url() ),
143 172 'deps' => [ 'jquery' ],
144 173 'footer' => true,
145 174 ];
146 -
147 175 $this->scripts[] = [
148 - 'handle' => 'rtsb-imagesloaded',
149 - 'src' => rtsb()->get_assets_uri( 'vendor/isotope/imagesloaded.pkgd.min.js' ),
176 + 'handle' => 'rtsb-waypoints',
177 + 'src' => rtsb()->get_assets_uri( 'vendor/waypoints/js/jquery.waypoints.min.js' ),
150 178 'deps' => [ 'jquery' ],
151 179 'footer' => true,
152 180 ];
181 + $this->scripts[] = [
182 + 'handle' => 'rtsb-odometer',
183 + 'src' => rtsb()->get_assets_uri( 'vendor/odometer/js/odometer.min.js' ),
184 + 'deps' => [ 'jquery' ],
185 + 'footer' => true,
186 + ];
153 187
154 188 $this->scripts[] = [
155 189 'handle' => 'rtsb-tipsy',
156 190 'src' => rtsb()->get_assets_uri( 'vendor/tipsy/tipsy.min.js' ),
@@ -209,16 +243,34 @@
209 243 'src' => rtsbpro()->get_assets_uri( 'vendors/sticky-sidebar/sticky-sidebar.min.js' ),
210 244 'deps' => [ 'jquery' ],
211 245 'footer' => true,
212 246 ];
247 +
248 + $this->scripts[] = [
249 + 'handle' => 'rtsb-popper',
250 + 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/popper.min.js' ),
251 + 'deps' => [ 'jquery' ],
252 + 'footer' => true,
253 + ];
254 +
255 + $this->scripts[] = [
256 + 'handle' => 'rtsb-tippy',
257 + 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/tippy.min.js' ),
258 + 'deps' => [ 'jquery', 'rtsb-popper' ],
259 + 'footer' => true,
260 + ];
213 261 }
214 262
215 - $this->scripts[] = [
216 - 'handle' => 'rtsb-public',
217 - 'src' => rtsb()->get_assets_uri( 'js/frontend/frontend.js' ),
218 - 'deps' => [ 'jquery', 'rtsb-imagesloaded', 'swiper' ],
219 - 'footer' => true,
220 - ];
263 + if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
264 + $this->scripts[] = AssetRegistry::instance()->load_optimized_assets( 'js' );
265 + } else {
266 + $this->scripts[] = [
267 + 'handle' => 'rtsb-public',
268 + 'src' => rtsb()->get_assets_uri( 'js/frontend/frontend.js' ),
269 + 'deps' => [ 'jquery', 'imagesloaded', 'swiper' ],
270 + 'footer' => true,
271 + ];
272 + }
221 273
222 274 return $this;
223 275 }
224 276
@@ -228,8 +280,10 @@
228 280 * @return void
229 281 */
230 282 public function register_public_scripts() {
231 283 $this->get_public_assets();
284 + $this->styles = array_filter( $this->styles );
285 + $this->scripts = array_filter( $this->scripts );
232 286
233 287 // Register public styles.
234 288 foreach ( $this->styles as $style ) {
235 289 wp_register_style( $style['handle'], $style['src'], '', $this->version );
@@ -250,8 +304,9 @@
250 304 /**
251 305 * Register scripts.
252 306 */
253 307 $this->register_public_scripts();
308 +
254 309 /**
255 310 * Enqueue scripts.
256 311 */
257 312 if ( BuilderFns::is_builder_preview() && 'elementor' === Fns::page_edit_with( get_the_ID() ) ) {
@@ -257,9 +312,8 @@
257 312 if ( BuilderFns::is_builder_preview() && 'elementor' === Fns::page_edit_with( get_the_ID() ) ) {
258 313 /**
259 314 * Styles.
260 315 */
261 - wp_enqueue_style( 'swiper' );
262 316 wp_enqueue_style( 'photoswipe' );
263 317 wp_enqueue_style( 'photoswipe-default-skin' );
264 318 wp_enqueue_style( 'elementor-editor-style-fix' );
265 319 wp_enqueue_style( 'woocommerce-general' );
@@ -266,27 +320,31 @@
266 320
267 321 /**
268 322 * Scripts.
269 323 */
324 + $handle = Fns::optimized_handle( 'rtsb-public' );
325 +
270 326 wp_enqueue_script( 'flexslider' );
271 327 wp_enqueue_script( 'wc-single-product' );
272 - wp_dequeue_script( 'rtsb-public' );
328 + wp_dequeue_script( $handle );
273 329 wp_enqueue_script( 'swiper' );
274 - wp_enqueue_script( 'rtsb-public' );
330 +
331 + if ( Fns::is_optimization_enabled() ) {
332 + Fns::enqueue_optimized_assets();
333 + } else {
334 + wp_enqueue_script( $handle );
335 + }
275 336 }
276 337
277 - /**
278 - * Styles.
279 - */
280 - wp_enqueue_style( 'rtsb-fonts' );
281 - wp_enqueue_style( 'rtsb-frontend' );
338 + wp_enqueue_script( 'rtsb-tipsy' );
282 339
283 - /**
284 - * Scripts.
285 - */
286 - wp_enqueue_script( 'rtsb-imagesloaded' );
287 - wp_enqueue_script( 'rtsb-tipsy' );
288 - wp_enqueue_script( 'rtsb-public' );
340 + if ( Fns::is_optimization_enabled() ) {
341 + Fns::enqueue_optimized_assets();
342 + } else {
343 + wp_enqueue_style( 'rtsb-fonts' );
344 + wp_enqueue_style( 'rtsb-frontend' );
345 + wp_enqueue_script( 'rtsb-public' );
346 + }
289 347
290 348 /**
291 349 * Localize script.
292 350 */
@@ -299,22 +357,27 @@
299 357 * @static
300 358 * @return void
301 359 */
302 360 public static function localizeData() {
361 + $handle = Fns::optimized_handle( 'rtsb-public' );
362 +
303 363 wp_localize_script(
304 - 'rtsb-public',
364 + $handle,
305 365 'rtsbPublicParams',
306 366 [
307 - 'ajaxUrl' => esc_url( self::$ajaxurl ),
308 - 'homeurl' => home_url(),
309 - 'wcCartUrl' => wc_get_cart_url(),
310 - 'addedToCartText' => esc_html__( 'Product Added', 'shopbuilder' ),
311 - 'browseCartText' => esc_html__( 'Browse Cart', 'shopbuilder' ),
312 - 'noProductsText' => apply_filters( 'rtsb/global/no_products_text', esc_html__( 'No more products to load', 'shopbuilder' ) ),
313 - 'notice' => [
367 + 'ajaxUrl' => esc_url( self::$ajaxurl ),
368 + 'homeurl' => home_url(),
369 + 'wcCartUrl' => wc_get_cart_url(),
370 + 'addedToCartText' => esc_html__( 'Product Added', 'shopbuilder' ),
371 + 'singleCartToastrText' => esc_html__( 'Successfully Added', 'shopbuilder' ),
372 + 'singleCartBtnText' => apply_filters( 'rtsb/global/single_add_to_cart_success', esc_html__( 'Added to Cart', 'shopbuilder' ) ),
373 + 'browseCartText' => esc_html__( 'Browse Cart', 'shopbuilder' ),
374 + 'noProductsText' => apply_filters( 'rtsb/global/no_products_text', esc_html__( 'No more products to load', 'shopbuilder' ) ),
375 + 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
376 + 'notice' => [
314 377 'position' => Fns::get_option( 'general', 'notification', 'notification_position', 'center-center' ),
315 378 ],
316 - rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
379 + rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
317 380 ]
318 381 );
319 382 }
320 383
@@ -327,9 +390,20 @@
327 390 /**
328 391 * Styles.
329 392 */
330 393 wp_register_style( 'rtsb-admin-app', rtsb()->get_assets_uri( 'css/backend/admin-settings.css' ), '', $this->version );
331 - wp_register_style( 'rtsb-admin-global', rtsb()->get_assets_uri( 'css/backend/admin-global.css' ), '', $this->version );
394 + wp_register_style( 'rtsb-fonts', rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ), '', $this->version );
395 +
396 + $current_screen = get_current_screen();
397 +
398 + if ( 'edit-rtsb_builder' === $current_screen->id ) {
399 + if ( ! function_exists( 'woocommerce_get_asset_url' ) ) {
400 + include_once WC_ABSPATH . 'includes/wc-template-functions.php';
401 + }
402 +
403 + wp_deregister_style( 'select2' );
404 + wp_register_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
405 + }
332 406 wp_register_style( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'css/backend/template-builder.css' ), '', $this->version );
333 407
334 408 /**
335 409 * Scripts.
@@ -335,25 +409,47 @@
335 409 * Scripts.
336 410 */
337 411 wp_register_script( 'rtsb-admin-app', rtsb()->get_assets_uri( 'js/backend/admin-settings.js' ), '', $this->version, true );
338 412 wp_register_script( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'js/backend/template-builder.js' ), '', $this->version, true );
339 -
340 413 }
341 414
342 415 /**
343 416 * Enqueues admin scripts.
344 417 *
345 - * @param string $hook Hooks.
346 - *
347 418 * @return void
348 419 */
349 - public function enqueue_backend_scripts( $hook ) {
420 + public function enqueue_backend_scripts() {
421 + ob_start(); ?>
422 + #adminmenu .toplevel_page_rtsb .wp-menu-image img {
423 + width: auto;
424 + height: 22px;
425 + padding: 4px 0;
426 + box-sizing: content-box;
427 + }
428 + .post-type-rtsb_builder li#wp-admin-bar-WPML_ALS_all,
429 + .post-type-rtsb_builder li.language_all{
430 + display: none;
431 + }
350 432
351 - wp_enqueue_style( 'rtsb-admin-global' );
433 + <?php
434 + $admin_global_style = ob_get_clean();
435 + // Speed Optimization.
436 + wp_add_inline_style( 'admin-menu', $admin_global_style );
352 437
353 438 global $pagenow;
354 439
355 - if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && 'rtsb-settings' === $_GET['page'] ) {
440 + $whitelisted_pages = [ 'rtsb-settings', 'rtsb-get-help', 'rtsb-themes' ];
441 + $current_page = ! empty( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
442 +
443 + if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && in_array( $current_page, $whitelisted_pages, true ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
444 + /**
445 + * Styles.
446 + */
447 + wp_enqueue_style( 'rtsb-admin-app' );
448 + wp_enqueue_style( 'rtsb-fonts' );
449 + }
450 +
451 + if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && 'rtsb-settings' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
356 452 // Elementor Console Error Fixed For "rtsb-settings" Page.
357 453 wp_dequeue_script( 'elementor-admin-top-bar' );
358 454 wp_dequeue_script( 'elementor-common' );
359 455 wp_dequeue_script( 'elementor-dev-tools' );
@@ -360,8 +456,9 @@
360 456 wp_dequeue_script( 'elementor-web-cli' );
361 457 wp_dequeue_script( 'elementor-import-export-admin' );
362 458 wp_dequeue_script( 'elementor-app-loader' );
363 459 wp_dequeue_script( 'elementor-admin-modules' );
460 + wp_dequeue_script( 'elementor-ai-media-library' );
364 461 wp_dequeue_script( 'elementor-admin' );
365 462
366 463 wp_dequeue_style( 'elementor-admin-top-bar' );
367 464 wp_dequeue_style( 'elementor-admin' );
@@ -368,15 +465,11 @@
368 465 wp_dequeue_style( 'e-theme-ui-light' );
369 466 wp_dequeue_style( 'elementor-common' );
370 467
371 468 /**
372 - * Styles.
373 - */
374 - wp_enqueue_style( 'rtsb-admin-app' );
375 -
376 - /**
377 469 * Scripts.
378 470 */
471 + wp_enqueue_media();
379 472 wp_enqueue_script( 'updates' );
380 473 wp_enqueue_script( 'rtsb-admin-app' );
381 474 wp_localize_script(
382 475 'rtsb-admin-app',
@@ -381,16 +474,23 @@
381 474 wp_localize_script(
382 475 'rtsb-admin-app',
383 476 'rtsbParams',
384 477 [
385 - 'ajaxurl' => esc_url( self::$ajaxurl ),
386 - 'homeurl' => home_url(),
387 - 'restApiUrl' => esc_url_raw( rest_url() ),
388 - 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
389 - 'nonce' => wp_create_nonce( rtsb()->nonceText ),
390 - 'sections' => Settings::instance()->get_sections(),
391 - 'pages' => Fns::get_pages(),
392 - 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no'
478 + 'ajaxurl' => esc_url( self::$ajaxurl ),
479 + 'homeurl' => home_url(),
480 + 'adminLogo' => rtsb()->get_assets_uri( 'images/icon/ShopBuilder-Logo.svg' ),
481 + 'restApiUrl' => esc_url_raw( rest_url() ),
482 + 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
483 + 'nonce' => wp_create_nonce( rtsb()->nonceText ),
484 + 'pages' => Fns::get_pages(),
485 + 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
486 + 'proVersion' => defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0',
487 + 'updateRates' => esc_html__( 'Update All Rates', 'shopbuilder' ),
488 + 'sections' => Settings::instance()->get_sections(),
489 + 'userRoles' => Fns::get_all_user_roles(),
490 + 'hasElementor' => defined( 'ELEMENTOR_VERSION' ),
491 + 'loadElementor' => Fns::should_load_elementor_scripts(),
492 + 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
393 493 ]
394 494 );
395 495 } else {
396 496 $current_screen = get_current_screen();
@@ -403,9 +503,9 @@
403 503 * Styles.
404 504 */
405 505 wp_enqueue_style( 'rtsb-templatebuilder' );
406 506
407 - wp_enqueue_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) );
507 + wp_enqueue_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
408 508
409 509 wp_enqueue_script( 'selectWoo' );
410 510 /**
411 511 * Scripts.
@@ -418,9 +518,9 @@
418 518 [
419 519 'ajaxurl' => esc_url( self::$ajaxurl ),
420 520 'homeurl' => home_url(),
421 521 rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
422 - 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no'
522 + 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
423 523 ]
424 524 );
425 525 }
426 526 }
@@ -440,8 +540,9 @@
440 540
441 541 if ( ! empty( $notification_color ) ) {
442 542 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{color:{$notification_color}}";
443 543 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success:before{background-color:{$notification_color}}";
544 + $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-close-button{color:{$notification_color}}";
444 545 }
445 546
446 547 if ( ! empty( $notification_bgcolor ) ) {
447 548 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{background-color:{$notification_bgcolor}}";
@@ -451,8 +552,33 @@
451 552 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success a{color:{$notification_button_color}}";
452 553 }
453 554
454 555 if ( ! empty( $dynamic_css ) ) {
455 - wp_add_inline_style( 'rtsb-frontend', $dynamic_css );
556 + wp_add_inline_style( Fns::optimized_handle( 'rtsb-frontend' ), $dynamic_css );
456 557 }
558 + }
559 +
560 + /**
561 + * Get the appropriate Swiper JS file URL.
562 + *
563 + * @return string
564 + */
565 + private function get_swiper_url() {
566 + $default_swiper_url = rtsb()->get_assets_uri( 'vendor/swiper/js/swiper-bundle.min.js' );
567 +
568 + if ( defined( 'ELEMENTOR_ASSETS_PATH' ) && defined( 'ELEMENTOR_ASSETS_URL' ) ) {
569 + $experiment = get_option( 'elementor_experiment-e_swiper_latest' );
570 +
571 + $el_relative_path = ( 'active' === $experiment || 'default' === $experiment )
572 + ? 'lib/swiper/v8/swiper.min.js'
573 + : 'lib/swiper/swiper.min.js';
574 +
575 + $el_full_path = ELEMENTOR_ASSETS_PATH . $el_relative_path;
576 +
577 + if ( file_exists( $el_full_path ) ) {
578 + return ELEMENTOR_ASSETS_URL . $el_relative_path;
579 + }
580 + }
581 +
582 + return $default_swiper_url;
457 583 }
458 584 }