PluginProbe
Sky Addons for Elementor / 3.8.4
Sky Addons for Elementor v3.8.4
3.8.4 3.8.3 3.8.2 3.8.0 3.8.1 3.3.3 3.3.2 trunk 1.0.0 1.0.10 1.0.2 1.0.6 1.0.7 1.0.8 1.0.9 1.5.0 2.0.0 2.0.8 2.5.10 2.5.11 2.5.12 2.5.13 2.5.15 2.5.16 2.5.4 All 51 releases
sky-elementor-addons / plugin.php

plugin.php in Sky Addons for Elementor 3.8.4, at plugin.php

576 lines 19.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Sky_Addons;
4
5 use Elementor\Plugin;
6 use Elementor\Controls_Manager;
7 use Elementor\Elements_Manager;
8 use Sky_Addons\Includes\WPML_Init;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit;
12 }
13
14 /**
15 * Main class plugin -> Sky_Addons
16 */
17 class Sky_Addons_Plugin {
18
19 /**
20 * @var Plugin -> Sky_Addons
21 */
22 private static $_instance;
23
24 /**
25 * Modules Manager
26 *
27 * @var Managers
28 */
29 private $_modules_manager;
30
31 /**
32 * @var array
33 */
34 private $_localize_settings = [];
35
36 /**
37 * @return string
38 */
39 public function get_version() {
40 return SKY_ADDONS_VERSION;
41 }
42
43 /**
44 * Throw error on object clone
45 *
46 * The whole idea of the singleton design pattern is that there is a single
47 * object therefore, we don't want the object to be cloned.
48 *
49 * @since 1.0.0
50 * @return void
51 */
52 public function __clone() {
53 // Cloning instances of the class is forbidden
54 _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'sky-elementor-addons' ), '1.0.0' );
55 }
56
57 /**
58 * Disable unserializing of the class
59 *
60 * @since 1.0.0
61 * @return void
62 */
63 public function __wakeup() {
64 // Unserializing instances of the class is forbidden
65 _doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'sky-elementor-addons' ), '1.0.0' );
66 }
67
68 /**
69 * @return Plugin
70 */
71 public static function elementor() {
72 return Plugin::$instance;
73 }
74
75 /**
76 * @return Plugin -> Sky_Addons
77 */
78 public static function instance() {
79 if ( is_null( self::$_instance ) ) {
80 self::$_instance = new self();
81
82 /**
83 * Fire this action on the load time
84 * This method will catch by PRO
85 * Pro will not work without this method
86 */
87 do_action( 'skyaddons_loaded' );
88 self::$_instance->add_actions();
89 self::$_instance->includes();
90 self::$_instance->wpml_compatibility()->init();
91 }
92
93 return self::$_instance;
94 }
95
96 public function wpml_compatibility() {
97 return WPML_Init::get_instance();
98 }
99
100 private function includes() {
101
102 require SKY_ADDONS_PATH . 'includes/modules-manager.php';
103 /**
104 * Utils Files
105 */
106 require SKY_ADDONS_PATH . 'includes/utils.php';
107
108 require_once SKY_ADDONS_INC_PATH . 'custom-meta-box.php';
109
110 require_once SKY_ADDONS_PATH . 'traits/global-swiper-controls.php';
111 require_once SKY_ADDONS_PATH . 'traits/global-widget-controls.php';
112 require_once SKY_ADDONS_PATH . 'traits/global-widget-functions.php';
113
114 /**
115 * Select Control
116 *
117 * @since 1.1.0
118 */
119 require_once SKY_ADDONS_INC_PATH . 'controls/select-input/dynamic-input-module.php';
120 require_once SKY_ADDONS_INC_PATH . 'controls/select-input/dynamic-select.php';
121 require_once SKY_ADDONS_INC_PATH . 'controls/widget-list/widget-list.php';
122
123 /**
124 * Templates Library
125 */
126 require_once SKY_ADDONS_INC_PATH . 'templates/Init_Templates.php';
127 require_once SKY_ADDONS_INC_PATH . 'templates/Import_Template.php';
128 require_once SKY_ADDONS_INC_PATH . 'templates/Library_Api.php';
129 require_once SKY_ADDONS_INC_PATH . 'templates/Load_Template.php';
130
131 /**
132 * Themes Builder
133 */
134 require_once SKY_ADDONS_INC_PATH . 'theme-builder/class-theme-builder.php';
135
136 /**
137 * Features
138 */
139 require_once SKY_ADDONS_INC_PATH . 'features/class-init.php';
140 \Sky_Addons\Features\Init::get_instance();
141
142 /**
143 * WPML
144 */
145 require_once SKY_ADDONS_INC_PATH . 'class-wpml-init.php';
146
147 /**
148 * Asset Manager (optimizer)
149 */
150 require_once SKY_ADDONS_INC_PATH . 'optimizer/class-optimizer.php';
151 \Sky_Addons\Optimizer\Optimizer::instance();
152 }
153
154 public function autoload( $_class ) {
155 if ( 0 !== strpos( $_class, __NAMESPACE__ ) ) {
156 return;
157 }
158
159 $filename = strtolower(
160 preg_replace(
161 [ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
162 [
163 '',
164 '$1-$2',
165 '-',
166 DIRECTORY_SEPARATOR,
167 ],
168 $_class
169 )
170 );
171 $filename = SKY_ADDONS_PATH . $filename . '.php';
172
173 if ( is_readable( $filename ) ) {
174 include $filename;
175 }
176 }
177
178 public function get_localize_settings() {
179 return $this->_localize_settings;
180 }
181
182 public function add_localize_settings( $setting_key, $setting_value = null ) {
183 if ( is_array( $setting_key ) ) {
184 $this->_localize_settings = array_replace_recursive( $this->_localize_settings, $setting_key );
185
186 return;
187 }
188
189 if ( ! is_array( $setting_value ) || ! isset( $this->_localize_settings[ $setting_key ] ) || ! is_array( $this->_localize_settings[ $setting_key ] ) ) {
190 $this->_localize_settings[ $setting_key ] = $setting_value;
191
192 return;
193 }
194
195 $this->_localize_settings[ $setting_key ] = array_replace_recursive( $this->_localize_settings[ $setting_key ], $setting_value );
196 }
197
198 public function enqueue_styles() {
199 $direction_suffix = is_rtl() ? '.rtl' : '';
200
201 wp_register_style(
202 'sky-addons',
203 SKY_ADDONS_URL . 'assets/css/sky-addons' . $direction_suffix . '.css',
204 [],
205 SKY_ADDONS_VERSION
206 );
207
208 // Shared utility CSS (margin/text helpers, post/wc classes, keyframes) compiled
209 // from src/less/utils/** alone. Standalone handle so each per-widget stylesheet
210 // can depend on it instead of re-bundling the utils. Same `sky-addons-base`
211 // name is reused on the script side (separate WP registry) for the shared JS.
212 wp_register_style(
213 'sky-addons-base',
214 SKY_ADDONS_URL . 'assets/css/sky-addons-base' . $direction_suffix . '.css',
215 [],
216 SKY_ADDONS_VERSION
217 );
218
219 // AM-on / editor: combined bundle carries utils + every widget's CSS.
220 // per-widget: no combined bundle; enqueue base utilities CSS directly so
221 // widgets with has_style=false still get global keyframes/helpers.
222 if ( 'per-widget' === sky_addons_asset_mode() && ! sky_addons_editor_mode() ) {
223 wp_enqueue_style( 'sky-addons-base' );
224 }
225 }
226
227 public function enqueue_editor_styles() {
228 $direction_suffix = is_rtl() ? '.rtl' : '';
229
230 wp_register_style( 'sky-widget-icons', SKY_ADDONS_ASSETS_URL . 'css/sky-widget-icons' . $direction_suffix . '.css', [], SKY_ADDONS_VERSION );
231 wp_enqueue_style( 'sky-widget-icons' );
232
233 wp_register_style( 'sky-addons-editor', SKY_ADDONS_ASSETS_URL . 'css/sky-editor' . $direction_suffix . '.css', [], SKY_ADDONS_VERSION );
234
235 wp_enqueue_style( 'sky-addons-editor' );
236 }
237
238 public function enqueue_scripts() {
239
240 if ( self::elementor()->preview->is_preview_mode() || self::elementor()->editor->is_edit_mode() ) {
241 // tippyjs — used by Logo Carousel + Logo Grid widgets.
242 if (
243 Managers::is_widget_active( 'logo-carousel' )
244 || Managers::is_widget_active( 'logo-grid' )
245 ) {
246 wp_enqueue_script( 'tippyjs' );
247 }
248
249 // anime — shared by Floating Effects + Reveal Effects extensions (revealFx depends on anime).
250 if (
251 Managers::is_extension_active( 'floating-effects' )
252 || Managers::is_extension_active( 'reveal-effects' )
253 ) {
254 wp_enqueue_script( 'anime' );
255 }
256
257 // Per-extension handlers + their dedicated vendors.
258 if ( Managers::is_extension_active( 'equal-height' ) ) {
259 wp_enqueue_script( 'equal-height' );
260 }
261 if ( Managers::is_extension_active( 'reveal-effects' ) ) {
262 wp_enqueue_script( 'revealFx' );
263 }
264 if ( Managers::is_extension_active( 'ripples-effect' ) ) {
265 wp_enqueue_script( 'ripples' );
266 }
267 if ( Managers::is_extension_active( 'simple-parallax' ) ) {
268 wp_enqueue_script( 'simple-parallax' );
269 }
270 if ( Managers::is_extension_active( 'animated-gradient-bg' ) ) {
271 wp_enqueue_script( 'granim' );
272 }
273 }
274
275 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
276
277 // Shared JS helpers (skyAddonsObserver, widgetGlobalCarousel) — standalone
278 // `sky-addons-base` handle (built from src/js/common.js) so widgets, extensions,
279 // the optimizer bundle and the pro plugin can all depend on it without
280 // re-bundling the same code. Mirrors the `sky-addons-base` style handle above.
281 wp_register_script(
282 'sky-addons-base',
283 SKY_ADDONS_URL . 'assets/js/sky-addons-base' . $suffix . '.js',
284 [ 'jquery' ],
285 SKY_ADDONS_VERSION,
286 true
287 );
288
289 // Frontend config — attached to the shared `sky-addons-base` helper (a dependency
290 // of both `sky-addons` and the optimizer bundle `sky-addons-scripts`) so it is
291 // printed regardless of which delivery path loads on the page.
292 wp_localize_script(
293 'sky-addons-base',
294 'SkyAddonsFrontendConfig', // This is used in the js file to group all of your scripts together
295 [
296 'ajaxurl' => admin_url( 'admin-ajax.php' ),
297 'nonce' => wp_create_nonce( 'sky_addons_nonce' ),
298 ]
299 );
300
301 wp_register_script(
302 'sky-addons',
303 SKY_ADDONS_URL . 'assets/js/sky-addons' . $suffix . '.js',
304 [
305 'jquery',
306 'sky-addons-base',
307 'elementor-frontend',
308 ],
309 SKY_ADDONS_VERSION,
310 true
311 );
312
313 // Single dispatch point for the widget/extension bundle.
314 // AM-on or editor/preview → load the optimizer's combined bundle (Tier 1 uploads
315 // / Tier 2 plugin combined), which carries every widget's JS + CSS.
316 // AM-off frontend → nothing global: each rendered widget's `sa-{id}` handle loads
317 // only its own file and pulls the shared `sky-addons-base` helpers via its
318 // dependency, so a page ships only the assets of the widgets actually on it.
319 // (`sky-addons` stays registered above for back-compat; it is no longer enqueued.)
320 if ( sky_addons_editor_mode() || sky_addons_is_asset_optimization_enabled() ) {
321 $this->enqueue_optimized_bundle();
322 }
323 }
324
325 /**
326 * Asset Manager bundle — frontend / Elementor preview enqueue.
327 *
328 * Tier 1 — uploads bundle (generated, active-widgets-only, minified).
329 * Tier 2 — plugin combined file (shipped, all widgets, instant fallback).
330 * Editor — always Tier 2 (fast, always available regardless of optimizer state).
331 *
332 * Registration + enqueue for every Sky Addons asset lives in this file; the
333 * Optimizer class owns only the bundle build/regeneration pipeline.
334 */
335 public function enqueue_optimized_bundle() {
336 if ( sky_addons_editor_mode() ) {
337 $this->register_and_enqueue_bundle( false );
338 return;
339 }
340
341 $mode = sky_addons_asset_mode();
342
343 switch ( $mode ) {
344 case 'per-widget':
345 return;
346
347 case 'full':
348 $this->register_and_enqueue_bundle( false );
349 return;
350
351 case 'generated':
352 default:
353 $this->register_and_enqueue_bundle( $this->is_uploads_bundle_ready() );
354 return;
355 }
356 }
357
358 /**
359 * Whether a usable uploads bundle exists on disk (Tier 1).
360 */
361 private function is_uploads_bundle_ready() {
362 if ( ! get_option( 'sky_addons_minified_asset_version', false ) ) {
363 return false;
364 }
365
366 $dir = \Sky_Addons\Optimizer\Asset_Manager::get_upload_dir();
367
368 return file_exists( $dir . 'css/sky-addons.css' ) && file_exists( $dir . 'js/sky-addons.js' );
369 }
370
371 /**
372 * Register sky-addons-styles / sky-addons-scripts from the correct source,
373 * then enqueue both by handle name.
374 *
375 * @param bool $use_uploads_bundle True → Tier 1 (uploads), False → Tier 2 (plugin).
376 */
377 private function register_and_enqueue_bundle( $use_uploads_bundle ) {
378 if ( $use_uploads_bundle ) {
379 // Tier 1: uploads bundle is self-contained — minify_js() prepends sky-addons-base.min.js
380 // and minify_css() prepends sky-addons-base.css into the generated files.
381 // Do NOT dep on sky-addons-base: it is already baked in, loading it separately is duplicate.
382 $deps_js = [ 'jquery', 'elementor-frontend' ];
383 $base_dir = \Sky_Addons\Optimizer\Asset_Manager::get_upload_dir();
384 $base_url = \Sky_Addons\Optimizer\Asset_Manager::get_upload_url();
385 $version = get_option( 'sky_addons_minified_asset_version' );
386 $css_file = ( is_rtl() && file_exists( $base_dir . 'css/sky-addons.rtl.css' ) )
387 ? 'css/sky-addons.rtl.css'
388 : 'css/sky-addons.css';
389 $css_url = $base_url . $css_file;
390 $js_url = $base_url . 'js/sky-addons.js';
391 } else {
392 // Tier 2: plugin bundle JS (sky-addons.min.js) contains widget handlers only —
393 // sky-addons-base helpers are NOT included, so the dep is required here.
394 $deps_js = [ 'jquery', 'elementor-frontend', 'sky-addons-base' ];
395 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
396 $rtl = is_rtl() && file_exists( SKY_ADDONS_ASSETS_PATH . 'css/sky-addons.rtl.css' );
397 $version = SKY_ADDONS_VERSION;
398 $css_url = SKY_ADDONS_ASSETS_URL . 'css/sky-addons' . ( $rtl ? '.rtl' : '' ) . '.css';
399 $js_url = SKY_ADDONS_ASSETS_URL . 'js/sky-addons' . $suffix . '.js';
400 }
401
402 wp_register_style( 'sky-addons-styles', $css_url, [], $version );
403 wp_register_script( 'sky-addons-scripts', $js_url, $deps_js, $version, true );
404
405 // Tier 1: sky-addons-base won't load as a dep (content is baked in the bundle),
406 // so the frontend config that is normally localized on sky-addons-base won't print.
407 // Attach it here so it is always available when the bundle executes.
408 if ( $use_uploads_bundle ) {
409 wp_localize_script(
410 'sky-addons-scripts',
411 'SkyAddonsFrontendConfig',
412 [
413 'ajaxurl' => admin_url( 'admin-ajax.php' ),
414 'nonce' => wp_create_nonce( 'sky_addons_nonce' ),
415 ]
416 );
417 }
418
419 wp_enqueue_style( 'sky-addons-styles' );
420 wp_enqueue_script( 'sky-addons-scripts' );
421 }
422
423 public function register_vendor_scripts() {
424 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
425 wp_register_script(
426 'image-compare-viewer',
427 SKY_ADDONS_ASSETS_URL . 'vendor/js/image-compare-viewer' . $suffix . '.js',
428 [
429 'jquery',
430 'elementor-frontend',
431 ],
432 '1.0.0',
433 true
434 );
435 wp_register_script( 'momentum', SKY_ADDONS_ASSETS_URL . 'vendor/js/momentum-slider' . $suffix . '.js', [], '1.0.0', true );
436 wp_register_script( 'wowdevs-accordion', SKY_ADDONS_ASSETS_URL . 'vendor/js/accordion' . $suffix . '.js', [], '3.1.1', true );
437 /**
438 * No need Suffix on Anime JS
439 */
440 wp_register_script(
441 'anime',
442 SKY_ADDONS_ASSETS_URL . 'vendor/js/anime.min.js',
443 [
444 'jquery',
445 ],
446 '3.2.1',
447 true
448 );
449 wp_register_script( 'popper', SKY_ADDONS_ASSETS_URL . 'vendor/js/popper' . $suffix . '.js', [], '2.10.1', true );
450 wp_register_script( 'tippyjs', SKY_ADDONS_ASSETS_URL . 'vendor/js/tippy-bundle.umd' . $suffix . '.js', [], '6.3.1', true );
451
452 wp_register_script( 'countUp', SKY_ADDONS_ASSETS_URL . 'vendor/js/countUp' . $suffix . '.js', [], '2.0.4', true );
453 wp_register_script( 'sweetalert2', SKY_ADDONS_ASSETS_URL . 'vendor/js/sweetalert2' . $suffix . '.js', [], '2.0.0', true );
454 wp_register_script( 'metis-menu', SKY_ADDONS_ASSETS_URL . 'vendor/js/metis-menu' . $suffix . '.js', [ 'jquery' ], '3.0.7', true );
455 wp_register_script( 'equal-height', SKY_ADDONS_ASSETS_URL . 'vendor/js/jquery.matchHeight' . $suffix . '.js', [ 'jquery' ], '0.7.2', true );
456 wp_register_script( 'pdfobject', SKY_ADDONS_ASSETS_URL . 'vendor/js/pdfobject' . $suffix . '.js', [ 'jquery' ], 'v2.2.7', true );
457 wp_register_script( 'granim', SKY_ADDONS_ASSETS_URL . 'vendor/js/granim' . $suffix . '.js', [], 'v2.0.0', true );
458 wp_register_script( 'ripples', SKY_ADDONS_ASSETS_URL . 'vendor/js/jquery.ripples' . $suffix . '.js', [ 'jquery' ], 'v0.5.3', true );
459 wp_register_script( 'slinky', SKY_ADDONS_ASSETS_URL . 'vendor/js/slinky' . $suffix . '.js', [ 'jquery' ], '1.0.0', true );
460 wp_register_script( 'revealFx', SKY_ADDONS_ASSETS_URL . 'vendor/js/revealFx' . $suffix . '.js', [ 'jquery', 'anime' ], '0.0.2', true );
461 wp_register_script( 'typed', SKY_ADDONS_ASSETS_URL . 'vendor/js/typed' . $suffix . '.js', [], 'v2.0.12', true );
462 wp_register_script( 'morphext', SKY_ADDONS_ASSETS_URL . 'vendor/js/morphext' . $suffix . '.js', [], 'v2.4.4', true );
463 wp_register_script( 'plyr', SKY_ADDONS_ASSETS_URL . 'vendor/js/plyr' . $suffix . '.js', [], '3.7.2', true );
464 wp_register_script( 'simple-parallax', SKY_ADDONS_ASSETS_URL . 'vendor/js/simpleParallax.min.js', [], '6.3.3', true );
465 wp_register_script( 'tocbot', SKY_ADDONS_ASSETS_URL . 'vendor/js/tocbot.min.js', [], '4.21.1', true );
466 }
467
468 public function register_vendor_styles() {
469 $direction_suffix = is_rtl() ? '.rtl' : '.min';
470 wp_register_style( 'wowdevs-accordion', SKY_ADDONS_ASSETS_URL . 'vendor/css/accordion' . $direction_suffix . '.css', [], '3.1.1' );
471 wp_register_style( 'tippy', SKY_ADDONS_ASSETS_URL . 'vendor/css/tippy-animation' . $direction_suffix . '.css', [], '6.3.1' );
472 wp_register_style( 'momentum', SKY_ADDONS_ASSETS_URL . 'vendor/css/momentum-slider' . $direction_suffix . '.css', [], '1.0.0' );
473 wp_register_style( 'metis-menu', SKY_ADDONS_ASSETS_URL . 'vendor/css/metis-menu' . $direction_suffix . '.css', [], '13.0.7' );
474 wp_register_style( 'slinky', SKY_ADDONS_ASSETS_URL . 'vendor/css/slinky' . $direction_suffix . '.css', [], '1.0.0' );
475 wp_register_style( 'plyr', SKY_ADDONS_ASSETS_URL . 'vendor/css/plyr' . $direction_suffix . '.css', [], '6.3.1' );
476 }
477
478 public function enqueue_editor_scripts() {
479 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
480
481 wp_register_script(
482 'sky-addons-editor',
483 SKY_ADDONS_ASSETS_URL . 'js/sky-addons-editor' . $suffix . '.js',
484 [
485 'backbone-marionette',
486 'elementor-common-modules',
487 'elementor-editor-modules',
488 ],
489 SKY_ADDONS_VERSION,
490 true
491 );
492
493 $localize_data = [
494 'pro_installed' => _is_sky_addons_pro_activated(),
495 'promotional_widgets' => [],
496 ];
497
498 if ( ! _is_sky_addons_pro_activated() ) {
499 $pro_widget_map = new \Sky_Addons\Includes\Pro_Widget_Map();
500 $localize_data['promotional_widgets'] = $pro_widget_map->get_pro_widget_map();
501 }
502
503 wp_localize_script( 'sky-addons-editor', 'SkyAddonsEditorConfig', $localize_data );
504
505 wp_enqueue_script( 'sky-addons-editor' );
506 }
507
508
509 public function elementor_init() {
510 // Register sky-addons-base handles before Managers::__construct() so every
511 // sa-{slug} handle can safely declare them as deps (WP 6.9.1 strict dep check).
512 $direction_suffix = is_rtl() ? '.rtl' : '';
513 $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
514 wp_register_style( 'sky-addons-base', SKY_ADDONS_URL . 'assets/css/sky-addons-base' . $direction_suffix . '.css', [], SKY_ADDONS_VERSION );
515 wp_register_script( 'sky-addons-base', SKY_ADDONS_URL . 'assets/js/sky-addons-base' . $suffix . '.js', [ 'jquery' ], SKY_ADDONS_VERSION, true );
516
517 $this->_modules_manager = new Managers();
518
519 /**
520 * Add element category in panel
521 */
522 Plugin::instance()->elements_manager->add_category(
523 'sky-elementor-addons',
524 [
525 'title' => esc_html__( 'Sky Addons', 'sky-elementor-addons' ),
526 'icon' => 'font',
527 ]
528 );
529
530 if (
531 class_exists( 'Sky_Addons\Templates\Init_Templates' )
532 && function_exists( 'sky_addons_is_templates_library_enabled' )
533 && sky_addons_is_templates_library_enabled()
534 ) {
535 \Sky_Addons\Templates\Import_Template::instance()->load();
536 \Sky_Addons\Templates\Library_Load::instance()->load();
537 \Sky_Addons\Templates\Init_Templates::instance()->init();
538 }
539 }
540
541 public static function sky_addons_file() {
542 return SKY_ADDONS__FILE__;
543 }
544
545 public static function sky_addons_url() {
546 return trailingslashit( plugin_dir_url( self::sky_addons_file() ) );
547 }
548
549 public static function sky_addons_dir() {
550 return trailingslashit( plugin_dir_path( self::sky_addons_file() ) );
551 }
552
553 /**
554 * Dont touch this actions without Permisssion
555 */
556 protected function add_actions() {
557 add_action( 'elementor/init', [ $this, 'elementor_init' ] );
558
559 add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'enqueue_editor_styles' ], 991 );
560 add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_editor_scripts' ] );
561
562 add_action( 'elementor/frontend/before_register_styles', [ $this, 'register_vendor_styles' ] );
563 add_action( 'wp_enqueue_scripts', [ $this, 'register_vendor_scripts' ] );
564
565 add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_styles' ], 998 );
566 add_action( 'elementor/frontend/before_enqueue_scripts', [ $this, 'enqueue_scripts' ], 998 );
567 }
568
569 /**
570 * Plugin-> Sky_Addons constructor.
571 */
572 private function __construct() {
573 spl_autoload_register( [ $this, 'autoload' ] );
574 }
575 }
576