Files
apache
wp-content
mu-plugins
plugins
activitypub
audioigniter
authldap
companion-auto-update
gitium
gp-premium
jetpack-protect
menu-icons
simple-local-avatars
smtp-mailer
two-factor
w3-total-cache
extension-example
inc
ini
languages
lib
pub
vendor
wp-content
Base_Page_Settings.php
BrowserCache_ConfigLabels.php
BrowserCache_Core.php
BrowserCache_Environment.php
BrowserCache_Environment_Apache.php
BrowserCache_Environment_LiteSpeed.php
BrowserCache_Environment_Nginx.php
BrowserCache_Page.php
BrowserCache_Page_View_QuickReference.php
BrowserCache_Page_View_SectionSecurity.php
BrowserCache_Plugin.php
BrowserCache_Plugin_Admin.php
Cache.php
CacheFlush.php
CacheFlush_Locally.php
CacheGroups_Plugin_Admin.php
CacheGroups_Plugin_Admin_View.js
CacheGroups_Plugin_Admin_View.php
Cache_Apc.php
Cache_Apcu.php
Cache_Base.php
Cache_Eaccelerator.php
Cache_File.php
Cache_File_Cleaner.php
Cache_File_Cleaner_Generic.php
Cache_File_Cleaner_Generic_HardDelete.php
Cache_File_Generic.php
Cache_Memcache.php
Cache_Memcached.php
Cache_Memcached_Stats.php
Cache_Nginx_Memcached.php
Cache_Redis.php
Cache_Wincache.php
Cache_Xcache.php
CdnEngine.php
CdnEngine_Azure.php
CdnEngine_Base.php
CdnEngine_CloudFront.php
CdnEngine_Ftp.php
CdnEngine_GoogleDrive.php
CdnEngine_Mirror.php
CdnEngine_Mirror_Akamai.php
CdnEngine_Mirror_Att.php
CdnEngine_Mirror_BunnyCdn.php
CdnEngine_Mirror_CloudFront.php
CdnEngine_Mirror_Cotendo.php
CdnEngine_Mirror_Edgecast.php
CdnEngine_Mirror_Highwinds.php
CdnEngine_Mirror_LimeLight.php
CdnEngine_Mirror_RackSpaceCdn.php
CdnEngine_Mirror_StackPath.php
CdnEngine_Mirror_StackPath2.php
CdnEngine_RackSpaceCloudFiles.php
CdnEngine_S3.php
CdnEngine_S3_Compatible.php
Cdn_AdminActions.php
Cdn_AdminNotes.php
Cdn_BunnyCdn_Api.php
Cdn_BunnyCdn_Page.php
Cdn_BunnyCdn_Page_View.js
Cdn_BunnyCdn_Page_View.php
Cdn_BunnyCdn_Page_View_Purge_Urls.php
Cdn_BunnyCdn_Popup.php
Cdn_BunnyCdn_Popup_View_Configured.php
Cdn_BunnyCdn_Popup_View_Deauthorize.php
Cdn_BunnyCdn_Popup_View_Deauthorized.php
Cdn_BunnyCdn_Popup_View_Intro.php
Cdn_BunnyCdn_Popup_View_Pull_Zones.php
Cdn_BunnyCdn_Widget.php
Cdn_BunnyCdn_Widget_View.css
Cdn_BunnyCdn_Widget_View_Authorized.php
Cdn_BunnyCdn_Widget_View_Unauthorized.php
Cdn_CacheFlush.php
Cdn_ConfigLabels.php
Cdn_Core.php
Cdn_Core_Admin.php
Cdn_Environment.php
Cdn_Environment_LiteSpeed.php
Cdn_Environment_Nginx.php
Cdn_GeneralPage_View.php
Cdn_GoogleDrive_AdminActions.php
Cdn_GoogleDrive_Page.php
Cdn_GoogleDrive_Page_View.js
Cdn_GoogleDrive_Page_View.php
Cdn_GoogleDrive_Popup_AuthReturn.php
Cdn_GoogleDrive_Popup_AuthReturn_View.php
Cdn_Highwinds_Api.php
Cdn_Highwinds_Page.php
Cdn_Highwinds_Page_View.js
Cdn_Highwinds_Page_View.php
Cdn_Highwinds_Popup.php
Cdn_Highwinds_Popup_View_ConfigureCnamesForm.php
Cdn_Highwinds_Popup_View_Intro.php
Cdn_Highwinds_Popup_View_SelectHost.php
Cdn_Highwinds_Widget.php
Cdn_Highwinds_Widget_View.css
Cdn_Highwinds_Widget_View.js
Cdn_Highwinds_Widget_View.php
Cdn_Highwinds_Widget_View_NotConfigured.php
Cdn_LimeLight_Page.php
Cdn_LimeLight_Page_View.js
Cdn_LimeLight_Page_View.php
Cdn_LimeLight_Popup.php
Cdn_LimeLight_Popup_View_Intro.php
Cdn_LimeLight_Popup_View_Success.php
Cdn_Page.php
Cdn_Page_View_Fsd_HeaderActions.php
Cdn_Plugin.php
Cdn_Plugin_Admin.php
Cdn_RackSpaceCdn_AdminActions.php
Cdn_RackSpaceCdn_Page.php
Cdn_RackSpaceCdn_Page_View.js
Cdn_RackSpaceCdn_Page_View.php
Cdn_RackSpaceCdn_Popup.php
Cdn_RackSpaceCdn_Popup_View_ConfigureDomains.php
Cdn_RackSpaceCdn_Popup_View_Intro.php
Cdn_RackSpaceCdn_Popup_View_Regions.php
Cdn_RackSpaceCdn_Popup_View_Service_Actualize.php
Cdn_RackSpaceCdn_Popup_View_Service_Create.php
Cdn_RackSpaceCdn_Popup_View_Service_Created.php
Cdn_RackSpaceCdn_Popup_View_Services.php
Cdn_RackSpaceCloudFiles_Page.php
Cdn_RackSpaceCloudFiles_Page_View.js
Cdn_RackSpaceCloudFiles_Page_View.php
Cdn_RackSpaceCloudFiles_Popup.php
Cdn_RackSpaceCloudFiles_Popup_View_Containers.php
Cdn_RackSpaceCloudFiles_Popup_View_Intro.php
Cdn_RackSpaceCloudFiles_Popup_View_Regions.php
Cdn_RackSpace_Api_CaCert-example.pem
Cdn_RackSpace_Api_Cdn.php
Cdn_RackSpace_Api_CloudFiles.php
Cdn_RackSpace_Api_CloudFilesCdn.php
Cdn_RackSpace_Api_Tokens.php
Cdn_StackPath2_Api.php
Cdn_StackPath2_Page.php
Cdn_StackPath2_Page_View.js
Cdn_StackPath2_Page_View.php
Cdn_StackPath2_Popup.php
Cdn_StackPath2_Popup_View_Intro.php
Cdn_StackPath2_Popup_View_Sites.php
Cdn_StackPath2_Popup_View_Stacks.php
Cdn_StackPath2_Popup_View_Success.php
Cdn_StackPath2_Widget.php
Cdn_StackPath2_Widget_View.css
Cdn_StackPath2_Widget_View.js
Cdn_StackPath2_Widget_View_Authorized.php
Cdn_StackPath2_Widget_View_Unauthorized.php
Cdn_StackPath_Api.php
Cdn_StackPath_Page.php
Cdn_StackPath_Page_View.js
Cdn_StackPath_Page_View.php
Cdn_StackPath_Popup.php
Cdn_StackPath_Popup_View_Intro.php
Cdn_StackPath_Popup_View_Success.php
Cdn_StackPath_Popup_View_Zone.php
Cdn_StackPath_Popup_View_Zones.php
Cdn_StackPath_Widget.php
Cdn_StackPath_Widget_View.css
Cdn_StackPath_Widget_View.js
Cdn_StackPath_Widget_View_Authorized.php
Cdn_StackPath_Widget_View_Unauthorized.php
Cdn_Util.php
Cdnfsd_BunnyCdn_Engine.php
Cdnfsd_BunnyCdn_Page.php
Cdnfsd_BunnyCdn_Page_View.js
Cdnfsd_BunnyCdn_Page_View.php
Cdnfsd_BunnyCdn_Popup.php
Cdnfsd_BunnyCdn_Popup_View_Configured.php
Cdnfsd_BunnyCdn_Popup_View_Deauthorize.php
Cdnfsd_BunnyCdn_Popup_View_Deauthorized.php
Cdnfsd_BunnyCdn_Popup_View_Intro.php
Cdnfsd_BunnyCdn_Popup_View_Pull_Zones.php
Cdnfsd_CacheFlush.php
Cdnfsd_CloudFront_Engine.php
Cdnfsd_CloudFront_Page.php
Cdnfsd_CloudFront_Page_View.js
Cdnfsd_CloudFront_Page_View.php
Cdnfsd_CloudFront_Popup.php
Cdnfsd_CloudFront_Popup_View_Distribution.php
Cdnfsd_CloudFront_Popup_View_Distributions.php
Cdnfsd_CloudFront_Popup_View_Intro.php
Cdnfsd_CloudFront_Popup_View_Success.php
Cdnfsd_Core.php
Cdnfsd_GeneralPage_View.php
Cdnfsd_LimeLight_Api.php
Cdnfsd_LimeLight_Engine.php
Cdnfsd_LimeLight_Page.php
Cdnfsd_LimeLight_Page_View.js
Cdnfsd_LimeLight_Page_View.php
Cdnfsd_LimeLight_Popup.php
Cdnfsd_LimeLight_Popup_View_Intro.php
Cdnfsd_LimeLight_Popup_View_Success.php
Cdnfsd_Plugin.php
Cdnfsd_Plugin_Admin.php
Cdnfsd_StackPath2_Engine.php
Cdnfsd_StackPath2_Page.php
Cdnfsd_StackPath2_Page_View.js
Cdnfsd_StackPath2_Page_View.php
Cdnfsd_StackPath2_Popup.php
Cdnfsd_StackPath2_Popup_View_Intro.php
Cdnfsd_StackPath2_Popup_View_Sites.php
Cdnfsd_StackPath2_Popup_View_Stacks.php
Cdnfsd_StackPath2_Popup_View_Success.php
Cdnfsd_StackPath_Engine.php
Cdnfsd_StackPath_Page.php
Cdnfsd_StackPath_Page_View.js
Cdnfsd_StackPath_Page_View.php
Cdnfsd_StackPath_Popup.php
Cdnfsd_StackPath_Popup_View_Intro.php
Cdnfsd_StackPath_Popup_View_Success.php
Cdnfsd_StackPath_Popup_View_Zone.php
Cdnfsd_StackPath_Popup_View_Zones.php
Cdnfsd_TransparentCDN_Engine.php
Cdnfsd_TransparentCDN_Page.php
Cdnfsd_TransparentCDN_Page_View.js
Cdnfsd_TransparentCDN_Page_View.php
Cdnfsd_Util.php
Cli.php
Config.php
ConfigCache.php
ConfigCompiler.php
ConfigDbStorage.php
ConfigKeys.php
ConfigState.php
ConfigStateNote.php
ConfigUtil.php
DbCache_ConfigLabels.php
DbCache_Core.php
DbCache_Environment.php
DbCache_Page.php
DbCache_Plugin.php
DbCache_Plugin_Admin.php
DbCache_Wpdb.php
DbCache_WpdbBase.php
DbCache_WpdbInjection.php
DbCache_WpdbInjection_QueryCaching.php
DbCache_WpdbLegacy.php
DbCache_WpdbNew.php
Dispatcher.php
Enterprise_CacheFlush_MakeSnsEvent.php
Enterprise_Dbcache_WpdbInjection_Cluster.php
Enterprise_SnsBase.php
Enterprise_SnsServer.php
Extension_Amp_Page_View.php
Extension_Amp_Plugin.php
Extension_Amp_Plugin_Admin.php
Extension_CloudFlare_AdminActions.php
Extension_CloudFlare_Api.php
Extension_CloudFlare_Cdn_Page_View.php
Extension_CloudFlare_GeneralPage_View.php
Extension_CloudFlare_Page.php
Extension_CloudFlare_Page_View.js
Extension_CloudFlare_Page_View.php
Extension_CloudFlare_Plugin.php
Extension_CloudFlare_Plugin_Admin.php
Extension_CloudFlare_Popup.php
Extension_CloudFlare_Popup_View_Intro.php
Extension_CloudFlare_Popup_View_Zones.php
Extension_CloudFlare_SettingsForUi.php
Extension_CloudFlare_View_Dashboard.js
Extension_CloudFlare_Widget.php
Extension_CloudFlare_Widget_Logo.png
Extension_CloudFlare_Widget_View.css
Extension_CloudFlare_Widget_View.php
Extension_FragmentCache_Api.php
Extension_FragmentCache_Core.php
Extension_FragmentCache_Environment.php
Extension_FragmentCache_GeneralPage.php
Extension_FragmentCache_GeneralPage_View.php
Extension_FragmentCache_Page.php
Extension_FragmentCache_Page_View.php
Extension_FragmentCache_Plugin.php
Extension_FragmentCache_Plugin_Admin.php
Extension_FragmentCache_WpObjectCache.php
Extension_Genesis_Page.php
Extension_Genesis_Page_View.php
Extension_Genesis_Plugin.php
Extension_Genesis_Plugin_Admin.php
Extension_ImageService_Api.php
Extension_ImageService_Cron.php
Extension_ImageService_Environment.php
Extension_ImageService_Page_View.php
Extension_ImageService_Plugin.php
Extension_ImageService_Plugin_Admin.css
Extension_ImageService_Plugin_Admin.js
Extension_ImageService_Plugin_Admin.php
Extension_NewRelic_AdminActions.php
Extension_NewRelic_AdminNotes.php
Extension_NewRelic_Api.php
Extension_NewRelic_Core.php
Extension_NewRelic_GeneralPage.php
Extension_NewRelic_GeneralPage_View.php
Extension_NewRelic_Page.php
Extension_NewRelic_Page_View_Apm.php
Extension_NewRelic_Plugin.php
Extension_NewRelic_Plugin_Admin.php
Extension_NewRelic_Popup.php
Extension_NewRelic_Popup_View.js
Extension_NewRelic_Popup_View_Intro.php
Extension_NewRelic_Popup_View_ListApplications.php
Extension_NewRelic_Service.php
Extension_NewRelic_Widget.php
Extension_NewRelic_Widget_View.css
Extension_NewRelic_Widget_View.js
Extension_NewRelic_Widget_View_Apm.php
Extension_NewRelic_Widget_View_Browser.php
Extension_NewRelic_Widget_View_NotConfigured.php
Extension_Swarmify_AdminActions.php
Extension_Swarmify_Core.php
Extension_Swarmify_Page.php
Extension_Swarmify_Page_View.php
Extension_Swarmify_Plugin.php
Extension_Swarmify_Plugin_Admin.php
Extension_Swarmify_Widget.php
Extension_Swarmify_Widget_View.css
Extension_Swarmify_Widget_View_NotConfigured.php
Extension_WordPressSeo_Plugin.php
Extension_WordPressSeo_Plugin_Admin.php
Extension_Wpml_Plugin.php
Extension_Wpml_Plugin_Admin.php
Extensions_AdminActions.php
Extensions_Page.php
Extensions_Plugin_Admin.php
Extensions_Util.php
FeatureShowcase_Plugin_Admin.php
FeatureShowcase_Plugin_Admin_View.php
Generic_AdminActions_Config.php
Generic_AdminActions_Default.php
Generic_AdminActions_Flush.php
Generic_AdminActions_Test.php
Generic_AdminNotes.php
Generic_ConfigLabels.php
Generic_Environment.php
Generic_Faq.php
Generic_GeneralPage_View_ShowEdge.js
Generic_GeneralPage_View_ShowSupportUs.js
Generic_Page_About.php
Generic_Page_Dashboard.php
Generic_Page_Dashboard_View.css
Generic_Page_General.php
Generic_Page_Install.php
Generic_Page_PurgeLog.php
Generic_Page_PurgeLog_View.php
Generic_Plugin.php
Generic_Plugin_Admin.php
Generic_Plugin_AdminCompatibility.php
Generic_Plugin_AdminNotifications.php
Generic_Plugin_AdminRowActions.php
Generic_Plugin_Admin_View_Faq.php
Generic_Plugin_WidgetForum.php
Generic_Plugin_WidgetNews.php
Generic_WidgetBoldGrid.php
Generic_WidgetBoldGrid_AdminActions.php
Generic_WidgetBoldGrid_Logo.svg
Generic_WidgetBoldGrid_View.js
Generic_WidgetBoldGrid_View.php
Generic_WidgetCommunity.php
Generic_WidgetCommunity_View.php
Generic_WidgetServices.php
Generic_WidgetServices_View.php
Generic_WidgetSpreadTheWord.js
Generic_WidgetSpreadTheWord_Plugin.php
Generic_WidgetSpreadTheWord_View.php
LICENSE
Licensing_AdminActions.php
Licensing_Core.php
Licensing_Plugin_Admin.php
Minify_AutoCss.php
Minify_AutoJs.php
Minify_ConfigLabels.php
Minify_ContentMinifier.php
Minify_Core.php
Minify_Environment.php
Minify_Environment_LiteSpeed.php
Minify_Extract.php
Minify_GeneralPage_View_ShowHelp.js
Minify_GeneralPage_View_ShowHelpForce.js
Minify_HelpPopup_View.php
Minify_MinifiedFileRequestHandler.php
Minify_Page.php
Minify_Plugin.php
Minify_Plugin_Admin.php
Mobile_Base.php
Mobile_Redirect.php
Mobile_Referrer.php
Mobile_UserAgent.php
ModuleStatus.php
ObjectCache_ConfigLabels.php
ObjectCache_Environment.php
ObjectCache_Page.php
ObjectCache_Page_View_PurgeLog.php
ObjectCache_Plugin.php
ObjectCache_Plugin_Admin.php
ObjectCache_WpObjectCache.php
ObjectCache_WpObjectCache_Regular.php
PageSpeed_Api.php
PageSpeed_Data.php
PageSpeed_Instructions.php
PageSpeed_Page.php
PageSpeed_Page_View.css
PageSpeed_Page_View.js
PageSpeed_Page_View.php
PageSpeed_Page_View_FromAPI.php
PageSpeed_Widget.php
PageSpeed_Widget_View.css
PageSpeed_Widget_View.js
PageSpeed_Widget_View.php
PageSpeed_Widget_View_FromApi.php
PgCache_ConfigLabels.php
PgCache_ContentGrabber.php
PgCache_Environment.php
PgCache_Flush.php
PgCache_Page.php
PgCache_Page_View.js
PgCache_Plugin.php
PgCache_Plugin_Admin.php
PgCache_QsExempts.php
Root_AdminActions.php
Root_AdminActivation.php
Root_AdminMenu.php
Root_Environment.php
Root_Loader.php
SetupGuide_Plugin_Admin.php
Support_AdminActions.php
Support_Page.php
Support_Page_View_DoneContent.php
Support_Page_View_PageContent.php
SystemOpCache_AdminActions.php
SystemOpCache_Core.php
SystemOpCache_GeneralPage_View.php
SystemOpCache_Plugin_Admin.php
UsageStatistics_AdminActions.php
UsageStatistics_Core.php
UsageStatistics_GeneralPage.php
UsageStatistics_GeneralPage_View.php
UsageStatistics_Page.php
UsageStatistics_Page_DbRequests_View.php
UsageStatistics_Page_ObjectCacheLog_View.php
UsageStatistics_Page_PageCacheRequests_View.php
UsageStatistics_Page_View.css
UsageStatistics_Page_View.js
UsageStatistics_Page_View.php
UsageStatistics_Page_View_Ad.php
UsageStatistics_Page_View_Disabled.php
UsageStatistics_Page_View_Free.php
UsageStatistics_Page_View_NoDebugMode.php
UsageStatistics_Plugin.php
UsageStatistics_Plugin_Admin.php
UsageStatistics_Source_AccessLog.php
UsageStatistics_Source_DbQueriesLog.php
UsageStatistics_Source_ObjectCacheLog.php
UsageStatistics_Source_PageCacheLog.php
UsageStatistics_Source_Wpdb.php
UsageStatistics_Sources.php
UsageStatistics_Sources_Apc.php
UsageStatistics_Sources_Memcached.php
UsageStatistics_Sources_Redis.php
UsageStatistics_StorageReader.php
UsageStatistics_StorageWriter.php
UsageStatistics_Widget.php
UsageStatistics_Widget_View.js
UsageStatistics_Widget_View.php
UsageStatistics_Widget_View_Disabled.php
UserExperience_DeferScripts_Extension.php
UserExperience_DeferScripts_Mutator.php
UserExperience_DeferScripts_Page_View.php
UserExperience_DeferScripts_Script.js
UserExperience_Emoji_Extension.php
UserExperience_GeneralPage.php
UserExperience_GeneralPage_View.php
UserExperience_LazyLoad_GoogleMaps_GoogleMapsEasy.php
UserExperience_LazyLoad_GoogleMaps_WPGoogleMapPlugin.php
UserExperience_LazyLoad_GoogleMaps_WPGoogleMaps.php
UserExperience_LazyLoad_Mutator.php
UserExperience_LazyLoad_Mutator_Picture.php
UserExperience_LazyLoad_Mutator_Unmutable.php
UserExperience_LazyLoad_Page_View.php
UserExperience_LazyLoad_Plugin.php
UserExperience_OEmbed_Extension.php
UserExperience_Page.php
UserExperience_Page_View.php
UserExperience_Plugin_Admin.php
UserExperience_Plugin_Jquery.php
UserExperience_Preload_Requests_Extension.php
UserExperience_Preload_Requests_Page_View.php
Util_Activation.php
Util_Admin.php
Util_AttachToActions.php
Util_Bus.php
Util_ConfigLabel.php
Util_Content.php
Util_Debug.php
Util_DebugPurgeLog_Reader.php
Util_Environment.php
Util_Environment_Exception.php
Util_Environment_Exceptions.php
Util_File.php
Util_Http.php
Util_Installed.php
Util_Mime.php
Util_PageSpeed.php
Util_PageUrls.php
Util_Request.php
Util_Rule.php
Util_Theme.php
Util_Ui.php
Util_UsageStatistics.php
Util_Widget.php
Util_WpFile.php
Util_WpFile_FilesystemChmodException.php
Util_WpFile_FilesystemCopyException.php
Util_WpFile_FilesystemMkdirException.php
Util_WpFile_FilesystemModifyException.php
Util_WpFile_FilesystemOperationException.php
Util_WpFile_FilesystemRmException.php
Util_WpFile_FilesystemRmdirException.php
Util_WpFile_FilesystemWriteException.php
Util_WpmuBlogmap.php
Varnish_Flush.php
Varnish_Plugin.php
index.html
press.txt
readme.txt
w3-total-cache-api.php
w3-total-cache-old-php.php
w3-total-cache.php
wp-piwik
wp-webauthn
index.php
themes
upgrade-temp-backup
w3tc-config
index.php
.dbsetup
.gitignore
htaccess
php.ini
laipower/wp-content/plugins/w3-total-cache/Minify_AutoCss.php

309 lines
7.6 KiB
PHP

<?php
namespace W3TC;
class Minify_AutoCss {
private $config;
private $buffer;
/**
* CSS files to ignore
*
* @var array
*/
private $ignore_css_files;
/**
* Helper object to use
*
* @var _W3_MinifyHelpers
*/
private $minify_helpers;
/**
* Array of processed styles
*
* @var array
*/
private $debug_minified_urls = array();
/**
* Current position to embed minified style
*
* @var integer
*/
private $embed_pos;
/**
* Current list of files to minify
*
* @var array
*/
private $files_to_minify;
/**
* Current number of minification group
*
* @var integer
*/
private $debug = false;
private $embed_to_html;
/**
* Constructor
*
* @param unknown $config
* @param unknown $buffer
* @param unknown $minify_helpers
*/
function __construct( $config, $buffer, $minify_helpers ) {
$this->config = $config;
$this->debug = $config->get_boolean( 'minify.debug' );
$this->buffer = $buffer;
$this->minify_helpers = $minify_helpers;
// ignored files
$this->ignore_css_files = $this->config->get_array(
'minify.reject.files.css' );
$this->ignore_css_files = array_map( array( '\W3TC\Util_Environment',
'normalize_file' ), $this->ignore_css_files );
$this->embed_to_html = $this->config->get_boolean( 'minify.css.embed' );
}
/**
* Does auto-minification
*
* @return string buffer of minified content
*/
public function execute() {
// find all style tags
$buffer_nocomments = preg_replace( '~<!--.*?-->\s*~s', '', $this->buffer );
$matches = null;
// end of <head> means another group of styles, cannt be combined
if ( !preg_match_all( '~((<style\s*[^>]*>.*?</style>)|(<link\s+([^>]+)/?>(.*</link>)?))~is',
$buffer_nocomments, $matches ) ) {
$matches = null;
}
if ( is_null( $matches ) ) {
return $this->buffer;
}
$style_tags = $matches[1];
$style_tags = apply_filters( 'w3tc_minify_css_style_tags',
$style_tags );
// pass styles
$this->embed_pos = null;
$this->files_to_minify = array();
for ( $n = 0; $n < count( $style_tags ); $n++ ) {
$this->process_style_tag( $style_tags[$n], $n );
}
$this->flush_collected( '' );
return $this->buffer;
}
/**
* Returns list of minified styles
*
* @return array
*/
public function get_debug_minified_urls() {
return $this->debug_minified_urls;
}
/**
* Processes style tag
*
* @param unknown $style_tag
* @return void
*/
private function process_style_tag( $style_tag, $style_tag_number ) {
if ( $this->debug ) {
Minify_Core::log( 'processing tag ' . substr( $style_tag, 0, 150 ) );
}
$tag_pos = strpos( $this->buffer, $style_tag );
if ( $tag_pos === false ) {
// style is external but not found, skip processing it
if ( $this->debug ) {
Minify_Core::log( 'style not found:' . $style_tag );
}
return;
}
$style_href = null;
$causes_flush = true;
if ( preg_match( '~<link\s+([^>]+)/?>(.*</link>)?~Uis', $style_tag, $match ) ) {
// all link tags dont cause automatic flush since
// its minified or its not style <link> tag
$causes_flush = false;
$attrs = array();
$attr_matches = null;
if ( preg_match_all( '~(\w+)=["\']([^"\']*)["\']~', $match[1],
$attr_matches, PREG_SET_ORDER ) ) {
foreach ( $attr_matches as $attr_match ) {
$name = strtolower( $attr_match[1] );
$attrs[$name] = trim( $attr_match[2] );
}
}
if ( isset( $attrs['href'] ) && isset( $attrs['rel'] ) &&
stristr( $attrs['rel'], 'stylesheet' ) !== false &&
( !isset( $attrs['media'] ) || stristr( $attrs['media'], 'print' ) === false ) ) {
$style_href = $attrs['href'];
}
}
if ( $causes_flush ) {
$data = array(
'style_tag_original' => $style_tag,
'style_tag_new' => $style_tag,
'style_tag_number' => $style_tag_number,
'style_tag_pos' => $tag_pos,
'should_replace' => false,
'buffer' => $this->buffer
);
$data = apply_filters( 'w3tc_minify_css_do_local_style_minification',
$data );
$this->buffer = $data['buffer'];
if ( $data['should_replace'] ) {
$this->buffer = substr_replace( $this->buffer,
$data['style_tag_new'], $tag_pos,
strlen( $style_tag ) );
}
// it's not external style, have to flush what we have before it
if ( $this->debug ) {
Minify_Core::log( 'its not link tag, flushing' );
}
$this->flush_collected( $style_tag );
return;
}
if ( empty( $style_href ) ) {
if ( $this->debug ) {
Minify_Core::log( 'its not style link tag' );
}
return;
}
$style_href = Util_Environment::url_relative_to_full( $style_href );
$file = Util_Environment::url_to_docroot_filename( $style_href );
$step1_result = $this->minify_helpers->is_file_for_minification(
$style_href, $file );
if ( $step1_result == 'url' )
$file = $style_href;
$step1 = !empty( $step1_result );
$step2 = !in_array( $file, $this->ignore_css_files );
$do_tag_minification = $step1 && $step2;
$do_tag_minification = apply_filters(
'w3tc_minify_css_do_tag_minification',
$do_tag_minification, $style_tag, $file );
if ( !$do_tag_minification ) {
if ( $this->debug ) {
Minify_Core::log( 'file ' . $file .
' didnt pass minification check:' .
' file_for_min: ' . ( $step1 ? 'true' : 'false' ) .
' ignore_css_files: ' . ( $step2 ? 'true' : 'false' ) );
}
$data = array(
'style_tag_original' => $style_tag,
'style_tag_new' => $style_tag,
'style_tag_number' => $style_tag_number,
'style_tag_pos' => $tag_pos,
'style_href' => $style_href,
'should_replace' => false,
'buffer' => $this->buffer
);
$data = apply_filters( 'w3tc_minify_css_do_excluded_tag_style_minification',
$data );
$this->buffer = $data['buffer'];
if ( $data['should_replace'] ) {
$this->buffer = substr_replace( $this->buffer,
$data['style_tag_new'], $tag_pos,
strlen( $style_tag ) );
}
$this->flush_collected( $style_tag );
return;
}
$this->debug_minified_urls[] = $file;
$this->buffer = substr_replace( $this->buffer, '',
$tag_pos, strlen( $style_tag ) );
// put minified file at the place of first tag
if ( count( $this->files_to_minify ) <= 0 )
$this->embed_pos = $tag_pos;
$this->files_to_minify[] = $file;
if ( $this->config->get_string( 'minify.css.method' ) == 'minify' )
$this->flush_collected( '' );
}
/**
* Minifies collected styles
*/
private function flush_collected( $last_style_tag ) {
if ( count( $this->files_to_minify ) <= 0 )
return;
$do_flush_collected = apply_filters( 'w3tc_minify_css_do_flush_collected',
true, $last_style_tag, $this );
if ( !$do_flush_collected )
return;
// find embed position
$embed_pos = $this->embed_pos;
// build minified style tag
$data = array(
'files_to_minify' => $this->files_to_minify,
'embed_pos' => $embed_pos,
'buffer' => $this->buffer,
'embed_to_html' => $this->embed_to_html
);
$data = apply_filters( 'w3tc_minify_css_step', $data );
$this->buffer = $data['buffer'];
if ( !empty( $data['files_to_minify'] ) ) {
$style_data = $this->minify_helpers->generate_css_style_tag(
$data['files_to_minify'],
$data['embed_to_html'] );
$data['style_to_embed_url'] = $style_data['url'];
$data['style_to_embed_body'] = $style_data['body'];
$data = apply_filters( 'w3tc_minify_css_step_style_to_embed',
$data );
$this->buffer = $data['buffer'];
if ( $this->config->getf_boolean( 'minify.css.http2push' ) ) {
$this->minify_helpers->http2_header_add(
$data['style_to_embed_url'], 'style' );
}
// replace
$this->buffer = substr_replace( $this->buffer,
$data['style_to_embed_body'], $data['embed_pos'], 0 );
}
$this->files_to_minify = array();
}
}