WordPress.org

Make WordPress Core

Ticket #21585: 21585-4.patch

File 21585-4.patch, 19.2 KB (added by azaozz, 20 months ago)
  • wp-admin/admin-ajax.php

     
    5050        'menu-locations-save', 'menu-quick-search', 'meta-box-order', 'get-permalink', 
    5151        'sample-permalink', 'inline-save', 'inline-save-tax', 'find_posts', 'widgets-order', 
    5252        'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post', 
    53         'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 'query-attachments', 
     53        'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment', 'query-attachments', 'mce-gallery-preview', 
    5454); 
    5555 
    5656// Register core Ajax calls. 
  • wp-admin/includes/ajax-actions.php

     
    5050 
    5151        wp_die( 0 ); 
    5252} 
     53 
    5354function wp_ajax_ajax_tag_search() { 
    5455        global $wpdb; 
    5556 
     
    18441845 
    18451846        wp_send_json_success( $posts ); 
    18461847} 
     1848 
     1849function wp_ajax_mce_gallery_preview() { 
     1850        if ( empty($_POST['post_ID']) || empty($_POST['shortcode']) ) 
     1851                wp_die( 0 ); 
     1852 
     1853        $post_id = (int) $_POST['post_ID']; 
     1854        if ( !current_user_can('edit_post', $post_id) ) 
     1855                wp_die('-1'); 
     1856 
     1857        $shortcode_args = trim( str_replace('[gallery', '', $_POST['shortcode']), '[] //' ); 
     1858        $args = $shortcode_args ? shortcode_parse_atts( stripslashes($shortcode_args) ) : array(); 
     1859        $args['id'] = $post_id; 
     1860        $args['mce_preview'] = true; 
     1861 
     1862        echo preg_replace('/[^a-z0-9_]+/', '', $_POST['mcediv_id']) . gallery_shortcode( $args ); 
     1863        wp_die(); 
     1864} 
     1865 
  • wp-admin/includes/media.php

     
    470470 
    471471        if ( isset($_POST['insert-gallery']) || isset($_POST['update-gallery']) ) { ?> 
    472472                <script type="text/javascript"> 
    473                 /* <![CDATA[ */ 
    474473                var win = window.dialogArguments || opener || parent || top; 
    475474                win.tb_remove(); 
    476                 /* ]]> */ 
    477475                </script> 
    478476                <?php 
    479477                exit; 
     
    16301628?> 
    16311629 
    16321630<script type="text/javascript"> 
    1633 <!-- 
    16341631jQuery(function($){ 
    16351632        var preloaded = $(".media-item.preloaded"); 
    16361633        if ( preloaded.length > 0 ) { 
     
    16381635                updateMediaForm(); 
    16391636        } 
    16401637}); 
    1641 --> 
    16421638</script> 
    16431639<div id="sort-buttons" class="hide-if-no-js"> 
    16441640<span> 
     
    16751671 
    16761672<div id="gallery-settings" style="display:none;"> 
    16771673<div class="title"><?php _e('Gallery Settings'); ?></div> 
     1674 
     1675<p>(Temporary, for testing only.)</p> 
     1676<p><input type="text" style="width:60%;" id="shortcode" value="[gallery]"></p> 
     1677 
     1678<!-- 
    16781679<table id="basic" class="describe"><tbody> 
    16791680        <tr> 
    16801681        <th scope="row" class="label"> 
     
    17431744        </td> 
    17441745        </tr> 
    17451746</tbody></table> 
     1747--> 
    17461748 
    17471749<p class="ml-submit"> 
    17481750<input type="button" class="button" style="display:none;" onMouseDown="wpgallery.update();" name="insert-gallery" id="insert-gallery" value="<?php esc_attr_e( 'Insert gallery' ); ?>" /> 
  • wp-admin/js/gallery.js

     
    6060                w = wpgallery.getWin(); 
    6161 
    6262                $('#save-all, #gallery-settings').show(); 
    63                 if ( typeof w.tinyMCE != 'undefined' && w.tinyMCE.activeEditor && ! w.tinyMCE.activeEditor.isHidden() ) { 
    64                         wpgallery.mcemode = true; 
    65                         wpgallery.init(); 
     63                if ( typeof w.tinymce != 'undefined' && w.tinymce.activeEditor && ! w.tinymce.activeEditor.isHidden() ) { 
     64                        wpgallery.init(true); 
    6665                } else { 
    6766                        $('#insert-gallery').show(); 
    6867                } 
     
    7473/* gallery settings */ 
    7574var tinymce = null, tinyMCE, wpgallery; 
    7675 
     76(function($){ 
    7777wpgallery = { 
    7878        mcemode : false, 
    7979        editor : {}, 
    8080        dom : {}, 
    8181        is_update : false, 
    8282        el : {}, 
     83        args : '', 
    8384 
    84         I : function(e) { 
    85                 return document.getElementById(e); 
    86         }, 
     85        init: function(mcemode) { 
     86                var t = this, query, args = {}, i, val, w = t.getWin(); 
    8787 
    88         init: function() { 
    89                 var t = this, li, q, i, it, w = t.getWin(); 
     88                if ( ! mcemode ) 
     89                        return; 
    9090 
    91                 if ( ! t.mcemode ) return; 
     91                query = ('' + document.location.search).replace(/^\?/, '').split('&'); 
    9292 
    93                 li = ('' + document.location.search).replace(/^\?/, '').split('&'); 
    94                 q = {}; 
    95                 for (i=0; i<li.length; i++) { 
    96                         it = li[i].split('='); 
    97                         q[unescape(it[0])] = unescape(it[1]); 
     93                for ( i in query ) { 
     94                        if ( query[i] ) { 
     95                                val = query[i].split('='); 
     96                                args[decodeURIComponent(val[0])] = decodeURIComponent(val[1]); 
     97                        } 
    9898                } 
    9999 
    100                 if (q.mce_rdomain) 
    101                         document.domain = q.mce_rdomain; 
    102  
    103100                // Find window & API 
    104101                tinymce = w.tinymce; 
    105102                tinyMCE = w.tinyMCE; 
    106103                t.editor = tinymce.EditorManager.activeEditor; 
     104                 
     105                // temp, only for testing 
     106                if ( args.shortcode ) { 
     107                        $('#update-gallery').show(); 
     108                        $('#shortcode').val( args.shortcode ); 
     109                } else { 
     110                        $('#insert-gallery').show(); 
     111                } 
    107112 
    108                 t.setup(); 
     113        //      t.setup(); 
    109114        }, 
    110115 
    111116        getWin : function() { 
     
    197202                return s; 
    198203        } 
    199204}; 
     205})(jQuery); 
     206 
  • wp-includes/js/tinymce/plugins/wpgallery/editor_plugin_src.js

     
    11 
    22(function() { 
    33        tinymce.create('tinymce.plugins.wpGallery', { 
     4                sh : {i: 0}, 
    45 
    56                init : function(ed, url) { 
    6                         var t = this; 
     7                        var t = this, target; 
    78 
     9                        t.ed = ed; 
    810                        t.url = url; 
    911                        t._createButtons(); 
    1012 
    1113                        // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('...'); 
    1214                        ed.addCommand('WP_Gallery', function() { 
    13                                 var el = ed.selection.getNode(), post_id, vp = tinymce.DOM.getViewPort(), 
    14                                         H = vp.h - 80, W = ( 640 < vp.w ) ? 640 : vp.w; 
     15                                var shortcode, div_id, q_string, post_id, vp = tinymce.DOM.getViewPort(), H = vp.h - 80, W = ( 640 < vp.w ) ? 640 : vp.w; 
    1516 
    16                                 if ( el.nodeName != 'IMG' ) return; 
    17                                 if ( ed.dom.getAttrib(el, 'class').indexOf('wpGallery') == -1 ) return; 
     17                                if ( !target ) 
     18                                        return; 
    1819 
    19                                 post_id = tinymce.DOM.get('post_ID').value; 
    20                                 tb_show('', tinymce.documentBaseURL + 'media-upload.php?post_id='+post_id+'&tab=gallery&TB_iframe=true&width='+W+'&height='+H); 
     20                                div_id = target.id; 
     21                                shortcode = ed.dom.getAttrib( target, 'data-wp-gallery-args' ); // already urlencoded 
     22                                if ( !shortcode || !div_id ) 
     23                                        return; 
    2124 
     25                                post_id = document.getElementById('post_ID'); 
     26                                post_id = post_id ? post_id.value : 0; 
     27                                q_string = 'post_id='+post_id+'&tab=gallery&shortcode='+shortcode+'&div_id='+encodeURIComponent(div_id)+'&TB_iframe=true&width='+W+'&height='+H; 
     28 
     29                                tb_show('', tinymce.documentBaseURL + 'media-upload.php?'+q_string); 
     30 
    2231                                tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' ); 
     32                                target = null; 
    2333                        }); 
    2434 
     35                        ed.addCommand('WP_Gallery_Delete', function() { 
     36                                if ( !target ) 
     37                                        return; 
     38 
     39                                ed.dom.remove(target); 
     40                        }); 
     41 
    2542                        ed.onMouseDown.add(function(ed, e) { 
    26                                 if ( e.target.nodeName == 'IMG' && ed.dom.hasClass(e.target, 'wpGallery') ) 
    27                                         ed.plugins.wordpress._showButtons(e.target, 'wp_gallerybtns'); 
     43                                target = ed.dom.getParent(e.target, 'div.wp-gallery-preview'); 
     44 
     45                                if ( target ) 
     46                                        ed.plugins.wordpress._showButtons(target, 'wp_gallerybtns'); 
    2847                        }); 
    2948 
    3049                        ed.onBeforeSetContent.add(function(ed, o) { 
    31                                 o.content = t._do_gallery(o.content); 
     50                                o.content = t._do_gallery(o); 
    3251                        }); 
    3352 
    3453                        ed.onPostProcess.add(function(ed, o) { 
    35                                 if (o.get) 
    36                                         o.content = t._get_gallery(o.content); 
     54                                if ( ( o.get || o.save ) && o.content.indexOf('data-wp-gallery-args') > -1 ) { 
     55                                        o.content = o.content.replace(/<div[^>]+data-wp-gallery-args="([^"]+)"[\s\S]+?<\/div><div class="wp-gallery-end">.?<\/div><\/div>/g, function(a, b){ 
     56                                                return '<p>'+decodeURIComponent(b)+'</p>'; 
     57                                        }); 
     58                                } 
    3759                        }); 
    38                 }, 
    3960 
    40                 _do_gallery : function(co) { 
    41                         return co.replace(/\[gallery([^\]]*)\]/g, function(a,b){ 
    42                                 return '<img src="'+tinymce.baseURL+'/plugins/wpgallery/img/t.gif" class="wpGallery mceItem" title="gallery'+tinymce.DOM.encode(b)+'" />'; 
     61                        // Chrome doesn't understand :focus in contentEditable, add/remove a css class with JS :( 
     62                        ed.onMouseDown.add(function(ed, e) { 
     63                                ed.dom.removeClass(ed.dom.select('div.wp-gallery-block'), 'focused'); 
     64                                if ( ed.dom.hasClass(e.target, 'wp-gallery-block') ) 
     65                                        ed.dom.addClass(e.target, 'focused'); 
    4366                        }); 
     67 
     68                        ed.wpSetGalleryPreview = function(content) { 
     69                                return t._do_gallery(content); 
     70                        } 
    4471                }, 
    4572 
    46                 _get_gallery : function(co) { 
     73                _do_gallery : function(args) { 
     74                        var self = this, ed = self.ed, dom = ed.dom, xhr_args, data, content, post_id, sh = self.sh, isNotDirty; 
    4775 
    48                         function getAttr(s, n) { 
    49                                 n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s); 
    50                                 return n ? tinymce.DOM.decode(n[1]) : ''; 
     76                        if ( typeof(args) == 'object' ) { 
     77                                content = args.content; 
     78                                if ( args.initial ) 
     79                                        isNotDirty = true; 
     80                        } else { 
     81                                content = args; 
     82                        } 
     83 
     84                        if ( content.indexOf('[gallery') == -1 ) 
     85                                return content; 
     86 
     87                        // post_ID is a hidden input field in edit-form-advanced.php 
     88                        post_id = document.getElementById('post_ID'); 
     89                        if ( post_id ) 
     90                                post_id = post_id.value; 
     91                        else 
     92                                return content; 
     93 
     94                        xhr_args = { 
     95                                url: ajaxurl, 
     96                                type: 'POST', 
     97                                content_type: 'application/x-www-form-urlencoded', 
     98                                success: function(r) { 
     99                                        var shortcode, div_id, new_id; 
     100 
     101                                        div_id = /^wp_gallery_shortcode_\d+/.exec(r); 
     102                                        shortcode = div_id && sh[div_id] ? sh[div_id] : ''; 
     103 
     104                                        if ( !div_id || !shortcode ) { 
     105                                                ed.setProgressState(false); 
     106                                                return; 
     107                                        } 
     108 
     109                                        div_id = div_id.toString(); 
     110                                        r = r.replace(div_id, ''); 
     111                                        // if there are any " even double entity encoded, switching Visual -> Text and back breaks it 
     112                                        shortcode = encodeURIComponent( shortcode ); 
     113                                        div = ed.dom.select('div#'+div_id); 
     114 
     115                                        if ( !div ) { 
     116                                                ed.setProgressState(false); 
     117                                                return; 
     118                                        } 
     119 
     120                                        ed.undoManager.data.pop() 
     121                                        new_id = 'wp_gallery_preview_' + div_id.replace(/[^0-9]+/, ''); 
     122                                        dom.setAttribs( div, { 
     123                                                id: new_id, 
     124                                                'data-wp-gallery-args': shortcode 
     125                                        }); 
     126                                        dom.addClass( div, 'wp-gallery-preview' ); // mceNonEditable 
     127                                        dom.setHTML( div, '<div class="wp-gallery-block"><br></div>'+r+'<div class="wp-gallery-end">\uFEFF</div>' ); 
     128                                        dom.setAttrib( dom.select('div.wp-gallery-block, div.wp-gallery-preview'), 'contenteditable', false ); 
     129 
     130                                        ed.setProgressState(false); 
     131                                        ed.execCommand('mceRepaint'); 
     132                                        ed.undoManager.add(); 
     133 
     134                                        if ( isNotDirty ) 
     135                                                ed.isNotDirty = true; 
     136                                }, 
     137                                error: function() { 
     138                                        ed.setProgressState(false); 
     139                                } 
    51140                        }; 
    52141 
    53                         return co.replace(/(?:<p[^>]*>)*(<img[^>]+>)(?:<\/p>)*/g, function(a,im) { 
    54                                 var cls = getAttr(im, 'class'); 
     142                        data = { 
     143                                action: 'mce-gallery-preview', 
     144                                post_ID: post_id 
     145                        }; 
    55146 
    56                                 if ( cls.indexOf('wpGallery') != -1 ) 
    57                                         return '<p>['+tinymce.trim(getAttr(im, 'title'))+']</p>'; 
     147                        ed.setProgressState(true); 
    58148 
    59                                 return a; 
     149                        return content.replace(/(?:<p>\s*)?(\[gallery[^\]]*\])(?:\s*<\/p>)?/g, function(a, shortcode){ 
     150                                var val, div_id, str = ''; 
     151 
     152                                sh.i++; 
     153                                div_id = 'wp_gallery_shortcode_' + sh.i; 
     154                                data['mcediv_id'] = div_id; 
     155                                sh[div_id] = shortcode; 
     156                                data['shortcode'] = shortcode; 
     157 
     158                                for ( val in data ) { 
     159                                        if ( str ) 
     160                                                str += '&'; 
     161 
     162                                        str += val + '=' + encodeURIComponent( data[val] ); 
     163                                } 
     164 
     165                                xhr_args['data'] = str; 
     166                                tinymce.util.XHR.send( xhr_args ); 
     167 
     168                                return '<div id="'+div_id+'">' + shortcode + '</div>'; 
    60169                        }); 
    61170                }, 
    62171 
    63172                _createButtons : function() { 
    64                         var t = this, ed = tinyMCE.activeEditor, DOM = tinymce.DOM, editButton, dellButton; 
     173                        var t = this, ed = t.ed, DOM = tinymce.DOM, editButton, dellButton; 
    65174 
    66175                        DOM.remove('wp_gallerybtns'); 
    67176 
     
    79188                        }); 
    80189 
    81190                        tinymce.dom.Event.add(editButton, 'mousedown', function(e) { 
    82                                 var ed = tinyMCE.activeEditor; 
    83191                                ed.windowManager.bookmark = ed.selection.getBookmark('simple'); 
    84192                                ed.execCommand("WP_Gallery"); 
     193                                ed.dom.events.cancel(e); 
    85194                        }); 
    86195 
    87196                        dellButton = DOM.add('wp_gallerybtns', 'img', { 
     
    93202                        }); 
    94203 
    95204                        tinymce.dom.Event.add(dellButton, 'mousedown', function(e) { 
    96                                 var ed = tinyMCE.activeEditor, el = ed.selection.getNode(); 
    97  
    98                                 if ( el.nodeName == 'IMG' && ed.dom.hasClass(el, 'wpGallery') ) { 
    99                                         ed.dom.remove(el); 
    100  
    101                                         ed.execCommand('mceRepaint'); 
    102                                         return false; 
    103                                 } 
     205                                ed.execCommand('WP_Gallery_Delete'); 
     206                                ed.execCommand('mceRepaint'); 
     207                                ed.dom.events.cancel(e); 
    104208                        }); 
    105209                }, 
    106210 
  • wp-includes/js/tinymce/themes/advanced/skins/wp_theme/content.css

     
    141141        height: 250px; 
    142142} 
    143143 
     144/* Gallery preview */ 
     145 
     146div.wp-gallery-block { 
     147        height: 100%; 
     148        width: 100%; 
     149        position: absolute; 
     150        background: #fff; 
     151        opacity: 0.01; 
     152        filter: alpha(opacity=1); 
     153        top: 0; 
     154        left: 0; 
     155        bottom: 0; 
     156        right: 0; 
     157        z-index: 5; 
     158} 
     159 
     160div.wp-gallery-block.focused { 
     161        background-color: #000; 
     162        filter: alpha(opacity=25); 
     163        opacity: 0.25; 
     164} 
     165 
     166div.wp-gallery-preview { 
     167        margin: 10px auto; 
     168        position: relative; 
     169        -ms-user-select: none; 
     170        -moz-user-select: none; 
     171        -webkit-user-select: none; 
     172        user-select: none; 
     173} 
     174 
     175div.wp-gallery-preview .wp-gallery-end { 
     176        height: 1em; 
     177        margin-top: -1em; 
     178} 
     179 
     180div.wp-gallery-preview .gallery-icon { 
     181        margin: 0; 
     182} 
     183 
     184div.wp-gallery-preview .gallery-icon img { 
     185        display: block; 
     186        margin: 0 auto; 
     187        padding: 0; 
     188        max-width: 90%; 
     189        height: auto; 
     190        border: 0; 
     191} 
     192 
     193div.wp-gallery-preview dd.gallery-caption { 
     194        margin: 0 6%; 
     195        font-size: 12px; 
     196} 
     197 
     198div.wp-gallery-preview div.gallery { 
     199        clear: both; 
     200} 
     201 
     202div.wp-gallery-preview div.gallery dl.gallery-item { 
     203        float: left; 
     204        margin: 10px 0; 
     205        padding: 0; 
     206} 
     207 
     208div.wp-gallery-preview div.gallery-columns-1 dl.gallery-item { 
     209        width: 99%; 
     210} 
     211 
     212div.wp-gallery-preview div.gallery-columns-2 dl.gallery-item { 
     213        width: 49.5%; 
     214} 
     215 
     216div.wp-gallery-preview div.gallery-columns-3 dl.gallery-item { 
     217        width: 33%; 
     218} 
     219 
     220div.wp-gallery-preview div.gallery-columns-4 dl.gallery-item { 
     221        width: 24.75%; 
     222} 
     223 
     224div.wp-gallery-preview div.gallery-columns-5 dl.gallery-item { 
     225        width: 19.8%; 
     226} 
     227 
     228div.wp-gallery-preview div.gallery-columns-6 dl.gallery-item { 
     229        width: 16.5%; 
     230} 
     231 
     232div.wp-gallery-preview div.gallery-columns-7 dl.gallery-item { 
     233        width: 14.2%; 
     234} 
     235 
     236div.wp-gallery-preview div.gallery-columns-8 dl.gallery-item { 
     237        width: 12.45%; 
     238} 
     239 
     240div.wp-gallery-preview div.gallery-columns-9 dl.gallery-item { 
     241        width: 11.1%; 
     242} 
     243 
     244div.wp-gallery-preview div.gallery-columns-10 dl.gallery-item { 
     245        width: 9.99%; 
     246} 
     247 
     248 
     249 
  • wp-includes/media.php

     
    780780        static $instance = 0; 
    781781        $instance++; 
    782782 
    783         // Allow plugins/themes to override the default gallery template. 
    784         $output = apply_filters('post_gallery', '', $attr); 
    785         if ( $output != '' ) 
    786                 return $output; 
     783        // Allow plugins/themes to override the default gallery template if not previewing. 
     784        if ( !isset($attr['mce_preview']) ) { 
     785                $output = apply_filters('post_gallery', '', $attr); 
     786                if ( $output != '' ) 
     787                        return $output; 
     788        } 
    787789 
    788790        // We're trusting author input, so let's at least make sure it looks like a valid orderby statement 
    789791        if ( isset( $attr['orderby'] ) ) { 
     
    792794                        unset( $attr['orderby'] ); 
    793795        } 
    794796 
    795         extract(shortcode_atts(array( 
     797        $attr = shortcode_atts( array( 
    796798                'order'      => 'ASC', 
    797799                'orderby'    => 'menu_order ID', 
    798                 'id'         => $post->ID, 
     800                'id'         => isset($post) ? $post->ID : 0, 
    799801                'itemtag'    => 'dl', 
    800802                'icontag'    => 'dt', 
    801803                'captiontag' => 'dd', 
    802804                'columns'    => 3, 
    803805                'size'       => 'thumbnail', 
    804806                'include'    => '', 
    805                 'exclude'    => '' 
    806         ), $attr)); 
     807                'exclude'    => '', 
     808                'mce_preview' => false, 
     809        ), $attr ); 
    807810 
     811        extract( $attr, EXTR_SKIP ); 
    808812        $id = intval($id); 
     813 
    809814        if ( 'RAND' == $order ) 
    810815                $orderby = 'none'; 
    811816 
     
    817822                foreach ( $_attachments as $key => $val ) { 
    818823                        $attachments[$val->ID] = $_attachments[$key]; 
    819824                } 
    820         } elseif ( !empty($exclude) ) { 
     825        } elseif ( !empty($exclude) && $id ) { 
    821826                $exclude = preg_replace( '/[^0-9,]+/', '', $exclude ); 
    822827                $attachments = get_children( array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); 
    823         } else { 
     828        } elseif ( $id ) { 
    824829                $attachments = get_children( array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby) ); 
    825830        } 
    826831 
     
    834839                return $output; 
    835840        } 
    836841 
    837         $itemtag = tag_escape($itemtag); 
    838         $captiontag = tag_escape($captiontag); 
     842        if ( $mce_preview ) { 
     843                $itemtag = 'dl'; 
     844                $icontag = 'dt'; 
     845                $captiontag = 'dd'; 
     846        } else { 
     847                $itemtag = tag_escape($itemtag); 
     848                $captiontag = tag_escape($captiontag); 
     849        } 
     850 
    839851        $columns = intval($columns); 
    840852        $itemwidth = $columns > 0 ? floor(100/$columns) : 100; 
    841853        $float = is_rtl() ? 'right' : 'left'; 
     
    864876                </style> 
    865877                <!-- see gallery_shortcode() in wp-includes/media.php -->"; 
    866878        $size_class = sanitize_html_class( $size ); 
    867         $gallery_div = "<div id='$selector' class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; 
    868         $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); 
     879        $wrapper_id = $mce_preview ? '' : " id='$selector'"; 
     880        $gallery_div = "<div{$wrapper_id} class='gallery galleryid-{$id} gallery-columns-{$columns} gallery-size-{$size_class}'>"; 
     881        $itemclass = 'gallery-item'; 
     882        $clear_break = "<br style='clear: both' />"; 
    869883 
     884        if ( $mce_preview ) { 
     885                $output = $gallery_div; 
     886        } else { 
     887                $output = apply_filters( 'gallery_style', $gallery_style . "\n\t\t" . $gallery_div ); 
     888        } 
     889 
    870890        $i = 0; 
    871891        foreach ( $attachments as $id => $attachment ) { 
    872892                $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); 
    873893 
    874                 $output .= "<{$itemtag} class='gallery-item'>"; 
    875                 $output .= " 
    876                         <{$icontag} class='gallery-icon'> 
    877                                 $link 
    878                         </{$icontag}>"; 
     894                $output .= "\n<{$itemtag} class='$itemclass'><{$icontag} class='gallery-icon'>$link</{$icontag}>"; 
     895                 
    879896                if ( $captiontag && trim($attachment->post_excerpt) ) { 
    880                         $output .= " 
    881                                 <{$captiontag} class='wp-caption-text gallery-caption'> 
    882                                 " . wptexturize($attachment->post_excerpt) . " 
    883                                 </{$captiontag}>"; 
     897                        $output .= "<{$captiontag} class='wp-caption-text gallery-caption'>" 
     898                                . wptexturize($attachment->post_excerpt) . 
     899                                "</{$captiontag}>"; 
    884900                } 
     901 
    885902                $output .= "</{$itemtag}>"; 
     903 
    886904                if ( $columns > 0 && ++$i % $columns == 0 ) 
    887                         $output .= '<br style="clear: both" />'; 
     905                        $output .= $clear_break; 
    888906        } 
    889907 
    890         $output .= " 
    891                         <br style='clear: both;' /> 
    892                 </div>\n"; 
     908        if ( substr( $output, -strlen($clear_break) ) != $clear_break ) 
     909                $output .= $clear_break; 
    893910 
     911        $output .= "</div>\n"; 
     912 
    894913        return $output; 
    895914} 
    896915