WordPress.org

Make WordPress Core

Ticket #16024: 16024.8.diff

File 16024.8.diff, 5.4 KB (added by valendesigns, 5 years ago)
  • src/wp-includes/class.wp-scripts.php

    diff --git src/wp-includes/class.wp-scripts.php src/wp-includes/class.wp-scripts.php
    index fbb8b22..979bd4b 100644
    class WP_Scripts extends WP_Dependencies { 
    9595                if ( false === $group && in_array($handle, $this->in_footer, true) )
    9696                        $this->in_footer = array_diff( $this->in_footer, (array) $handle );
    9797
    98                 if ( null === $this->registered[$handle]->ver )
     98                $obj = $this->registered[$handle];
     99
     100                if ( null === $obj->ver )
    99101                        $ver = '';
    100102                else
    101                         $ver = $this->registered[$handle]->ver ? $this->registered[$handle]->ver : $this->default_version;
     103                        $ver = $obj->ver ? $obj->ver : $this->default_version;
    102104
    103105                if ( isset($this->args[$handle]) )
    104106                        $ver = $ver ? $ver . '&' . $this->args[$handle] : $this->args[$handle];
    105107
    106                 $src = $this->registered[$handle]->src;
     108                $src = $obj->src;
     109                $cond_before = $cond_after = '';
     110                $conditional = isset( $obj->extra['conditional'] ) ? $obj->extra['conditional'] : '';
     111
     112                if ( $conditional ) {
     113                        $cond_before = "<!--[if {$conditional}]>\n";
     114                        $cond_after = "<![endif]-->\n";
     115                }
    107116
    108117                if ( $this->do_concat ) {
    109118                        /**
    class WP_Scripts extends WP_Dependencies { 
    115124                         * @param string $handle Script handle.
    116125                         */
    117126                        $srce = apply_filters( 'script_loader_src', $src, $handle );
    118                         if ( $this->in_default_dir($srce) ) {
     127                        if ( $this->in_default_dir( $srce ) && ! $conditional ) {
    119128                                $this->print_code .= $this->print_extra_script( $handle, false );
    120129                                $this->concat .= "$handle,";
    121130                                $this->concat_version .= "$handle$ver";
    class WP_Scripts extends WP_Dependencies { 
    126135                        }
    127136                }
    128137
     138                $has_extra = $conditional && $this->get_data( $handle, 'data' );
     139
     140                if ( $has_extra )
     141                        echo $cond_before;
     142               
    129143                $this->print_extra_script( $handle );
     144               
     145                if ( $has_extra )
     146                        echo $cond_after;
     147
    130148                if ( !preg_match('|^(https?:)?//|', $src) && ! ( $this->content_url && 0 === strpos($src, $this->content_url) ) ) {
    131149                        $src = $this->base_url . $src;
    132150                }
    class WP_Scripts extends WP_Dependencies { 
    140158                if ( ! $src )
    141159                        return true;
    142160
    143                 $tag = "<script type='text/javascript' src='$src'></script>\n";
     161                $tag = "{$cond_before}<script type='text/javascript' src='$src'></script>\n{$cond_after}";
    144162
    145163                /**
    146164                 * Filter the HTML script tag of an enqueued script.
  • src/wp-includes/functions.wp-scripts.php

    diff --git src/wp-includes/functions.wp-scripts.php src/wp-includes/functions.wp-scripts.php
    index 6eb7a44..1a77df8 100644
    function wp_script_is( $handle, $list = 'enqueued' ) { 
    258258
    259259        return (bool) $wp_scripts->query( $handle, $list );
    260260}
     261
     262
     263/**
     264 * Add metadata to a script.
     265 *
     266 * Works only if the script has already been added.
     267 *
     268 * Possible values for $key and $value:
     269 * 'conditional' string Comments for IE 6, lte IE 7, etc.
     270 *
     271 * @see WP_Dependency::add_data()
     272 *
     273 * @since 4.2.0
     274 *
     275 * @param string $handle Name of the script.
     276 * @param string $key    Name of data point for which we're storing a value.
     277 * @param mixed  $value  String containing the data to be added.
     278 * @return bool True on success, false on failure.
     279 */
     280function wp_script_add_data( $handle, $key, $value ){
     281        global $wp_scripts;
     282        return $wp_scripts->add_data( $handle, $key, $value );
     283}
  • tests/phpunit/tests/dependencies/scripts.php

    diff --git tests/phpunit/tests/dependencies/scripts.php tests/phpunit/tests/dependencies/scripts.php
    index 3f4e724..445d9dc 100644
    class Tests_Dependencies_Scripts extends WP_UnitTestCase { 
    8484                // Cleanup
    8585                $wp_scripts->base_url = $base_url_backup;
    8686        }
     87
     88        /**
     89         * Testing add data & conditional
     90         * @ticket 16024
     91         */
     92        function test_wp_script_add_data() {
     93                // Enqueue & add data
     94                wp_enqueue_script( 'test-only-data', 'example.com', array(), null );
     95                wp_script_add_data( 'test-only-data', 'data', 'testing' );
     96                $expected = "<script type='text/javascript'>\n/* <![CDATA[ */\ntesting\n/* ]]> */\n</script>\n";
     97                $expected.= "<script type='text/javascript' src='http://example.com'></script>\n";
     98
     99                // Enqueue & add conditional comments
     100                wp_enqueue_script( 'test-only-conditional', 'example.com', array(), null );
     101                wp_script_add_data( 'test-only-conditional', 'conditional', 'gt IE 7' );
     102                $expected.= "<!--[if gt IE 7]>\n<script type='text/javascript' src='http://example.com'></script>\n<![endif]-->\n";
     103
     104                // Enqueue & add data plus conditional comments for both
     105                wp_enqueue_script( 'test-conditional-with-data', 'example.com', array(), null );
     106                wp_script_add_data( 'test-conditional-with-data', 'data', 'testing' );
     107                wp_script_add_data( 'test-conditional-with-data', 'conditional', 'lt IE 9' );
     108                $expected.= "<!--[if lt IE 9]>\n<script type='text/javascript'>\n/* <![CDATA[ */\ntesting\n/* ]]> */\n</script>\n<![endif]-->\n";
     109                $expected.= "<!--[if lt IE 9]>\n<script type='text/javascript' src='http://example.com'></script>\n<![endif]-->\n";
     110
     111                // Enqueue & add an invalid key for brevity
     112                wp_enqueue_script( 'test-invalid', 'example.com', array(), null );
     113                wp_script_add_data( 'test-invalid', 'invalid', 'testing' );
     114                $expected.= "<script type='text/javascript' src='http://example.com'></script>\n";
     115
     116                // Go!
     117                $this->assertEquals( $expected, get_echo( 'wp_print_scripts' ) );
     118
     119                // No scripts left to print
     120                $this->assertEquals( '', get_echo( 'wp_print_scripts' ) );
     121        }
    87122}