73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace W3TC;
 | 
						|
 | 
						|
class Minify_Extract {
 | 
						|
	/**
 | 
						|
	 * Extracts JS files from content
 | 
						|
	 * w3tc-url-escaping: When rendered, URLs need to be escaped via
 | 
						|
	 * htmlspecialchars instead of esc_attr to not change the way it is encoded
 | 
						|
	 * in source html. E.g. html contains a&b Using esc_attr that will not
 | 
						|
	 * double escape it as a result config value will be a&b.
 | 
						|
	 *
 | 
						|
	 * @param string  $content
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	static public function extract_js( $content ) {
 | 
						|
		$matches = null;
 | 
						|
		$files = array();
 | 
						|
 | 
						|
		$content = preg_replace( '~<!--.*?-->~s', '', $content );
 | 
						|
 | 
						|
		if ( preg_match_all( '~<script\s+[^<>]*src=["\']?([^"\']+)["\']?[^<>]*>\s*</script>~is',
 | 
						|
				$content, $matches ) ) {
 | 
						|
			$files = $matches[1];
 | 
						|
		}
 | 
						|
 | 
						|
		$files = array_values( array_unique( $files ) );
 | 
						|
 | 
						|
		return $files;
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Extract CSS files from content
 | 
						|
	 *
 | 
						|
	 * @param string  $content
 | 
						|
	 * @return array
 | 
						|
	 */
 | 
						|
	static public function extract_css( $content ) {
 | 
						|
		$content = preg_replace( '~<!--.*?-->~s', '', $content );
 | 
						|
 | 
						|
		$tags_files = array();
 | 
						|
 | 
						|
		$matches = null;
 | 
						|
		if ( preg_match_all( '~<link\s+([^>]+)/?>(.*</link>)?~Uis', $content,
 | 
						|
				$matches, PREG_SET_ORDER ) ) {
 | 
						|
			foreach ( $matches as $match ) {
 | 
						|
				$attrs = array();
 | 
						|
				$attr_matches = null;
 | 
						|
				if ( preg_match_all( '~(\w+)=["\']([^"\']*)["\']~', $match[1],
 | 
						|
						$attr_matches, PREG_SET_ORDER ) ) {
 | 
						|
					foreach ( $attr_matches as $attr_match ) {
 | 
						|
						$attrs[$attr_match[1]] = trim( $attr_match[2] );
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				if ( isset( $attrs['href'] ) && isset( $attrs['rel'] ) &&
 | 
						|
					stristr( $attrs['rel'], 'stylesheet' ) !== false &&
 | 
						|
					( !isset( $attrs['media'] ) || stristr( $attrs['media'], 'print' ) === false ) ) {
 | 
						|
					$tags_files[] = array( $match[0], $attrs['href'] );
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		if ( preg_match_all( '~@import\s+(url\s*)?\(?["\']?\s*([^"\'\)\s]+)\s*["\']?\)?[^;]*;?~is',
 | 
						|
				$content, $matches, PREG_SET_ORDER ) ) {
 | 
						|
			foreach ( $matches as $match )
 | 
						|
				$tags_files[] = array( $match[0], $match[2] );
 | 
						|
		}
 | 
						|
 | 
						|
		return $tags_files;
 | 
						|
	}
 | 
						|
}
 |