<?php /** * Plugin assets handling. * * @package System * @author Pierre Lannoy <https://pierre.lannoy.fr/>. * @since 1.0.0 */ namespace Vibes\System; use Vibes\System\Environment; use Vibes\System\UUID; /** * The class responsible to handle assets management. * * @package System * @author Pierre Lannoy <https://pierre.lannoy.fr/>. * @since 1.0.0 */ class Assets { /** * Initializes the class and set its properties. * * @since 1.0.0 */ public function __construct() { } /** * Echoes DNS prefetch. * * @since 1.0.0 */ public function prefetch() { if ( Option::network_get( 'use_cdn' ) && VIBES_CDN_AVAILABLE ) { echo '<meta http-equiv="x-dns-prefetch-control" content="on">'; echo '<link rel="dns-prefetch" href="//cdn.jsdelivr.net" />'; } } /** * Registers (but don't enqueues) a style asset of the plugin. * * Regarding user's option, asset is ready to enqueue from local plugin dir or from CDN (jsDelivr) * * @param string $handle Name of the stylesheet. Should be unique. * @param string|bool $src Full path of the stylesheet, or path of the stylesheet relative to the WordPress root directory. * If $src is set to false, stylesheet is an alias of other stylesheets it depends on. * @param string $file The style file name. * @param array $deps Optional. An array of registered stylesheet handles this stylesheet depends on. Default empty array. * @param string $media Optional. The media for which this stylesheet has been defined. * Default 'all'. Accepts media types like 'all', 'print' and 'screen', or media queries like * '(orientation: portrait)' and '(max-width: 640px)'. * @return bool Whether the style has been registered. True on success, false on failure. * @since 1.0.0 */ public function register_style( $handle, $src, $file, $deps = [], $media = 'all' ) { if ( Option::network_get( 'use_cdn' ) && VIBES_CDN_AVAILABLE ) { if ( VIBES_ADMIN_URL === $src ) { $file = 'https://cdn.jsdelivr.net/wp/' . VIBES_SLUG . '/tags/' . VIBES_VERSION . '/admin/' . $file; } else { $file = 'https://cdn.jsdelivr.net/wp/' . VIBES_SLUG . '/tags/' . VIBES_VERSION . '/public/' . $file; } // phpcs:ignore return wp_register_style( $handle, $file, $deps, null, $media ); } else { if ( Environment::is_plugin_in_production_mode() ) { $version = VIBES_VERSION; } else { $version = UUID::generate_unique_id( 20 ); } if ( Environment::is_plugin_in_dev_mode() ) { $file = str_replace( '.min', '', $file ); } return wp_register_style( $handle, $src . $file, $deps, $version, $media ); } } /** * Registers (but don't enqueues) a script asset of the plugin. * * Regarding user's option, asset is ready to enqueue from local plugin dir or from CDN (jsDelivr) * * @param string $handle Name of the script. Should be unique. * @param string|bool $src Full path of the script, or path of the script relative to the WordPress root directory. * If $src is set to false, script is an alias of other scripts it depends on. * @param string $file The style file name. * @param array $deps Optional. An array of registered script handles this script depends on. Default empty array. * @return bool Whether the script has been registered. True on success, false on failure. * @since 1.0.0 */ public function register_script( $handle, $src, $file, $deps = [] ) { if ( Option::network_get( 'use_cdn' ) && VIBES_CDN_AVAILABLE ) { if ( VIBES_ADMIN_URL === $src ) { $file = 'https://cdn.jsdelivr.net/wp/' . VIBES_SLUG . '/tags/' . VIBES_VERSION . '/admin/' . $file; } else { $file = 'https://cdn.jsdelivr.net/wp/' . VIBES_SLUG . '/tags/' . VIBES_VERSION . '/public/' . $file; } // phpcs:ignore return wp_register_script( $handle, $file, $deps, null, VIBES_ANALYTICS_ID === $handle ? true : Option::network_get( 'script_in_footer' ) ); } else { if ( Environment::is_plugin_in_production_mode() ) { $version = VIBES_VERSION; } else { $version = UUID::generate_unique_id( 20 ); } if ( Environment::is_plugin_in_dev_mode() ) { $file = str_replace( '.min', '', $file ); } return wp_register_script( $handle, $src . $file, $deps, $version, VIBES_ANALYTICS_ID === $handle ? true : Option::network_get( 'script_in_footer' ) ); } } }