1/** 2* http://www.openjs.com/scripts/events/keyboard_shortcuts/ 3* Version : 2.01.B 4* By Binny V A 5* License : BSD 6*/ 7shortcut = { 8 'all_shortcuts': {}, //All the shortcuts are stored in this array 9 'add': function(shortcut_combination, callback, opt) { 10 //Provide a set of default options 11 var default_options = { 12 'type': 'keydown', 13 'propagate': false, 14 'disable_in_input': false, 15 'target': document, 16 'keycode': false 17 } 18 if (!opt) opt = default_options; 19 else { 20 for (var dfo in default_options) { 21 if (typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo]; 22 } 23 } 24 25 var ele = opt.target; 26 if (typeof opt.target == 'string') ele = document.getElementById(opt.target); 27 var ths = this; 28 shortcut_combination = shortcut_combination.toLowerCase(); 29 30 //The function to be called at keypress 31 var func = function(e) { 32 e = e || window.event; 33 34 if (opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields 35 var element; 36 if (e.target) element = e.target; 37 else if (e.srcElement) element = e.srcElement; 38 if (element.nodeType == 3) element = element.parentNode; 39 40 if (element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return; 41 } 42 43 //Find Which key is pressed 44 if (e.keyCode) code = e.keyCode; 45 else if (e.which) code = e.which; 46 var character = String.fromCharCode(code).toLowerCase(); 47 48 if (code == 188) character = ","; //If the user presses , when the type is onkeydown 49 if (code == 190) character = "."; //If the user presses , when the type is onkeydown 50 51 var keys = shortcut_combination.split("+"); 52 //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked 53 var kp = 0; 54 55 //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken 56 var shift_nums = { 57 "`": "~", 58 "1": "!", 59 "2": "@", 60 "3": "#", 61 "4": "$", 62 "5": "%", 63 "6": "^", 64 "7": "&", 65 "8": "*", 66 "9": "(", 67 "0": ")", 68 "-": "_", 69 "=": "+", 70 ";": ":", 71 "'": "\"", 72 ",": "<", 73 ".": ">", 74 "/": "?", 75 "\\": "|" 76 } 77 //Special Keys - and their codes 78 var special_keys = { 79 'esc': 27, 80 'escape': 27, 81 'tab': 9, 82 'space': 32, 83 'return': 13, 84 'enter': 13, 85 'backspace': 8, 86 87 'scrolllock': 145, 88 'scroll_lock': 145, 89 'scroll': 145, 90 'capslock': 20, 91 'caps_lock': 20, 92 'caps': 20, 93 'numlock': 144, 94 'num_lock': 144, 95 'num': 144, 96 97 'pause': 19, 98 'break': 19, 99 100 'insert': 45, 101 'home': 36, 102 'delete': 46, 103 'end': 35, 104 105 'pageup': 33, 106 'page_up': 33, 107 'pu': 33, 108 109 'pagedown': 34, 110 'page_down': 34, 111 'pd': 34, 112 113 'left': 37, 114 'up': 38, 115 'right': 39, 116 'down': 40, 117 118 'f1': 112, 119 'f2': 113, 120 'f3': 114, 121 'f4': 115, 122 'f5': 116, 123 'f6': 117, 124 'f7': 118, 125 'f8': 119, 126 'f9': 120, 127 'f10': 121, 128 'f11': 122, 129 'f12': 123 130 } 131 132 var modifiers = {
133 shift: { wanted: false, pressed: false }, 134 ctrl: { wanted: false, pressed: false }, 135 alt: { wanted: false, pressed: false }, 136 meta: { wanted: false, pressed: false} //Meta is Mac specific 137 }; 138 139 if (e.ctrlKey) modifiers.ctrl.pressed = true; 140 if (e.shiftKey) modifiers.shift.pressed = true; 141 if (e.altKey) modifiers.alt.pressed = true; 142 if (e.metaKey) modifiers.meta.pressed = true; 143 144 for (var i = 0; k = keys[i], i < keys.length; i++) { 145 //Modifiers 146 if (k == 'ctrl' || k == 'control') { 147 kp++; 148 modifiers.ctrl.wanted = true; 149 150 } else if (k == 'shift') { 151 kp++; 152 modifiers.shift.wanted = true; 153 154 } else if (k == 'alt') { 155 kp++; 156 modifiers.alt.wanted = true; 157 } else if (k == 'meta') { 158 kp++; 159 modifiers.meta.wanted = true; 160 } else if (k.length > 1) { //If it is a special key 161 if (special_keys[k] == code) kp++; 162 163 } else if (opt['keycode']) { 164 if (opt['keycode'] == code) kp++; 165 166 } else { //The special keys did not match 167 if (character == k) kp++; 168 else { 169 if (shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase 170 character = shift_nums[character]; 171 if (character == k) kp++; 172 } 173 } 174 } 175 } 176 177 if (kp == keys.length && 178 modifiers.ctrl.pressed == modifiers.ctrl.wanted && 179 modifiers.shift.pressed == modifiers.shift.wanted && 180 modifiers.alt.pressed == modifiers.alt.wanted && 181 modifiers.meta.pressed == modifiers.meta.wanted) { 182 callback(e); 183 184 if (!opt['propagate']) { //Stop the event 185 //e.cancelBubble is supported by IE - this will kill the bubbling process. 186 e.cancelBubble = true; 187 e.returnValue = false; 188 189 //e.stopPropagation works in Firefox. 190 if (e.stopPropagation) { 191 e.stopPropagation(); 192 e.preventDefault(); 193 } 194 return false; 195 } 196 } 197 } 198 this.all_shortcuts[shortcut_combination] = { 199 'callback': func, 200 'target': ele, 201 'event': opt['type'] 202 }; 203 //Attach the function with the event 204 if (ele.addEventListener) ele.addEventListener(opt['type'], func, false); 205 else if (ele.attachEvent) ele.attachEvent('on' + opt['type'], func); 206 else ele['on' + opt['type']] = func; 207 }, 208 209 //Remove the shortcut - just specify the shortcut and I will remove the binding 210 'remove': function(shortcut_combination) { 211 shortcut_combination = shortcut_combination.toLowerCase(); 212 var binding = this.all_shortcuts[shortcut_combination]; 213 delete (this.all_shortcuts[shortcut_combination]) 214 if (!binding) return; 215 var type = binding['event']; 216 var ele = binding['target']; 217 var callback = binding['callback']; 218 219 if (ele.detachEvent) ele.detachEvent('on' + type, callback); 220 else if (ele.removeEventListener) ele.removeEventListener(type, callback, false); 221 else ele['on' + type] = false; 222 } 223} 224
225shortcut.add('CONTROL+SHIFT+A', function() {window.location = '/admin';});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.