| 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’ 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’ 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 |
|