Changeset 691

Show
Ignore:
Timestamp:
04/22/06 21:09:43 (2 years ago)
Author:
beau@hartshornesoftware.com
Message:

fixed Signal key handling, added key_events example

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • mochikit/trunk/MochiKit/Signal.js

    r676 r691  
    154154        // look for unicode characters here 
    155155        } else if (this.type() == 'keypress') { 
    156             k.code = (this._event.charCode || this._event.keyCode); 
    157             k.string = String.fromCharCode(k.code); 
     156             
     157            // IE does not fire keypress events for special keys 
     158            // FF fires, but sets charCode to 0, and sets the correct keyCode 
     159            // Safari fires, and sets keyCode and charCode to something stupid 
     160             
     161            k.code = 0; 
     162            k.string = ''; 
     163                         
     164            if (typeof(this._event.charCode) != 'undefined' &&  
     165                this._event.charCode !== 0 && 
     166                !MochiKit.Signal._specialMacKeys[this._event.charCode]) { 
     167                k.code = this._event.charCode; 
     168                k.string = String.fromCharCode(k.code); 
     169            } else if (this._event.keyCode && typeof(this._event.charCode) == 'undefined') { // IE 
     170                k.code = this._event.keyCode; 
     171                k.string = String.fromCharCode(k.code); 
     172            } 
     173             
    158174            return k; 
    159175        } 
     
    196212                                document.documentElement.clientTop || 
    197213                                document.body.clientTop 
     214                                 
     215                                and 
     216                                 
     217                                document.documentElement.clientLeft || 
     218                                document.body.clientLeft 
    198219 
    199220                                http://msdn.microsoft.com/workshop/author/dhtml/reference/ 
    200221                                    methods/getboundingclientrect.asp 
    201222 
    202                                 the offset is (2,2) in standards mode and (0,0) in quirks mode 
     223                                The offset is (2,2) in standards mode and (0,0) in quirks mode. 
    203224                                 
    204225            */ 
     
    322343} 
    323344 
     345MochiKit.Signal._specialMacKeys = { 
     346    63289: 'KEY_NUM_PAD_CLEAR', 
     347    63276: 'KEY_PAGE_UP', 
     348    63277: 'KEY_PAGE_DOWN', 
     349    63275: 'KEY_END', 
     350    63273: 'KEY_HOME', 
     351    63234: 'KEY_ARROW_LEFT', 
     352    63232: 'KEY_ARROW_UP', 
     353    63235: 'KEY_ARROW_RIGHT', 
     354    63233: 'KEY_ARROW_DOWN', 
     355    63302: 'KEY_INSERT', 
     356    63272: 'KEY_DELETE' 
     357} 
     358 
     359/* for KEY_F1 - KEY_F12 */ 
     360for (i = 63236; i <= 63242; i++) { 
     361    MochiKit.Signal._specialMacKeys[i] = 'KEY_F' + (i - 63236 + 1); // no F0 
     362} 
     363 
    324364MochiKit.Signal._specialKeys = { 
    325365    8: 'KEY_BACKSPACE', 
    326366    9: 'KEY_TAB', 
    327     12: 'KEY_NUM_PAD_CLEAR', // for WebKit and Mac FF anyway 
     367    12: 'KEY_NUM_PAD_CLEAR', // for WebKit and Mac FF anyway -- Safari charCode: 63289 
    328368    13: 'KEY_ENTER', 
    329369    16: 'KEY_SHIFT', 
     
    334374    27: 'KEY_ESCAPE', 
    335375    32: 'KEY_SPACEBAR', 
    336     33: 'KEY_PAGE_UP', 
    337     34: 'KEY_PAGE_DOWN', 
    338     35: 'KEY_END', 
    339     36: 'KEY_HOME', 
    340     37: 'KEY_ARROW_LEFT', 
    341     38: 'KEY_ARROW_UP', 
    342     39: 'KEY_ARROW_RIGHT', 
    343     40: 'KEY_ARROW_DOWN', 
    344     44: 'KEY_PRINT_SCREEN', 
    345     45: 'KEY_INSERT', 
    346     46: 'KEY_DELETE', 
     376    33: 'KEY_PAGE_UP', // Safari charCode: 63276 
     377    34: 'KEY_PAGE_DOWN', // Safari charCode: 63277 
     378    35: 'KEY_END', // Safari charCode: 63275 
     379    36: 'KEY_HOME', // Safari charCode: 63273 
     380    37: 'KEY_ARROW_LEFT', // Safari charCode: 63234 
     381    38: 'KEY_ARROW_UP', // Safari charCode: 63232 
     382    39: 'KEY_ARROW_RIGHT', // Safari charCode: 63235 
     383    40: 'KEY_ARROW_DOWN', // Safari charCode: 63233 
     384    44: 'KEY_PRINT_SCREEN',  
     385    45: 'KEY_INSERT', // Safari charCode: 63302 
     386    46: 'KEY_DELETE', // Safari charCode: 63272 
    347387    59: 'KEY_SEMICOLON', // weird, for WebKit and IE 
    348     91: 'KEY_WINDOWS_LEFT', 
    349     92: 'KEY_WINDOWS_RIGHT', 
    350     93: 'KEY_SELECT', 
     388    91: 'KEY_WINDOWS_LEFT',  
     389    92: 'KEY_WINDOWS_RIGHT',  
     390    93: 'KEY_SELECT',  
    351391    106: 'KEY_NUM_PAD_ASTERISK', 
    352392    107: 'KEY_NUM_PAD_PLUS_SIGN', 
     
    387427/* for KEY_F1 - KEY_F12 */ 
    388428for (i = 112; i <= 123; i++) { 
    389     MochiKit.Signal._specialKeys[i] = 'KEY_F' + (i - 111); // no F0 
     429    MochiKit.Signal._specialKeys[i] = 'KEY_F' + (i - 112 + 1); // no F0 
    390430} 
    391431 
  • mochikit/trunk/examples/draggable/draggable.js

    r646 r691  
    5555                connect(elem, 'onmousedown', Drag.start); 
    5656            }); 
     57                         
    5758    }); 
    5859     
    59 // rewrite the view-source links 
    60 addLoadEvent(function () { 
    61     var elems = getElementsByTagAndClassName("A", "view-source"); 
    62     var page = "draggable/"; 
    63     for (var i = 0; i < elems.length; i++) { 
    64         var elem = elems[i]; 
    65         var href = elem.href.split(/\//).pop(); 
    66         elem.target = "_blank"; 
    67         elem.href = "../view-source/view-source.html#" + page + href; 
    68     } 
    69 }); 
     60connect(window, 'onload', 
     61    function() { 
     62        var elems = getElementsByTagAndClassName("A", "view-source"); 
     63        var page = "draggable/"; 
     64        for (var i = 0; i < elems.length; i++) { 
     65            var elem = elems[i]; 
     66            var href = elem.href.split(/\//).pop(); 
     67            elem.target = "_blank"; 
     68            elem.href = "../view-source/view-source.html#" + page + href; 
     69        }  
     70    });