*
* @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;
}
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
[ '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
[ '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]' ];