From: David Lynch Date: Mon, 9 Jan 2017 21:23:31 +0000 (-0800) Subject: jquery.accessKeyLabel: correct accesskey for MacOS Firefox >= 14 X-Git-Tag: 1.31.0-rc.0~4363 X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/?a=commitdiff_plain;h=3580929e36e99973a6cde9afa2ebae9c087f7ce6;p=lhc%2Fweb%2Fwiklou.git jquery.accessKeyLabel: correct accesskey for MacOS Firefox >= 14 Rewrote the accesskey logic to be a switch rather than a fuzzy pile of ifs, so it's easier to understand. Bug: T121183 Change-Id: Id4de206ab92fba1468c6b1a9a199150561cce33c --- diff --git a/resources/src/jquery/jquery.accessKeyLabel.js b/resources/src/jquery/jquery.accessKeyLabel.js index f25944c94e..4f900a4d1e 100644 --- a/resources/src/jquery/jquery.accessKeyLabel.js +++ b/resources/src/jquery/jquery.accessKeyLabel.js @@ -24,7 +24,7 @@ * * @private * @param {Object} [ua] An object with a 'userAgent' and 'platform' property. - * @return {Array} Array with 0 or more of the string values: ctrl, option, alt, shift, esc + * @return {Array} Array with 1 or more of the string values, in this order: ctrl, option, alt, shift, esc */ function getAccessKeyModifiers( ua ) { var profile, accessKeyModifiers; @@ -35,49 +35,58 @@ } profile = $.client.profile( ua ); - accessKeyModifiers = [ 'alt' ]; - - // Classic Opera on any platform - if ( profile.name === 'opera' && profile.versionNumber < 15 ) { - accessKeyModifiers = [ 'shift', 'esc' ]; - - // Chrome and modern Opera on any platform - } else if ( profile.name === 'chrome' || profile.name === 'opera' ) { - accessKeyModifiers = ( - profile.platform === 'mac' ? - // Chrome on Mac - [ 'ctrl', 'option' ] : - // Chrome on Windows or Linux + + switch ( profile.name ) { + case 'chrome': + case 'opera': + if ( profile.name === 'opera' && profile.versionNumber < 15 ) { + accessKeyModifiers = [ 'shift', 'esc' ]; + } else if ( profile.platform === 'mac' ) { + accessKeyModifiers = [ 'ctrl', 'option' ]; + } else { + // Chrome/Opera on Windows or Linux // (both alt- and alt-shift work, but alt with E, D, F etc does not // work since they are browser shortcuts) - [ 'alt', 'shift' ] - ); - - // Non-Windows Safari with webkit_version > 526 - } else if ( profile.platform !== 'win' && - profile.name === 'safari' && - profile.layoutVersion > 526 - ) { - accessKeyModifiers = [ 'ctrl', 'alt' ]; - - // Safari/Konqueror on any platform, or any browser on Mac - // (but not Safari on Windows) - } else if ( - !( profile.platform === 'win' && profile.name === 'safari' ) && - ( - profile.name === 'safari' || - profile.platform === 'mac' || - profile.name === 'konqueror' - ) - ) { - accessKeyModifiers = [ 'ctrl' ]; - - // Firefox/Iceweasel 2.x and later - } else if ( - ( profile.name === 'firefox' || profile.name === 'iceweasel' ) && - profile.versionBase > '1' - ) { - accessKeyModifiers = [ 'alt', 'shift' ]; + accessKeyModifiers = [ 'alt', 'shift' ]; + } + break; + case 'firefox': + case 'iceweasel': + if ( profile.versionBase < 2 ) { + // Before v2, Firefox used alt, though it was rebindable in about:config + accessKeyModifiers = [ 'alt' ]; + } else { + if ( profile.platform === 'mac' ) { + if ( profile.versionNumber < 14 ) { + accessKeyModifiers = [ 'ctrl' ]; + } else { + accessKeyModifiers = [ 'ctrl', 'option' ]; + } + } else { + accessKeyModifiers = [ 'alt', 'shift' ]; + } + } + break; + case 'safari': + case 'konqueror': + if ( profile.platform === 'win' ) { + accessKeyModifiers = [ 'alt' ]; + } else { + if ( profile.layoutVersion > 526 ) { + // Non-Windows Safari with webkit_version > 526 + accessKeyModifiers = [ 'ctrl', profile.platform === 'mac' ? 'option' : 'alt' ]; + } else { + accessKeyModifiers = [ 'ctrl' ]; + } + } + break; + case 'msie': + case 'edge': + accessKeyModifiers = [ 'alt' ]; + break; + default: + accessKeyModifiers = profile.platform === 'mac' ? [ 'ctrl' ] : [ 'alt' ]; + break; } // cache modifiers diff --git a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js index 532a6cedad..0fb7d9a71a 100644 --- a/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js +++ b/tests/qunit/suites/resources/jquery/jquery.accessKeyLabel.test.js @@ -12,12 +12,18 @@ [ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)', 'Win32', 'alt-' ], [ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 'Win32', 'alt-' ], [ 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 'Win64', 'alt-' ], + [ 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136', 'Win64', 'alt-' ], // Firefox [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.19) Gecko/20110420 Firefox/3.5.19', 'MacIntel', 'ctrl-' ], [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.17) Gecko/20110422 Ubuntu/10.10 (maverick) Firefox/3.6.17', 'Linux i686', 'alt-shift-' ], [ 'Mozilla/5.0 (Windows NT 6.0; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 'Win32', 'alt-shift-' ], + [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) Gecko/20100101 Firefox/50.0', 'MacIntel', 'ctrl-option-' ], + [ 'Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20121202 Firefox/17.0 Iceweasel/17.0.1', 'Linux 1686', 'alt-shift-' ], + [ 'Mozilla/5.0 (Windows NT 5.2; U; de; rv:1.8.0) Gecko/20060728 Firefox/1.5.0', 'Win32', 'alt-' ], // Safari / Konqueror - [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-alt-' ], + [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; nl-nl) AppleWebKit/531.22.7 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'MacIntel', 'ctrl-option-' ], + [ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_7; de-de) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3', 'MacIntel', 'ctrl-' ], + [ 'Mozilla/5.0 (Windows; U; Windows NT 5.1; cs-CZ) AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.29', 'Win32', 'alt-' ], [ 'Mozilla/5.0 (Windows; U; Windows NT 6.0; cs-CZ) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/4.0.5 Safari/531.22.7', 'Win32', 'alt-' ], [ 'Mozilla/5.0 (X11; Linux i686) KHTML/4.9.1 (like Gecko) Konqueror/4.9', 'Linux i686', 'ctrl-' ], // Opera @@ -25,7 +31,12 @@ [ 'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130', 'Win32', 'alt-shift-' ], // Chrome [ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_8) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.112 Safari/534.30', 'MacIntel', 'ctrl-option-' ], - [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ] + [ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.68 Safari/534.30', 'Linux i686', 'alt-shift-' ], + // Unknown! Note: These aren't necessarily *right*, this is just + // testing that we're getting the expected output based on the + // platform. + [ 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Gecko/20021111 Chimera/0.6', 'MacPPC', 'ctrl-' ], + [ 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.3a) Gecko/20021207 Phoenix/0.5', 'Linux i686', 'alt-' ] ], // strings appended to title to make sure updateTooltipAccessKeys handles them correctly updateTooltipAccessKeysTestData = [ '', ' [a]', ' [test-a]', ' [alt-b]' ];