WordPress.org

Make WordPress Core

Ticket #16024: 16024.3.patch

File 16024.3.patch, 2.5 KB (added by ethitter, 7 years ago)

Expand conditional comments to permit targeting browsers other than IE

  • wp-includes/class.wp-scripts.php

     
    9696
    9797                $src = $this->registered[$handle]->src;
    9898
    99                 if ( $this->do_concat ) {
     99                if ( $this->do_concat && ( !isset($this->registered[$handle]->extra['conditional']) || !$this->registered[$handle]->extra['conditional'] ) ) {
    100100                        $srce = apply_filters( 'script_loader_src', $src, $handle );
    101101                        if ( $this->in_default_dir($srce) ) {
    102102                                $this->print_code .= $this->print_extra_script( $handle, false );
     
    119119
    120120                $src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );
    121121
    122                 if ( $this->do_concat )
     122                if ( $this->do_concat && ( !isset( $this->registered[$handle]->extra['conditional'] ) || !$this->registered[$handle]->extra['conditional'] ) ) {
    123123                        $this->print_html .= "<script type='text/javascript' src='$src'></script>\n";
    124                 else
    125                         echo "<script type='text/javascript' src='$src'></script>\n";
     124                } else {
     125                        $start_cond = $end_cond = '';
    126126
     127                        if ( isset( $this->registered[$handle]->extra['conditional'] ) && $this->registered[$handle]->extra['conditional'] ) {
     128                                // By default, assume the conditional will target IE
     129                                $target_ie = true;
     130
     131                                // If an array is passed in the conditional parameter, extract conditional and browser target
     132                                if ( is_array( $this->registered[$handle]->extra['conditional'] ) ) {
     133                                        if ( isset( $this->registered[$handle]->extra['conditional']['condition'] ) ) {
     134                                                $target_ie = isset( $this->registered[$handle]->extra['conditional']['target_ie'] ) ? (bool) $this->registered[$handle]->extra['conditional']['target_ie'] : true;
     135
     136                                                $this->registered[$handle]->extra['conditional'] = $this->registered[$handle]->extra['conditional']['condition'];
     137                                        }
     138                                        else {
     139                                                $this->registered[$handle]->extra['conditional'] = '';
     140                                        }
     141                                }
     142
     143                                // Build the conditional, including the non-IE comment if necessary.
     144                                $start_cond = "<!--[if {$this->registered[$handle]->extra['conditional']}]>";
     145
     146                                if ( ! $target_ie )
     147                                        $start_cond .= '<!-->';
     148
     149                                $start_cond .= "\n";
     150
     151                                $end_cond = "<![endif]-->\n";
     152
     153                                // Fail gracefully if the user doesn't pass the right data
     154                                if ( empty( $this->registered[$handle]->extra['conditional'] ) )
     155                                        $start_cond = $end_cond = '';
     156                        }
     157
     158                        echo "{$start_cond}<script type='text/javascript' src='$src'></script>\n{$end_cond}";
     159                }
     160
    127161                return true;
    128162        }
    129163