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