WordPress.org

Make WordPress Core

Ticket #8628: 8628-2.patch

File 8628-2.patch, 7.8 KB (added by azaozz, 9 years ago)
  • wp-admin/admin-footer.php

     
    2323<div class="clear"></div>
    2424</div>
    2525<?php do_action('admin_footer', ''); ?>
     26<?php do_action('admin_print_footer_scripts'); ?>
    2627<script type="text/javascript">if(typeof wpOnload=='function')wpOnload();</script>
    2728</body>
    2829</html>
     30 No newline at end of file
  • wp-includes/class.wp-dependencies.php

     
    3838         * @param mixed handles (optional) items to be processed.  (void) processes queue, (string) process that item, (array of strings) process those items
    3939         * @return array Items that have been processed
    4040         */
    41         function do_items( $handles = false ) {
     41        function do_items( $handles = false, $sort = false ) {
    4242                // Print the queue if nothing is passed.  If a string is passed, print that script.  If an array is passed, print those scripts.
    4343                $handles = false === $handles ? $this->queue : (array) $handles;
    4444                $this->all_deps( $handles );
    4545
    46                 foreach( $this->to_do as $handle ) {
     46                foreach( $this->to_do as $key => $handle ) {
    4747                        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 );
     48
     49                                if ( ! $this->registered[$handle]->src ) { // Defines a group.
     50                                        $this->done[] = $handle;
     51                                        continue;
    5052                                }
    51                                 $this->done[] = $handle;
     53
     54                                if ( $this->do_item( $handle, $sort ) )
     55                                        $this->done[] = $handle;
     56
     57                                unset( $this->to_do[$key] );
    5258                        }
    5359                }
    5460
    55                 $this->to_do = array();
    5661                return $this->done;
    5762        }
    5863
     
    7479                        return false;
    7580
    7681                foreach ( $handles as $handle ) {
    77                         $handle = explode('?', $handle);
    78                         if ( isset($handle[1]) )
    79                                 $this->args[$handle[0]] = $handle[1];
    80                         $handle = $handle[0];
     82                        $handle_parts = explode('?', $handle);
     83                        $handle = $handle_parts[0];
    8184
    82                         if ( isset($this->to_do[$handle]) ) // Already grobbed it and its deps
     85                        if ( isset($this->to_do[$handle]) || in_array($handle, $this->done) ) // Already grobbed it and its deps
    8386                                continue;
    8487
     88                        if ( isset($handle_parts[1]) )
     89                                $this->args[$handle] = $handle_parts[1];
     90
    8591                        $keep_going = true;
    8692                        if ( !isset($this->registered[$handle]) )
    8793                                $keep_going = false; // Script doesn't exist
     
    102108
    103109                if ( !$recursion ) // at the end
    104110                        $this->to_do = array_keys( $this->to_do );
     111
    105112                return true;
    106113        }
    107114
  • wp-includes/class.wp-scripts.php

     
    1919class WP_Scripts extends WP_Dependencies {
    2020        var $base_url; // Full URL with trailing slash
    2121        var $default_version;
     22        var $in_footer = array();
    2223
    2324        function __construct() {
    2425                do_action_ref_array( 'wp_default_scripts', array(&$this) );
     
    6263                return true;
    6364        }
    6465
    65         function do_item( $handle ) {
     66        function do_item( $handle, $sort = false ) {
    6667                if ( !parent::do_item($handle) )
    6768                        return false;
    6869
     70                if ( isset($this->registered[$handle]->extra['in_footer']) && $sort ) {
     71                        $this->in_footer[] = $handle;
     72                        return false;
     73                }
     74
    6975                $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version;
    7076                if ( isset($this->args[$handle]) )
    7177                        $ver .= '&amp;' . $this->args[$handle];
     
    107113                        $this->to_do = apply_filters( 'print_scripts_array', $this->to_do );
    108114                return $r;
    109115        }
     116
     117        function do_footer_items() {
     118
     119                if ( !empty($this->in_footer) ) {
     120                        foreach( $this->in_footer as $key => $handle ) {
     121                                if ( !in_array($handle, $this->done) && isset($this->registered[$handle]) ) {
     122                                        $this->do_item( $handle );
     123                                        $this->done[] = $handle;
     124                                        unset( $this->in_footer[$key] );
     125                                }
     126                        }
     127                }
     128
     129                return $this->done;
     130        }
    110131}
  • wp-includes/class.wp-styles.php

     
    3939                        $media = 'all';
    4040
    4141                $href = $this->_css_href( $this->registered[$handle]->src, $ver, $handle );
     42                $rel = isset($this->registered[$handle]->extra['alt']) && $this->registered[$handle]->extra['alt'] ? 'alternate stylesheet' : 'stylesheet';
     43                $title = isset($this->registered[$handle]->extra['title']) ? "title='" . attribute_escape( $this->registered[$handle]->extra['title'] ) . "'" : '';
    4244
    4345                $end_cond = '';
    4446                if ( isset($this->registered[$handle]->extra['conditional']) && $this->registered[$handle]->extra['conditional'] ) {
     
    4648                        $end_cond = "<![endif]-->\n";
    4749                }
    4850
    49                 echo apply_filters( 'style_loader_tag', "<link rel='stylesheet' href='$href' type='text/css' media='$media' />\n", $handle );
     51                echo apply_filters( 'style_loader_tag', "<link rel='$rel' $title href='$href' type='text/css' media='$media' />\n", $handle );
    5052                if ( 'rtl' === $this->text_direction && isset($this->registered[$handle]->extra['rtl']) && $this->registered[$handle]->extra['rtl'] ) {
    5153                        if ( is_bool( $this->registered[$handle]->extra['rtl'] ) )
    5254                                $rtl_href = str_replace( '.css', '-rtl.css', $href );
    5355                        else
    5456                                $rtl_href = $this->_css_href( $this->registered[$handle]->extra['rtl'], $ver, "$handle-rtl" );
    5557
    56                         echo apply_filters( 'style_loader_tag', "<link rel='stylesheet' href='$rtl_href' type='text/css' media='$media' />\n", $handle );
     58                        echo apply_filters( 'style_loader_tag', "<link rel='$rel' $title href='$rtl_href' type='text/css' media='$media' />\n", $handle );
    5759                }
    5860
    5961                echo $end_cond;
  • 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);
     184add_action('admin_print_scripts', 'wp_print_head_scripts', 20);
     185add_action('admin_print_footer_scripts', 'wp_print_footer_scripts', 20);
    185186add_action('admin_print_styles', 'wp_print_styles', 20);
    186187add_action('init', 'smilies_init', 5);
    187188add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 );
  • wp-includes/functions.wp-scripts.php

     
    1818 * @since r16
    1919 * @see WP_Scripts::print_scripts()
    2020 */
    21 function wp_print_scripts( $handles = false ) {
     21function wp_print_scripts( $handles = false, $in_head = false ) {
    2222        do_action( 'wp_print_scripts' );
    2323        if ( '' === $handles ) // for wp_head
    2424                $handles = false;
     
    3131                        $wp_scripts = new WP_Scripts();
    3232        }
    3333
    34         return $wp_scripts->do_items( $handles );
     34        return $wp_scripts->do_items( $handles, $in_head );
    3535}
    3636
    3737/**
     38 * Print the script queue in the HTML head, postponing the scripts that need to be in the footer.
     39 *
     40 * @since unknown
     41 * @see wp_print_scripts()
     42 */
     43function wp_print_head_scripts() {
     44        return wp_print_scripts( false, true );
     45}
     46
     47/**
     48 * Print the scripts that were queued for the footer.
     49 *
     50 * @since unknown
     51 * @see WP_Scripts::do_footer_items()
     52 */
     53function wp_print_footer_scripts() {
     54        global $wp_scripts;
     55
     56        if ( !is_a($wp_scripts, 'WP_Scripts') )
     57                return array(); // No need to run if not instantiated.
     58
     59        return $wp_scripts->do_footer_items();
     60}
     61
     62/**
    3863 * Register new JavaScript file.
    3964 *
    4065 * @since r16