Created
December 5, 2008 04:38
-
-
Save mjc/32236 to your computer and use it in GitHub Desktop.
Revisions
-
mjc revised this gist
Dec 5, 2008 . 1 changed file with 0 additions and 106 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,106 +0,0 @@ -
mjc revised this gist
Dec 5, 2008 . 1 changed file with 0 additions and 209 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,209 +0,0 @@ -
mjc revised this gist
Dec 5, 2008 . 1 changed file with 14 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -25,17 +25,26 @@ function combine_init() { remove_action('admin_print_scripts', 'wp_print_scripts', 20); //add_action('wp_head', 'combine_js_link'); //non-admin add_action('admin_print_scripts', 'combine_js_link', 20); add_filter('print_scripts_array','combine_script_loader_src', 20); } function combine_script_loader_src($src) { //var_dump($src); return $src; } function combine_css() { global $wp_styles; if ( !is_a($wp_styles, 'WP_Styles') ) $wp_styles = new WP_Styles(); $wp_styles->all_deps(array_keys($wp_styles->registered)); header('content-type: text/css; charset: UTF-8'); $content = ''; foreach ( (array)$wp_styles->to_do as $style ) { $style = $wp_styles->registered[$style]; if ( file_exists(ABSPATH . $style->src) ) $content .= file_get_contents(ABSPATH . $style->src); $content .= "\n\n"; @@ -52,10 +61,13 @@ function combine_js() { if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); $wp_scripts->all_deps(array_keys($wp_scripts->registered)); //var_dump($wp_scripts->to_do); header("content-type: text/javascript; charset: UTF-8"); $content = ''; foreach ( (array)$wp_scripts->to_do as $script ) { $script = $wp_scripts->registered[$script]; if ( file_exists(ABSPATH . $script->src) ) $content .= file_get_contents(ABSPATH . $script->src) . "\n\n"; if ( isset($script->extra['l10n']) ) { -
mjc created this gist
Dec 5, 2008 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,79 @@ <?php /* Plugin Name: The Combiner Plugin URI: http://dd32.id.au/wordpress-plugins/?plugin=combine-css-js Description: Combine CSS & JS into one large monolithic file Author: DD32 Version: 1.0 Author URI: http://dd32.id.au/ */ add_action('admin_init', 'combine_init'); function combine_init() { //Handler add_action('admin_post_css', 'combine_css'); add_action('admin_post_js', 'combine_js'); //Styles //remove_action('wp_head', 'wp_print_styles', 9); //non-admin remove_action('admin_print_styles', 'wp_print_styles', 20); //add_action('wp_head', 'combine_css_link');//non-admin add_action('admin_print_styles', 'combine_css_link', 20); //Scripts //remove_action('wp_head', 'wp_print_scripts', 9); //non-admin remove_action('admin_print_scripts', 'wp_print_scripts', 20); //add_action('wp_head', 'combine_js_link'); //non-admin add_action('admin_print_scripts', 'combine_js_link', 20); } function combine_css() { global $wp_styles; if ( !is_a($wp_styles, 'WP_Styles') ) $wp_styles = new WP_Styles(); header('content-type: text/css; charset: UTF-8'); $content = ''; foreach ( (array)$wp_styles->registered as $style ) { if ( file_exists(ABSPATH . $style->src) ) $content .= file_get_contents(ABSPATH . $style->src); $content .= "\n\n"; } echo $content; } function combine_css_link() { echo '<link rel="stylesheet" type="text/css" media="all" href="' . admin_url('admin-post.php?action=css' . (is_admin() ? '&admin=true' : '') ) . '" />' . "\n"; } function combine_js() { global $wp_scripts; if ( !is_a($wp_scripts, 'WP_Scripts') ) $wp_scripts = new WP_Scripts(); header("content-type: text/javascript; charset: UTF-8"); $content = ''; foreach ( (array)$wp_scripts->registered as $script ) { if ( file_exists(ABSPATH . $script->src) ) $content .= file_get_contents(ABSPATH . $script->src) . "\n\n"; if ( isset($script->extra['l10n']) ) { $object_name = $script->extra['l10n'][0]; $content .= "\t$object_name = {\n"; $eol = ''; foreach ( $script->extra['l10n'][1] as $var => $val ) { $content .= "$eol\t\t$var: \"" . js_escape( $val ) . '"'; $eol = ",\n"; } $content .= "\n\t}\n\n"; } } echo $content; } function combine_js_link() { echo '<script type="text/javascript" src="' . admin_url('admin-post.php?action=js' . (is_admin() ? '&admin=true' : '') ) . '"></script>' . "\n"; } ?> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,209 @@ <?php /** * BackPress Scripts enqueue. * * These classes were refactored from the WordPress WP_Scripts and WordPress * script enqueue API. * * @package BackPress * @since r74 */ /** * BackPress enqueued dependiences class. * * @package BackPress * @uses _WP_Dependency * @since r74 */ class WP_Dependencies { var $registered = array(); var $queue = array(); var $to_do = array(); var $done = array(); var $args = array(); function WP_Dependencies() { $args = func_get_args(); call_user_func_array( array(&$this, '__construct'), $args ); } function __construct() {} /** * Do the dependencies * * Process the items passed to it or the queue. Processes all dependencies. * * @param mixed handles (optional) items to be processed. (void) processes queue, (string) process that item, (array of strings) process those items * @return array Items that have been processed */ function do_items( $handles = false ) { // Print the queue if nothing is passed. If a string is passed, print that script. If an array is passed, print those scripts. $handles = false === $handles ? $this->queue : (array) $handles; $this->all_deps( $handles ); foreach( $this->to_do as $handle ) { if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) { if ( $this->registered[$handle]->src ) { // Else it defines a group. $this->do_item( $handle ); } $this->done[] = $handle; } } $this->to_do = array(); return $this->done; } function do_item( $handle ) { return isset($this->registered[$handle]); } /** * Determines dependencies * * Recursively builds array of items to process taking dependencies into account. Does NOT catch infinite loops. * * @param mixed handles Accepts (string) dep name or (array of strings) dep names * @param bool recursion Used internally when function calls itself */ function all_deps( $handles, $recursion = false ) { if ( !$handles = (array) $handles ) return false; foreach ( $handles as $handle ) { $handle = explode('?', $handle); if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; $handle = $handle[0]; if ( isset($this->to_do[$handle]) ) // Already grobbed it and its deps continue; $keep_going = true; if ( !isset($this->registered[$handle]) ) $keep_going = false; // Script doesn't exist elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) ) $keep_going = false; // Script requires deps which don't exist (not a necessary check. efficiency?) elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true ) ) $keep_going = false; // Script requires deps which don't exist if ( !$keep_going ) { // Either script or its deps don't exist. if ( $recursion ) return false; // Abort this branch. else continue; // We're at the top level. Move on to the next one. } $this->to_do[$handle] = true; } if ( !$recursion ) // at the end $this->to_do = array_keys( $this->to_do ); return true; } /** * Adds item * * Adds the item only if no item of that name already exists * * @param string handle Script name * @param string src Script url * @param array deps (optional) Array of script names on which this script depends * @param string ver (optional) Script version (used for cache busting) * @return array Hierarchical array of dependencies */ function add( $handle, $src, $deps = array(), $ver = false, $args = null ) { if ( isset($this->registered[$handle]) ) return false; $this->registered[$handle] = new _WP_Dependency( $handle, $src, $deps, $ver, $args ); return true; } /** * Adds extra data * * Adds data only if script has already been added * * @param string handle Script name * @param string data_name Name of object in which to store extra data * @param array data Array of extra data * @return bool success */ function add_data( $handle, $data_name, $data ) { if ( !isset($this->registered[$handle]) ) return false; return $this->registered[$handle]->add_data( $data_name, $data ); } function remove( $handles ) { foreach ( (array) $handles as $handle ) unset($this->registered[$handle]); } function enqueue( $handles ) { foreach ( (array) $handles as $handle ) { $handle = explode('?', $handle); if ( !in_array($handle[0], $this->queue) && isset($this->registered[$handle[0]]) ) { $this->queue[] = $handle[0]; if ( isset($handle[1]) ) $this->args[$handle[0]] = $handle[1]; } } } function dequeue( $handles ) { foreach ( (array) $handles as $handle ) unset( $this->queue[$handle] ); } function query( $handle, $list = 'registered' ) { // registered, queue, done, to_do switch ( $list ) : case 'registered': case 'scripts': // back compat if ( isset($this->registered[$handle]) ) return $this->registered[$handle]; break; case 'to_print': // back compat case 'printed': // back compat if ( 'to_print' == $list ) $list = 'to_do'; else $list = 'printed'; default: if ( in_array($handle, $this->$list) ) return true; break; endswitch; return false; } } class _WP_Dependency { var $handle; var $src; var $deps = array(); var $ver = false; var $args = null; var $extra = array(); function _WP_Dependency() { @list($this->handle, $this->src, $this->deps, $this->ver, $this->args) = func_get_args(); if ( !is_array($this->deps) ) $this->deps = array(); if ( !$this->ver ) $this->ver = false; } function add_data( $name, $data ) { if ( !is_scalar($name) ) return false; $this->extra[$name] = $data; return true; } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,106 @@ <?php /** * BackPress Scripts enqueue. * * These classes were refactored from the WordPress WP_Scripts and WordPress * script enqueue API. * * @package BackPress * @since r16 */ /** * BackPress Scripts enqueue class. * * @package BackPress * @uses WP_Dependencies * @since r16 */ class WP_Scripts extends WP_Dependencies { var $base_url; // Full URL with trailing slash var $default_version; function __construct() { do_action_ref_array( 'wp_default_scripts', array(&$this) ); } /** * Prints scripts * * Prints the scripts passed to it or the print queue. Also prints all necessary dependencies. * * @param mixed handles (optional) Scripts to be printed. (void) prints queue, (string) prints that script, (array of strings) prints those scripts. * @return array Scripts that have been printed */ function print_scripts( $handles = false ) { return $this->do_items( $handles ); } function print_scripts_l10n( $handle ) { if ( empty($this->registered[$handle]->extra['l10n']) || empty($this->registered[$handle]->extra['l10n'][0]) || !is_array($this->registered[$handle]->extra['l10n'][1]) ) return false; $object_name = $this->registered[$handle]->extra['l10n'][0]; echo "<script type='text/javascript'>\n"; echo "/* <![CDATA[ */\n"; echo "\t$object_name = {\n"; $eol = ''; foreach ( $this->registered[$handle]->extra['l10n'][1] as $var => $val ) { echo "$eol\t\t$var: \"" . js_escape( $val ) . '"'; $eol = ",\n"; } echo "\n\t}\n"; echo "try{convertEntities($object_name);}catch(e){};\n"; echo "/* ]]> */\n"; echo "</script>\n"; return true; } function do_item( $handle ) { if ( !parent::do_item($handle) ) return false; $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version; if ( isset($this->args[$handle]) ) $ver .= '&' . $this->args[$handle]; $src = $this->registered[$handle]->src; if ( !preg_match('|^https?://|', $src) && !preg_match('|^' . preg_quote(WP_CONTENT_URL) . '|', $src) ) { $src = $this->base_url . $src; } $src = add_query_arg('ver', $ver, $src); $src = clean_url(apply_filters( 'script_loader_src', $src, $handle )); $this->print_scripts_l10n( $handle ); echo "<script type='text/javascript' src='$src'></script>\n"; return true; } /** * Localizes a script * * Localizes only if script has already been added * * @param string handle Script name * @param string object_name Name of JS object to hold l10n info * @param array l10n Array of JS var name => localized string * @return bool Successful localization */ function localize( $handle, $object_name, $l10n ) { if ( !$object_name || !$l10n ) return false; return $this->add_data( $handle, 'l10n', array( $object_name, $l10n ) ); } function all_deps( $handles, $recursion = false ) { $r = parent::all_deps( $handles, $recursion ); if ( !$recursion ) $this->to_do = apply_filters( 'print_scripts_array', $this->to_do ); return $r; } }