Changeset 5357
- Timestamp:
- 08/22/06 13:00:00 (2 years ago)
- Location:
- trunk/src
- Files:
-
- 2 modified
-
event.js (modified) (8 diffs)
-
event/browser.js (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/event.js
r5069 r5357 173 173 174 174 this.connect = function(){ 175 // summary: 176 // dojo.event.connect is the glue that holds most Dojo-based 177 // applications together. 175 178 if(arguments.length == 1){ 176 179 var ao = arguments[0]; 177 180 }else{ 178 181 var ao = interpolateArgs(arguments, true); 182 } 183 if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){ 184 if(dojo.render.html.ie){ 185 ao.srcFunc = "onkeydown"; 186 this.connect(ao); 187 } 188 ao.srcFunc = "onkeypress"; 179 189 } 180 190 … … 232 242 this.connectBefore = function(){ 233 243 var args = ["before"]; 234 for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }244 for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); } 235 245 return this.connect.apply(this, args); 236 246 } … … 238 248 this.connectAround = function(){ 239 249 var args = ["around"]; 240 for(var i = 0; i < arguments.length; i++) { args.push(arguments[i]); }250 for(var i = 0; i < arguments.length; i++){ args.push(arguments[i]); } 241 251 return this.connect.apply(this, args); 242 252 } … … 279 289 280 290 this.disconnect = function(){ 281 var ao = interpolateArgs(arguments, true); 291 if(arguments.length == 1){ 292 var ao = arguments[0]; 293 }else{ 294 var ao = interpolateArgs(arguments, true); 295 } 282 296 if(!ao.adviceFunc){ return; } // nothing to disconnect 297 if(dojo.lang.isString(ao.srcFunc) && (ao.srcFunc.toLowerCase() == "onkey") ){ 298 if(dojo.render.html.ie){ 299 ao.srcFunc = "onkeydown"; 300 this.disconnect(ao); 301 } 302 ao.srcFunc = "onkeypress"; 303 } 283 304 var mjp = dojo.event.MethodJoinPoint.getForMethod(ao.srcObj, ao.srcFunc); 284 305 return mjp.removeAdvice(ao.adviceObj, ao.adviceFunc, ao.adviceType, ao.once); … … 292 313 // exactly one of these is created whenever a method with a joint point is run, 293 314 // if there is at least one 'around' advice. 294 dojo.event.MethodInvocation = function(join_point, obj, args) {315 dojo.event.MethodInvocation = function(join_point, obj, args){ 295 316 this.jp_ = join_point; 296 317 this.object = obj; … … 303 324 } 304 325 305 dojo.event.MethodInvocation.prototype.proceed = function() {326 dojo.event.MethodInvocation.prototype.proceed = function(){ 306 327 this.around_index++; 307 328 if(this.around_index >= this.jp_.around.length){ … … 326 347 } 327 348 328 dojo.event.MethodJoinPoint.getForMethod = function(obj, methname) {349 dojo.event.MethodJoinPoint.getForMethod = function(obj, methname){ 329 350 // if(!(methname in obj)){ 330 351 if(!obj){ obj = dj_global; } … … 406 427 disconnect: dojo.lang.forward("unintercept"), 407 428 408 run: function() {429 run: function(){ 409 430 var obj = this.object||dj_global; 410 431 var args = arguments; -
trunk/src/event/browser.js
r5022 r5357 95 95 if(!capture){ var capture = false; } 96 96 evtName = evtName.toLowerCase(); 97 if( (evtName == "onkey") || (evtName == "key") ){ 98 if(dojo.render.html.ie){ 99 this.removeListener(node, "onkeydown", fp, capture); 100 } 101 evtName = "onkeypress"; 102 } 97 103 if(evtName.substr(0,2)=="on"){ evtName = evtName.substr(2); } 98 104 // FIXME: this is mostly a punt, we aren't actually doing anything on IE … … 106 112 if(!capture){ var capture = false; } 107 113 evtName = evtName.toLowerCase(); 114 if( (evtName == "onkey") || (evtName == "key") ){ 115 if(dojo.render.html.ie){ 116 this.addListener(node, "onkeydown", fp, capture, dontFix); 117 } 118 evtName = "onkeypress"; 119 } 108 120 if(evtName.substr(0,2)!="on"){ evtName = "on"+evtName; } 109 121 … … 172 184 KEY_BACKSPACE: 8, 173 185 KEY_TAB: 9, 186 KEY_CLEAR: 12, 174 187 KEY_ENTER: 13, 175 188 KEY_SHIFT: 16, … … 190 203 KEY_INSERT: 45, 191 204 KEY_DELETE: 46, 205 KEY_HELP: 47, 192 206 KEY_LEFT_WINDOW: 91, 193 207 KEY_RIGHT_WINDOW: 92, 194 208 KEY_SELECT: 93, 209 KEY_NUMPAD_0: 96, 210 KEY_NUMPAD_1: 97, 211 KEY_NUMPAD_2: 98, 212 KEY_NUMPAD_3: 99, 213 KEY_NUMPAD_4: 100, 214 KEY_NUMPAD_5: 101, 215 KEY_NUMPAD_6: 102, 216 KEY_NUMPAD_7: 103, 217 KEY_NUMPAD_8: 104, 218 KEY_NUMPAD_9: 105, 219 KEY_NUMPAD_MULTIPLY: 106, 220 KEY_NUMPAD_PLUS: 107, 221 KEY_NUMPAD_ENTER: 108, 222 KEY_NUMPAD_MINUS: 109, 223 KEY_NUMPAD_PERIOD: 110, 224 KEY_NUMPAD_DIVIDE: 111, 195 225 KEY_F1: 112, 196 226 KEY_F2: 113, … … 205 235 KEY_F11: 122, 206 236 KEY_F12: 123, 237 KEY_F13: 124, 238 KEY_F14: 125, 239 KEY_F15: 126, 207 240 KEY_NUM_LOCK: 144, 208 241 KEY_SCROLL_LOCK: 145 … … 225 258 evt.keys = this.revKeys; 226 259 // FIXME: how can we eliminate this iteration? 227 for(var key in this.keys) {260 for(var key in this.keys){ 228 261 evt[key] = this.keys[key]; 229 262 } 230 if((dojo.render.html.ie)&&(evt["type"] == "keypress")){ 231 evt.charCode = evt.keyCode; 232 } 233 } 234 263 if(evt["type"] == "keydown" && dojo.render.html.ie){ 264 switch(evt.keyCode){ 265 case evt.KEY_SHIFT: 266 case evt.KEY_CTRL: 267 case evt.KEY_ALT: 268 case evt.KEY_CAPS_LOCK: 269 case evt.KEY_LEFT_WINDOW: 270 case evt.KEY_RIGHT_WINDOW: 271 case evt.KEY_SELECT: 272 case evt.KEY_NUM_LOCK: 273 case evt.KEY_SCROLL_LOCK: 274 // I'll get these in keypress after the OS munges them based on numlock 275 case evt.KEY_NUMPAD_0: 276 case evt.KEY_NUMPAD_1: 277 case evt.KEY_NUMPAD_2: 278 case evt.KEY_NUMPAD_3: 279 case evt.KEY_NUMPAD_4: 280 case evt.KEY_NUMPAD_5: 281 case evt.KEY_NUMPAD_6: 282 case evt.KEY_NUMPAD_7: 283 case evt.KEY_NUMPAD_8: 284 case evt.KEY_NUMPAD_9: 285 case evt.KEY_NUMPAD_PERIOD: 286 break; // just ignore the keys that can morph 287 case evt.KEY_NUMPAD_MULTIPLY: 288 case evt.KEY_NUMPAD_PLUS: 289 case evt.KEY_NUMPAD_ENTER: 290 case evt.KEY_NUMPAD_MINUS: 291 case evt.KEY_NUMPAD_DIVIDE: 292 break; // I could handle these but just pick them up in keypress 293 case evt.KEY_PAUSE: 294 case evt.KEY_TAB: 295 case evt.KEY_BACKSPACE: 296 case evt.KEY_ENTER: 297 case evt.KEY_ESCAPE: 298 case evt.KEY_PAGE_UP: 299 case evt.KEY_PAGE_DOWN: 300 case evt.KEY_END: 301 case evt.KEY_HOME: 302 case evt.KEY_LEFT_ARROW: 303 case evt.KEY_UP_ARROW: 304 case evt.KEY_RIGHT_ARROW: 305 case evt.KEY_DOWN_ARROW: 306 case evt.KEY_INSERT: 307 case evt.KEY_DELETE: 308 case evt.KEY_F1: 309 case evt.KEY_F2: 310 case evt.KEY_F3: 311 case evt.KEY_F4: 312 case evt.KEY_F5: 313 case evt.KEY_F6: 314 case evt.KEY_F7: 315 case evt.KEY_F8: 316 case evt.KEY_F9: 317 case evt.KEY_F10: 318 case evt.KEY_F11: 319 case evt.KEY_F12: 320 case evt.KEY_F12: 321 case evt.KEY_F13: 322 case evt.KEY_F14: 323 case evt.KEY_F15: 324 case evt.KEY_CLEAR: 325 case evt.KEY_HELP: 326 evt.key = evt.keyCode; 327 break; 328 default: 329 if(evt.ctrlKey || evt.altKey){ 330 var unifiedCharCode = evt.keyCode; 331 // if lower case but keycode is uppercase, convert it 332 if(unifiedCharCode >= 65 && unifiedCharCode <= 90 && evt.shiftKey == false){ 333 unifiedCharCode += 32; 334 } 335 if(unifiedCharCode >= 1 && unifiedCharCode <= 26 && evt.ctrlKey){ 336 unifiedCharCode += 96; // 001-032 = ctrl+[a-z] 337 } 338 evt.key = String.fromCharCode(unifiedCharCode); 339 } 340 } 341 } else if(evt["type"] == "keypress"){ 342 if(dojo.render.html.opera){ 343 if(evt.which == 0){ 344 evt.key = evt.keyCode; 345 }else if(evt.which > 0){ 346 switch(evt.which){ 347 case evt.KEY_SHIFT: 348 case evt.KEY_CTRL: 349 case evt.KEY_ALT: 350 case evt.KEY_CAPS_LOCK: 351 case evt.KEY_NUM_LOCK: 352 case evt.KEY_SCROLL_LOCK: 353 break; 354 case evt.KEY_PAUSE: 355 case evt.KEY_TAB: 356 case evt.KEY_BACKSPACE: 357 case evt.KEY_ENTER: 358 case evt.KEY_ESCAPE: 359 evt.key = evt.which; 360 break; 361 default: 362 var unifiedCharCode = evt.which; 363 if((evt.ctrlKey || evt.altKey || evt.metaKey) && (evt.which >= 65 && evt.which <= 90 && evt.shiftKey == false)){ 364 unifiedCharCode += 32; 365 } 366 evt.key = String.fromCharCode(unifiedCharCode); 367 } 368 } 369 }else if(dojo.render.html.ie){ // catch some IE keys that are hard to get in keyDown 370 // key combinations were handled in onKeyDown 371 if(!evt.ctrlKey && !evt.altKey && evt.keyCode >= evt.KEY_SPACE){ 372 evt.key = String.fromCharCode(evt.keyCode); 373 } 374 }else if(dojo.render.html.safari){ 375 switch(evt.keyCode){ 376 case 63232: evt.key = evt.KEY_UP_ARROW; break; 377 case 63233: evt.key = evt.KEY_DOWN_ARROW; break; 378 case 63234: evt.key = evt.KEY_LEFT_ARROW; break; 379 case 63235: evt.key = evt.KEY_RIGHT_ARROW; break; 380 default: 381 evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode; 382 } 383 }else{ 384 evt.key = evt.charCode > 0 ? String.fromCharCode(evt.charCode) : evt.keyCode; 385 } 386 } 387 } 235 388 if(dojo.render.html.ie){ 236 389 if(!evt.target){ evt.target = evt.srcElement; } … … 257 410 } 258 411 259 this.stopEvent = function(ev) {412 this.stopEvent = function(ev){ 260 413 if(window.event){ 261 414 ev.returnValue = false;