File Editor
Directories:
.. (Back)
EasyDigitalDownloads
Elementor
Integrations
MemberPress
Plugins
Promos
Rules
Shortcodes
WPForms
WooCommerce
Files:
Actions.php
Ajax.php
Api.php
ApiAuth.php
ApiKey.php
AssetLoader.php
BaseRestApi.php
Blocks.php
ClassicEditor.php
ConstantContact.php
Debug.php
EasyDigitalDownloads.php
Elementor.php
Inserter.php
InstallSkin.php
InstallSkinCompat.php
MailPoet.php
MemberPress.php
Menu.php
Notifications.php
OmuApi.php
Output.php
Pages.php
Partners.php
Plugins.php
Promos.php
Refresh.php
RestApi.php
RevenueAttribution.php
Review.php
Rules.php
Save.php
Shortcode.php
Sites.php
Support.php
Type.php
Urls.php
Utils.php
Validate.php
WPForms.php
Welcome.php
Widget.php
WooCommerce.php
WpErrorException.php
Create New File
Create
Edit File: AssetLoader.php
<?php /** * Asset Loader class. * * @since 2.0.0 * * @package OMAPI * @author Justin Sternberg */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * A special asset loader built specifically to enqueue * JS and CSS built by create-react-app * * @author Justin Sternberg <jsternberg@awesomemotive.com> */ class OMAPI_AssetLoader { /** * The directory in which the assets can be found * * @since 2.0.0 * * @var string */ protected $directory; /** * The asset file to load. * * @since 2.0.0 * * @var string */ protected $manifestFile = 'manifest.json'; /** * The array of script handles. * * @since 2.0.0 * * @var array */ public $handles = array( 'js' => array(), 'css' => array(), ); /** * The class constructor. * * @since 2.0.0 * * @param string $directory The base directory to use. * @param string $manifestFile The manifest file to use. */ public function __construct( $directory, $manifestFile = 'manifest.json' ) { $this->directory = $directory; $this->manifestFile = $manifestFile; } /** * Uses the built-in WP asset enqueuing to add the manifest assets. * * @since 2.0.0 * * @param array $options Enqueue options. * @return void * @throws Exception If webpack assets not found. */ public function enqueue( array $options = array() ) { $defaults = array( 'base_path' => $this->directory, 'base_url' => $this->directory, 'version' => time(), ); $options = wp_parse_args( $options, $defaults ); $assets = $this->getAssetsList( $options['base_path'] ); if ( empty( $assets ) ) { throw new \Exception( 'No webpack assets found.' ); } foreach ( $assets as $assetPath ) { $isJs = preg_match( '/\.js$/', $assetPath ); $isCss = ! $isJs && preg_match( '/\.css$/', $assetPath ); // Ignore source maps and images. if ( ! $isCss && ! $isJs ) { continue; } $handle = basename( $assetPath ); $handle = 0 !== strpos( $handle, 'wp-om-' ) ? 'wp-om-' . $handle : $handle; $uri = $this->getAssetUri( trim( $assetPath, '/' ), $options['base_url'] ); if ( $isJs || $isCss ) { $should_enqueue = apply_filters( 'optin_monster_should_enqueue_asset', true, $handle, $uri, $isJs, $this ); if ( ! $should_enqueue ) { continue; } if ( $isJs ) { $this->handles['js'][] = $handle; wp_enqueue_script( $handle, $uri, array(), $options['version'], true ); } else { $this->handles['css'][] = $handle; wp_enqueue_style( $handle, $uri, array(), $options['version'] ); } } } } /** * Localize data for the enqueued script(s). * * @since 2.0.0 * * @param array $args Array of data to send to JS. * * @return OMAPI_AssetLoader */ public function localize( $args ) { foreach ( $this->handles['js'] as $handle ) { OMAPI_Utils::add_inline_script( $handle, 'omWpApi', $args ); if ( isset( $args['omStaticDataKey'] ) ) { OMAPI_Utils::add_inline_script( $handle, 'omStaticDataKey', $args['omStaticDataKey'] ); } // We only need to output once. break; } return $this; } /** * Attempts to load the asset manifest. * * @since 2.0.0 * * @param string $assetPath The asset path. * @return null|Array */ protected function loadAssetFile( $assetPath ) { static $resources = array(); if ( isset( $resources[ $assetPath ] ) ) { return $resources[ $assetPath ]; } $url = filter_var( $assetPath, FILTER_VALIDATE_URL ); $contents = ''; if ( $url ) { $results = wp_remote_get( $assetPath, array( 'sslverify' => false, ) ); $contents = wp_remote_retrieve_body( $results ); } elseif ( file_exists( $assetPath ) ) { ob_start(); include_once $assetPath; $contents = ob_get_clean(); } if ( empty( $contents ) ) { return null; } $resources[ $assetPath ] = json_decode( $contents, true ); return $resources[ $assetPath ]; } /** * Finds the asset manifest in the given directory. * * @since 2.0.0 * * @param string $directory The directory to append to the manifest file. * @return array The assets themselves or an array of parsed assets. */ public function getAssetsList( $directory ) { $directory = trailingslashit( $directory ); $assets = $this->loadAssetFile( $directory . $this->manifestFile ); return ! empty( $assets ) ? array_values( $assets ) : array(); } /** * Infer a base web URL for a file system path. * * @since 2.0.0 * * @param string $path Filesystem path for which to return a URL. * @return string|null */ protected function inferBaseUrl( $path ) { if ( strpos( $path, get_stylesheet_directory() ) === 0 ) { return get_theme_file_uri( substr( $path, strlen( get_stylesheet_directory() ) ) ); } if ( strpos( $path, get_template_directory() ) === 0 ) { return get_theme_file_uri( substr( $path, strlen( get_template_directory() ) ) ); } // Any path not known to exist within a theme is treated as a plugin path. $pluginPath = plugin_dir_path( __FILE__ ); if ( strpos( $path, $pluginPath ) === 0 ) { return plugin_dir_url( __FILE__ ) . substr( $path, strlen( $pluginPath ) ); } return ''; } /** * Return web URIs or convert relative filesystem paths to absolute paths. * * @since 2.0.0 * * @param string $assetPath A relative filesystem path or full resource URI. * @param string $baseUrl A base URL to prepend to relative bundle URIs. * @return string */ public function getAssetUri( $assetPath, $baseUrl ) { if ( strpos( $assetPath, '://' ) !== false ) { return $assetPath; } return trailingslashit( $baseUrl ) . $assetPath; } }
Save Changes
Rename File
Rename