Skip to content

Commit 4c92225

Browse files
committed
improved opera support, separated out new / old opera
1 parent f3f6910 commit 4c92225

File tree

1 file changed

+39
-12
lines changed

1 file changed

+39
-12
lines changed

keyDecode.js

+39-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,26 @@
11
window.keyDecode = (function() {
22

3+
// Abbreviations:
4+
// FF - Firefox
5+
// IE - Internet Explorer
6+
// C - Chrome
7+
// O - Opera
8+
// ON - Opera >= 9.50
9+
// OO - Opera < 9.50
10+
11+
var operaOld = false;
12+
if (window.opera) {
13+
var operaVersion = window.navigator.userAgent.match(/Version\/(.+)$/)[1];
14+
var operaMajor = Number(operaVersion.match(/^\d+/));
15+
var operaMinor = Number(operaVersion.match(/\d+$/));
16+
if (operaMajor < 9 || (operaMajor == 9 && operaMinor < 50)) {
17+
operaOld = true;
18+
}
19+
}
20+
321
var browser = navigator.userAgent.match('Chrome') ? 'Chrome' :
4-
window.opera ? 'Opera' :
22+
window.opera && operaOld ? 'Opera Old' :
23+
window.opera ? 'Opera New' :
524
navigator.userAgent.match('Firefox') ? 'Firefox' :
625
'IE';
726

@@ -67,8 +86,8 @@ window.keyDecode = (function() {
6786
// sends . as delete (keycode 46)
6887
// sends ' as right arrow (keycode 39)
6988

70-
// some opera codes are also used by odd linux browsers
71-
var O_Map = {
89+
// some old opera codes are also used by odd linux browsers
90+
var OO_Map = {
7291
78:'numpad .', // 78 not used elsewhere
7392
96:'`', // this is numpad 0 in other browsers
7493
42:'*', // can be sent by numpad or by shift-8 in rare cases
@@ -82,14 +101,17 @@ window.keyDecode = (function() {
82101
93:']' // this is menu elsewhere
83102
}
84103

104+
var O_Map = {
105+
57392:'control' // mac-only control key. is this used by old opera?
106+
}
107+
85108
var C_IE_Map = {
86109
186:';',
87110
187:'=',
88111
189:'-'
89-
90112
}
91113

92-
var C_FF_Map = {
114+
var ON_C_FF_Map = {
93115
224:'command'
94116
}
95117

@@ -98,7 +120,7 @@ window.keyDecode = (function() {
98120
61:'='
99121
}
100122

101-
var C_FF_IE_Map = {
123+
var ON_C_FF_IE_Map = {
102124
110:'numpad .', // 110 not used elsewhere, not same as .
103125
96:'numpad 0',
104126
97:'numpad 1',
@@ -162,23 +184,28 @@ window.keyDecode = (function() {
162184
result = 'f' + (code - 111);
163185
}
164186

165-
else if (browser === 'Opera' && O_Map[code]) {
187+
else if (browser === 'Opera Old' && OO_Map[code]) {
188+
result = OO_Map[code];
189+
}
190+
191+
else if (browser.match(/Opera/) && O_Map[code]) {
166192
result = O_Map[code];
167193
}
168194

169195
else if ((browser === 'Chrome' || browser === 'IE') && C_IE_Map[code]) {
170196
result = C_IE_Map[code];
171197
}
172198

173-
else if ((browser === 'Chrome' || browser === 'Firefox') && C_FF_Map[code]) {
174-
result = C_FF_Map[code];
199+
else if ((browser === 'Opera New' || browser === 'Chrome' || browser === 'Firefox') && ON_C_FF_Map[code]) {
200+
result = ON_C_FF_Map[code];
175201
}
176202

177-
else if ((browser === 'Chrome' || browser === 'Firefox' || browser === 'IE') && C_FF_IE_Map[code]) {
178-
result = C_FF_IE_Map[code];
203+
else if ((browser === 'Opera New' || browser === 'Chrome' ||
204+
browser === 'Firefox' || browser === 'IE') && ON_C_FF_IE_Map[code]) {
205+
result = ON_C_FF_IE_Map[code];
179206
}
180207

181-
else if ((browser === 'Chrome' || browser === 'Firefox' || browser === 'Opera') && C_FF_O_Map[code]) {
208+
else if ((browser === 'Chrome' || browser === 'Firefox' || browser.match(/Opera/)) && C_FF_O_Map[code]) {
182209
result = C_FF_O_Map[code];
183210
}
184211

0 commit comments

Comments
 (0)