Double-click doesn't select the last word of the line if there is no end punctuation and next element is inline-block
Categories
(Core :: DOM: Selection, defect, P2)
Tracking
()
People
(Reporter: tustamido, Assigned: emilio)
References
(Regression)
Details
(Keywords: regression)
Attachments
(2 files)
As anyone who knows how much easier double-click + drag makes text selection (you don't have to aim at word boundaries), I use that feature a lot.
But I'm annoyed that it doesn't work properly in WhatsApp Web. If the last line of a message (almost vertically aligned with message time) doesn't have end punctuation, I can't select the last word. If I insist by dragging all the way to the right, then the last word is selected, but message time is selected too ("18:08" is how time is formatted here, just in case). It's impossible to include the last word without selecting the hour (18) too.
So I stripped down the code until I got the bare minimum to reproduce the issue. See the attachment.
You can't select the last word of the line by double-clicking it. And if you double-click a word before and drag to the end of the line, still the last word wouldn't be selected.
Even if you double-click far to the right of the end of the line and drag to the left, last word is skipped in selection.
Then I ran mozregression and found out that it's a regression. As Mozilla deletes autoland builds from over a year ago, I can't point to the exact change that cause the regression, but this is the range:
https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=3804441e575c9f46fcb03894de3c780eeae7197f&tochange=ee7f64d0764961e9663c681efc8d2b3759af79d6
Works fine in Blink.
You shoud also notice that if you include an end punctuation in the line, then you can select until the end including the punctuation.
![]() |
||
Comment 2•3 years ago
|
||
Regression window:
https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=0be3532802e3bad1ad91ee635a6b7abb902d3d27&tochange=0be927d6e79e5b2fc06efef46569f4df2890ee93
Assignee | ||
Updated•3 years ago
|
Assignee | ||
Updated•3 years ago
|
Assignee | ||
Comment 3•3 years ago
|
||
What the rest of the selection code uses is IsBlockOutside, which is the
right thing to do here.
Updated•3 years ago
|
Assignee | ||
Comment 4•3 years ago
|
||
Thanks for the excellent reduced test-case, and Alice for finding the regression range!
Pushed by ealvarez@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/4551319b3f43 Fix bogus block-frame check in GetRangeForFrame. r=saschanaz
Created web-platform-tests PR https://github.com/web-platform-tests/wpt/pull/28104 for changes under testing/web-platform/tests
(In reply to Alice0775 White from comment #2)
Regression window:
https://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=0be3532802e3bad1ad91ee635a6b7abb902d3d27&tochange=0be927d6e79e5b2fc06efef46569f4df2890ee93
Sorry for the offtopic, but how did you get that range? For me, mozregression doesn't go beyond what I posted. It would be very useful to be able to get more specific ranges for builds from over a year ago.
And Emilio, thanks for the fix!
Comment hidden (offtopic) |
Updated•3 years ago
|
Upstream PR merged by moz-wptsync-bot
Comment 10•3 years ago
|
||
bugherder |
Updated•3 years ago
|
Reporter | ||
Comment 11•2 years ago
|
||
Beyond the regression above, maybe the fix didn't really fix it as it should have.
If you open the test-case, double-click the first word (select
), hold and move to the far right, only select
will stay selected*, but all the text should be selected.
In Fx 52, before the original regression, this doesn't happen, the entire phrase is selected as expected. The same in Vivaldi (Chromium-based).
*: this is inconsistent. Sometimes all the text is selected, but it usually doesn't go further than the first word.
Description
•