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
* (bug 10631) Warn when illegal characters are removed from filename at upload
* Fix several JavaScript bugs under MSIE 5/Macintosh
* (bug 10591) Use Arabic numerals (0,1,2...) for the Malayam language
+* (bug 10642) Fix shift-click checkbox behavior for Opera 9.0+ and 6.0
+
== API changes since 1.10 ==
* to ensure that client-side caches don't keep obsolete copies of global
* styles.
*/
-$wgStyleVersion = '89';
+$wgStyleVersion = '90';
# Server-side caching:
var end = checkboxes.length;
checkboxes[end] = cb;
cb.index = end;
- cb.onmouseup = checkboxMouseupHandler;
+ cb.onclick = checkboxMouseupHandler;
}
if ( finish < inputs.length ) {
lastCheckbox = this.index;
return true;
}
- var endState = !this.checked;
- if ( is_opera ) { // opera has already toggled the checkbox by this point
- endState = !endState;
- }
+ var endState = this.checked;
var start, finish;
if ( this.index < lastCheckbox ) {
start = this.index + 1;