diff --git src/wp-admin/js/edit-comments.js src/wp-admin/js/edit-comments.js
index b9a9f2cf85..35938d5961 100644
|
|
setCommentsList = function() { |
288 | 288 | $('.avatar', el).first().clone().prependTo('#undo-' + id + ' .' + action + '-undo-inside'); |
289 | 289 | |
290 | 290 | a.click(function( e ){ |
| 291 | |
| 292 | // Abort undo if there is an unfinished AJAX request involving the same comment. |
| 293 | if ( settings.xhrs && 'undefined' !== typeof settings.xhrs['comment-' + id] && 4 !== settings.xhrs['comment-' + id].readyState ) { |
| 294 | return false; |
| 295 | } |
291 | 296 | e.preventDefault(); |
292 | 297 | e.stopPropagation(); // ticket #35904 |
293 | 298 | list.wpList.del(this); |
diff --git src/wp-includes/js/wp-lists.js src/wp-includes/js/wp-lists.js
index c73471dbcb..33282196ed 100644
|
|
wpList = { |
184 | 184 | * 'timeout', 'abort', or 'parsererror'. |
185 | 185 | * @param {object} settings.parsed Parsed response object. |
186 | 186 | */ |
187 | | dimAfter: null |
| 187 | dimAfter: null, |
| 188 | |
| 189 | /** |
| 190 | * Track XHR connections. |
| 191 | * @type {Object} |
| 192 | */ |
| 193 | xhrs: {} |
188 | 194 | }, |
189 | 195 | |
190 | 196 | /** |
… |
… |
wpList = { |
404 | 410 | data = wpList.parseData( $element, 'delete' ), |
405 | 411 | $eventTarget, parsedResponse, returnedResponse; |
406 | 412 | |
| 413 | // Clear all finished AJAX requests from xhrs object. |
| 414 | if ( 'undefined' !== typeof wpList.xhrs ) { |
| 415 | for ( var key in wpList.xhrs ) { |
| 416 | if ( 4 === wpList.xhrs[ key ].readyState ) { |
| 417 | delete wpList.xhrs[ key ]; |
| 418 | } |
| 419 | } |
| 420 | } |
| 421 | |
| 422 | |
407 | 423 | settings = settings || {}; |
408 | 424 | settings = wpList.pre.call( list, $element, settings, 'delete' ); |
409 | 425 | |
410 | 426 | settings.element = data[2] || settings.element || null; |
411 | 427 | settings.delColor = data[3] ? '#' + data[3] : settings.delColor; |
412 | 428 | |
| 429 | // Return if there is already an AJAX request in progress involving the same element. |
| 430 | if ( wpList.xhrs && 'undefined' !== typeof wpList.xhrs[ s.element ] && 4 !== wpList.xhrs[ s.element ].readyState ) { |
| 431 | return false; |
| 432 | } |
| 433 | |
413 | 434 | if ( ! settings || ! settings.element ) { |
414 | 435 | return false; |
415 | 436 | } |
… |
… |
wpList = { |
473 | 494 | } |
474 | 495 | }; |
475 | 496 | |
476 | | $.ajax( settings ); |
| 497 | wpList.xhrs = wpList.xhrs || {}; |
| 498 | wpList.xhrs[ s.element ] = $.ajax( settings ); |
477 | 499 | |
478 | 500 | return false; |
479 | 501 | }, |
… |
… |
wpList = { |
504 | 526 | settings.dimAddColor = data[4] ? '#' + data[4] : settings.dimAddColor; |
505 | 527 | settings.dimDelColor = data[5] ? '#' + data[5] : settings.dimDelColor; |
506 | 528 | |
| 529 | // Return if there is already an AJAX request in progress involving the same element. |
| 530 | if ( wpList.xhrs && 'undefined' !== typeof wpList.xhrs[ s.element ] && 4 !== wpList.xhrs[ s.element ].readyState ) { |
| 531 | return false; |
| 532 | } |
| 533 | |
507 | 534 | if ( ! settings || ! settings.element || ! settings.dimClass ) { |
508 | 535 | return true; |
509 | 536 | } |
… |
… |
wpList = { |
587 | 614 | }; |
588 | 615 | |
589 | 616 | settings.complete = function( jqXHR, status ) { |
| 617 | |
| 618 | // Clear all finished AJAX requests from xhrs object. |
| 619 | if ( 'undefined' !== typeof wpList.xhrs ) { |
| 620 | for ( var key in wpList.xhrs ) { |
| 621 | if ( 4 === wpList.xhrs[ key ].readyState ) { |
| 622 | delete wpList.xhrs[ key ]; |
| 623 | } |
| 624 | } |
| 625 | } |
| 626 | |
590 | 627 | if ( $.isFunction( settings.dimAfter ) ) { |
591 | 628 | $eventTarget.queue( function() { |
592 | 629 | settings.dimAfter( returnedResponse, $.extend( { |
… |
… |
wpList = { |
598 | 635 | } |
599 | 636 | }; |
600 | 637 | |
601 | | $.ajax( settings ); |
| 638 | wpList.xhrs = wpList.xhrs || {}; |
| 639 | wpList.xhrs[ s.element ] = $.ajax( settings ); |
602 | 640 | |
603 | 641 | return false; |
604 | 642 | }, |
… |
… |
wpList = { |
836 | 874 | $.fn.wpList = function( settings ) { |
837 | 875 | this.each( function( index, list ) { |
838 | 876 | list.wpList = { |
839 | | settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, settings ) |
| 877 | settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, { xhrs: wpList.xhrs }, settings ) |
840 | 878 | }; |
841 | 879 | |
842 | 880 | $.each( functions, function( func, callback ) { |