wp/wp-includes/js/jquery/jquery.hotkeys.js
changeset 5 5e2f62d02dcd
parent 0 d970ebf37754
child 18 be944660c56a
equal deleted inserted replaced
4:346c88efed21 5:5e2f62d02dcd
     1 /******************************************************************************************************************************
     1 /******************************************************************************************************************************
     2 
     2 
     3  * @ Original idea by by Binny V A, Original version: 2.00.A 
     3  * @ Original idea by by Binny V A, Original version: 2.00.A
     4  * @ http://www.openjs.com/scripts/events/keyboard_shortcuts/
     4  * @ http://www.openjs.com/scripts/events/keyboard_shortcuts/
     5  * @ Original License : BSD
     5  * @ Original License : BSD
     6  
     6 
     7  * @ jQuery Plugin by Tzury Bar Yochay 
     7  * @ jQuery Plugin by Tzury Bar Yochay
     8         mail: tzury.by@gmail.com
     8         mail: tzury.by@gmail.com
     9         blog: evalinux.wordpress.com
     9         blog: evalinux.wordpress.com
    10         face: facebook.com/profile.php?id=513676303
    10         face: facebook.com/profile.php?id=513676303
    11         
    11 
    12         (c) Copyrights 2007
    12         (c) Copyrights 2007
    13         
    13 
    14  * @ jQuery Plugin version Beta (0.0.2)
    14  * @ jQuery Plugin version Beta (0.0.2)
    15  * @ License: jQuery-License.
    15  * @ License: jQuery-License.
    16  
    16 
    17 TODO:
    17 TODO:
    18     add queue support (as in gmail) e.g. 'x' then 'y', etc.
    18     add queue support (as in gmail) e.g. 'x' then 'y', etc.
    19     add mouse + mouse wheel events.
    19     add mouse + mouse wheel events.
    20 
    20 
    21 USAGE:
    21 USAGE:
    22     $.hotkeys.add('Ctrl+c', function(){ alert('copy anyone?');});
    22     $.hotkeys.add('Ctrl+c', function(){ alert('copy anyone?');});
    23     $.hotkeys.add('Ctrl+c', {target:'div#editor', type:'keyup', propagate: true},function(){ alert('copy anyone?');});>
    23     $.hotkeys.add('Ctrl+c', {target:'div#editor', type:'keyup', propagate: true},function(){ alert('copy anyone?');});>
    24     $.hotkeys.remove('Ctrl+c'); 
    24     $.hotkeys.remove('Ctrl+c');
    25     $.hotkeys.remove('Ctrl+c', {target:'div#editor', type:'keypress'}); 
    25     $.hotkeys.remove('Ctrl+c', {target:'div#editor', type:'keypress'});
    26     
    26 
    27 ******************************************************************************************************************************/
    27 ******************************************************************************************************************************/
    28 (function (jQuery){
    28 (function (jQuery){
    29     this.version = '(beta)(0.0.3)';
    29     this.version = '(beta)(0.0.3)';
    30 	this.all = {};
    30 	this.all = {};
    31     this.special_keys = {
    31     this.special_keys = {
    32         27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 20: 'capslock', 
    32         27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 20: 'capslock',
    33         144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',35:'end', 33: 'pageup', 
    33         144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',35:'end', 33: 'pageup',
    34         34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 112:'f1',113:'f2', 114:'f3', 
    34         34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 112:'f1',113:'f2', 114:'f3',
    35         115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 120:'f9', 121:'f10', 122:'f11', 123:'f12'};
    35         115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 120:'f9', 121:'f10', 122:'f11', 123:'f12'};
    36         
    36 
    37     this.shift_nums = { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", 
    37     this.shift_nums = { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&",
    38         "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<", 
    38         "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<",
    39         ".":">",  "/":"?",  "\\":"|" };
    39         ".":">",  "/":"?",  "\\":"|" };
    40         
    40 
    41     this.add = function(combi, options, callback) {
    41     this.add = function(combi, options, callback) {
    42         if (jQuery.isFunction(options)){
    42         if (jQuery.isFunction(options)){
    43             callback = options;
    43             callback = options;
    44             options = {};
    44             options = {};
    45         }
    45         }
    46         var opt = {},
    46         var opt = {},
    47             defaults = {type: 'keydown', propagate: false, disableInInput: false, target: jQuery('html')[0]},
    47             defaults = {type: 'keydown', propagate: false, disableInInput: false, target: jQuery('html')[0]},
    48             that = this;
    48             that = this;
    49         opt = jQuery.extend( opt , defaults, options || {} );
    49         opt = jQuery.extend( opt , defaults, options || {} );
    50         combi = combi.toLowerCase();        
    50         combi = combi.toLowerCase();
    51         
    51 
    52         // inspect if keystroke matches
    52         // inspect if keystroke matches
    53         var inspector = function(event) {
    53         var inspector = function(event) {
    54             // WP: not needed with newer jQuery
    54             // WP: not needed with newer jQuery
    55             // event = jQuery.event.fix(event); // jQuery event normalization.
    55             // event = jQuery.event.fix(event); // jQuery event normalization.
    56             var element = event.target;
    56             var element = event.target;
    57             // @ TextNode -> nodeType == 3
    57             // @ TextNode -> nodeType == 3
    58             // WP: not needed with newer jQuery
    58             // WP: not needed with newer jQuery
    59             // element = (element.nodeType==3) ? element.parentNode : element;
    59             // element = (element.nodeType==3) ? element.parentNode : element;
    60             
    60 
    61             if(opt['disableInInput']) { // Disable shortcut keys in Input, Textarea fields
    61             if ( opt['disableInInput'] ) { // Disable shortcut keys in Input, Textarea fields
    62                 var target = jQuery(element);
    62                 var target = jQuery(element);
    63                 if( target.is("input") || target.is("textarea")){
    63 
    64                     return;
    64 				if ( ( target.is('input') || target.is('textarea') ) &&
       
    65 					( ! opt.noDisable || ! target.is( opt.noDisable ) ) ) {
       
    66 
       
    67 					return;
    65                 }
    68                 }
    66             }
    69             }
    67             var code = event.which,
    70             var code = event.which,
    68                 type = event.type,
    71                 type = event.type,
    69                 character = String.fromCharCode(code).toLowerCase(),
    72                 character = String.fromCharCode(code).toLowerCase(),
    72                 ctrl = event.ctrlKey,
    75                 ctrl = event.ctrlKey,
    73                 alt= event.altKey,
    76                 alt= event.altKey,
    74                 meta = event.metaKey,
    77                 meta = event.metaKey,
    75                 propagate = true, // default behaivour
    78                 propagate = true, // default behaivour
    76                 mapPoint = null;
    79                 mapPoint = null;
    77             
    80 
    78             // in opera + safari, the event.target is unpredictable.
    81             // in opera + safari, the event.target is unpredictable.
    79             // for example: 'keydown' might be associated with HtmlBodyElement 
    82             // for example: 'keydown' might be associated with HtmlBodyElement
    80             // or the element where you last clicked with your mouse.
    83             // or the element where you last clicked with your mouse.
    81             // WP: needed for all browsers 
    84             // WP: needed for all browsers
    82             // if (jQuery.browser.opera || jQuery.browser.safari){
    85             // if (jQuery.browser.opera || jQuery.browser.safari){
    83                 while (!that.all[element] && element.parentNode){
    86                 while (!that.all[element] && element.parentNode){
    84                     element = element.parentNode;
    87                     element = element.parentNode;
    85                 }
    88                 }
    86             // }
    89             // }
   104                     event.stopPropagation();
   107                     event.stopPropagation();
   105                     event.preventDefault();
   108                     event.preventDefault();
   106                     return false;
   109                     return false;
   107                 }
   110                 }
   108             }
   111             }
   109 		};        
   112 		};
   110         // first hook for this element
   113         // first hook for this element
   111         if (!this.all[opt.target]){
   114         if (!this.all[opt.target]){
   112             this.all[opt.target] = {events:{}};
   115             this.all[opt.target] = {events:{}};
   113         }
   116         }
   114         if (!this.all[opt.target].events[opt.type]){
   117         if (!this.all[opt.target].events[opt.type]){
   115             this.all[opt.target].events[opt.type] = {callbackMap: {}}
   118             this.all[opt.target].events[opt.type] = {callbackMap: {}}
   116             jQuery.event.add(opt.target, opt.type, inspector);
   119             jQuery.event.add(opt.target, opt.type, inspector);
   117         }        
   120         }
   118         this.all[opt.target].events[opt.type].callbackMap[combi] =  {cb: callback, propagate:opt.propagate};                
   121         this.all[opt.target].events[opt.type].callbackMap[combi] =  {cb: callback, propagate:opt.propagate};
   119         return jQuery;
   122         return jQuery;
   120 	};    
   123 	};
   121     this.remove = function(exp, opt) {
   124     this.remove = function(exp, opt) {
   122         opt = opt || {};
   125         opt = opt || {};
   123         target = opt.target || jQuery('html')[0];
   126         target = opt.target || jQuery('html')[0];
   124         type = opt.type || 'keydown';
   127         type = opt.type || 'keydown';
   125 		exp = exp.toLowerCase();        
   128 		exp = exp.toLowerCase();
   126         delete this.all[target].events[type].callbackMap[exp]        
   129         delete this.all[target].events[type].callbackMap[exp]
   127         return jQuery;
   130         return jQuery;
   128 	};
   131 	};
   129     jQuery.hotkeys = this;
   132     jQuery.hotkeys = this;
   130     return jQuery;    
   133     return jQuery;
   131 })(jQuery);
   134 })(jQuery);