WordPress.org

Make WordPress Core

Ticket #35501: 35501.5.patch

File 35501.5.patch, 3.5 KB (added by vagios, 5 years ago)
  • src/wp-admin/js/edit-comments.js

     
    288288                        $('.avatar', el).first().clone().prependTo('#undo-' + id + ' .' + action + '-undo-inside');
    289289
    290290                        a.click(function( e ){
     291
     292                                // Abort undo if there is an unfinished AJAX request involving the same comment.
     293                                if ( settings.xhrs && undefined !== settings.xhrs['comment-' + id] && 4 !== settings.xhrs['comment-' + id].readyState ) {
     294                                        return false;
     295                                }
    291296                                e.preventDefault();
    292297                                e.stopPropagation(); // ticket #35904
    293298                                list.wpList.del(this);
  • src/wp-includes/js/wp-lists.js

     
    1717                dimBefore: null, dimAfter: null
    1818        },
    1919
     20        xhrs: {},
     21
    2022        nonce: function(e,s) {
    2123                var url = wpAjax.unserialize(e.attr('href'));
    2224                return s.nonce || url._ajax_nonce || $('#' + s.element + ' input[name="_ajax_nonce"]').val() || url._wpnonce || $('#' + s.element + ' input[name="_wpnonce"]').val() || 0;
     
    160162         * @return {boolean}
    161163         */
    162164        ajaxDel: function( e, s ) {
     165
     166                // Clear all finished AJAX requests from xhrs object.
     167                if ( undefined !== wpList.xhrs ) {
     168                        for ( var key in wpList.xhrs ) {
     169                                if ( 4 === wpList.xhrs[key].readyState ) {
     170                                        delete wpList.xhrs[key];
     171                                }
     172                        }
     173                }
     174
    163175                e = $(e);
    164176                s = s || {};
    165177                var list = this, data = wpList.parseData(e,'delete'), element, res, rres;
     
    168180
    169181                s.element = data[2] || s.element || null;
    170182
     183                // Return if there is already an AJAX request in progress involving the same comment.
     184                if ( wpList.xhrs && undefined !== wpList.xhrs[s.element] && 4 !== wpList.xhrs[s.element].readyState ) {
     185                        return false;
     186                }
     187
    171188                if ( data[3] )
    172189                        s.delColor = '#' + data[3];
    173190                else
     
    225242                        }
    226243                };
    227244
    228                 $.ajax( s );
     245                wpList.xhrs = wpList.xhrs || {};
     246                wpList.xhrs[s.element] = $.ajax( s );
    229247                return false;
    230248        },
    231249
     
    233251                if ( $(e).parent().css('display') == 'none' ) // Prevent hidden links from being clicked by hotkeys
    234252                        return false;
    235253
     254                // Clear all finished AJAX requests from xhrs object.
     255                if ( undefined !== wpList.xhrs ) {
     256                        for ( var key in wpList.xhrs ) {
     257                                if ( 4 === wpList.xhrs[key].readyState ) {
     258                                        delete wpList.xhrs[key];
     259                                }
     260                        }
     261                }
     262
    236263                e = $(e);
    237264                s = s || {};
    238265
     
    243270                s.element = data[2] || s.element || null;
    244271                s.dimClass =  data[3] || s.dimClass || null;
    245272
     273                // Return if there is already an AJAX request in progress involving the same comment.
     274                if ( wpList.xhrs && undefined !== wpList.xhrs[s.element] && 4 !== wpList.xhrs[s.element].readyState ) {
     275                        return false;
     276                }
     277
     278
    246279                if ( data[4] )
    247280                        s.dimAddColor = '#' + data[4];
    248281                else
     
    330363                        }
    331364                };
    332365
    333                 $.ajax( s );
     366                wpList.xhrs = wpList.xhrs || {};
     367                wpList.xhrs[s.element] = $.ajax( s );
    334368                return false;
    335369        },
    336370
     
    487521        this.each( function() {
    488522                var _this = this;
    489523
    490                 this.wpList = { settings: $.extend( {}, wpList.settings, { what: wpList.parseData(this,'list')[1] || '' }, settings ) };
     524                this.wpList = {
     525                        settings: $.extend( {}, wpList.settings, { what: wpList.parseData(this,'list')[1] || '' }, { xhrs: wpList.xhrs }, settings )
     526                };
    491527                $.each( fs, function(i,f) { _this.wpList[i] = function( e, s ) { return wpList[f].call( _this, e, s ); }; } );
    492528        } );
    493529