WordPress.org

Make WordPress Core

Ticket #18311: 18311-6.patch

File 18311-6.patch, 9.5 KB (added by azaozz, 2 years ago)
  • wp-admin/includes/media.php

     
    145145 
    146146        $caption = str_replace( array("\r\n", "\r"), "\n", $caption); 
    147147        $caption = preg_replace_callback( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/', '_cleanup_image_add_caption', $caption ); 
    148         $caption = preg_replace( '/\n+/', '<br />', str_replace('"', '&quot;', $caption) ); 
     148        // convert any remaining line breaks to <br> 
     149        $caption = preg_replace( '/[ \n\t]*\n[ \t]*/', '<br />', $caption ); 
    149150 
    150151        $html = preg_replace( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/', '$1', $html ); 
    151152        if ( empty($align) ) 
    152153                $align = 'none'; 
    153154 
    154         $shcode = '[caption id="' . $id . '" align="align' . $align 
    155         . '" width="' . $width . '" caption="' . $caption . '"]' . $html . '[/caption]'; 
     155        $shcode = '[caption id="' . $id . '" align="align' . $align     . '" width="' . $width . '"]' . $html . ' ' . $caption . '[/caption]'; 
    156156 
    157157        return apply_filters( 'image_add_caption_shortcode', $shcode, $html ); 
    158158} 
     
    166166 */ 
    167167function _cleanup_image_add_caption( $matches ) { 
    168168        // remove any line breaks from inside the tags 
    169         $s = preg_replace( '/[\r\n\t]+/', ' ', $matches[0] ); 
    170         // look for single quotes inside html attributes (for example in title) 
    171         $s = preg_replace_callback( '/="[^"]+"/', '_cleanup_image_add_caption_callback', $s ); 
    172         return str_replace( '"', "'", $s ); 
     169        return preg_replace( '/[\r\n\t]+/', ' ', $matches[0] ); 
    173170} 
    174171 
    175172/** 
    176  * Private preg_replace callback used in _cleanup_image_add_caption() 
    177  * 
    178  * @access private 
    179  * @since 3.4.0 
    180  */ 
    181 function _cleanup_image_add_caption_callback( $matches ) { 
    182         return str_replace( "'", '&#39;', $matches[0] ); 
    183 } 
    184  
    185 /** 
    186173 * {@internal Missing Short Description}} 
    187174 * 
    188175 * @since 2.5.0 
     
    15411528                if ( f.caption.value ) { 
    15421529                        caption = f.caption.value.replace(/\r\n|\r/g, '\n'); 
    15431530                        caption = caption.replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ 
    1544                                 a = a.replace(/[\r\n\t]+/, ' ').replace(/="[^"]+"/, function(b){ 
    1545                                         return b.replace(/'/g, '&#39;'); 
    1546                                 }); 
    1547                                 return a.replace(/"/g, "'"); 
     1531                                return a.replace(/[\r\n\t]+/, ' '); 
    15481532                        }); 
    15491533 
    1550                         caption = caption.replace(/\n+/g, '<br />').replace(/"/g, '&quot;'); 
     1534                        caption = caption.replace(/\s*\n\s*/g, '<br />'); 
    15511535                } 
    15521536<?php } ?> 
    15531537 
     
    15611545                } 
    15621546 
    15631547                if ( caption ) 
    1564                         html = '[caption id="" align="'+t.align+'" width="'+t.width+'" caption="'+caption+'"]'+html+'[/caption]'; 
     1548                        html = '[caption id="" align="'+t.align+'" width="'+t.width+'"]'+html+caption+'[/caption]'; 
    15651549 
    15661550                var win = window.dialogArguments || opener || parent || top; 
    15671551                win.send_to_editor(html); 
  • wp-admin/js/editor.dev.js

     
    7373                        }); 
    7474                } 
    7575 
    76                 // keep <br> tags inside captions 
     76                // keep <br> tags inside captions and remove line breaks 
    7777                if ( content.indexOf('[caption') != -1 ) { 
    7878                        preserve_br = true; 
    79                         content = content.replace(/\[caption[^\]]+\]/g, function(a) { 
    80                                 return a.replace(/<br([^>]*)>[\r\n]*/g, '<wp-temp-br$1>'); 
     79                        content = content.replace(/\[caption[\s\S]+?\[\/caption\]/g, function(a) { 
     80                                return a.replace(/<br([^>]*)>/g, '<wp-temp-br$1>').replace(/[\r\n\t]+/, ''); 
    8181                        }); 
    8282                } 
    8383 
     
    139139        }, 
    140140 
    141141        _wp_Autop : function(pee) { 
    142                 var blocklist = 'table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary'; 
     142                var preserve_linebreaks = false, preserve_br = false, 
     143                        blocklist = 'table|thead|tfoot|tbody|tr|td|th|caption|col|colgroup|div|dl|dd|dt|ul|ol|li|pre|select|form|blockquote|address|math|p|h[1-6]|fieldset|legend|hr|noscript|menu|samp|header|footer|article|section|hgroup|nav|aside|details|summary'; 
    143144 
    144145                if ( pee.indexOf('<object') != -1 ) { 
    145146                        pee = pee.replace(/<object[\s\S]+?<\/object>/g, function(a){ 
     
    153154 
    154155                // Protect pre|script tags 
    155156                if ( pee.indexOf('<pre') != -1 || pee.indexOf('<script') != -1 ) { 
     157                        preserve_linebreaks = true; 
    156158                        pee = pee.replace(/<(pre|script)[^>]*>[\s\S]+?<\/\1>/g, function(a) { 
    157                                 return a.replace(/(\r\n|\n)/g, '<wp_temp_br>'); 
     159                                return a.replace(/(\r\n|\n)/g, '<wp-temp-lb>'); 
    158160                        }); 
    159161                } 
    160162 
     163                // keep <br> tags inside captions and convert line breaks 
     164                if ( pee.indexOf('[caption') != -1 ) { 
     165                        preserve_br = true; 
     166                        pee = pee.replace(/\[caption[\s\S]+?\[\/caption\]/g, function(a) { 
     167                                // keep existing <br> 
     168                                a = a.replace(/<br([^>]*)>/g, '<wp-temp-br$1>'); 
     169                                // no line breaks inside HTML tags 
     170                                a = a.replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(b){ 
     171                                        return b.replace(/[\r\n\t]+/, ' '); 
     172                                }); 
     173                                // convert remaining line breaks to <br> 
     174                                return a.replace(/\s*\n\s*/g, '<wp-temp-br />'); 
     175                        }); 
     176                } 
     177 
    161178                pee = pee + '\n\n'; 
    162179                pee = pee.replace(/<br \/>\s*<br \/>/gi, '\n\n'); 
    163180                pee = pee.replace(new RegExp('(<(?:'+blocklist+')(?: [^>]*)?>)', 'gi'), '\n$1'); 
     
    186203                }); 
    187204 
    188205                // put back the line breaks in pre|script 
    189                 pee = pee.replace(/<wp_temp_br>/g, '\n'); 
     206                if ( preserve_linebreaks ) 
     207                        pee = pee.replace(/<wp-temp-lb>/g, '\n'); 
    190208 
     209                if ( preserve_br ) 
     210                        pee = pee.replace(/<wp-temp-br([^>]*)>/g, '<br$1>'); 
     211 
    191212                return pee; 
    192213        }, 
    193214 
  • wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin_src.js

     
    139139 
    140140                _do_shcode : function(content) { 
    141141                        return content.replace(/(?:<p>)?\[(?:wp_)?caption([^\]]+)\]([\s\S]+?)\[\/(?:wp_)?caption\](?:<\/p>)?/g, function(a,b,c){ 
    142                                 var id, cls, w, cap, div_cls; 
     142                                var id, cls, w, cap, div_cls, img, trim = tinymce.trim; 
    143143 
    144144                                id = b.match(/id=['"]([^'"]*)['"] ?/); 
    145145                                b = b.replace(id[0], ''); 
     
    150150                                w = b.match(/width=['"]([0-9]*)['"] ?/); 
    151151                                b = b.replace(w[0], ''); 
    152152 
    153                                 cap = tinymce.trim(b).replace(/caption=['"]/, '').replace(/['"]$/, ''); 
     153                                c = tinymce.trim(c); 
     154                                img = c.match(/((?:<a [^>]+>)?<img [^>]+>(?:<\/a>)?)([\s\S]*)/i); 
    154155 
     156                                if ( img && img[2] ) { 
     157                                        cap = trim( img[2] ); 
     158                                        img = trim( img[1] ); 
     159                                } else { 
     160                                        // old captions shortcode style 
     161                                        cap = trim(b).replace(/caption=['"]/, '').replace(/['"]$/, ''); 
     162                                        img = c; 
     163                                } 
     164 
    155165                                id = ( id && id[1] ) ? id[1] : ''; 
    156166                                cls = ( cls && cls[1] ) ? cls[1] : 'alignnone'; 
    157167                                w = ( w && w[1] ) ? w[1] : ''; 
     
    164174                                        div_cls += ' mceIEcenter'; 
    165175 
    166176                                return '<div class="'+div_cls+'"><dl id="'+id+'" class="wp-caption '+cls+'" style="width: '+( 10 + parseInt(w) )+ 
    167                                 'px"><dt class="wp-caption-dt">'+c+'</dt><dd class="wp-caption-dd">'+cap+'</dd></dl></div>'; 
     177                                'px"><dt class="wp-caption-dt">'+img+'</dt><dd class="wp-caption-dd">'+cap+'</dd></dl></div>'; 
    168178                        }); 
    169179                }, 
    170180 
     
    187197                                        cls = cls.match(/align[a-z]+/) || 'alignnone'; 
    188198 
    189199                                        cap = cap.replace(/\r\n|\r/g, '\n').replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ 
    190                                                 a = a.replace(/[\r\n\t]+/, ' ').replace(/="[^"]+"/, function(b){ 
    191                                                         return b.replace(/'/g, '&#39;'); 
    192                                                 }); 
    193                                                 return a.replace(/"/g, "'"); 
     200                                                // no line breaks inside HTML tags 
     201                                                return a.replace(/[\r\n\t]+/, ' '); 
    194202                                        }); 
    195203 
    196                                         cap = cap.replace(/\n+/g, '<br />').replace(/"/g, '&quot;'); 
     204                                        // convert remaining line breaks to <br> 
     205                                        cap = cap.replace(/\s*\n\s*/g, '<br />'); 
    197206 
    198                                         return '[caption id="'+id+'" align="'+cls+'" width="'+w+'" caption="'+cap+'"]'+c+'[/caption]'; 
     207                                        return '[caption id="'+id+'" align="'+cls+'" width="'+w+'"]'+c+' '+cap+'[/caption]'; 
    199208                                }); 
    200209 
    201210                                if ( ret.indexOf('[caption') !== 0 ) { 
  • wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.dev.js

     
    419419                        caption = f.img_cap_text.value; 
    420420 
    421421                        caption = caption.replace(/\r\n|\r/g, '\n').replace(/<[a-zA-Z0-9]+( [^<>]+)?>/g, function(a){ 
    422                                 a = a.replace(/[\r\n\t]+/, ' ').replace(/="[^"]+"/, function(b){ 
    423                                         return b.replace(/'/g, '&#39;'); 
    424                                 }); 
    425                                 return a.replace(/"/g, "'"); 
     422                                return a.replace(/[\r\n\t]+/, ' '); 
    426423                        }); 
    427424 
    428                         caption = caption.replace(/\n+/g, '<br />').replace(/"/g, '&quot;'); 
     425                        caption = caption.replace(/\s*\n\s*/g, '<br />'); 
    429426 
    430427                        if ( DL ) { 
    431428                                ed.dom.setAttribs(DL, { 
  • wp-includes/media.php

     
    724724 * @return string 
    725725 */ 
    726726function img_caption_shortcode($attr, $content = null) { 
     727        // New-style shortcode with the caption inside the shortcode with the link and image tags. 
     728        if ( ! isset( $attr['caption'] ) ) { 
     729                preg_match( '#(<a\s.*?<img\s.*?</a>)(.*)#is', $content, $matches ) || preg_match( '#(<img\s.*?>)(.*)#is', $content, $matches ); 
     730                if ( $matches ) { 
     731                        $content = $matches[1]; 
     732                        $attr['caption'] = trim( $matches[2] ); 
     733                } 
     734        } 
    727735 
    728736        // Allow plugins/themes to override the default caption template. 
    729737        $output = apply_filters('img_caption_shortcode', '', $attr, $content);