WordPress.org

Make WordPress Core

Ticket #8628: 8628-2.patch

File 8628-2.patch, 7.8 KB (added by azaozz, 5 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