app->get_shared_object( $name, 'all' );
if ( $cache ) {
if ( isset( $cache[ $hash ] ) ) {
return true;
}
} else {
$cache = [];
}
$cache[ $hash ] = true;
$this->app->set_shared_object( $name, $cache, 'all' );
return false;
}
/**
* @param string $name
*/
private function clear_cache( $name ) {
$name = $name . '_minify_cache';
$this->app->delete_shared_object( $name, 'all' );
}
/**
* @param string $script
* @param int $priority
*/
public function register_script( $script, $priority = 10 ) {
$this->set_script( preg_replace( '/<\s*\/?script\s*>/', '', $script ), $priority );
}
/**
* @param string $file
* @param int $priority
*/
public function register_js_file( $file, $priority = 10 ) {
$this->set_script( @file_get_contents( $file ), $priority );
}
/**
* @param string $script
* @param int $priority
*/
private function set_script( $script, $priority ) {
$script = trim( $script );
if ( '' === $script ) {
return;
}
if ( $this->check_cache( $script, 'script' ) ) {
return;
}
$this->_script[ $priority ][] = $script;
if ( $this->_has_output_script ) {
$this->output_js();
}
}
/**
* @param string $script
* @param bool $wrap
*
* @return string
*/
public function minify_js( $script, $wrap = true ) {
$script = preg_replace( '/<\s*\/?script\s*>/', '', $script );
if ( $this->apply_filters( 'minify_js' ) ) {
$minify = new JS();
$minify->add( $script );
$script = $minify->minify();
}
if ( $wrap ) {
return "";
}
return $script;
}
/**
* @param bool $clear_cache
*/
public function output_js( $clear_cache = false ) {
if ( $clear_cache ) {
$this->clear_cache( 'script' );
}
if ( empty( $this->_script ) ) {
return;
}
ksort( $this->_script );
$script = implode( "\n", array_map( function ( $s ) {
return implode( "\n", $s );
}, $this->_script ) );
$this->h( $this->minify_js( $script ), false, true, false );
$this->_script = [];
$this->_has_output_script = true;
}
/**
* @param string $css
* @param int $priority
*/
public function register_style( $css, $priority = 10 ) {
$this->set_style( preg_replace( '/<\s*\/?style\s*>/', '', $css ), $priority );
}
/**
* @param string $file
* @param int $priority
*/
public function register_css_file( $file, $priority = 10 ) {
$this->set_style( @file_get_contents( $file ), $priority );
}
/**
* @param string $css
* @param int $priority
*/
private function set_style( $css, $priority ) {
$css = trim( $css );
if ( '' === $css ) {
return;
}
if ( $this->check_cache( $css, 'style' ) ) {
return;
}
$this->_css[ $priority ][] = $css;
if ( $this->_end_footer ) {
$this->output_css();
}
}
/**
* @param string $css
* @param bool $wrap
*
* @return string
*/
public function minify_css( $css, $wrap = true ) {
$css = preg_replace( '/<\s*\/?style\s*>/', '', $css );
if ( $this->apply_filters( 'minify_css' ) ) {
$minify = new CSS();
$minify->add( $css );
$css = $minify->minify();
}
if ( $wrap ) {
return "";
}
return $css;
}
/**
* @param bool $clear_cache
*/
public function output_css( $clear_cache = false ) {
if ( $clear_cache ) {
$this->clear_cache( 'style' );
}
if ( empty( $this->_css ) ) {
return;
}
ksort( $this->_css );
$css = implode( "\n", array_map( function ( $s ) {
return implode( "\n", $s );
}, $this->_css ) );
$this->h( $this->minify_css( $css ), false, true, false );
$this->_css = [];
}
/**
* end footer
*/
/** @noinspection PhpUnusedPrivateMethodInspection */
private function end_footer() {
$this->_end_footer = true;
}
}