Page MenuHomePhabricator

Shift-clicking checkboxes in Opera 9.2
Closed, ResolvedPublic

Description

Author: alexsm333

Description:
Checkbox checked state during mouseUp event

When you try using shift-clicking checkboxes in Opera 9.20, for example on http://en.wikipedia.org/w/index.php?title=Special:Watchlist&action=edit, it doesn't work properly like in other browsers.

Why: the code
if ( is_opera ) { // opera has already toggled the checkbox by this point

endState = !endState;

}
in checkboxMouseupHandler() in http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js

What the comment says is not true, at least for Opera 9.2. Try attached example in Opera and Firefox/IE and behaviour is the same: mouseup event shows previous checkbox state.

Suggestion: determine which exactly old Opera versions behave incorrectly and modify the condition above.


Version: 1.11.x
Severity: normal

Attached:

Details

Reference
bz10642

Event Timeline

bzimport raised the priority of this task from to Medium.Nov 21 2014, 9:48 PM
bzimport set Reference to bz10642.

Fixed in r24272:

The previous code was using the 'onmouseup' event to trigger the shift-click multiple selection behavior. This had a number of problems:

  • Opera 6.0 doesn't fire this event on radio buttons
  • Opera 7.x and 8.x flip the check state before sending the event, while Opera 9.x and other browsers flip it after
  • A UA check for Opera was used to work around the state inconsistency for 7.x and 8.x, which broke on 9.x
  • Minor quibble: the event fires if you click outside the radio and release while the mouse is over it, though that wouldn't normally count as a click on the radio.

I've switched it to use the 'onclick' event handler instead, which resolves this:

  • Opera 6.x fires this event
  • All tested browsers have flipped the check state before the event, so special-case code can be removed.

Tested browsers:

  • Opera 9.2, 9.0, 8.5, 8.0, 7.5, 6.0/Mac
  • Firefox 2/Mac
  • Safari 2/Mac
  • Safari 3/Win
  • IE 7/Win
  • IE 6/Win
  • IE 5.2/Mac
  • iCab 3/Mac
  • Mozilla 1.1/Mac

nvervelle wrote:

I think the bug fix introduced a side effect :

I have created an extension that can create checkboxes through Javascript with my on event handler for onclick(). With this fix, checkboxes don't work any more (no events). See http://wiki.jmol.org/index.php/Sandbox for an example

Could wikibits.js be modified again for only calling "cb.onclick = checkboxMouseupHandler" only when there's not already a handler for cb.onclick ?

Thanks in advance,
Nico

Switching to adding an event handler hook instead of setting onclick explicitly would probably fix this...