[wp-trac] [WordPress Trac] #35904: Comments screen: extra AJAX requests when undoing spam or trash actions

WordPress Trac noreply at wordpress.org
Mon Feb 22 18:00:21 UTC 2016


#35904: Comments screen: extra AJAX requests when undoing spam or trash actions
----------------------------+-----------------------------
 Reporter:  afercia         |      Owner:
     Type:  defect (bug)    |     Status:  new
 Priority:  normal          |  Milestone:  4.5
Component:  Comments        |    Version:  4.4
 Severity:  normal          |   Keywords:  has-screenshots
  Focuses:  ui, javascript  |
----------------------------+-----------------------------
 Introduced in [34977] and [33655].

 To easily reproduce and clearly see what's happening, I'd recommend to be
 sure to have several comments in the comments list table and then set
 "Number of items per page" in the Screen Options to 2.

 Inspect the Network panel in your browser console and Trash a comment. So
 far so good, one request to delete the comment row and one request to
 refill the list adding one comment row from the "extra" hidden list.

 Now click on "Undo" and... four requests! And an extra row gets added at
 the bottom of the list. This shouldn't happen. See in the screenshot
 below:

 [[Image(https://cldup.com/S1ohY22_fG.png)]]

 In WordPress 4.3 the "undo" action triggers just one request, the only one
 that's needed to delete the "undo" row. So what's happening here?

 First part: [34977]

 Worth reminding when working with jQuery events, `return false` and
 `preventDefault()` are not exactly the same thing. `return false` does
 both `preventDefault()` and `stopPropagation()`.

 Since now there's only `preventDefault()` the click event bubbles up the
 DOM until it finds a click event delegated on the body targeting the same
 "undo" link
 This click event is actually in `wp-lists.js`, see:
 {{{
 $el.delegate( '[data-wp-lists^="delete:' + list.id + ':"]', 'click',
 function(){
 }}}
 a bit too more generic selector but I guess that's intentional since `wp-
 lists.js` is intended for general purpose.

 To fix this the event bubbling must be stopped, as `return false` was
 doing before the change.

 Second part: [33655]

 Repeat the test, when clicking "undo" there's still one extra request
 running.
 Before [33655] there was a check for the `untrash || unspam` actions in
 order to return before calling `wpList.add()` and `refillTheExtraList()`.
 {{{
 if ( ! theExtraList || theExtraList.size() === 0 ||
 theExtraList.children().size() === 0 || untrash || unspam ) {
         return;
 }
 }}}

 So there's still the need to return when "undoing", this can be done in
 several ways, I'd keep it simple and just use a flag.

--
Ticket URL: <https://core.trac.wordpress.org/ticket/35904>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list