<?php
namespace ElementorOne\Admin\Components;
use ElementorOne\Admin\Helpers\Utils;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Class Assets
* Handles script and style enqueuing for the admin area
*/
class Assets {
/**
* Instance
* @var Assets|null
*/
private static ?Assets $instance = null;
/**
* Get instance
* @return Assets|null
*/
public static function instance(): ?Assets {
if ( ! self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Get admin page
* @return string
*/
private function get_admin_page(): string {
return Utils::get_one_connect()->get_config( 'admin_page' );
}
/**
* Enqueue scripts
* @param string $hook
* @return void
*/
public function enqueue_scripts( $hook ) {
$package_version = Utils::get_latest_package_version();
// Enqueue fonts
wp_enqueue_style(
'elementor-one-admin-fonts',
'https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap',
[],
'1.0.0'
);
// Enqueue common assets
$this->enqueue_common_assets( $package_version );
// Enqueue app assets only on Elementor Home admin page
if ( "toplevel_page_{$this->get_admin_page()}" === $hook ) {
$this->enqueue_app_assets( $package_version );
}
}
/**
* Get plugin env
* @return string
*/
private static function get_plugin_env(): string {
return apply_filters( 'elementor_one/package_env', 'production' );
}
/**
* Enqueue app assets
* @param string $package_version
* @return void
*/
private function enqueue_app_assets( string $package_version ) {
wp_enqueue_script( 'elementor-one-admin', ELEMENTOR_ONE_CLIENT_APP_URL, [], $package_version, true );
}
/**
* Enqueue common assets
* @param string $package_version
* @return void
*/
private function enqueue_common_assets( string $package_version ) {
// Load the asset file to get dependencies and version
$asset_file = ELEMENTOR_ONE_ASSETS_PATH . 'common.asset.php';
$asset = file_exists( $asset_file ) ? include $asset_file : [
'dependencies' => [],
'version' => $package_version,
];
wp_enqueue_script( 'elementor-one-admin-common', ELEMENTOR_ONE_ASSETS_URL . 'common.js', $asset['dependencies'], $asset['version'], true );
wp_enqueue_style( 'elementor-one-admin-common', ELEMENTOR_ONE_ASSETS_URL . 'common.css', [], $package_version );
wp_add_inline_script(
'elementor-one-admin-common',
'window.elementorOneSettingsData = ' . wp_json_encode( [
'wpRestNonce' => wp_create_nonce( 'wp_rest' ),
'wpRestUrl' => rest_url(),
'pluginEnv' => self::get_plugin_env(),
'packageVersion' => Utils::get_latest_package_version(),
'canUserManageOptions' => current_user_can( 'manage_options' ),
'elementorNewPostNonce' => wp_create_nonce( 'elementor_action_new_post' ),
'elementorSiteSettingsRedirectNonce' => wp_create_nonce( 'elementor_action_site_settings_redirect' ),
'elementorEditSiteNonce' => wp_create_nonce( 'elementor_action_edit_website' ),
'shareUsageData' => 'yes' === Utils::get_one_connect()->data()->get_share_usage_data(),
'assetsUIRootUrl' => ELEMENTOR_ONE_UI_ASSETS_ROOT_URL,
] ) . ';'
);
}
/**
* Assets constructor
* @return void
*/
private function __construct() {
add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
}
}