1
1
window . keyDecode = ( function ( ) {
2
2
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 ( / V e r s i o n \/ ( .+ ) $ / ) [ 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
+
3
21
var browser = navigator . userAgent . match ( 'Chrome' ) ? 'Chrome' :
4
- window . opera ? 'Opera' :
22
+ window . opera && operaOld ? 'Opera Old' :
23
+ window . opera ? 'Opera New' :
5
24
navigator . userAgent . match ( 'Firefox' ) ? 'Firefox' :
6
25
'IE' ;
7
26
@@ -67,8 +86,8 @@ window.keyDecode = (function() {
67
86
// sends . as delete (keycode 46)
68
87
// sends ' as right arrow (keycode 39)
69
88
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 = {
72
91
78 :'numpad .' , // 78 not used elsewhere
73
92
96 :'`' , // this is numpad 0 in other browsers
74
93
42 :'*' , // can be sent by numpad or by shift-8 in rare cases
@@ -82,14 +101,17 @@ window.keyDecode = (function() {
82
101
93 :']' // this is menu elsewhere
83
102
}
84
103
104
+ var O_Map = {
105
+ 57392 :'control' // mac-only control key. is this used by old opera?
106
+ }
107
+
85
108
var C_IE_Map = {
86
109
186 :';' ,
87
110
187 :'=' ,
88
111
189 :'-'
89
-
90
112
}
91
113
92
- var C_FF_Map = {
114
+ var ON_C_FF_Map = {
93
115
224 :'command'
94
116
}
95
117
@@ -98,7 +120,7 @@ window.keyDecode = (function() {
98
120
61 :'='
99
121
}
100
122
101
- var C_FF_IE_Map = {
123
+ var ON_C_FF_IE_Map = {
102
124
110 :'numpad .' , // 110 not used elsewhere, not same as .
103
125
96 :'numpad 0' ,
104
126
97 :'numpad 1' ,
@@ -162,23 +184,28 @@ window.keyDecode = (function() {
162
184
result = 'f' + ( code - 111 ) ;
163
185
}
164
186
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 ( / O p e r a / ) && O_Map [ code ] ) {
166
192
result = O_Map [ code ] ;
167
193
}
168
194
169
195
else if ( ( browser === 'Chrome' || browser === 'IE' ) && C_IE_Map [ code ] ) {
170
196
result = C_IE_Map [ code ] ;
171
197
}
172
198
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 ] ;
175
201
}
176
202
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 ] ;
179
206
}
180
207
181
- else if ( ( browser === 'Chrome' || browser === 'Firefox' || browser === ' Opera' ) && C_FF_O_Map [ code ] ) {
208
+ else if ( ( browser === 'Chrome' || browser === 'Firefox' || browser . match ( / O p e r a / ) ) && C_FF_O_Map [ code ] ) {
182
209
result = C_FF_O_Map [ code ] ;
183
210
}
184
211
0 commit comments