Files
carpseeds.pl/wp-content/plugins/jet-menu/cherry-framework/modules/cherry5-assets-loader/inc/cherry5-assets-loader-handle.php
2024-07-15 11:28:08 +02:00

114 lines
2.1 KiB
PHP

<?php
/**
* Base lodaer handler class
*
* @package Cherry_Framework
* @author Cherry Team <cherryframework@gmail.com>
* @copyright Copyright (c) 2012 - 2017, Cherry Team
* @link http://www.cherryframework.com/
* @license http://www.gnu.org/licenses/gpl-3.0.html
*/
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
if ( ! class_exists( 'Cherry5_Assets_Loader_Handle' ) ) {
/**
* Define Cherry5_Assets_Loader_Handle class
*/
class Cherry5_Assets_Loader_Handle {
/**
* Handles list
*
* @var array
*/
public $handles = array();
/**
* Handles list
*
* @var array
*/
public $prepared_handles = array();
/**
* Handlex context (defined in child classes)
*
* @var string
*/
public $context = null;
/**
* Initalize defer loading
*
* @return void
*/
public function init() {
if ( null !== $this->context ) {
add_filter( $this->context . '_loader_tag', array( $this, 'defer' ), 10, 3 );
add_action( 'wp_footer', array( $this, 'print_tags_var' ), 99 );
}
}
/**
* Store tag for deferred loading.
*
* @return string
*/
public function defer( $tag, $handle, $src ) {
if ( in_array( $handle, $this->handles ) ) {
$this->prepared_handles[] = $tag;
$tag = '';
}
return $tag;
}
/**
* Add new handles into list before processing
*/
public function add_handles( $handles = array() ) {
$this->handles = array_merge( $this->handles, $handles );
$this->handles = array_unique( $this->handles );
}
/**
* Print stored handles.
*
* @return void|null
*/
public function print_tags_var() {
if ( empty( $this->prepared_handles ) || null === $this->context ) {
return;
}
$path = Cherry5_Assets_Loader::$module_path . 'assets/var.js';
ob_start();
include $path;
$var_template = ob_get_clean();
$js_context = ( 'style' === $this->context ) ? 'head' : 'body';
$var = sprintf(
$var_template,
ucfirst( $this->context ),
json_encode( $this->prepared_handles ),
$js_context
);
echo '<script type="text/javascript">' . $var . '</script>';
}
}
}