Opened 8 years ago
Closed 8 years ago
#40242 closed defect (bug) (fixed)
Bulk edit tag autocomplete layout error
Reported by: | davidbenton | Owned by: | afercia |
---|---|---|---|
Milestone: | 4.7.4 | Priority: | normal |
Severity: | normal | Version: | 4.7 |
Component: | Quick/Bulk Edit | Keywords: | has-screenshots has-patch commit fixed-major |
Focuses: | ui, javascript | Cc: |
Description
When bulk editing tags (or any taxonomy terms), the autocomplete suggestions <ul>
is positioned correctly when it is first opened, but closing and reopening the bulk edit form (by using the "Cancel" button, for example) causes the term autocomplete list to be positioned incorrectly. See image:
https://www.dropbox.com/s/c5iragizvk3wak3/Screenshot%202017-03-23%2012.46.19.png?dl=0
I was able to consistently reproduce this in latest Chrome and Safari on OS X for v4.7.2 and v4.7.3.
Attachments (3)
Change History (20)
#1
@
8 years ago
- Focuses javascript added; administration removed
- Keywords has-screenshots added
- Milestone changed from Awaiting Review to 4.7.4
- Version changed from 4.7.2 to 4.7
#2
@
8 years ago
Changing tags-suggest.js near line 153 from:
position: { my: 'left top+2' },
to...
position: { my: 'left top+2', at: 'left bottom' },
...solves for me. I'll work on submitting a patch, but I'm new around here so it may take a bit for me to figure out the right way to do that, and I wanted to go ahead and post a potential solution.
#3
@
8 years ago
- Keywords has-patch needs-testing added
Man, it's been a while since I used svn... hope that patch is right. :) I've tested the functionality in a couple browsers, and jQuery UI's docs on this seem straightforward, but would love feedback from someone who has more context for WP admin's inner workings.
#4
@
8 years ago
@davidbenton yep same idea here, ensuring the defaults are always passed fixes it for me. Not sure why it doesn't happen for quick edit though (still have to dig into that part). I'd just make sure to pass also collision
.
#6
@
8 years ago
To clarify, jQuery UI autocomplete uses the following defaults (which are different from the jQuery UI position defaults):
position: { my: "left top", at: "left bottom", collision: "none" },
This ticket was mentioned in Slack in #core-editor by afercia. View the logs.
8 years ago
#8
follow-up:
↓ 11
@
8 years ago
- Keywords commit added; needs-testing removed
Tested a bit more and I think the different behaviour between Bulk Edit (where the misplacing occurs) and Quick Edit (which works ok) depends on a mix of factors.
Both Quick Edit and Bulk Edit use a hidden form that then gets revealed. By the way, the Quick Edit one gets cloned each time with jQuery clone()
so it's a new object each time while the Bulk Edit one gets just moved through the DOM. I guess the Quick Edit autocomplete widget is always a new fresh instance and thus its options are properly extended, while the Bulk Edit autocomplete widget gets its options overridden the second time it gets used.
Regardless, passing always a complete position
object solves the positioning issue. Patch looks good to me. @davidbenton any thoughts? :)
#10
follow-up:
↓ 12
@
8 years ago
Yep, looks good to me @afercia, and works for me.
Thanks for digging deeper. Interesting about the differences between Quick Edit and Bulk Edit. Almost sounds like it may be a jQuery UI issue, or do you think Bulk Edit is using it in an unusual way? I will try to take a look at that myself, but probably won't be today.
I think the issue as described in the ticket is fixed by the patch, though, so as far as I'm concerned this can move forward as-is. Thanks!
#11
in reply to:
↑ 8
@
8 years ago
Replying to afercia:
40242.diff works properly and looks good here too.
#12
in reply to:
↑ 10
@
8 years ago
Replying to davidbenton:
Almost sounds like it may be a jQuery UI issue, or do you think Bulk Edit is using it in an unusual way?
Maybe a mix of both :) Yes, autocomplete here is used in a particular way. While Quick Edit uses each time a new fresh autocomplete instance, Bulk Edit re-uses the same instance.
On the other hand what autocomplete does when the suggestions get displayed doesn't work for some edge cases. It seems to me it defeats the purpose of extending the defaults with the passed options, since the default position
object there is incomplete (there's just the of
property). This could be confusing for developers because when using .extend()
we should safely assume there are always some proper defaults, even when using autocomplete in a particular way.
Maybe worth considering to check if an autocomplete widget instance already exists and avoid calling again wpTagsSuggest()
in that case. /cc @azaozz
#13
follow-up:
↓ 14
@
8 years ago
While 40242.diff works, 40242.2.diff also avoids to call again wpTagsSuggest()
when an autocomplete widget instance already exists for the Bulk Edit textarea. This makes passing the at
and collision
properties not strictly necessary but I'd say to keep them, just in case...
#14
in reply to:
↑ 13
@
8 years ago
I found a jQuery UI ticket addressing this, and it was closed as "not a bug." So, while I find that behavior less than intuitive, I guess it is as intended by jQuery UI.
Replying to afercia:
40242.2.diff [...] makes passing the
at
andcollision
properties not strictly necessary but I'd say to keep them, just in case...
I think that's reasonable. It makes the position more explicit and readable, which I'd consider valuable even if those are the defaults, especially given the potential confusion of different defaults for jQuery UI and jQuery UI autocomplete.
@thanks @davidbenton, I was able to reproduce it in Firefox too, seems something related to jQuery ui autocomplete not being able to correctly calculate the left position when the Quick Edit form gets closed and then re-opened. Introduced in 4.6 see #33902. Would be nice to try to fix it in the next minor release, but I will leave the decision to the release lead of course.
Re-posting your screenshot to make it immediately visible: