WordPress.org

Make WordPress Core

Ticket #6812: img-captions.patch

File img-captions.patch, 24.8 KB (added by azaozz, 7 years ago)
  • wp-admin/gears-manifest.php

     
    6464?> 
    6565{ 
    6666"betaManifestVersion" : 1, 
    67 "version" : "<?php echo $man_version; ?>_20080626", 
     67"version" : "<?php echo $man_version; ?>_20080701", 
    6868"entries" : [ 
    6969<?php echo $defaults; ?> 
    7070 
  • wp-admin/includes/media.php

     
    6262        return $html; 
    6363} 
    6464 
     65function image_add_caption( $html, $id, $alt, $title, $align, $url, $size ) { 
     66 
     67        if ( empty($alt) ) return $html; 
     68        $id = ( 0 < (int) $id ) ? 'attachment_' . $id : ''; 
     69 
     70        preg_match( '/width="([0-9]+)/', $html, $matches ); 
     71        if ( ! isset($matches[1]) ) return $html; 
     72        $width = $matches[1]; 
     73 
     74        $html = preg_replace( '/align[^\s\'"]+\s?/', '', $html ); 
     75        if ( empty($align) ) $align = 'none'; 
     76 
     77        $shcode = '[wp_caption id="' . $id . '" align="align' . $align 
     78        . '" width="' . $width . '" caption="' . $alt . '"]' . $html . '[/wp_caption]'; 
     79 
     80        return apply_filters( 'image_add_caption_shortcode', $shcode, $html ); 
     81} 
     82add_filter( 'image_send_to_editor', 'image_add_caption', 20, 7 ); 
     83 
    6584function media_send_to_editor($html) { 
    6685        ?> 
    6786<script type="text/javascript"> 
  • wp-admin/js/editor.js

     
    5252        // Fix some block element newline issues 
    5353        content = content.replace(new RegExp('\\s*<div', 'mg'), '\n<div'); 
    5454        content = content.replace(new RegExp('</div>\\s*', 'mg'), '</div>\n'); 
     55                content = content.replace(new RegExp('\\s*\\[wp_caption([^\\[]+)\\[/wp_caption\\]\\s*', 'gi'), '\n\n[wp_caption$1[/wp_caption]\n\n'); 
    5556 
    5657        var blocklist2 = 'blockquote|ul|ol|li|table|thead|tr|th|td|h[1-6]|pre'; 
    5758        content = content.replace(new RegExp('\\s*<(('+blocklist2+') ?[^>]*)\\s*>', 'mg'), '\n<$1>'); 
     
    6970 
    7071        // Trim whitespace 
    7172        content = content.replace(new RegExp('^\\s*', ''), ''); 
    72         content = content.replace(new RegExp('\\s*$', ''), ''); 
     73        content = content.replace(new RegExp('[\\s\\u00a0]*$', ''), ''); 
    7374 
    7475        // put back the line breaks in pre|script 
    7576        content = content.replace(/<wp_temp>/g, '\n'); 
     
    164165        pee = pee.replace(new RegExp('\\s*\\n', 'gi'), "<br />\n"); 
    165166        pee = pee.replace(new RegExp('(</?(?:'+blocklist+')[^>]*>)\\s*<br />', 'gi'), "$1"); 
    166167        pee = pee.replace(new RegExp('<br />(\\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)>)', 'gi'), '$1'); 
     168        pee = pee.replace(new RegExp('(?:<p>|<br ?/?>)*\\s*\\[wp_caption([^\\[]+)\\[/wp_caption\\]\\s*(?:</p>|<br ?/?>)*', 'gi'), '[wp_caption$1[/wp_caption]'); 
    167169        // pee = pee.replace(new RegExp('^((?:&nbsp;)*)\\s', 'mg'), '$1&nbsp;'); 
    168170 
    169171        // Fix the pre|script tags          
  • wp-admin/js/media-upload.js

     
    66                        ed.selection.moveToBookmark(tinymce.EditorManager.activeEditor.windowManager.bookmark); 
    77 
    88                ed.execCommand('mceInsertContent', false, h); 
     9                ed.execCommand('mceCleanup'); 
    910        } else 
    1011                edInsertContent(edCanvas, h); 
    1112 
  • wp-content/themes/classic/style.css

     
    319319        font-style: normal; 
    320320        text-transform: capitalize; 
    321321} 
     322 
     323/* Captions & aligment */ 
     324.aligncenter, 
     325dl.aligncenter { 
     326        display: block; 
     327        margin-left: auto; 
     328        margin-right: auto; 
     329} 
     330 
     331.alignleft { 
     332        float: left; 
     333} 
     334 
     335.alignright { 
     336        float: right; 
     337} 
     338 
     339.wp_caption { 
     340        border: 1px solid #ddd; 
     341        text-align: center; 
     342        background-color: #f3f3f3; 
     343        padding-top: 4px; 
     344        margin: 10px; 
     345        -moz-border-radius: 3px; 
     346        -khtml-border-radius: 3px; 
     347        -webkit-border-radius: 3px; 
     348        border-radius: 3px; 
     349} 
     350 
     351.wp_caption img { 
     352        margin: 0; 
     353        padding: 0; 
     354        border: 0 none; 
     355} 
     356 
     357.wp_caption_dd { 
     358        font-size: 11px; 
     359        line-height: 17px; 
     360        padding: 0 4px 5px; 
     361        margin: 0; 
     362} 
     363/* End captions & aligment */ 
  • wp-content/themes/default/style.css

     
    638638 
    639639 
    640640 
     641/* Captions */ 
     642.aligncenter, 
     643dl.aligncenter { 
     644        display: block; 
     645        margin-left: auto; 
     646        margin-right: auto; 
     647} 
     648 
     649.wp_caption { 
     650        border: 1px solid #ddd; 
     651        text-align: center; 
     652        background-color: #f3f3f3; 
     653        padding-top: 4px; 
     654        margin: 10px; 
     655        -moz-border-radius: 3px; 
     656        -khtml-border-radius: 3px; 
     657        -webkit-border-radius: 3px; 
     658        border-radius: 3px; 
     659} 
     660 
     661.wp_caption img { 
     662        margin: 0; 
     663        padding: 0; 
     664        border: 0 none; 
     665} 
     666 
     667.wp_caption_dd { 
     668        font-size: 11px; 
     669        line-height: 17px; 
     670        padding: 0 4px 5px; 
     671        margin: 0; 
     672} 
     673/* End captions */ 
     674 
     675 
    641676/* "Daisy, Daisy, give me your answer do. I'm half crazy all for the love of you. 
    642677        It won't be a stylish marriage, I can't afford a carriage. 
    643678        But you'll look sweet upon the seat of a bicycle built for two." */ 
  • wp-includes/js/tinymce/langs/wp-langs.php

     
    400400 
    401401tinyMCE.addI18n("' . $language . '.wpeditimage",{ 
    402402edit_img:"' . mce_escape( __('Edit Image') )  . '", 
     403del_img:"' . mce_escape( __('Delete Image') )  . '", 
    403404adv_settings:"' . mce_escape( __('Advanced Settings') )  . '", 
    404405none:"' . mce_escape( __('None') )  . '", 
    405406size:"' . mce_escape( __('Size') ) . '", 
  • wp-includes/js/tinymce/plugins/wpeditimage/editor_plugin.js

     
    3434                        }); 
    3535 
    3636                        ed.onMouseUp.add(function(ed, e) { 
    37                                 if ( tinymce.isOpera ) 
    38                                         ed.plugins.wpeditimage.showButtons(e); 
     37                                if ( ! tinymce.isOpera ) return; 
     38                                if ( e.target.nodeName == 'IMG' ) 
     39                                        ed.plugins.wpeditimage.showButtons(e.target); 
    3940                        }); 
    4041 
    4142                        ed.onMouseDown.add(function(ed, e) { 
    42                                 if ( tinymce.isOpera ) return; 
    43                                 ed.plugins.wpeditimage.showButtons(e); 
     43                                if ( tinymce.isOpera || e.target.nodeName != 'IMG' ) { 
     44                                        t.hideButtons(); 
     45                                        return; 
     46                                } 
     47                                ed.plugins.wpeditimage.showButtons(e.target); 
    4448                        }); 
    45 /* 
    46                         ed.onSetContent.add(function() { 
    47                                 t._fixCenter(ed.getBody()); 
     49 
     50                        ed.onKeyPress.add(function(ed, e) { 
     51                                var DL, DIV; 
     52 
     53                                if ( e.keyCode == 13 && (DL = ed.dom.getParent(ed.selection.getNode(), 'DL')) ) { 
     54                                        var P = ed.dom.create('p', {}, '&nbsp;'); 
     55                                        if ( (DIV = DL.parentNode) && DIV.nodeName == 'DIV' )  
     56                                                ed.dom.insertAfter( P, DIV ); 
     57                                        else ed.dom.insertAfter( P, DL ); 
     58 
     59                                        tinymce.dom.Event.cancel(e); 
     60                                        ed.selection.select(P); 
     61                                        return false; 
     62                                } 
    4863                        }); 
    4964 
    50                         ed.onPreProcess.add(function(ed, o) { 
    51                                 if (o.set) 
    52                                         t._fixCenter(o.node); 
     65                        ed.onBeforeSetContent.add(function(ed, o) { 
     66                        o.content = t._do_shcode(o.content); 
     67                }); 
    5368 
     69                        ed.onPostProcess.add(function(ed, o) { 
    5470                                if (o.get) 
    55                                         ed.dom.removeClass(ed.dom.select('p', o.node), 'mce_iecenter'); 
     71                                        o.content = t._get_shcode(o.content); 
    5672                        }); 
    57 */ 
    5873                }, 
    5974 
     75                _do_shcode : function(co) { 
     76                        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=['"]([^'"]+)/); 
     79 
     80                                id = ( id && id[1] ) ? id[1] : ''; 
     81                                cls = ( cls && cls[1] ) ? cls[1] : 'alignnone'; 
     82                                w = ( w && w[1] ) ? w[1] : ''; 
     83                                cap = ( cap && cap[1] ) ? cap[1] : ''; 
     84                                if ( ! w || ! cap ) return c; 
     85                                 
     86                                var div_cls = (cls == 'aligncenter') ? 'mceTemp mceIEcenter' : 'mceTemp'; 
     87 
     88                                return '<div class="'+div_cls+'"><dl id="'+id+'" class="wp_caption '+cls+'" style="width: '+(10+parseInt(w))+ 
     89                                'px"><dt class="wp_caption_dt">'+c+'</dt><dd class="wp_caption_dd">'+cap+'</dd></dl></div>'; 
     90                        }); 
     91                }, 
     92 
     93                _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=['"]([^'"]+)/); 
     96                                var w = c.match(/width=['"]([0-9]+)/); 
     97 
     98                                id = ( id && id[1] ) ? id[1] : ''; 
     99                                cls = ( cls && cls[1] ) ? cls[1] : 'alignnone'; 
     100                                w = ( w && w[1] ) ? w[1] : ''; 
     101 
     102                                if ( ! w || ! cap ) return c; 
     103                                cls = cls ? cls.match(/align[^ '"]+/) : ''; 
     104 
     105                                return '[wp_caption id="'+id+'" align="'+cls+'" width="'+w+'" caption="'+cap+'"]'+c+'[/wp_caption]'; 
     106                        }); 
     107                }, 
     108 
    60109                _fixCenter : function(c) { 
    61110                        var ed = tinyMCE.activeEditor; 
    62111 
     
    71120                        }); 
    72121                }, 
    73122 
    74                 showButtons : function(e) { 
    75                         var t = this, ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y, el = e.target; 
     123                showButtons : function(n) { 
     124                        var t = this, ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y; 
    76125 
    77                         t.hideButtons(); 
    78                         if (el.nodeName == 'IMG') { 
    79                                 if (ed.dom.getAttrib(el, 'class').indexOf('mceItem') != -1) 
    80                                         return; 
     126                        if (ed.dom.getAttrib(n, 'class').indexOf('mceItem') != -1) 
     127                                return; 
    81128 
    82                                 vp = ed.dom.getViewPort(ed.getWin()); 
    83                                 p1 = DOM.getPos(ed.getContentAreaContainer()); 
    84                                 p2 = ed.dom.getPos(el); 
     129                        vp = ed.dom.getViewPort(ed.getWin()); 
     130                        p1 = DOM.getPos(ed.getContentAreaContainer()); 
     131                        p2 = ed.dom.getPos(n); 
    85132 
    86                                 X = Math.max(p2.x - vp.x, 0) + p1.x; 
    87                                 Y = Math.max(p2.y - vp.y, 0) + p1.y; 
     133                        X = Math.max(p2.x - vp.x, 0) + p1.x; 
     134                        Y = Math.max(p2.y - vp.y, 0) + p1.y; 
    88135 
    89                                 DOM.setStyles('wp_editbtns', { 
    90                                         'top' : Y+5+'px', 
    91                                         'left' : X+5+'px', 
    92                                         'display' : 'block' 
    93                                 }); 
     136                        DOM.setStyles('wp_editbtns', { 
     137                                'top' : Y+5+'px', 
     138                                'left' : X+5+'px', 
     139                                'display' : 'block' 
     140                        }); 
    94141 
    95                                 t.btnsTout = window.setTimeout( function(){ed.plugins.wpeditimage.hideButtons();}, 5000 ); 
    96                         } 
     142                        t.btnsTout = window.setTimeout( function(){ed.plugins.wpeditimage.hideButtons();}, 5000 ); 
    97143                }, 
    98144 
    99145                hideButtons : function() { 
     146                        if ( tinymce.DOM.isHidden('wp_editbtns') ) return; 
     147 
    100148                        tinymce.DOM.hide('wp_editbtns'); 
    101149                        window.clearTimeout(this.btnsTout); 
    102150                }, 
     
    116164                                id : 'wp_editimgbtn', 
    117165                                width : '24', 
    118166                                height : '24', 
    119                                 title : 'Edit' 
     167                                title : ed.getLang('wpeditimage.edit_img') 
    120168                        }); 
    121169 
    122170                        wp_editimgbtn.onmousedown = function(e) { 
     
    131179                                id : 'wp_delimgbtn', 
    132180                                width : '24', 
    133181                                height : '24', 
    134                                 title : 'Delete' 
     182                                title : ed.getLang('wpeditimage.del_img') 
    135183                        }); 
    136184 
    137185                        wp_delimgbtn.onmousedown = function(e) { 
    138186                                var ed = tinyMCE.activeEditor, el = ed.selection.getNode(), p; 
    139187 
    140                                 if ( el.nodeName != 'IMG' || ed.dom.getAttrib(el, 'class').indexOf('mceItem') != -1 ) return; 
     188                                if ( el.nodeName == 'IMG' && ed.dom.getAttrib(el, 'class').indexOf('mceItem') == -1 ) { 
     189                                        if ( (p = ed.dom.getParent(el, 'div')) && ed.dom.hasClass(p, 'mceTemp') ) 
     190                                                ed.dom.remove(p); 
     191                                        else if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1 ) 
     192                                                ed.dom.remove(p); 
     193                                        else ed.dom.remove(el); 
    141194 
    142                                 if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1) 
    143                                         ed.dom.remove(p); 
    144                                 else ed.dom.remove(el); 
    145  
    146                                 this.parentNode.style.display = 'none'; 
    147                                 ed.execCommand('mceRepaint'); 
    148                                 return false; 
     195                                        this.parentNode.style.display = 'none'; 
     196                                        ed.execCommand('mceRepaint'); 
     197                                        return false; 
     198                                } 
    149199                        } 
    150200                }, 
    151201 
  • wp-includes/js/tinymce/plugins/wpeditimage/js/editimage.js

     
    9595        current_size_sel : 's100', 
    9696        width : '', 
    9797        height : '', 
     98        align : '', 
     99        img_alt : '', 
    98100 
    99101        setTabs : function(tab) { 
    100102                var t = this; 
     
    125127        imgAlignCls : function(v) { 
    126128                var t = this, cls = t.I('img_classes').value; 
    127129 
    128                 t.I('img_demo').className = v; 
     130                t.I('img_demo').className = t.align = v; 
    129131 
    130132                cls = cls.replace( /align[^ "']+/gi, '' ); 
    131133                cls += (' ' + v); 
     
    135137                        t.I('hspace').value = ''; 
    136138                        t.updateStyle('hspace'); 
    137139                } 
    138                  
     140 
    139141                t.I('img_classes').value = cls; 
    140142        }, 
    141143 
     
    153155 
    154156        showSizeSet : function() { 
    155157                var t = this; 
    156                  
     158 
    157159                if ( (t.width * 1.3) > parseInt(t.preloadImg.width) ) { 
    158160                        var s130 = t.I('s130'), s120 = t.I('s120'), s110 = t.I('s110'); 
    159161 
     
    243245        }, 
    244246 
    245247        setup : function() { 
    246                 var t = this, h, c, el, id, link, fname, f = document.forms[0], ed = tinyMCEPopup.editor, d = t.I('img_demo'), dom = tinyMCEPopup.dom; 
     248                var t = this, h, c, el, id, link, fname, f = document.forms[0], ed = tinyMCEPopup.editor, d = t.I('img_demo'), dom = tinyMCEPopup.dom, DL, caption; 
    247249                document.dir = tinyMCEPopup.editor.getParam('directionality',''); 
    248250                tinyMCEPopup.restoreSelection(); 
    249251                el = ed.selection.getNode(); 
     
    252254                f.img_src.value = d.src = link = ed.dom.getAttrib(el, 'src'); 
    253255                ed.dom.setStyle(el, 'float', ''); 
    254256                t.getImageData(); 
     257                c = ed.dom.getAttrib(el, 'class'); 
     258                caption = t.img_alt = ed.dom.getAttrib(el, 'alt'); 
    255259 
     260                if ( DL = dom.getParent(el, 'dl') ) { 
     261                        var dlc = ed.dom.getAttrib(DL, 'class'); 
     262                        dlc = dlc.match(/align[^ "']+/i); 
     263                        if ( ! dom.hasClass(el, dlc) ) 
     264                                c += ' '+dlc; 
     265                                 
     266                        tinymce.each(DL.childNodes, function(e) { 
     267                                if ( e.nodeName == 'DD' ) { 
     268                                        caption = e.innerHTML; 
     269                                        return; 
     270                                } 
     271                        }); 
     272                } 
     273 
    256274                f.img_title.value = ed.dom.getAttrib(el, 'title'); 
    257                 f.img_alt.value = ed.dom.getAttrib(el, 'alt'); 
     275                f.img_alt.value = caption; 
    258276                f.border.value = ed.dom.getAttrib(el, 'border'); 
    259277                f.vspace.value = ed.dom.getAttrib(el, 'vspace'); 
    260278                f.hspace.value = ed.dom.getAttrib(el, 'hspace'); 
    261279                f.align.value = ed.dom.getAttrib(el, 'align'); 
    262280                f.width.value = t.width = ed.dom.getAttrib(el, 'width'); 
    263281                f.height.value = t.height = ed.dom.getAttrib(el, 'height'); 
    264                 f.img_classes.value = c = ed.dom.getAttrib(el, 'class'); 
     282                f.img_classes.value = c; 
    265283                f.img_style.value = ed.dom.getAttrib(el, 'style'); 
    266284 
    267285                // Move attribs to styles 
     
    291309 
    292310                if ( c.indexOf('alignleft') != -1 ) { 
    293311                        t.I('alignleft').checked = "checked"; 
    294                         d.className = "alignleft"; 
     312                        d.className = t.align = "alignleft"; 
    295313                } else if ( c.indexOf('aligncenter') != -1 ) { 
    296314                        t.I('aligncenter').checked = "checked"; 
    297                         d.className = "aligncenter"; 
     315                        d.className = t.align = "aligncenter"; 
    298316                } else if ( c.indexOf('alignright') != -1 ) { 
    299317                        t.I('alignright').checked = "checked"; 
    300                         d.className = "alignright"; 
     318                        d.className = t.align = "alignright"; 
    301319                } else if ( c.indexOf('alignnone') != -1 ) { 
    302320                        t.I('alignnone').checked = "checked"; 
    303                         d.className = "alignnone"; 
     321                        d.className = t.align = "alignnone"; 
    304322                } 
    305323 
    306324                if ( t.width && t.preloadImg.width ) t.showSizeSet(); 
    307325                document.body.style.display = ''; 
    308 /* 
    309                 // Test if is attachment 
    310                 if ( (id = c.match( /wp-image-([0-9]{1,6})/ )) && id[1] ) { 
    311                         t.I('tab_attachment').href = tinymce.documentBaseURL + 'media.php?action=edit&attachment_id=' + id[1]; 
    312                         t.I('tab_attachment').style.display = 'inline'; 
    313                 } 
    314 */ 
    315326        }, 
    316327 
    317328        remove : function() { 
     
    321332                el = ed.selection.getNode(); 
    322333                if (el.nodeName != 'IMG') return; 
    323334 
    324                 if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1) 
     335                if ( (p = ed.dom.getParent(el, 'div')) && ed.dom.hasClass(p, 'mceTemp') ) 
    325336                        ed.dom.remove(p); 
    326                 else 
    327                         ed.dom.remove(el); 
     337                else if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1 ) 
     338                        ed.dom.remove(p); 
     339                else ed.dom.remove(el); 
    328340 
    329341                ed.execCommand('mceRepaint'); 
    330342                tinyMCEPopup.close(); 
     
    332344        }, 
    333345 
    334346        update : function() { 
    335                 var t = this, f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, el, P, A, v = f.img_classes.value; 
     347                var t = this, f = document.forms[0], ed = tinyMCEPopup.editor, el, b, fixSafari = null, DL, P, A, DIV, do_caption = null, img_class = f.img_classes.value, html; 
    336348 
    337349                tinyMCEPopup.restoreSelection(); 
    338350                el = ed.selection.getNode(); 
    339351 
    340352                if (el.nodeName != 'IMG') return; 
    341                 if (f.img_src.value === '') t.remove(); 
     353                if (f.img_src.value === '') { 
     354                        t.remove(); 
     355                        return; 
     356                } 
    342357 
    343                 A = ed.dom.getParent(el, 'A'); 
     358                if ( f.img_alt.value != '' && f.width.value != '' ) { 
     359                        do_caption = 1; 
     360                        img_class = img_class.replace( /align[^ "']+\s?/gi, '' ); 
     361                } 
     362 
     363                A = ed.dom.getParent(el, 'a'); 
    344364                P = ed.dom.getParent(el, 'p'); 
     365                DL = ed.dom.getParent(el, 'dl'); 
     366                DIV = ed.dom.getParent(el, 'div'); 
     367 
    345368                tinyMCEPopup.execCommand("mceBeginUndoLevel"); 
    346 /*              if ( tinymce.isIE ) { 
    347                         if ( f.img_classes.value.indexOf('aligncenter') != -1 ) 
    348                                 ed.dom.addClass(P, 'mce_iecenter'); 
    349                         else ed.dom.removeClass(P, 'mce_iecenter'); 
    350                 } 
    351 */ 
     369 
    352370                ed.dom.setAttribs(el, { 
    353371                        src : f.img_src.value, 
    354372                        title : f.img_title.value, 
    355                         alt : f.img_alt.value, 
     373                        alt : t.img_alt, 
    356374                        width : f.width.value, 
    357375                        height : f.height.value, 
    358376                        style : f.img_style.value, 
    359                         'class' : '' //f.img_classes.value 
     377                        'class' : img_class 
    360378                }); 
    361379 
    362380                if ( ! f.link_href.value ) { 
     
    368386                } else { 
    369387                        // Create new anchor elements 
    370388                        if ( A == null ) { 
    371                                  
    372389                                if ( ! f.link_href.value.match(/https?:\/\//) ) 
    373390                                        f.link_href.value = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.link_href.value); 
    374                                  
     391 
     392                                if ( tinymce.isWebKit && ed.dom.hasClass(el, 'aligncenter') ) { 
     393                                        ed.dom.removeClass(el, 'aligncenter'); 
     394                                        fixSafari = 1; 
     395                                } 
     396 
    375397                                tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); 
    376          
     398                                if ( fixSafari ) ed.dom.addClass(el, 'aligncenter'); 
     399 
    377400                                tinymce.each(ed.dom.select("a"), function(n) { 
    378401                                        if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') { 
    379          
     402 
    380403                                                ed.dom.setAttribs(n, { 
    381404                                                        href : f.link_href.value, 
    382405                                                        title : f.link_title.value, 
     
    399422                        } 
    400423                } 
    401424 
    402                 ed.dom.setAttrib(el, 'class', f.img_classes.value); 
    403                  
    404                 if ( v.indexOf('aligncenter') != -1 ) { 
     425                if ( do_caption ) { 
     426                        var id, cap_id = '', cap, DT, DD, cap_width = 10 + parseInt(f.width.value), align = t.align.substring(5), div_cls = (t.align == 'aligncenter') ? 'mceTemp mceIEcenter' : 'mceTemp'; 
     427 
     428                        if ( DL ) { 
     429                                ed.dom.setAttribs(DL, { 
     430                                        'class' : 'wp_caption '+t.align, 
     431                                        style : 'width: '+cap_width+'px;' 
     432                                }); 
     433 
     434                                if ( DIV )  
     435                                        ed.dom.setAttrib(DIV, 'class', div_cls); 
     436 
     437                                if ( (DT = ed.dom.getParent(el, 'dt')) && (DD = DT.nextSibling) && ed.dom.hasClass(DD, 'wp_caption_dd') ) 
     438                                        ed.dom.setHTML(DD, f.img_alt.value); 
     439 
     440                        } else { 
     441                                if ( (id = f.img_classes.value.match( /wp-image-([0-9]{1,6})/ )) && id[1] ) 
     442                                        cap_id = 'attachment_'+id[1]; 
     443 
     444                                if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a')); 
     445                                else html = ed.dom.getOuterHTML(el); 
     446 
     447                                html = '<dl id="'+cap_id+'" class="wp_caption '+t.align+'" style="width: '+cap_width+ 
     448                                'px"><dt class="wp_caption_dt">'+html+'</dt><dd class="wp_caption_dd">'+f.img_alt.value+'</dd></dl>'; 
     449 
     450                                cap = ed.dom.create('div', {'class': div_cls}, html); 
     451 
     452                                if ( P ) { 
     453                                        P.parentNode.insertBefore(cap, P); 
     454                                        ed.dom.remove(P); 
     455                                } 
     456                        } 
     457 
     458                        tinyMCEPopup.execCommand("mceEndUndoLevel"); 
     459                        ed.execCommand('mceRepaint'); 
     460                        tinyMCEPopup.close(); 
     461                        return; 
     462                } else { 
     463                        if ( DL ) { 
     464                                if ( f.link_href.value ) html = ed.dom.getOuterHTML(ed.dom.getParent(el, 'a')); 
     465                                else html = ed.dom.getOuterHTML(el); 
     466                                 
     467                                P = ed.dom.create('p', {}, html); 
     468                                DL.parentNode.insertBefore(P,DL); 
     469                                ed.dom.remove(DL.childNodes); 
     470                                ed.dom.remove(DL); 
     471                        } 
     472                } 
     473 
     474                if ( f.img_classes.value.indexOf('aligncenter') != -1 ) { 
    405475                        if ( P && ( ! P.style || P.style.textAlign != 'center' ) ) 
    406476                                ed.dom.setStyle(P, 'textAlign', 'center'); 
    407477                } else { 
    408478                        if ( P && P.style && P.style.textAlign == 'center' ) 
    409479                                ed.dom.setStyle(P, 'textAlign', ''); 
    410480                } 
     481 
    411482                tinyMCEPopup.execCommand("mceEndUndoLevel"); 
    412483                ed.execCommand('mceRepaint'); 
    413484                tinyMCEPopup.close(); 
     
    496567                        f.width.value = t.width = t.preloadImg.width; 
    497568                        f.height.value = t.height = t.preloadImg.height; 
    498569                } 
    499                  
     570 
    500571                t.showSizeSet(); 
    501572                t.demoSetSize(); 
    502573                if ( f.img_style.value ) 
  • wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css

     
    1 body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} 
     1body, td {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} 
    22body {background:#FFF;} 
    33body.mceForceColors {background:#FFF; color:#000;} 
    44h1 {font-size: 2em} 
     
    1717del {color:red; text-decoration:line-through} 
    1818cite {border-bottom:1px dashed blue} 
    1919acronym {border-bottom:1px dotted #CCC; cursor:help} 
    20  
    21 p.mce_iecenter { 
    22         text-align: center; 
    23 } 
  • wp-includes/js/tinymce/wordpress.css

     
    11/* This file contains the CSS data for the editable area(iframe) of TinyMCE */ 
    22 
    3 .aligncenter { 
     3.aligncenter, 
     4dl.aligncenter { 
    45        display: block; 
    56        margin-left: auto; 
    67        margin-right: auto; 
     
    1415        float: right; 
    1516} 
    1617 
     18.wp_caption { 
     19        border: 1px solid #ddd; 
     20        text-align: center; 
     21        background-color: #f3f3f3; 
     22        padding-top: 4px; 
     23        margin: 10px; 
     24        -moz-border-radius: 3px; 
     25        -khtml-border-radius: 3px; 
     26        -webkit-border-radius: 3px; 
     27        border-radius: 3px; 
     28} 
     29 
     30.wp_caption img { 
     31        margin: 0; 
     32        padding: 0; 
     33        border: 0 none; 
     34} 
     35 
     36.wp_caption_dd { 
     37        font-size: 11px; 
     38        line-height: 17px; 
     39        padding: 0 4px 5px; 
     40        margin: 0; 
     41} 
     42 
    1743body.mceContentBody { 
    1844        background: #fff; 
    1945        color: #000; 
     
    6389        padding-left: 12px; 
    6490        background: url(img/items.gif) no-repeat bottom left; 
    6591} 
     92 
     93.mceIEcenter { 
     94        text-align: center; 
     95} 
  • wp-includes/media.php

     
    350350        return $html; 
    351351} 
    352352 
     353add_shortcode('wp_caption', 'wp_caption_shortcode'); 
     354 
     355function wp_caption_shortcode($attr, $content = null) { 
     356         
     357        // Allow plugins/themes to override the default caption template. 
     358        $output = apply_filters('wp_caption_shortcode', '', $attr, $content); 
     359        if ( $output != '' ) 
     360                return $output; 
     361 
     362        extract(shortcode_atts(array( 
     363                'id'    => '', 
     364                'align' => 'alignnone', 
     365                'width' => '', 
     366                'caption' => '' 
     367        ), $attr)); 
     368         
     369        if ( 1 > (int) $width || empty($caption) ) 
     370                return $content; 
     371         
     372        if ( $id ) $id = 'id="' . $id . '" '; 
     373         
     374        return '<dl ' . $id . 'class="wp_caption ' . $align . '" style="width: ' . (10 + (int) $width) . 'px">' 
     375        . '<dt class="wp_caption_dt">' . $content . '</dt><dd class="wp_caption_dd">' . $caption . '</dd></dl>'; 
     376} 
     377 
    353378add_shortcode('gallery', 'gallery_shortcode'); 
    354379 
    355380function gallery_shortcode($attr) { 
  • 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, '20080325' ); 
     37        $scripts->add( 'editor_functions', '/wp-admin/js/editor.js', false, '20080701' ); 
    3838 
    3939        // Modify this version when tinyMCE plugins are changed. 
    40         $mce_version = apply_filters('tiny_mce_version', '20080626'); 
     40        $mce_version = apply_filters('tiny_mce_version', '20080701'); 
    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'); 
     
    159159                        'edit' => __('Edit'), 
    160160                ) ); 
    161161                $scripts->add( 'admin-gallery', '/wp-admin/js/gallery.js', array( 'jquery-ui-sortable' ), '20080520' ); 
    162                 $scripts->add( 'media-upload', '/wp-admin/js/media-upload.js', array( 'thickbox' ), '20080625' ); 
     162                $scripts->add( 'media-upload', '/wp-admin/js/media-upload.js', array( 'thickbox' ), '20080701' ); 
    163163                $scripts->localize( 'upload', 'uploadL10n', array( 
    164164                        'browseTitle' => attribute_escape(__('Browse your files')), 
    165165                        'back' => __('&laquo; Back'),