WordPress.org

Make WordPress Core

Ticket #28951: 28951.diff

File 28951.diff, 3.0 KB (added by knutsp, 6 years ago)

Keep the caption shortcode class attribute in TinyMCE

  • plugin.js

     
    44
    55        function parseShortcode( content ) {
    66                return content.replace( /(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function( a, b, c ) {
    7                         var id, cls, w, cap, img, width,
     7                        var id, aln, cls, w, cap, img, width,
    88                                trim = tinymce.trim;
    99
    1010                        id = b.match( /id=['"]([^'"]*)['"] ?/ );
     
    1212                                b = b.replace( id[0], '' );
    1313                        }
    1414
    15                         cls = b.match( /align=['"]([^'"]*)['"] ?/ );
     15                        aln = b.match( /align=['"]([^'"]*)['"] ?/ );
     16                        if ( aln ) {
     17                                b = b.replace( aln[0], '' );
     18                        }
     19
     20                        cls = b.match( /class=['"]([^'"]*)['"] ?/ );
    1621                        if ( cls ) {
    1722                                b = b.replace( cls[0], '' );
    1823                        }
     
    3540                        }
    3641
    3742                        id = ( id && id[1] ) ? id[1] : '';
    38                         cls = ( cls && cls[1] ) ? cls[1] : 'alignnone';
     43                        aln = ( aln && aln[1] ) ? aln[1] : 'alignnone';
     44                        cls = ( cls && cls[1] ) ? ' '+ cls[1] : '';
    3945
    4046                        if ( ! w && img ) {
    4147                                w = img.match( /width=['"]([0-9]*)['"]/ );
     
    5460                                width += 10;
    5561                        }
    5662
    57                         return '<div class="mceTemp"><dl id="'+ id +'" class="wp-caption '+ cls +'" style="width: '+ width +'px">' +
     63                        return '<div class="mceTemp"><dl id="'+ id +'" class="wp-caption '+ aln + cls +'" style="width: '+ width +'px">' +
    5864                                '<dt class="wp-caption-dt">'+ img +'</dt><dd class="wp-caption-dd">'+ cap +'</dd></dl></div>';
    5965                });
    6066        }
     
    7682                        }
    7783
    7884                        out = b.replace( /<dl ([^>]+)>\s*<dt [^>]+>([\s\S]+?)<\/dt>\s*<dd [^>]+>([\s\S]*?)<\/dd>\s*<\/dl>/gi, function( a, b, c, cap ) {
    79                                 var id, cls, w;
     85                                var id, cls, aln, w;
    8086
    8187                                w = c.match( /width="([0-9]*)"/ );
    8288                                w = ( w && w[1] ) ? w[1] : '';
     
    9096
    9197                                cls = b.match( /class="([^"]*)"/ );
    9298                                cls = ( cls && cls[1] ) ? cls[1] : '';
    93                                 cls = cls.match( /align[a-z]+/ ) || 'alignnone';
    9499
     100                                aln = cls.match( /align[a-z]+/ ) || 'alignnone';
     101                                cls = cls.replace( 'wp-caption '+ cls.match( /align[a-z]+/ ) +' ', '' );
     102
    95103                                cap = cap.replace( /\r\n|\r/g, '\n' ).replace( /<[a-zA-Z0-9]+( [^<>]+)?>/g, function( a ) {
    96104                                        // no line breaks inside HTML tags
    97105                                        return a.replace( /[\r\n\t]+/, ' ' );
     
    100108                                // convert remaining line breaks to <br>
    101109                                cap = cap.replace( /\s*\n\s*/g, '<br />' );
    102110
    103                                 return '[caption id="'+ id +'" align="'+ cls +'" width="'+ w +'"]'+ c +' '+ cap +'[/caption]';
     111                                return '[caption id="'+ id +'" align="'+ aln +'" width="'+ w +'" class="'+ cls +'"]'+ c +' '+ cap +'[/caption]';
    104112                        });
    105113
    106114                        if ( out.indexOf('[caption') !== 0 ) {
     
    287295                if ( imageData.caption ) {
    288296
    289297                        id = imageData.attachment_id ? 'attachment_' + imageData.attachment_id : null;
    290                         className = 'wp-caption align' + ( imageData.align || 'none' );
     298                        className = 'wp-caption align' + ( imageData.align || 'none' + ' ' + imageData.cls );
    291299
    292300                        if ( ! editor.getParam( 'wpeditimage_html5_captions' ) ) {
    293301                                width = parseInt( width, 10 );