WordPress.org

Make WordPress Core

Ticket #16024: 16024.3.patch

File 16024.3.patch, 2.5 KB (added by ethitter, 20 months 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