WordPress.org

Make WordPress Core

Ticket #6812: img_captions4.patch

File img_captions4.patch, 14.2 KB (added by azaozz, 7 years ago)
  • wp-admin/js/editor.js

     
    5353        content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div'); 
    5454        content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n'); 
    5555                content = content.replace(new RegExp('\\s*\\[wp_caption([^\\[]+)\\[/wp_caption\\]\\s*', 'gi'), '\n\n[wp_caption$1[/wp_caption]\n\n'); 
     56                content = content.replace(new RegExp('wp_caption\\]\\n\\n+\\[wp_caption', 'g'), 'wp_caption]\n\n[wp_caption'); 
    5657 
    5758        var blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre'; 
    5859        content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>'); 
  • wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js

     
    127127                        }); 
    128128 
    129129                        // Add Media buttons to fullscreen 
    130             ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { 
    131                         if ( 'mceFullScreen' != cmd ) return; 
     130                        ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { 
     131                                if ( 'mceFullScreen' != cmd ) return; 
    132132                                if ( 'mce_fullscreen' != ed.id ) 
    133133                                        ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media'; 
    134                 }); 
     134                        }); 
    135135 
    136136                        // Add class "alignleft", "alignright" and "aligncenter" when selecting align for images. 
    137                         ed.onExecCommand.add(function( ed, cmd ) { 
    138                                 var n, bl, dom = ed.dom; 
     137                        ed.addCommand('JustifyLeft', function() { 
     138                                var n = ed.selection.getNode(); 
    139139 
    140                                 if ( 'JustifyCenter' == cmd ) { 
    141                                         tinymce.each(dom.select('img'), function(n) { 
    142                                                 var v = n.className; 
     140                                if ( n.nodeName != 'IMG' ) 
     141                                        ed.editorCommands.mceJustify('JustifyLeft', 'left'); 
     142                                else ed.plugins.wordpress.do_align(n, 'alignleft'); 
     143                        }); 
    143144 
    144                                                 if (v.indexOf('aligncenter') == -1) { 
    145                                                         dom.getParent(n, function(P) { 
    146                                                                 if (P && P.style && P.style.textAlign == 'center') 
    147                                                                         dom.setStyle(P, 'textAlign', ''); 
    148                                                         }); 
    149                                                 } 
    150                                         }); 
     145                        ed.addCommand('JustifyRight', function() { 
     146                                var n = ed.selection.getNode(); 
    151147 
    152                                         ed.execCommand('mceRepaint'); 
    153                                 } 
     148                                if ( n.nodeName != 'IMG' ) 
     149                                        ed.editorCommands.mceJustify('JustifyRight', 'right'); 
     150                                else ed.plugins.wordpress.do_align(n, 'alignright'); 
    154151                        }); 
    155152 
    156                         ed.onBeforeExecCommand.add(function( ed, cmd ) { 
    157                                 var n, dir, xdir, bl, dom = ed.dom; 
     153                        ed.addCommand('JustifyCenter', function() { 
     154                                var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl'); 
    158155 
    159                                 if ( ( cmd.indexOf('Justify') != -1 ) && ( n = ed.selection.getNode() ) ) { 
    160                                         if ( 'JustifyFull' == cmd || n.nodeName !== 'IMG' ) return; 
    161                                         dir = cmd.substring(7).toLowerCase(); 
    162  
    163                                         if (  ed.queryCommandState( cmd ) ) { 
    164                                                 n.className = n.className.replace(/align[^ '"]+\s?/g, ''); 
    165                                                 dom.addClass( n, "alignnone" ); 
    166                                         } else if ( 'JustifyCenter' == cmd ) { 
    167                                                 n.className = n.className.replace(/alignleft\s?|alignright\s?|alignnone\s?/g, ''); 
    168                                                 if ( dom.hasClass( n, "aligncenter" ) ) { 
    169                                                         dom.removeClass( n, "aligncenter" ); 
    170                                                         dom.addClass( n, "alignnone" ); 
    171                                                 } else 
    172                                                         dom.addClass( n, "aligncenter" ); 
    173  
    174                                         } else { 
    175                                                 n.className = n.className.replace(/align[^ '"]+\s?/g, ''); 
    176                                                 dom.addClass( n, "align"+dir ); 
    177                                         } 
    178                                 } 
     156                                if ( n.nodeName == 'IMG' && ( P || DL ) ) 
     157                                        ed.plugins.wordpress.do_align(n, 'aligncenter'); 
     158                                else ed.editorCommands.mceJustify('JustifyCenter', 'center'); 
    179159                        }); 
    180160 
    181             // Word count if script is loaded 
    182             if ( 'undefined' != typeof wpWordCount ) { 
    183                 var last = 0; 
    184                 ed.onKeyUp.add(function(ed, e) { 
    185                     if ( e.keyCode == last ) return; 
    186                     if ( 13 == e.keyCode || 8 == last || 46 == last ) wpWordCount.wc( ed.getContent({format : 'raw'}) ); 
    187                     last = e.keyCode; 
    188                 }); 
    189             }; 
     161                        // Word count if script is loaded 
     162                        if ( 'undefined' != typeof wpWordCount ) { 
     163                                var last = 0; 
     164                                ed.onKeyUp.add(function(ed, e) { 
     165                                        if ( e.keyCode == last ) return; 
     166                                        if ( 13 == e.keyCode || 8 == last || 46 == last ) wpWordCount.wc( ed.getContent({format : 'raw'}) ); 
     167                                        last = e.keyCode; 
     168                                }); 
     169                        }; 
    190170 
    191             // Add listeners to handle more break 
     171                        // Add listeners to handle more break 
    192172                        t._handleMoreBreak(ed, url); 
    193173 
    194174                        // Add custom shortcuts 
     
    227207                }, 
    228208 
    229209                // Internal functions 
     210                do_align : function(n, a) { 
     211                        var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor; 
    230212 
     213                        P = ed.dom.getParent(n, 'p'); 
     214                        DL = ed.dom.getParent(n, 'dl'); 
     215                        DIV = ed.dom.getParent(n, 'div'); 
     216 
     217                        if ( DL && DIV ) { 
     218                                cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a; 
     219                                DL.className = DL.className.replace(/align[^ '"]+\s?/g, ''); 
     220                                ed.dom.addClass(DL, cls); 
     221                                c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter'); 
     222                        } else if ( P ) { 
     223                                cls = ed.dom.hasClass(n, a) ? 'alignnone' : a; 
     224                                n.className = n.className.replace(/align[^ '"]+\s?/g, ''); 
     225                                ed.dom.addClass(n, cls); 
     226                                if ( cls == 'aligncenter' ) 
     227                                        ed.dom.setStyle(P, 'textAlign', 'center'); 
     228                                else if (P.style && P.style.textAlign == 'center') 
     229                                        ed.dom.setStyle(P, 'textAlign', ''); 
     230                        } 
     231 
     232                        ed.execCommand('mceRepaint'); 
     233                }, 
     234 
    231235                // Resizes the iframe by a relative height value 
    232236                _resizeIframe : function(ed, tb_id, dy) { 
    233237                        var ifr = ed.getContentAreaContainer().firstChild; 
  • wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js

     
    2121 
    2222                        ed.onInit.add(function(ed) { 
    2323                                tinymce.dom.Event.add(ed.getWin(), 'scroll', function(e) { 
    24                                         ed.plugins.wpeditimage.hideButtons(); 
     24                                        ed.plugins.wpeditimage.hideButtons(); 
    2525                                }); 
    2626                        }); 
    2727 
    2828                        ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) { 
    2929                                ed.plugins.wpeditimage.hideButtons(); 
    30                 }); 
     30                        }); 
    3131 
    3232                        ed.onSaveContent.add(function(ed, o) { 
    33                                 ed.plugins.wpeditimage.hideButtons(); 
     33                                ed.plugins.wpeditimage.hideButtons(); 
    3434                        }); 
    3535 
    3636                        ed.onMouseUp.add(function(ed, e) { 
     
    6363                        }); 
    6464 
    6565                        ed.onBeforeSetContent.add(function(ed, o) { 
    66                         o.content = t._do_shcode(o.content); 
    67                 }); 
     66                                o.content = t._do_shcode(o.content); 
     67                        }); 
    6868 
    6969                        ed.onPostProcess.add(function(ed, o) { 
    7070                                if (o.get) 
     
    7474 
    7575                _do_shcode : function(co) { 
    7676                        return co.replace(/\[wp_caption([^\]]+)\]([\s\S]+?)\[\/wp_caption\][\s\u00a0]*/g, function(a,b,c){ 
    77                                 var id = b.match(/id=['"]([^'"]+)/), cls = b.match(/align=['"]([^'"]+)/); 
    78                                 var w = b.match(/width=['"]([0-9]+)/), cap = b.match(/caption=['"]([^'"]+)/); 
     77                                var id = b.match(/id=['"]([^'"]+)/i), cls = b.match(/align=['"]([^'"]+)/i); 
     78                                var w = b.match(/width=['"]([0-9]+)/), cap = b.match(/caption=['"]([^'"]+)/i); 
    7979 
    8080                                id = ( id && id[1] ) ? id[1] : ''; 
    8181                                cls = ( cls && cls[1] ) ? cls[1] : 'alignnone'; 
     
    9191                }, 
    9292 
    9393                _get_shcode : function(co) { 
    94                         return co.replace(/<div class="mceTemp[^"]*">\s*<dl([^>]+)>\s*<dt[^>]+>([\s\S]+?)<\/dt>\s*<dd[^>]+>([^<]+)<\/dd>\s*<\/dl>\s*<\/div>\s*/g, function(a,b,c,cap){ 
    95                                 var id = b.match(/id=['"]([^'"]+)/), cls = b.match(/class=['"]([^'"]+)/); 
     94                        return co.replace(/<div class="mceTemp[^"]*">\s*<dl([^>]+)>\s*<dt[^>]+>([\s\S]+?)<\/dt>\s*<dd[^>]+>([^<]+)<\/dd>\s*<\/dl>\s*<\/div>\s*/gi, function(a,b,c,cap){ 
     95                                var id = b.match(/id=['"]([^'"]+)/i), cls = b.match(/class=['"]([^'"]+)/i); 
    9696                                var w = c.match(/width=['"]([0-9]+)/); 
    9797 
    9898                                id = ( id && id[1] ) ? id[1] : ''; 
     
    100100                                w = ( w && w[1] ) ? w[1] : ''; 
    101101 
    102102                                if ( ! w || ! cap ) return c; 
    103                                 cls = cls ? cls.match(/align[^ '"]+/) : ''; 
     103                                cls = cls.match(/align[^ '"]+/) || 'alignnone'; 
    104104 
    105105                                return '[wp_caption id="'+id+'" align="'+cls+'" width="'+w+'" caption="'+cap+'"]'+c+'[/wp_caption]'; 
    106106                        }); 
    107107                }, 
    108108 
    109                 _fixCenter : function(c) { 
    110                         var ed = tinyMCE.activeEditor; 
    111  
    112                         tinymce.each(ed.dom.select('img', c), function(n) { 
    113                                 if ( ed.dom.hasClass(n, 'aligncenter') ) { 
    114                                         var P = ed.dom.getParent(n, 'p'); 
    115                                         if ( tinymce.isIE ) 
    116                                                 ed.dom.addClass(P, 'mce_iecenter'); 
    117                                         if ( P.style && P.style.textAlign == 'center' ) 
    118                                                 ed.dom.setStyle(P, 'textAlign', ''); 
    119                                 } 
    120                         }); 
    121                 }, 
    122  
    123109                showButtons : function(n) { 
    124110                        var t = this, ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y; 
    125111 
     
    172158                                ed.windowManager.bookmark = ed.selection.getBookmark('simple'); 
    173159                                ed.execCommand("WP_EditImage"); 
    174160                                this.parentNode.style.display = 'none'; 
    175                         } 
     161                        }; 
    176162 
    177163                        var wp_delimgbtn = DOM.add('wp_editbtns', 'img', { 
    178164                                src : t.url+'/img/delete.png', 
     
    196182                                        ed.execCommand('mceRepaint'); 
    197183                                        return false; 
    198184                                } 
    199                         } 
     185                        }; 
    200186                }, 
    201187 
    202188                getInfo : function() { 
  • wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js

     
    260260                if ( DL = dom.getParent(el, 'dl') ) { 
    261261                        var dlc = ed.dom.getAttrib(DL, 'class'); 
    262262                        dlc = dlc.match(/align[^ "']+/i); 
    263                         if ( ! dom.hasClass(el, dlc) ) 
     263                        if ( dlc && ! dom.hasClass(el, dlc) ) 
    264264                                c += ' '+dlc; 
    265                                  
     265 
    266266                        tinymce.each(DL.childNodes, function(e) { 
    267                                 if ( e.nodeName == 'DD' ) { 
     267                                if ( e.nodeName == 'DD' && dom.hasClass(e, 'wp_caption_dd') ) { 
    268268                                        caption = e.innerHTML; 
    269269                                        return; 
    270270                                } 
     
    377377                        'class' : img_class 
    378378                }); 
    379379 
    380                 if ( ! f.link_href.value ) { 
    381                         if ( A ) { 
    382                                 b = ed.selection.getBookmark(); 
    383                                 ed.dom.remove(A, 1); 
    384                                 ed.selection.moveToBookmark(b); 
    385                         } 
    386                 } else { 
     380                if ( f.link_href.value ) { 
    387381                        // Create new anchor elements 
    388382                        if ( A == null ) { 
    389                                 if ( ! f.link_href.value.match(/https?:\/\//) ) 
     383                                if ( ! f.link_href.value.match(/https?:\/\//i) ) 
    390384                                        f.link_href.value = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.link_href.value); 
    391385 
    392386                                if ( tinymce.isWebKit && ed.dom.hasClass(el, 'aligncenter') ) { 
     
    431425                                        style : 'width: '+cap_width+'px;' 
    432426                                }); 
    433427 
    434                                 if ( DIV )  
     428                                if ( DIV ) 
    435429                                        ed.dom.setAttrib(DIV, 'class', div_cls); 
    436430 
    437431                                if ( (DT = ed.dom.getParent(el, 'dt')) && (DD = DT.nextSibling) && ed.dom.hasClass(DD, 'wp_caption_dd') ) 
    438432                                        ed.dom.setHTML(DD, f.img_alt.value); 
    439433 
    440434                        } else { 
     435                                var lnk = '', pa; 
    441436                                if ( (id = f.img_classes.value.match( /wp-image-([0-9]{1,6})/ )) && id[1] ) 
    442437                                        cap_id = 'attachment_'+id[1]; 
    443438 
    444                                 if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a')); 
    445                                 else html = ed.dom.getOuterHTML(el); 
     439                                if ( f.link_href.value && (lnk = ed.dom.getParent(el, 'a')) ) { 
     440                                        if ( lnk.childNodes.length == 1 ) 
     441                                                html = ed.dom.getOuterHTML(lnk); 
     442                                        else { 
     443                                                html = ed.dom.getOuterHTML(lnk); 
     444                                                html = html.match(/<a[^>]+>/i); 
     445                                                html = html+ed.dom.getOuterHTML(el)+'</a>'; 
     446                                        } 
     447                                } else html = ed.dom.getOuterHTML(el); 
    446448 
    447449                                html = '<dl id="'+cap_id+'" class="wp_caption '+t.align+'" style="width: '+cap_width+ 
    448450                                'px"><dt class="wp_caption_dt">'+html+'</dt><dd class="wp_caption_dd">'+f.img_alt.value+'</dd></dl>'; 
     
    451453 
    452454                                if ( P ) { 
    453455                                        P.parentNode.insertBefore(cap, P); 
    454                                         ed.dom.remove(P); 
     456                                        if ( P.childNodes.length == 1 ) 
     457                                                ed.dom.remove(P); 
     458                                        else if ( lnk && lnk.childNodes.length == 1 ) 
     459                                                ed.dom.remove(lnk); 
     460                                        else ed.dom.remove(el); 
     461                                } else if ( pa = ed.dom.getParent(el, 'TD,TH,LI') ) { 
     462                                        pa.appendChild(cap); 
     463                                        if ( lnk && lnk.childNodes.length == 1 ) 
     464                                                ed.dom.remove(lnk); 
     465                                        else ed.dom.remove(el); 
    455466                                } 
    456467                        } 
    457468 
    458                         tinyMCEPopup.execCommand("mceEndUndoLevel"); 
    459                         ed.execCommand('mceRepaint'); 
    460                         tinyMCEPopup.close(); 
    461                         return; 
    462469                } else { 
    463470                        if ( DL && DIV ) { 
    464                                 if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a')); 
     471                                var aa; 
     472                                if ( f.link_href.value && (aa = ed.dom.getParent(el, 'a')) ) html = ed.dom.getOuterHTML(aa); 
    465473                                else html = ed.dom.getOuterHTML(el); 
    466                                  
     474 
    467475                                P = ed.dom.create('p', {}, html); 
    468476                                DIV.parentNode.insertBefore(P, DIV); 
    469477                                ed.dom.remove(DIV); 
     
    478486                                ed.dom.setStyle(P, 'textAlign', ''); 
    479487                } 
    480488 
     489                if ( ! f.link_href.value && A ) { 
     490                        b = ed.selection.getBookmark(); 
     491                        ed.dom.remove(A, 1); 
     492                        ed.selection.moveToBookmark(b); 
     493                } 
     494 
    481495                tinyMCEPopup.execCommand("mceEndUndoLevel"); 
    482496                ed.execCommand('mceRepaint'); 
    483497                tinyMCEPopup.close(); 
  • wp-includes/js/tinymce/tiny_mce_config.php

     
    222222// Setup cache info 
    223223if ( $disk_cache ) { 
    224224 
    225         $cacheKey = apply_filters('tiny_mce_version', '20080703'); 
     225        $cacheKey = apply_filters('tiny_mce_version', '20080706'); 
    226226 
    227227        foreach ( $initArray as $v ) 
    228228                $cacheKey .= $v; 
  • wp-includes/script-loader.php

     
    3434        $visual_editor = apply_filters('visual_editor', array('tiny_mce')); 
    3535        $scripts->add( 'editor', false, $visual_editor, '20080321' ); 
    3636 
    37         $scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080702' ); 
     37        $scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080706' ); 
    3838 
    3939        // Modify this version when tinyMCE plugins are changed. 
    40         $mce_version = apply_filters('tiny_mce_version', '20080703'); 
     40        $mce_version = apply_filters('tiny_mce_version', '20080706'); 
    4141        $scripts->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_config.php', array('editor_functions'), $mce_version ); 
    4242 
    4343        $scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6');