PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / trunk
ShopBuilder – WooCommerce Builder For Elementor vtrunk
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 2.3.0 All 62 releases
shopbuilder / app / Controllers / AssetsController.php

AssetsController.php in ShopBuilder – WooCommerce Builder For Elementor trunk, at app/Controllers/AssetsController.php

623 lines 18.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Assets Controller Class
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB\Controllers;
9
10 use RadiusTheme\SB\AI\AIFns;
11 use RadiusTheme\SB\Helpers\Fns;
12 use RadiusTheme\SB\Models\Settings;
13 use RadiusTheme\SB\Helpers\BuilderFns;
14 use RadiusTheme\SB\Traits\SingletonTrait;
15
16 // Do not allow directly accessing this file.
17 if ( ! defined( 'ABSPATH' ) ) {
18 exit( 'This script cannot be accessed directly.' );
19 }
20
21 /**
22 * Assets Controller Class
23 */
24 class AssetsController {
25
26 use SingletonTrait;
27
28 /**
29 * Plugin version
30 *
31 * @var string
32 */
33 private $version;
34
35 /**
36 * Ajax URL
37 *
38 * @var string
39 */
40 private static $ajaxurl;
41
42 /**
43 * Styles.
44 *
45 * @var array
46 */
47 private $styles = [];
48
49 /**
50 * Scripts.
51 *
52 * @var array
53 */
54 private $scripts = [];
55
56 /**
57 * Cached bundled assets.
58 *
59 * @var array|null
60 */
61 private $cached_bundled_assets = null;
62
63 /**
64 * Class Constructor
65 */
66 public function __construct() {
67 $this->version = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? time() : RTSB_VERSION;
68
69 // phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
70 if ( in_array( 'sitepress-multilingual-cms/sitepress.php', get_option( 'active_plugins' ) ) ) {
71 self::$ajaxurl = admin_url( 'admin-ajax.php?lang=' . ICL_LANGUAGE_CODE );
72 } else {
73 self::$ajaxurl = admin_url( 'admin-ajax.php' );
74 }
75 add_filter( 'rtsb/optimizer/scripts/deps', [ $this, 'extend_shared_dependencies' ], 99 );
76 /**
77 * Admin scripts.
78 */
79 add_action( 'admin_enqueue_scripts', [ $this, 'register_backend_assets' ], 1 );
80 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_backend_scripts' ], 15 );
81
82 /**
83 * Public scripts.
84 */
85 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_public_scripts' ], 25 );
86 /**
87 * General scripts.
88 */
89 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_general_public_scripts' ], 30 );
90 }
91 /**
92 * Shared dependencies.
93 *
94 * @param array $deps Dependencies.
95 *
96 * @return array
97 */
98 public function extend_shared_dependencies( $deps ) {
99 if ( Fns::is_elementor_widget_active( 'products_slider' ) ) {
100 $deps[] = 'swiper';
101 }
102 return array_unique( $deps );
103 }
104 /**
105 * Get all frontend scripts.
106 *
107 * @return void
108 */
109 private function get_public_assets() {
110 $this->get_public_styles()->get_public_scripts();
111 }
112
113 /**
114 * Get public styles.
115 *
116 * @return object
117 */
118 private function get_public_styles() {
119 $rtl_suffix = is_rtl() ? '-rtl' : '';
120 $rtl_dir = is_rtl() ? trailingslashit( 'rtl' ) : trailingslashit( 'css' );
121
122 $this->styles[] = [
123 'handle' => 'rtsb-odometer',
124 'src' => rtsb()->get_assets_uri( 'vendor/odometer/css/odometer.min.css' ),
125 ];
126
127 $this->styles[] = [
128 'handle' => 'rtsb-fonts',
129 'src' => rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ),
130 ];
131 if ( rtsb()->has_pro() ) {
132 $this->styles[] = [
133 'handle' => 'rtsb-noui-slider',
134 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.css' ),
135 ];
136 }
137
138 $pro_version = defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0';
139 $addon_condition = version_compare( $pro_version, '1.9.0', '<' );
140
141 if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
142 $this->styles[] = AssetRegistry::instance()->load_optimized_assets();
143 } else {
144 if ( $addon_condition ) {
145 $this->styles[] = [
146 'handle' => 'rtsb-general-addons',
147 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/general-addons' . $rtl_suffix . '.css' ),
148 ];
149 }
150 $this->styles[] = [
151 'handle' => 'rtsb-frontend',
152 'src' => rtsb()->get_assets_uri( $rtl_dir . 'frontend/frontend' . $rtl_suffix . '.css' ),
153 ];
154 }
155 if ( BuilderFns::is_builder_preview() && 'elementor' == Fns::page_edit_with( get_the_ID() ) ) {
156 $this->styles[] = [
157 'handle' => 'photoswipe',
158 'src' => plugins_url( 'assets/css/photoswipe/photoswipe.min.css', WC_PLUGIN_FILE ),
159 ];
160
161 $this->styles[] = [
162 'handle' => 'photoswipe-default-skin',
163 'src' => plugins_url( 'assets/css/photoswipe/default-skin/default-skin.min.css', WC_PLUGIN_FILE ),
164 ];
165
166 // Load only for elementor editor page and fix some issue.
167 $this->styles[] = [
168 'handle' => 'elementor-editor-style-fix',
169 'src' => rtsb()->get_assets_uri( 'css/backend/elementor-editor-style-fix.css' ),
170 ];
171 }
172
173 return $this;
174 }
175
176 /**
177 * Get public scripts.
178 *
179 * @return object
180 */
181 private function get_public_scripts() {
182 $this->scripts[] = [
183 'handle' => 'swiper',
184 'src' => esc_url( $this->get_swiper_url() ),
185 'deps' => [ 'jquery' ],
186 'footer' => true,
187 ];
188 $this->scripts[] = [
189 'handle' => 'rtsb-waypoints',
190 'src' => rtsb()->get_assets_uri( 'vendor/waypoints/js/jquery.waypoints.min.js' ),
191 'deps' => [ 'jquery' ],
192 'footer' => true,
193 ];
194 $this->scripts[] = [
195 'handle' => 'rtsb-odometer',
196 'src' => rtsb()->get_assets_uri( 'vendor/odometer/js/odometer.min.js' ),
197 'deps' => [ 'jquery' ],
198 'footer' => true,
199 ];
200
201 $this->scripts[] = [
202 'handle' => 'rtsb-tipsy',
203 'src' => rtsb()->get_assets_uri( 'vendor/tipsy/tipsy.min.js' ),
204 'deps' => [ 'jquery' ],
205 'footer' => true,
206 ];
207
208 if ( BuilderFns::is_builder_preview() && 'elementor' == Fns::page_edit_with( get_the_ID() ) ) {
209 $this->scripts[] = [
210 'handle' => 'wc-flexslider',
211 'src' => plugins_url( 'assets/js/flexslider/jquery.flexslider.js', WC_PLUGIN_FILE ),
212 'deps' => [ 'jquery' ],
213 'footer' => true,
214 ];
215
216 $this->scripts[] = [
217 'handle' => 'photoswipe',
218 'src' => plugins_url( 'assets/js/photoswipe/photoswipe.js', WC_PLUGIN_FILE ),
219 'deps' => [ 'jquery' ],
220 'footer' => true,
221 ];
222
223 $this->scripts[] = [
224 'handle' => 'wc-zoom',
225 'src' => plugins_url( 'assets/js/zoom/jquery.zoom.js', WC_PLUGIN_FILE ),
226 'deps' => [ 'jquery' ],
227 'footer' => true,
228 ];
229
230 $this->scripts[] = [
231 'handle' => 'wc-photoswipe-ui-default',
232 'src' => plugins_url( 'assets/js/photoswipe/photoswipe-ui-default.js', WC_PLUGIN_FILE ),
233 'deps' => [ 'jquery', 'photoswipe' ],
234 'footer' => true,
235 ];
236
237 $this->scripts[] = [
238 'handle' => 'wc-single-product',
239 'src' => plugins_url( 'assets/js/frontend/single-product.js', WC_PLUGIN_FILE ),
240 'deps' => [ 'jquery', 'wc-flexslider', 'photoswipe', 'wc-photoswipe-ui-default', 'wc-zoom' ],
241 'footer' => true,
242 ];
243
244 }
245
246 if ( rtsb()->has_pro() ) {
247 $this->scripts[] = [
248 'handle' => 'rtsb-noui-slider',
249 'src' => rtsbpro()->get_assets_uri( 'vendors/nouislider/nouislider.min.js' ),
250 'deps' => [ 'jquery' ],
251 'footer' => true,
252 ];
253
254 $this->scripts[] = [
255 'handle' => 'rtsb-sticky-sidebar',
256 'src' => rtsbpro()->get_assets_uri( 'vendors/sticky-sidebar/sticky-sidebar.min.js' ),
257 'deps' => [ 'jquery' ],
258 'footer' => true,
259 ];
260
261 $this->scripts[] = [
262 'handle' => 'rtsb-popper',
263 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/popper.min.js' ),
264 'deps' => [ 'jquery' ],
265 'footer' => true,
266 ];
267
268 $this->scripts[] = [
269 'handle' => 'rtsb-tippy',
270 'src' => rtsbpro()->get_assets_uri( 'vendors/tippy/tippy.min.js' ),
271 'deps' => [ 'jquery', 'rtsb-popper' ],
272 'footer' => true,
273 ];
274 }
275
276 if ( ! rtsb()->has_pro() && Fns::is_optimization_enabled() ) {
277 $this->scripts[] = AssetRegistry::instance()->load_optimized_assets( 'js' );
278 } else {
279 $this->scripts[] = [
280 'handle' => 'rtsb-public',
281 'src' => rtsb()->get_assets_uri( 'js/frontend/frontend.js' ),
282 'deps' => [ 'jquery', 'imagesloaded', 'swiper' ],
283 'footer' => true,
284 ];
285 }
286
287 return $this;
288 }
289
290 /**
291 * Register public scripts.
292 *
293 * @return void
294 */
295 public function register_public_scripts() {
296 $this->get_public_assets();
297 $this->styles = array_filter( $this->styles );
298 $this->scripts = array_filter( $this->scripts );
299
300 // Register public styles.
301 foreach ( $this->styles as $style ) {
302 wp_register_style( $style['handle'], $style['src'], '', $this->version );
303 }
304
305 // Register public scripts.
306 foreach ( $this->scripts as $script ) {
307 wp_register_script( $script['handle'], $script['src'], $script['deps'], $this->version, $script['footer'] );
308 }
309 }
310
311 /**
312 * Enqueues public scripts.
313 *
314 * @return void
315 */
316 public function enqueue_public_scripts() {
317 /**
318 * Register scripts.
319 */
320 $this->register_public_scripts();
321
322 /**
323 * Enqueue scripts.
324 */
325 if ( BuilderFns::is_builder_preview() && 'elementor' === Fns::page_edit_with( get_the_ID() ) ) {
326 /**
327 * Styles.
328 */
329 wp_enqueue_style( 'photoswipe' );
330 wp_enqueue_style( 'photoswipe-default-skin' );
331 wp_enqueue_style( 'elementor-editor-style-fix' );
332 wp_enqueue_style( 'woocommerce-general' );
333
334 /**
335 * Scripts.
336 */
337 $handle = Fns::optimized_handle( 'rtsb-public' );
338
339 wp_enqueue_script( 'wc-flexslider' );
340 wp_enqueue_script( 'wc-single-product' );
341 wp_dequeue_script( $handle );
342 wp_enqueue_script( 'swiper' );
343
344 if ( Fns::is_optimization_enabled() ) {
345 Fns::enqueue_optimized_assets();
346 } else {
347 wp_enqueue_script( $handle );
348 }
349 }
350
351 wp_enqueue_script( 'rtsb-tipsy' );
352
353 if ( Fns::is_optimization_enabled() ) {
354 Fns::enqueue_optimized_assets();
355 } else {
356 wp_enqueue_style( 'rtsb-fonts' );
357 wp_enqueue_style( 'rtsb-frontend' );
358 wp_enqueue_script( 'rtsb-public' );
359 }
360
361 /**
362 * Localize script.
363 */
364 self::localizeData();
365 }
366
367 /**
368 * Localized Data.
369 *
370 * @static
371 * @return void
372 */
373 public static function localizeData() {
374 $handle = Fns::optimized_handle( 'rtsb-public' );
375 $ai_data = AIFns::activated_ai_data();
376 wp_localize_script(
377 $handle,
378 'rtsbPublicParams',
379 [
380 'ajaxUrl' => esc_url( self::$ajaxurl ),
381 'aiActivated' => ! empty( $ai_data ),
382 'homeurl' => home_url(),
383 'shopUrl' => function_exists( 'wc_get_page_permalink' ) ? esc_url( wc_get_page_permalink( 'shop' ) ) : home_url( '/' ),
384 'wcCartUrl' => wc_get_cart_url(),
385 'addedToCartText' => esc_html__( 'Product Added', 'shopbuilder' ),
386 'singleCartToastrText' => esc_html__( 'Successfully Added', 'shopbuilder' ),
387 'singleCartBtnText' => apply_filters( 'rtsb/global/single_add_to_cart_success', esc_html__( 'Added to Cart', 'shopbuilder' ) ),
388 'browseCartText' => esc_html__( 'Browse Cart', 'shopbuilder' ),
389 'noProductsText' => apply_filters( 'rtsb/global/no_products_text', esc_html__( 'No more products to load', 'shopbuilder' ) ),
390 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
391 'isLoaderEnabled' => Fns::enable_loader(),
392 'notice' => [
393 'position' => Fns::get_option( 'general', 'notification', 'notification_position', 'center-center' ),
394 'timeOut' => absint( Fns::get_option( 'general', 'notification', 'notification_timeOut', 5 ) ),
395 ],
396 rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
397 ]
398 );
399 }
400
401 /**
402 * Registers Admin scripts.
403 *
404 * @return void
405 */
406 public function register_backend_assets() {
407 /**
408 * Styles.
409 */
410 wp_register_style( 'rtsb-admin-app', rtsb()->get_assets_uri( 'css/backend/admin-settings.css' ), '', $this->version );
411 wp_register_style( 'rtsb-fonts', rtsb()->get_assets_uri( 'css/frontend/rtsb-fonts.css' ), '', $this->version );
412
413 $current_screen = get_current_screen();
414
415 if ( 'edit-rtsb_builder' === $current_screen->id ) {
416 if ( ! function_exists( 'woocommerce_get_asset_url' ) ) {
417 include_once WC_ABSPATH . 'includes/wc-template-functions.php';
418 }
419
420 wp_deregister_style( 'select2' );
421 wp_register_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
422 }
423 wp_register_style( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'css/backend/template-builder.css' ), '', $this->version );
424
425 /**
426 * Scripts.
427 */
428 wp_register_script( 'rtsb-admin-app', rtsb()->get_assets_uri( 'js/backend/admin-settings.js' ), '', $this->version, true );
429 wp_register_script( 'rtsb-templatebuilder', rtsb()->get_assets_uri( 'js/backend/template-builder.js' ), '', $this->version, true );
430 wp_localize_script(
431 'rtsb-admin-app',
432 'rtsbParams',
433 [
434 'ajaxurl' => esc_url( self::$ajaxurl ),
435 'homeurl' => home_url(),
436 'adminLogo' => rtsb()->get_assets_uri( 'images/icon/ShopBuilder-Logo.svg' ),
437 'blackFriday' => rtsb()->get_assets_uri( 'images/black-friday-ribbon.svg' ),
438 'restApiUrl' => esc_url_raw( rest_url() ),
439 'rest_nonce' => wp_create_nonce( 'wp_rest' ),
440 'nonce' => wp_create_nonce( rtsb()->nonceText ),
441 'pages' => Fns::get_pages(),
442 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
443 'validLicence' => Fns::has_valid_license() ? 'yes' : 'no',
444 'proVersion' => defined( 'RTSBPRO_VERSION' ) ? RTSBPRO_VERSION : '0',
445 'updateRates' => esc_html__( 'Update All Rates', 'shopbuilder' ),
446 'sections' => Settings::instance()->get_sections(),
447 'userRoles' => Fns::get_all_user_roles(),
448 'hasElementor' => defined( 'ELEMENTOR_VERSION' ),
449 'loadElementor' => Fns::should_load_elementor_scripts(),
450 'isOptimizationEnabled' => Fns::is_optimization_enabled(),
451 ]
452 );
453 wp_localize_script(
454 'rtsb-admin-app',
455 'rtsbCaAbandonment',
456 [
457 'mainTitle' => esc_html__( 'Abandoned Carts Follow Up', 'shopbuilder' ),
458 'followUpColumnTitle' => [
459 'UserName' => esc_html__( 'Name', 'shopbuilder' ),
460 'EmailTo' => esc_html__( 'Email To', 'shopbuilder' ),
461 'CartTotal' => esc_html__( 'Cart Total', 'shopbuilder' ),
462 'OrderStatus' => esc_html__( 'Order Status', 'shopbuilder' ),
463 'DateTime' => esc_html__( 'Date / Time', 'shopbuilder' ),
464 'Action' => esc_html__( 'Action', 'shopbuilder' ),
465 ],
466 ]
467 );
468 }
469
470 /**
471 * Enqueues admin scripts.
472 *
473 * @return void
474 */
475 public function enqueue_backend_scripts() {
476 ob_start(); ?>
477 #adminmenu .toplevel_page_rtsb .wp-menu-image img {
478 width: auto;
479 height: 22px;
480 padding: 4px 0;
481 box-sizing: content-box;
482 }
483 .post-type-rtsb_builder li#wp-admin-bar-WPML_ALS_all,
484 .post-type-rtsb_builder li.language_all{
485 display: none;
486 }
487
488 <?php
489 $admin_global_style = ob_get_clean();
490 // Speed Optimization.
491 wp_add_inline_style( 'admin-menu', $admin_global_style );
492
493 global $pagenow;
494
495 $whitelisted_pages = [ 'rtsb-settings', 'rtsb-get-help', 'rtsb-themes' ];
496 $current_page = ! empty( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended
497
498 if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && in_array( $current_page, $whitelisted_pages, true ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
499 /**
500 * Styles.
501 */
502 wp_enqueue_style( 'rtsb-admin-app' );
503 wp_enqueue_style( 'rtsb-fonts' );
504 }
505
506 if ( 'admin.php' === $pagenow && ! empty( $_GET['page'] ) && 'rtsb-settings' === $_GET['page'] ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
507 // Elementor Console Error Fixed For "rtsb-settings" Page.
508 wp_dequeue_script( 'elementor-admin-top-bar' );
509 wp_dequeue_script( 'elementor-common' );
510 wp_dequeue_script( 'elementor-dev-tools' );
511 wp_dequeue_script( 'elementor-web-cli' );
512 wp_dequeue_script( 'elementor-import-export-admin' );
513 wp_dequeue_script( 'elementor-app-loader' );
514 wp_dequeue_script( 'elementor-admin-modules' );
515 wp_dequeue_script( 'elementor-ai-media-library' );
516 wp_dequeue_script( 'elementor-admin' );
517
518 wp_dequeue_style( 'elementor-admin-top-bar' );
519 wp_dequeue_style( 'elementor-admin' );
520 wp_dequeue_style( 'e-theme-ui-light' );
521 wp_dequeue_style( 'elementor-common' );
522
523 /**
524 * Scripts.
525 */
526 wp_enqueue_media();
527 wp_enqueue_script( 'updates' );
528 wp_enqueue_script( 'rtsb-admin-app' );
529 } else {
530 $current_screen = get_current_screen();
531
532 if ( 'edit-rtsb_builder' === $current_screen->id ) {
533 if ( ! function_exists( 'woocommerce_get_asset_url' ) ) {
534 include_once WC_ABSPATH . 'includes/wc-template-functions.php';
535 }
536 /**
537 * Styles.
538 */
539 wp_enqueue_style( 'rtsb-templatebuilder' );
540
541 wp_enqueue_style( 'select2', plugins_url( 'assets/css/select2.css', WC_PLUGIN_FILE ) ); // phpcs:ignore WordPress.WP.EnqueuedResourceParameters.MissingVersion
542
543 wp_enqueue_script( 'selectWoo' );
544 /**
545 * Scripts.
546 */
547 wp_enqueue_script( 'rtsb-templatebuilder' );
548
549 wp_localize_script(
550 'rtsb-templatebuilder',
551 'rtsbParams',
552 [
553 'ajaxurl' => esc_url( self::$ajaxurl ),
554 'homeurl' => home_url(),
555 rtsb()->nonceId => wp_create_nonce( rtsb()->nonceText ),
556 'hasPro' => rtsb()->has_pro() ? 'yes' : 'no',
557 'singletonTypes' => apply_filters(
558 'rtsb/builder/singleton_types',
559 array_keys( \RadiusTheme\SB\Helpers\BuilderFns::builder_page_types() )
560 ),
561 ]
562 );
563 }
564 }
565 }
566
567 /**
568 * Enqueues general public scripts.
569 *
570 * @return void
571 */
572 public function enqueue_general_public_scripts() {
573 $notification_color = Fns::get_option( 'general', 'notification', 'notification_color', '#004BFF' );
574 $notification_bgcolor = Fns::get_option( 'general', 'notification', 'notification_bg', '#F5F8FF' );
575 $notification_button_color = Fns::get_option( 'general', 'notification', 'notification_btn_color', '#0039C0' );
576
577 $dynamic_css = '';
578
579 if ( ! empty( $notification_color ) ) {
580 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{color:{$notification_color}}";
581 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success:before{background-color:{$notification_color}}";
582 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-close-button{color:{$notification_color}}";
583 }
584
585 if ( ! empty( $notification_bgcolor ) ) {
586 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success{background-color:{$notification_bgcolor}}";
587 }
588
589 if ( ! empty( $notification_button_color ) ) {
590 $dynamic_css .= ".rtsb-shopbuilder-plugin #toast-container .toast-success a{color:{$notification_button_color}}";
591 }
592
593 if ( ! empty( $dynamic_css ) ) {
594 wp_add_inline_style( Fns::optimized_handle( 'rtsb-frontend' ), $dynamic_css );
595 }
596 }
597
598 /**
599 * Get the appropriate Swiper JS file URL.
600 *
601 * @return string
602 */
603 private function get_swiper_url() {
604 $default_swiper_url = rtsb()->get_assets_uri( 'vendor/swiper/js/swiper-bundle.min.js' );
605
606 if ( defined( 'ELEMENTOR_ASSETS_PATH' ) && defined( 'ELEMENTOR_ASSETS_URL' ) ) {
607 $experiment = get_option( 'elementor_experiment-e_swiper_latest' );
608
609 $el_relative_path = ( 'active' === $experiment || 'default' === $experiment )
610 ? 'lib/swiper/v8/swiper.min.js'
611 : 'lib/swiper/swiper.min.js';
612
613 $el_full_path = ELEMENTOR_ASSETS_PATH . $el_relative_path;
614
615 if ( file_exists( $el_full_path ) ) {
616 return ELEMENTOR_ASSETS_URL . $el_relative_path;
617 }
618 }
619
620 return $default_swiper_url;
621 }
622 }
623