WordPress.org

Make WordPress Core

Ticket #35216: 35216.diff

File 35216.diff, 3.1 KB (added by talldanwp, 17 months ago)
  • src/js/_enqueues/wp/shortcode.js

     
    7777                                // Create the match object and pass it through the callback.
    7878                                var result = callback( wp.shortcode.fromMatch( arguments ) );
    7979
    80                                 // Make sure to return any of the extra brackets if they
    81                                 // weren't used to escape the shortcode.
    82                                 return result ? left + result + right : match;
     80                                // Matches the `do_shortcode` implementation in php.
     81                                if ( _.isString( result ) || _.isNumber( result ) || result ) {
     82                                        return left + result + right;
     83                                } else {
     84                                        return left + right;
     85                                }
    8386                        });
    8487                },
    8588
  • tests/qunit/wp-includes/js/shortcode.js

     
    164164                equal( result, 'this has the [foo] shortcode', 'stub not replaced' );
    165165        });
    166166
     167        test( 'replace() replaces the shortcode with `0` when the callback returns `0`', function() {
     168                var result = wp.shortcode.replace( 'foo', 'this has the [foo]shortcode[/foo]', function() {
     169                        return 0;
     170                } );
     171
     172                equal( result, 'this has the 0', 'shortcode not replaced with `0`' );
     173        });
     174
     175        test( 'replace() removes the shortcode and shortcode content when the callback returns `null`', function() {
     176                var result = wp.shortcode.replace( 'foo', 'this has the [foo]shortcode[/foo]', function() {
     177                        return null;
     178                } );
     179
     180                equal( result, 'this has the ', 'shortcode and shortcode content not removed' );
     181        });
     182
     183        test( 'replace() removes the shortcode and shortcode content when the callback returns `false`', function() {
     184                var result = wp.shortcode.replace( 'foo', 'this has the [foo]shortcode[/foo]', function() {
     185                        return false;
     186                } );
     187
     188                equal( result, 'this has the ', 'shortcode and shortcode content not removed' );
     189        });
     190
     191        test( 'replace() removes the shortcode and shortcode content when the callback returns `undefined`', function() {
     192                var result = wp.shortcode.replace( 'foo', 'this has the [foo]shortcode[/foo]', function() {
     193                        return undefined;
     194                } );
     195
     196                equal( result, 'this has the ', 'shortcode and shortcode content not removed' );
     197        });
     198
     199        test( 'replace() removes the shortcode and shortcode content when the callback returns an empty string', function() {
     200                var result = wp.shortcode.replace( 'foo', 'this has the [foo]shortcode[/foo]', function() {
     201                        return '';
     202                } );
     203
     204                equal( result, 'this has the ', 'shortcode and shortcode content not removed' );
     205        });
     206
    167207    // A callback function for the replace tests
    168208        function shortcodeReplaceCallback( ) {
    169209                return 'bar';
     
    204244
    205245                deepEqual( wp.shortcode.attrs('foo "bar" \'baz\''), expected, 'attr parsed numeric attributes');
    206246        });
    207        
     247
    208248        test( 'attrs() should return mixed attributes created with single, double, and no quotes', function() {
    209249                var expected = {
    210250                        'named': { a: 'foo', b: 'bar', c: 'baz' }, 'numeric' : ['foo', 'bar', 'baz']