Make WordPress Core

Ticket #8628: 8628-5.patch

File 8628-5.patch, 40.6 KB (added by azaozz, 16 years ago)
  • wp-admin/admin-ajax.php

     
    6363        echo join( $results, "\n" );
    6464        die;
    6565        break;
     66case 'wp-compression-test' :
     67        if ( !current_user_can( 'manage_options' ) )
     68                die('-1');
     69       
     70        if ( isset($_GET['tested']) ) {
     71                if ( 1 == $_GET['tested'] )
     72                        update_option('can_compress_scripts', 1);
     73                elseif ( 0 == $_GET['tested'] )
     74                        update_option('can_compress_scripts', 0);
     75        }
     76        die('0');
     77        break;
    6678default :
    6779        do_action( 'wp_ajax_' . $_GET['action'] );
    6880        die('0');
  • wp-admin/admin-footer.php

     
    2222<p id="footer-upgrade" class="alignright"><?php echo $upgrade; ?></p>
    2323<div class="clear"></div>
    2424</div>
    25 <?php do_action('admin_footer', ''); ?>
     25<?php
     26do_action('admin_footer', '');
     27do_action('admin_print_footer_scripts');
     28
     29if ( false === get_option('can_compress_scripts') )
     30        compression_test();
     31?>
    2632<script type="text/javascript">if(typeof wpOnload=='function')wpOnload();</script>
    2733</body>
    28 </html>
    29  No newline at end of file
     34</html>
     35
  • wp-admin/includes/template.php

     
    33873387<?php
    33883388}
    33893389
     3390/**
     3391 * Test support for compressed JavaScript and CSS
     3392 *
     3393 * Outputs JavaScript that tests if compression from PHP works properly
     3394 * and sets an option with the result. Has no effect when the current user
     3395 * is not Administrator. To run the test again the option 'can_compress_scripts'
     3396 * has to be deleted.
     3397 *
     3398 * @since 2.8.0
     3399 */
     3400function compression_test() {
    33903401?>
     3402        <script type="text/javascript" src="load-scripts.php?test=1"></script>
     3403        <script type="text/javascript">
     3404        /* <![CDATA[ */
     3405        (function() {
     3406                var x, test = typeof wpCompressionTest == 'undefined' ? 0 : 1;
     3407                if ( window.XMLHttpRequest ) {
     3408                        x = new XMLHttpRequest();
     3409                } else {
     3410                        try{x=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{x=new ActiveXObject('Microsoft.XMLHTTP');}catch(e){};}
     3411                }
     3412       
     3413                if (x) {
     3414                        x.open('GET', 'admin-ajax.php?action=wp-compression-test&tested='+test+'&'+(new Date()).getTime(), true);
     3415                        x.send('');
     3416                }
     3417        })();
     3418        /* ]]> */
     3419        </script>
     3420<?php
     3421}
     3422
     3423?>
  • wp-admin/load-scripts.php

     
     1<?php
     2
     3/** Set ABSPATH for execution */
     4define( 'ABSPATH', dirname(dirname(__FILE__)) );
     5define( 'WPINC', '/wp-includes' );
     6
     7/**
     8 * @ignore
     9 */
     10function __() {}
     11
     12/**
     13 * @ignore
     14 */
     15function _c() {}
     16
     17/**
     18 * @ignore
     19 */
     20function add_filter() {}
     21
     22/**
     23 * @ignore
     24 */
     25function attribute_escape() {}
     26
     27/**
     28 * @ignore
     29 */
     30function apply_filters() {}
     31
     32/**
     33 * @ignore
     34 */
     35function get_option() {}
     36
     37/**
     38 * @ignore
     39 */
     40function is_lighttpd_before_150() {}
     41
     42/**
     43 * @ignore
     44 */
     45function add_action() {}
     46
     47/**
     48 * @ignore
     49 */
     50function do_action_ref_array() {}
     51
     52/**
     53 * @ignore
     54 */
     55function get_bloginfo() {}
     56
     57/**
     58 * @ignore
     59 */
     60function is_admin() {return true;}
     61
     62/**
     63 * @ignore
     64 */
     65function site_url() {}
     66
     67/**
     68 * @ignore
     69 */
     70function admin_url() {}
     71
     72/**
     73 * @ignore
     74 */
     75function wp_guess_url() {}
     76
     77function get_file($path) {
     78
     79        if ( function_exists('realpath') )
     80                $path = realpath($path);
     81
     82        if ( ! $path || ! @is_file($path) )
     83                return '';
     84
     85        return @file_get_contents($path);
     86}
     87
     88if ( isset($_GET['test']) && 1 == $_GET['test'] ) {
     89        if ( ini_get('zlib.output_compression') )
     90                exit('');
     91       
     92        $out = 'var wpCompressionTest = 1;';
     93
     94        $compressed = false;
     95        if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') ) {
     96                header('Content-Encoding: deflate');
     97                $out = gzdeflate( $out, 3 );
     98                $compressed = true;
     99        } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) {
     100                header('Content-Encoding: gzip');
     101                $out = gzencode( $out, 3 );
     102                $compressed = true;
     103        }
     104       
     105        if ( ! $compressed )
     106                exit('');
     107       
     108        header( 'Expires: Wed, 11 Jan 1984 05:00:00 GMT' );
     109        header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
     110        header( 'Cache-Control: no-cache, must-revalidate, max-age=0' );
     111        header( 'Pragma: no-cache' );
     112        header( 'Content-Type: application/x-javascript; charset=UTF-8' );
     113        exit($out);
     114}
     115
     116$load = preg_replace( '/[^a-z0-9,_-]*/i', '', $_GET['load'] );
     117$load = explode(',', $load);
     118
     119if ( empty($load) )
     120        exit;
     121
     122require(ABSPATH . '/wp-includes/script-loader.php');
     123require(ABSPATH . '/wp-includes/version.php');
     124
     125// Discard any buffers
     126while ( @ob_end_clean() );
     127
     128
     129$compress = ( isset($_GET['c']) && 1 == $_GET['c'] );
     130$expires_offset = 31536000;
     131//$last_modified = filemtime(ABSPATH . '/wp-includes/version.php');
     132
     133$wp_scripts = new WP_Scripts();
     134wp_default_scripts($wp_scripts);
     135
     136foreach( $load as $handle ) {
     137        if ( !array_key_exists($handle, $wp_scripts->registered) )
     138                continue;
     139
     140        $path = ABSPATH . $wp_scripts->registered[$handle]->src;
     141        $out .= get_file($path) . "\n";
     142}
     143
     144header('Content-Type: application/x-javascript; charset=UTF-8');
     145header('Vary: Accept-Encoding'); // Handle proxies
     146header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT');
     147//header('Last-Modified: ' . gmdate( "D, d M Y H:i:s", $last_modified ) . ' GMT');
     148header("Cache-Control: public, max-age=$expires_offset");
     149       
     150if ( $compress && ! ini_get('zlib.output_compression') ) {
     151        if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') ) {
     152                header('Content-Encoding: deflate');
     153                $out = gzdeflate( $out, 3 );
     154        } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) {
     155                header('Content-Encoding: gzip');
     156                $out = gzencode( $out, 3 );
     157        }
     158}
     159
     160echo $out;
     161exit;
  • wp-admin/load-styles.php

    Property changes on: wp-admin\load-scripts.php
    ___________________________________________________________________
    Added: svn:eol-style
       + native
    
     
     1<?php
     2
     3/** Set ABSPATH for execution */
     4define( 'ABSPATH', dirname(dirname(__FILE__)) );
     5define( 'WPINC', '/wp-includes' );
     6
     7/**
     8 * @ignore
     9 */
     10function __() {}
     11
     12/**
     13 * @ignore
     14 */
     15function _c() {}
     16
     17/**
     18 * @ignore
     19 */
     20function add_filter() {}
     21
     22/**
     23 * @ignore
     24 */
     25function attribute_escape() {}
     26
     27/**
     28 * @ignore
     29 */
     30function apply_filters() {}
     31
     32/**
     33 * @ignore
     34 */
     35function get_option() {}
     36
     37/**
     38 * @ignore
     39 */
     40function is_lighttpd_before_150() {}
     41
     42/**
     43 * @ignore
     44 */
     45function add_action() {}
     46
     47/**
     48 * @ignore
     49 */
     50function do_action_ref_array() {}
     51
     52/**
     53 * @ignore
     54 */
     55function get_bloginfo() {}
     56
     57/**
     58 * @ignore
     59 */
     60function is_admin() {return true;}
     61
     62/**
     63 * @ignore
     64 */
     65function site_url() {}
     66
     67/**
     68 * @ignore
     69 */
     70function admin_url() {}
     71
     72/**
     73 * @ignore
     74 */
     75function wp_guess_url() {}
     76
     77function get_file($path) {
     78
     79        if ( function_exists('realpath') )
     80                $path = realpath($path);
     81
     82        if ( ! $path || ! @is_file($path) )
     83                return '';
     84
     85        return @file_get_contents($path);
     86}
     87
     88require(ABSPATH . '/wp-includes/script-loader.php');
     89require(ABSPATH . '/wp-includes/version.php');
     90
     91// Discard any buffers
     92while ( @ob_end_clean() );
     93
     94$load = preg_replace( '/[^a-z0-9,_-]*/i', '', $_GET['load'] );
     95$load = explode(',', $load);
     96
     97if ( empty($load) )
     98        exit;
     99
     100$compress = ( isset($_GET['c']) && 1 == $_GET['c'] );
     101$rtl = ( isset($_GET['rtl']) && 1 == $_GET['rtl'] );
     102$expires_offset = 31536000;
     103//$last_modified = filemtime(ABSPATH . '/wp-includes/version.php');
     104
     105$wp_styles = new WP_Styles();
     106wp_default_styles($wp_styles);
     107
     108foreach( $load as $handle ) {
     109        if ( !array_key_exists($handle, $wp_styles->registered) )
     110                continue;
     111
     112        $style = $wp_styles->registered[$handle];
     113        $path = ABSPATH . $style->src;
     114
     115        $content = get_file($path) . "\n";
     116
     117        if ( $rtl && isset($style->extra['rtl']) && $style->extra['rtl'] ) {
     118                $rtl_path = is_bool($style->extra['rtl']) ? str_replace( '.css', '-rtl.css', $path ) : ABSPATH . $style->extra['rtl'];
     119                $content .= get_file($rtl_path) . "\n";
     120        }
     121
     122        $out .= str_replace( '../images/', 'images/', $content );
     123}
     124
     125header( 'Content-Type: text/css' );
     126header('Vary: Accept-Encoding'); // Handle proxies
     127header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT');
     128//header('Last-Modified: ' . gmdate( "D, d M Y H:i:s", $last_modified ) . ' GMT');
     129header("Cache-Control: public, max-age=$expires_offset");
     130       
     131if ( $compress && ! ini_get('zlib.output_compression') ) {
     132        if ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'deflate') && function_exists('gzdeflate') ) {
     133                header('Content-Encoding: deflate');
     134                $out = gzdeflate( $out, 3 );
     135        } elseif ( false !== strpos( strtolower($_SERVER['HTTP_ACCEPT_ENCODING']), 'gzip') && function_exists('gzencode') ) {
     136                header('Content-Encoding: gzip');
     137                $out = gzencode( $out, 3 );
     138        }
     139}
     140
     141echo $out;
     142exit;
  • wp-includes/class.wp-dependencies.php

    Property changes on: wp-admin\load-styles.php
    ___________________________________________________________________
    Added: svn:eol-style
       + native
    
     
    2222        var $to_do = array();
    2323        var $done = array();
    2424        var $args = array();
     25        var $groups = array();
     26        var $group = 0;
    2527
    2628        function WP_Dependencies() {
    2729                $args = func_get_args();
     
    3840         * @param mixed handles (optional) items to be processed.  (void) processes queue, (string) process that item, (array of strings) process those items
    3941         * @return array Items that have been processed
    4042         */
    41         function do_items( $handles = false ) {
     43        function do_items( $handles = false, $group = false ) {
    4244                // Print the queue if nothing is passed.  If a string is passed, print that script.  If an array is passed, print those scripts.
    4345                $handles = false === $handles ? $this->queue : (array) $handles;
    4446                $this->all_deps( $handles );
    4547
    46                 foreach( $this->to_do as $handle ) {
     48                foreach( $this->to_do as $key => $handle ) {
    4749                        if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) {
    48                                 if ( $this->registered[$handle]->src ) { // Else it defines a group.
    49                                         $this->do_item( $handle );
     50
     51                                if ( ! $this->registered[$handle]->src ) { // Defines a group.
     52                                        $this->done[] = $handle;
     53                                        continue;
    5054                                }
    51                                 $this->done[] = $handle;
     55
     56                                if ( $this->do_item( $handle, $group ) )
     57                                        $this->done[] = $handle;
     58
     59                                unset( $this->to_do[$key] );
    5260                        }
    5361                }
    5462
    55                 $this->to_do = array();
    5663                return $this->done;
    5764        }
    5865
     
    6976         * @param mixed handles Accepts (string) dep name or (array of strings) dep names
    7077         * @param bool recursion Used internally when function calls itself
    7178         */
    72         function all_deps( $handles, $recursion = false ) {
     79        function all_deps( $handles, $recursion = false, $group = false ) {
    7380                if ( !$handles = (array) $handles )
    7481                        return false;
    7582
    7683                foreach ( $handles as $handle ) {
    77                         $handle = explode('?', $handle);
    78                         if ( isset($handle[1]) )
    79                                 $this->args[$handle[0]] = $handle[1];
    80                         $handle = $handle[0];
     84                        $handle_parts = explode('?', $handle);
     85                        $handle = $handle_parts[0];
    8186
    82                         if ( isset($this->to_do[$handle]) ) // Already grobbed it and its deps
     87                        if ( in_array($handle, $this->done, true) ) // Already done
    8388                                continue;
    8489
     90                        $this->set_group( $handle, $recursion, $group );
     91
     92                        if ( in_array($handle, $this->to_do, true) ) // Already grobbed it and its deps
     93                                continue;
     94
     95                        if ( isset($handle_parts[1]) )
     96                                $this->args[$handle] = $handle_parts[1];
     97
    8598                        $keep_going = true;
    8699                        if ( !isset($this->registered[$handle]) )
    87100                                $keep_going = false; // Script doesn't exist
    88101                        elseif ( $this->registered[$handle]->deps && array_diff($this->registered[$handle]->deps, array_keys($this->registered)) )
    89102                                $keep_going = false; // Script requires deps which don't exist (not a necessary check.  efficiency?)
    90                         elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true ) )
     103                        elseif ( $this->registered[$handle]->deps && !$this->all_deps( $this->registered[$handle]->deps, true, $group ) )
    91104                                $keep_going = false; // Script requires deps which don't exist
    92105
    93106                        if ( !$keep_going ) { // Either script or its deps don't exist.
     
    97110                                        continue; // We're at the top level.  Move on to the next one.
    98111                        }
    99112
    100                         $this->to_do[$handle] = true;
     113                        $this->to_do[] = $handle;
    101114                }
    102115
    103                 if ( !$recursion ) // at the end
    104                         $this->to_do = array_keys( $this->to_do );
    105116                return true;
    106117        }
    107118
     
    181192                return false;
    182193        }
    183194
     195        function set_group( $handle, $recursion, $group ) {
     196                $group = (int) $group;
     197
     198                if ( $recursion )
     199                        $group = min($this->group, $group);
     200                else
     201                        $this->group = $group;
     202
     203                if ( isset($this->groups[$handle]) && $this->groups[$handle] <= $group )
     204                        return false;
     205
     206                $this->groups[$handle] = $group;
     207                return true;
     208        }
     209
    184210}
    185211
    186212class _WP_Dependency {
  • wp-includes/class.wp-scripts.php

     
    1818 */
    1919class WP_Scripts extends WP_Dependencies {
    2020        var $base_url; // Full URL with trailing slash
     21        var $content_url;
    2122        var $default_version;
     23        var $in_footer = array();
     24        var $concat = '';
     25        var $concat_version = '';
     26        var $do_concat = false;
     27        var $print_html = '';
     28        var $print_code = '';
     29        var $default_dirs;
    2230
    2331        function __construct() {
    2432                do_action_ref_array( 'wp_default_scripts', array(&$this) );
     
    3038         * Prints the scripts passed to it or the print queue.  Also prints all necessary dependencies.
    3139         *
    3240         * @param mixed handles (optional) Scripts to be printed.  (void) prints queue, (string) prints that script, (array of strings) prints those scripts.
     41         * @param int group (optional) If scripts were queued in groups prints this group number.
    3342         * @return array Scripts that have been printed
    3443         */
    35         function print_scripts( $handles = false ) {
    36                 return $this->do_items( $handles );
     44        function print_scripts( $handles = false, $group = false ) {
     45                return $this->do_items( $handles, $group );
    3746        }
    3847
    39         function print_scripts_l10n( $handle ) {
     48        function print_scripts_l10n( $handle, $echo = true ) {
    4049                if ( empty($this->registered[$handle]->extra['l10n']) || empty($this->registered[$handle]->extra['l10n'][0]) || !is_array($this->registered[$handle]->extra['l10n'][1]) )
    4150                        return false;
    4251
    4352                $object_name = $this->registered[$handle]->extra['l10n'][0];
    4453
    45                 echo "<script type='text/javascript'>\n";
    46                 echo "/* <![CDATA[ */\n";
    47                 echo "\t$object_name = {\n";
     54                $data = "var $object_name = {\n";
    4855                $eol = '';
    4956                foreach ( $this->registered[$handle]->extra['l10n'][1] as $var => $val ) {
    5057                        if ( 'l10n_print_after' == $var ) {
    5158                                $after = $val;
    5259                                continue;
    5360                        }
    54                         echo "$eol\t\t$var: \"" . js_escape( $val ) . '"';
     61                        $data .= "$eol\t$var: \"" . js_escape( $val ) . '"';
    5562                        $eol = ",\n";
    5663                }
    57                 echo "\n\t}\n";
    58                 echo isset($after) ? "\t$after\n" : '';
    59                 echo "/* ]]> */\n";
    60                 echo "</script>\n";
     64                $data .= "\n};\n";
     65                $data .= isset($after) ? "$after\n" : '';
    6166
    62                 return true;
     67                if ( $echo ) {
     68                        echo "<script type='text/javascript'>\n";
     69                        echo "/* <![CDATA[ */\n";
     70                        echo $data;
     71                        echo "/* ]]> */\n";
     72                        echo "</script>\n";
     73                        return true;
     74                } else {
     75                        return $data;
     76                }
    6377        }
    6478
    65         function do_item( $handle ) {
     79        function do_item( $handle, $group = false ) {
    6680                if ( !parent::do_item($handle) )
    6781                        return false;
    6882
     83                if ( 0 === $group && $this->groups[$handle] > 0 ) {
     84                        $this->in_footer[] = $handle;
     85                        return false;
     86                }
     87
     88                if ( false === $group && in_array($handle, $this->in_footer, true) )
     89                        $this->in_footer = array_diff( $this->in_footer, (array) $handle );
     90
    6991                $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version;
    7092                if ( isset($this->args[$handle]) )
    7193                        $ver .= '&amp;' . $this->args[$handle];
    7294
    7395                $src = $this->registered[$handle]->src;
    74                 if ( !preg_match('|^https?://|', $src) && !preg_match('|^' . preg_quote(WP_CONTENT_URL) . '|', $src) ) {
     96
     97                if ( $this->do_concat ) {
     98                        $srce = apply_filters( 'script_loader_src', $src, $handle, $echo );
     99                        if ( $this->in_default_dir($srce) ) {
     100                                $this->print_code .= $this->print_scripts_l10n( $handle, false );
     101                                $this->concat .= $handle . ',';
     102                                $this->concat_version .= $ver;
     103                                return true;
     104                        }
     105                }
     106
     107                $this->print_scripts_l10n( $handle );
     108                if ( !preg_match('|^https?://|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
    75109                        $src = $this->base_url . $src;
    76110                }
    77111
    78112                $src = add_query_arg('ver', $ver, $src);
    79                 $src = clean_url(apply_filters( 'script_loader_src', $src, $handle ));
     113                $src = clean_url(apply_filters( 'script_loader_src', $src, $handle, $echo ));
    80114
    81                 $this->print_scripts_l10n( $handle );
     115                if ( $this->do_concat )
     116                        $this->print_html .= "<script type='text/javascript' src='$src'></script>\n";
     117                else
     118                        echo "<script type='text/javascript' src='$src'></script>\n";
    82119
    83                 echo "<script type='text/javascript' src='$src'></script>\n";
    84 
    85120                return true;
    86121        }
    87122
     
    101136                return $this->add_data( $handle, 'l10n', array( $object_name, $l10n ) );
    102137        }
    103138
     139        function set_group( $handle, $recursion, $group = false ) {
     140                $grp = isset($this->registered[$handle]->extra['group']) ? (int) $this->registered[$handle]->extra['group'] : 0;
     141                if ( false !== $group && $grp > $group )
     142                        $grp = $group;
     143
     144                parent::set_group( $handle, $recursion, $grp );
     145        }
     146
    104147        function all_deps( $handles, $recursion = false ) {
    105148                $r = parent::all_deps( $handles, $recursion );
    106149                if ( !$recursion )
    107150                        $this->to_do = apply_filters( 'print_scripts_array', $this->to_do );
    108151                return $r;
    109152        }
     153
     154        function do_head_items() {
     155                $this->do_items(false, 0);
     156                return $this->done;
     157        }
     158
     159        function do_footer_items() {
     160                if ( !empty($this->in_footer) ) {
     161                        foreach( $this->in_footer as $key => $handle ) {
     162                                if ( !in_array($handle, $this->done, true) && isset($this->registered[$handle]) ) {
     163                                        $this->do_item($handle, false, $this->doecho);
     164                                        $this->done[] = $handle;
     165                                        unset( $this->in_footer[$key] );
     166                                }
     167                        }
     168                }
     169                return $this->done;
     170        }
     171
     172        function in_default_dir($src) {
     173                if ( ! $this->default_dirs )
     174                        return true;
     175
     176                foreach ( (array) $this->default_dirs as $test ) {
     177                        if ( 0 === strpos($src, $test) )
     178                                return true;
     179                }
     180                return false;
     181        }
    110182}
  • wp-includes/class.wp-styles.php

     
    1818 */
    1919class WP_Styles extends WP_Dependencies {
    2020        var $base_url;
     21        var $content_url;
    2122        var $default_version;
    2223        var $text_direction = 'ltr';
     24        var $concat = '';
     25        var $concat_version = '';
     26        var $do_concat = false;
     27        var $print_html = '';
     28        var $default_dirs;
    2329
    2430        function __construct() {
    2531                do_action_ref_array( 'wp_default_styles', array(&$this) );
     
    3339                if ( isset($this->args[$handle]) )
    3440                        $ver .= '&amp;' . $this->args[$handle];
    3541
     42                if ( $this->do_concat ) {
     43                        if ( $this->in_default_dir($this->registered[$handle]->src) && !isset($this->registered[$handle]->extra['conditional']) ) {
     44                                $this->concat .= $handle . ',';
     45                                $this->concat_version .= $ver;
     46                                return true;
     47                        }
     48                }
     49
    3650                if ( isset($this->registered[$handle]->args) )
    3751                        $media = attribute_escape( $this->registered[$handle]->args );
    3852                else
     
    4256                $rel = isset($this->registered[$handle]->extra['alt']) && $this->registered[$handle]->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
    4357                $title = isset($this->registered[$handle]->extra['title']) ? "title='" . attribute_escape( $this->registered[$handle]->extra['title'] ) . "'" : '';
    4458
    45                 $end_cond = '';
     59                $end_cond = $tag = '';
    4660                if ( isset($this->registered[$handle]->extra['conditional']) && $this->registered[$handle]->extra['conditional'] ) {
    47                         echo "<!--[if {$this->registered[$handle]->extra['conditional']}]>\n";
     61                        $tag .= "<!--[if {$this->registered[$handle]->extra['conditional']}]>\n";
    4862                        $end_cond = "<![endif]-->\n";
    4963                }
    5064
    51                 echo apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle' $title href='$href' type='text/css' media='$media' />\n", $handle );
     65                $tag .= apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle' $title href='$href' type='text/css' media='$media' />\n", $handle );
    5266                if ( 'rtl' === $this->text_direction && isset($this->registered[$handle]->extra['rtl']) && $this->registered[$handle]->extra['rtl'] ) {
    5367                        if ( is_bool( $this->registered[$handle]->extra['rtl'] ) )
    5468                                $rtl_href = str_replace( '.css', '-rtl.css', $href );
    5569                        else
    5670                                $rtl_href = $this->_css_href( $this->registered[$handle]->extra['rtl'], $ver, "$handle-rtl" );
    5771
    58                         echo apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle' $title href='$rtl_href' type='text/css' media='$media' />\n", $handle );
     72                        $tag .= apply_filters( 'style_loader_tag', "<link rel='$rel' id='$handle' $title href='$rtl_href' type='text/css' media='$media' />\n", $handle );
    5973                }
    6074
    61                 echo $end_cond;
     75                $tag .= $end_cond;
    6276
     77                if ( $this->do_concat )
     78                        $this->print_html .= $tag;
     79                else
     80                        echo $tag;
     81
    6382                // Could do something with $this->registered[$handle]->extra here to print out extra CSS rules
    6483//              echo "<style type='text/css'>\n";
    6584//              echo "/* <![CDATA[ */\n";
     
    7796        }
    7897
    7998        function _css_href( $src, $ver, $handle ) {
    80                 if ( !preg_match('|^https?://|', $src) && !preg_match('|^' . preg_quote(WP_CONTENT_URL) . '|', $src) ) {
     99                if ( !preg_match('|^https?://|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
    81100                        $src = $this->base_url . $src;
    82101                }
    83102
     
    86105                return clean_url( $src );
    87106        }
    88107
     108        function in_default_dir($src) {
     109                if ( ! $this->default_dirs )
     110                        return true;
     111
     112                foreach ( (array) $this->default_dirs as $test ) {
     113                        if ( 0 === strpos($src, $test) )
     114                                return true;
     115                }
     116                return false;
     117        }
     118
    89119}
  • wp-includes/default-filters.php

     
    181181add_action('do_pings', 'do_all_pings', 10, 1);
    182182add_action('do_robots', 'do_robots');
    183183add_action('sanitize_comment_cookies', 'sanitize_comment_cookies');
    184 add_action('admin_print_scripts', 'wp_print_scripts', 20);
    185 add_action('admin_print_styles', 'wp_print_styles', 20);
     184add_action('admin_print_scripts', 'wp_print_head_scripts', 20);
     185add_action('admin_print_footer_scripts', 'wp_print_footer_scripts', 20);
     186add_action('admin_print_styles', 'wp_print_admin_styles', 20);
    186187add_action('init', 'smilies_init', 5);
    187188add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
    188189add_action( 'shutdown', 'wp_ob_end_flush_all', 1);
  • wp-includes/script-loader.php

     
    3535 * @param object $scripts WP_Scripts object.
    3636 */
    3737function wp_default_scripts( &$scripts ) {
    38         if (!$guessurl = site_url())
     38
     39        if ( !$guessurl = site_url() )
    3940                $guessurl = wp_guess_url();
    4041
    4142        $scripts->base_url = $guessurl;
     43        $scripts->content_url = WP_CONTENT_URL;
    4244        $scripts->default_version = get_bloginfo( 'version' );
     45        $scripts->default_dirs = array('/wp-admin/js/', '/wp-includes/js/');
     46
    4347        $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '.dev' : '';
    4448
     49
    4550        $scripts->add( 'utils', "/wp-admin/js/utils$suffix.js", false, '20090102' );
    46        
     51
    4752        $scripts->add( 'common', "/wp-admin/js/common$suffix.js", array('jquery', 'hoverIntent', 'utils'), '20090106' );
     53        $scripts->add_data( 'common', 'group', 1 );
    4854        $scripts->localize( 'common', 'commonL10n', array(
    4955                'warnDelete' => __("You are about to delete the selected items.\n  'Cancel' to stop, 'OK' to delete."),
    5056                'l10n_print_after' => 'try{convertEntities(commonL10n);}catch(e){};'
    5157        ) );
    5258
    5359        $scripts->add( 'sack', "/wp-includes/js/tw-sack$suffix.js", false, '1.6.1' );
     60        $scripts->add_data( 'sack', 'group', 1 );
    5461
    5562        $scripts->add( 'quicktags', "/wp-includes/js/quicktags$suffix.js", false, '20090102' );
    5663        $scripts->localize( 'quicktags', 'quicktagsL10n', array(
     
    7986        $scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6');
    8087
    8188        $scripts->add( 'wp-ajax-response', "/wp-includes/js/wp-ajax-response$suffix.js", array('jquery'), '20090102' );
     89        $scripts->add_data( 'wp-ajax-response', 'group', 1 );
    8290        $scripts->localize( 'wp-ajax-response', 'wpAjax', array(
    8391                'noPerm' => __('You do not have permission to do that.'),
    8492                'broken' => __('An unidentified error has occurred.'),
     
    8694        ) );
    8795
    8896        $scripts->add( 'autosave', "/wp-includes/js/autosave$suffix.js", array('schedule', 'wp-ajax-response'), '20090106' );
     97        $scripts->add_data( 'autosave', 'group', 1 );
    8998
    9099        $scripts->add( 'wp-lists', "/wp-includes/js/wp-lists$suffix.js", array('wp-ajax-response'), '20090102' );
     100        $scripts->add_data( 'wp-lists', 'group', 1 );
    91101        $scripts->localize( 'wp-lists', 'wpListL10n', array(
    92102                'url' => admin_url('admin-ajax.php')
    93103        ) );
     
    104114        $scripts->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop'), '20070118');
    105115
    106116        $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.3b2');
     117
     118        $scripts->add( 'jquery-ui-core', '/wp-includes/js/jquery/ui.core.js', array('jquery'), '1.5.2' );
     119        $scripts->add_data( 'jquery-ui-core', 'group', 1 );
     120
     121        $scripts->add( 'jquery-ui-tabs', '/wp-includes/js/jquery/ui.tabs.js', array('jquery-ui-core'), '1.5.2' );
     122        $scripts->add_data( 'jquery-ui-tabs', 'group', 1 );
     123
     124        $scripts->add( 'jquery-ui-sortable', '/wp-includes/js/jquery/ui.sortable.js', array('jquery-ui-core'), '1.5.2c' );
     125        $scripts->add_data( 'jquery-ui-sortable', 'group', 1 );
     126
     127        $scripts->add( 'jquery-ui-draggable', '/wp-includes/js/jquery/ui.draggable.js', array('jquery-ui-core'), '1.5.2' );
     128        $scripts->add_data( 'jquery-ui-draggable', 'group', 1 );
     129
     130        $scripts->add( 'jquery-ui-resizable', '/wp-includes/js/jquery/ui.resizable.js', array('jquery-ui-core'), '1.5.2' );
     131        $scripts->add_data( 'jquery-ui-resizable', 'group', 1 );
     132
     133        $scripts->add( 'jquery-ui-dialog', '/wp-includes/js/jquery/ui.dialog.js', array('jquery-ui-resizable', 'jquery-ui-draggable'), '1.5.2' );
     134        $scripts->add_data( 'jquery-ui-dialog', 'group', 1 );
     135
    107136        $scripts->add( 'jquery-form', "/wp-includes/js/jquery/jquery.form$suffix.js", array('jquery'), '2.02m');
     137        $scripts->add_data( 'jquery-form', 'group', 1 );
     138
    108139        $scripts->add( 'jquery-color', "/wp-includes/js/jquery/jquery.color$suffix.js", array('jquery'), '2.0-4561m');
     140        $scripts->add_data( 'jquery-color', 'group', 1 );
     141
    109142        $scripts->add( 'interface', '/wp-includes/js/jquery/interface.js', array('jquery'), '1.2' );
     143
    110144        $scripts->add( 'suggest', "/wp-includes/js/jquery/suggest$suffix.js", array('jquery'), '1.1bm');
     145        $scripts->add_data( 'suggest', 'group', 1 );
     146
    111147        $scripts->add( 'schedule', '/wp-includes/js/jquery/jquery.schedule.js', array('jquery'), '20m');
     148        $scripts->add_data( 'schedule', 'group', 1 );
     149
    112150        $scripts->add( 'jquery-hotkeys', "/wp-includes/js/jquery/jquery.hotkeys$suffix.js", array('jquery'), '0.0.2m' );
     151        $scripts->add_data( 'jquery-hotkeys', 'group', 1 );
     152
    113153        $scripts->add( 'jquery-table-hotkeys', "/wp-includes/js/jquery/jquery.table-hotkeys$suffix.js", array('jquery', 'jquery-hotkeys'), '20090102' );
     154        $scripts->add_data( 'jquery-table-hotkeys', 'group', 1 );
     155
    114156        $scripts->add( 'thickbox', "/wp-includes/js/thickbox/thickbox.js", array('jquery'), '3.1-20080430m');
     157        $scripts->add_data( 'thickbox', 'group', 1 );
    115158
     159
    116160        if ( defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ) {
    117161                $scripts->add( 'swfupload', '/wp-includes/js/swfupload/swfupload.js', false, '2.2.0-20081031');
    118162                $scripts->add( 'swfupload-swfobject', '/wp-includes/js/swfupload/plugins/swfupload.swfobject.js', array('swfupload'), '2.2.0-20081031');
     
    144188                        'deleted' => __('Deleted'),
    145189                        'l10n_print_after' => 'try{convertEntities(swfuploadL10n);}catch(e){};'
    146190        ) );
    147        
     191
    148192        $scripts->add( 'swfupload-degrade', '/wp-includes/js/swfupload/plugins/swfupload.graceful_degradation.js', array('swfupload'), '2.2.0-20081031');
    149193        $scripts->localize( 'swfupload-degrade', 'uploadDegradeOptions', array(
    150194                'is_lighttpd_before_150' => is_lighttpd_before_150(),
    151195        ) );
    152196
    153         $scripts->add( 'jquery-ui-core', '/wp-includes/js/jquery/ui.core.js', array('jquery'), '1.5.2' );
    154         $scripts->add( 'jquery-ui-tabs', '/wp-includes/js/jquery/ui.tabs.js', array('jquery-ui-core'), '1.5.2' );
    155         $scripts->add( 'jquery-ui-sortable', '/wp-includes/js/jquery/ui.sortable.js', array('jquery-ui-core'), '1.5.2c' );
    156         $scripts->add( 'jquery-ui-draggable', '/wp-includes/js/jquery/ui.draggable.js', array('jquery-ui-core'), '1.5.2' );
    157         $scripts->add( 'jquery-ui-resizable', '/wp-includes/js/jquery/ui.resizable.js', array('jquery-ui-core'), '1.5.2' );
    158         $scripts->add( 'jquery-ui-dialog', '/wp-includes/js/jquery/ui.dialog.js', array('jquery-ui-resizable', 'jquery-ui-draggable'), '1.5.2' );
    159 
    160197        $scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", false, '20090102');
    161198
    162199        if ( is_admin() ) {
    163200                $scripts->add( 'ajaxcat', "/wp-admin/js/cat$suffix.js", array( 'wp-lists' ), '20090102' );
     201                $scripts->add_data( 'ajaxcat', 'group', 1 );
    164202                $scripts->localize( 'ajaxcat', 'catL10n', array(
    165203                        'add' => attribute_escape(__('Add')),
    166204                        'how' => __('Separate multiple categories with commas.'),
     
    168206                ) );
    169207
    170208                $scripts->add( 'admin-categories', "/wp-admin/js/categories$suffix.js", array('wp-lists'), '20090102' );
     209                $scripts->add_data( 'admin-categories', 'group', 1 );
    171210
    172211                $scripts->add( 'admin-tags', "/wp-admin/js/tags$suffix.js", array('wp-lists'), '20090102' );
     212                $scripts->add_data( 'admin-tags', 'group', 1 );
    173213
    174214                $scripts->add( 'admin-custom-fields', "/wp-admin/js/custom-fields$suffix.js", array('wp-lists'), '20090106' );
     215                $scripts->add_data( 'admin-custom-fields', 'group', 1 );
    175216
    176217                $scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), '20090102' );
     218                $scripts->add_data( 'password-strength-meter', 'group', 1 );
    177219                $scripts->localize( 'password-strength-meter', 'pwsL10n', array(
    178220                        'empty' => __('Strength indicator'),
    179221                        'short' => __('Very weak'),
     
    184226                ) );
    185227
    186228                $scripts->add( 'admin-comments', "/wp-admin/js/edit-comments$suffix.js", array('wp-lists', 'jquery-ui-resizable', 'quicktags'), '20090112' );
     229                $scripts->add_data( 'admin-comments', 'group', 1 );
    187230                $scripts->localize( 'admin-comments', 'adminCommentsL10n', array(
    188231                        'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']),
    189232                        'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last'])
     
    192235                $scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", false, '3517m' );
    193236
    194237                $scripts->add( 'postbox', "/wp-admin/js/postbox$suffix.js", array('jquery-ui-sortable'), '20090102' );
     238                $scripts->add_data( 'postbox', 'group', 1 );
    195239                $scripts->localize( 'postbox', 'postboxL10n', array(
    196240                        'requestFile' => admin_url('admin-ajax.php')
    197241                ) );
    198242
    199243                $scripts->add( 'slug', "/wp-admin/js/slug$suffix.js", array('jquery'), '20090102' );
     244                $scripts->add_data( 'slug', 'group', 1 );
    200245                $scripts->localize( 'slug', 'slugL10n', array(
    201246                        'requestFile' => admin_url('admin-ajax.php'),
    202247                        'save' => __('Save'),
     
    205250                ) );
    206251
    207252                $scripts->add( 'post', "/wp-admin/js/post$suffix.js", array('suggest', 'jquery-ui-tabs', 'wp-lists', 'postbox', 'slug'), '20090102' );
     253                $scripts->add_data( 'post', 'group', 1 );
    208254                $scripts->localize( 'post', 'postL10n', array(
    209255                        'tagsUsed' =>  __('Tags used on this post:'),
    210256                        'add' => attribute_escape(__('Add')),
     
    232278                ) );
    233279
    234280                $scripts->add( 'page', "/wp-admin/js/page$suffix.js", array('jquery', 'slug', 'wp-lists', 'postbox'), '20090102' );
     281                $scripts->add_data( 'page', 'group', 1 );
    235282                $scripts->localize( 'page', 'postL10n', array(
    236283                        'cancel' => __('Cancel'),
    237284                        'edit' => __('Edit'),
     
    254301                ) );
    255302
    256303                $scripts->add( 'link', "/wp-admin/js/link$suffix.js", array('jquery-ui-tabs', 'wp-lists', 'postbox'), '20090102' );
     304                $scripts->add_data( 'link', 'group', 1 );
    257305
    258306                $scripts->add( 'comment', "/wp-admin/js/comment$suffix.js", array('jquery'), '20090102' );
     307                $scripts->add_data( 'comment', 'group', 1 );
    259308                $scripts->localize( 'comment', 'commentL10n', array(
    260309                        'cancel' => __('Cancel'),
    261310                        'edit' => __('Edit'),
     
    265314                $scripts->add( 'admin-gallery', "/wp-admin/js/gallery$suffix.js", array( 'jquery-ui-sortable' ), '20090102' );
    266315
    267316                $scripts->add( 'media-upload', "/wp-admin/js/media-upload$suffix.js", array( 'thickbox' ), '20090102' );
     317                $scripts->add_data( 'media-upload', 'group', 1 );
    268318
    269319                $scripts->add( 'admin-widgets', "/wp-admin/js/widgets$suffix.js", array( 'interface' ), '20090106' );
    270320                $scripts->localize( 'admin-widgets', 'widgetsL10n', array(
     
    277327                ));
    278328
    279329                $scripts->add( 'word-count', "/wp-admin/js/word-count$suffix.js", array( 'jquery' ), '20090102' );
     330                $scripts->add_data( 'word-count', 'group', 1 );
    280331                $scripts->localize( 'word-count', 'wordCountL10n', array(
    281332                        'count' => __('Word count: %d'),
    282333                        'l10n_print_after' => 'try{convertEntities(wordCountL10n);}catch(e){};'
     
    290341                ));
    291342
    292343                $scripts->add( 'theme-preview', "/wp-admin/js/theme-preview$suffix.js", array( 'thickbox', 'jquery' ), '20090102' );
     344                $scripts->add_data( 'theme-preview', 'group', 1 );
    293345
    294                 $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery', 'jquery-form', 'suggest' ), '20090102' );
     346                $scripts->add( 'inline-edit-post', "/wp-admin/js/inline-edit-post$suffix.js", array( 'jquery-form', 'suggest' ), '20090102' );
     347                $scripts->add_data( 'inline-edit-post', 'group', 1 );
    295348                $scripts->localize( 'inline-edit-post', 'inlineEditL10n', array(
    296349                        'error' => __('Error while saving the changes.'),
    297350                        'ntdeltitle' => __('Remove From Bulk Edit'),
     
    299352                        'l10n_print_after' => 'try{convertEntities(inlineEditL10n);}catch(e){};'
    300353                ) );
    301354
    302                 $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery', 'jquery-form' ), '20090109' );
     355                $scripts->add( 'inline-edit-tax', "/wp-admin/js/inline-edit-tax$suffix.js", array( 'jquery-form' ), '20090109' );
     356                $scripts->add_data( 'inline-edit-tax', 'group', 1 );
    303357                $scripts->localize( 'inline-edit-tax', 'inlineEditL10n', array(
    304358                        'error' => __('Error while saving the changes.'),
    305359                        'l10n_print_after' => 'try{convertEntities(inlineEditL10n);}catch(e){};'
    306360                ) );
    307361
    308362                $scripts->add( 'plugin-install', "/wp-admin/js/plugin-install$suffix.js", array( 'thickbox', 'jquery' ), '20090102' );
     363                $scripts->add_data( 'plugin-install', 'group', 1 );
    309364                $scripts->localize( 'plugin-install', 'plugininstallL10n', array(
    310365                        'plugin_information' => __('Plugin Information:'),
    311366                        'l10n_print_after' => 'try{convertEntities(plugininstallL10n);}catch(e){};'
    312367                ) );
    313368
    314369                $scripts->add( 'farbtastic', '/wp-admin/js/farbtastic.js', array('jquery'), '1.2' );
     370                $scripts->add_data( 'farbtastic', 'group', 1 );
    315371
    316372                $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'jquery', 'admin-comments', 'postbox' ), '20090102' );
     373                $scripts->add_data( 'dashboard', 'group', 1 );
    317374
    318375                $scripts->add( 'hoverIntent', "/wp-includes/js/hoverIntent$suffix.js", array('jquery'), '20090102' );
     376                $scripts->add_data( 'hoverIntent', 'group', 1 );
    319377
     378                $scripts->add( 'media', "/wp-admin/js/media$suffix.js", array( 'jquery' ), '20081223' );
     379                $scripts->add_data( 'media', 'group', 1 );
     380
    320381        }
    321382}
    322383
     
    340401        // then it assigns $guess_url to wp_guess_url(). Strange format, but it works.
    341402        if ( ! $guessurl = site_url() )
    342403                $guessurl = wp_guess_url();
     404
    343405        $styles->base_url = $guessurl;
     406        $styles->content_url = WP_CONTENT_URL;
    344407        $styles->default_version = get_bloginfo( 'version' );
    345408        $styles->text_direction = 'rtl' == get_bloginfo( 'text_direction' ) ? 'rtl' : 'ltr';
     409        $styles->default_dirs = array('/wp-admin/');
    346410
    347411        $rtl_styles = array( 'global', 'colors', 'dashboard', 'ie', 'install', 'login', 'media', 'theme-editor', 'upload', 'widgets', 'press-this', 'plugin-install', 'farbtastic' );
    348412
     
    384448 * @return array Reordered array, if needed.
    385449 */
    386450function wp_prototype_before_jquery( $js_array ) {
    387         if ( false === $jquery = array_search( 'jquery', $js_array ) )
     451        if ( false === $jquery = array_search( 'jquery', $js_array, true ) )
    388452                return $js_array;
    389453
    390         if ( false === $prototype = array_search( 'prototype', $js_array ) )
     454        if ( false === $prototype = array_search( 'prototype', $js_array, true ) )
    391455                return $js_array;
    392456
    393457        if ( $prototype < $jquery )
     
    461525        return $src;
    462526}
    463527
     528/**
     529 * Print the script queue in the HTML head.
     530 *
     531 * Postpones the scripts that were queued for the footer.
     532 * wp_print_footer_scripts() has to be called in the footer to print these scripts.
     533 *
     534 * @since unknown
     535 * @see wp_print_scripts()
     536 */
     537function wp_print_head_scripts() {
     538        do_action( 'wp_print_scripts' );
     539        global $wp_scripts, $concatenate_scripts, $compress_scripts;
     540
     541        if ( !is_a($wp_scripts, 'WP_Scripts') )
     542                $wp_scripts = new WP_Scripts();
     543
     544        if ( ! isset($concatenate_scripts) )
     545                script_concat_settings();
     546
     547        $wp_scripts->do_concat = $concatenate_scripts;
     548        $wp_scripts->do_head_items();
     549
     550        _pring_scripts();
     551
     552        $wp_scripts->do_concat = false;
     553        return $wp_scripts->done;
     554}
     555
     556/**
     557 * Print the scripts that were queued for the footer.
     558 *
     559 * @since unknown
     560 */
     561function wp_print_footer_scripts() {
     562        global $wp_scripts, $concatenate_scripts;
     563
     564        if ( !is_a($wp_scripts, 'WP_Scripts') )
     565                return array(); // No need to run if not instantiated.
     566
     567        if ( ! isset($concatenate_scripts) )
     568                script_concat_settings();
     569
     570        $wp_scripts->do_concat = $concatenate_scripts;
     571        $wp_scripts->do_footer_items();
     572
     573        _pring_scripts();
     574
     575        $wp_scripts->do_concat = false;
     576        return $wp_scripts->done;
     577}
     578
     579function _pring_scripts() {
     580        global $wp_scripts, $compress_scripts;
     581
     582        $zip = $compress_scripts ? 1 : 0;
     583
     584        if ( !empty($wp_scripts->concat) ) {
     585
     586                if ( !empty($wp_scripts->print_code) ) {
     587                        echo "<script type='text/javascript'>\n";
     588                        echo "/* <![CDATA[ */\n";
     589                        echo $wp_scripts->print_code;
     590                        echo "/* ]]> */\n";
     591                        echo "</script>\n";
     592                        $wp_scripts->print_code = '';
     593                }
     594
     595                $ver = md5($wp_scripts->concat_version);
     596                $src = $wp_scripts->base_url . "/wp-admin/load-scripts.php?c={$zip}&load=" . rtrim($wp_scripts->concat, ',') . "&ver=$ver";
     597                echo "<script type='text/javascript' src='$src'></script>\n";
     598                $wp_scripts->concat = $wp_scripts->concat_version = '';
     599        }
     600
     601        if ( !empty($wp_scripts->print_html) ) {
     602                echo $wp_scripts->print_html;
     603                $wp_scripts->print_html = '';
     604        }
     605}
     606
     607function wp_print_admin_styles() {
     608        global $wp_styles, $concatenate_scripts, $compress_scripts;
     609
     610        if ( !is_a($wp_styles, 'WP_Styles') )
     611                $wp_styles = new WP_Styles();
     612
     613        if ( ! isset($concatenate_scripts) )
     614                script_concat_settings();
     615
     616        $wp_styles->do_concat = $concatenate_scripts;
     617        $zip = $compress_scripts ? 1 : 0;
     618
     619        $wp_styles->do_items(false);
     620
     621        if ( !empty($wp_styles->concat) ) {
     622                $ver = md5($wp_styles->concat_version);
     623                $rtl = 'rtl' === $wp_styles->text_direction ? 1 : 0;
     624                $href = $wp_styles->base_url . "/wp-admin/load-styles.php?c={$zip}&rtl={$rtl}&load=" . rtrim($wp_styles->concat, ',') . "&ver=$ver";
     625                echo "<link rel='stylesheet' href='$href' type='text/css' media='all' />\n";
     626                $wp_styles->concat = $wp_styles->concat_version = '';
     627        }
     628
     629        if ( !empty($wp_styles->print_html) ) {
     630                echo $wp_styles->print_html;
     631                $wp_styles->print_html = '';
     632        }
     633
     634        $wp_styles->do_concat = false;
     635        return $wp_styles->done;
     636}
     637
     638function script_concat_settings() {
     639        global $concatenate_scripts, $compress_scripts;
     640
     641        $concatenate_scripts = defined('CONCATENATE_SCRIPTS') ? CONCATENATE_SCRIPTS : true;
     642        if ( $concatenate_scripts && -1 == get_option('concatenate_scripts') )
     643                $concatenate_scripts = false;
     644
     645        $compress_scripts = defined('COMPRESS_SCRIPTS') ? COMPRESS_SCRIPTS : true;
     646        if ( $compress_scripts && ! get_option('can_compress_scripts') )
     647                $compress_scripts = false;
     648}
     649
    464650add_action( 'wp_default_scripts', 'wp_default_scripts' );
    465651add_filter( 'wp_print_scripts', 'wp_just_in_time_script_localization' );
    466652add_filter( 'print_scripts_array', 'wp_prototype_before_jquery' );