mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-31 10:26:08 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			196 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*jslint browser: true*/
 | |
| /*jslint jquery: true*/
 | |
| 
 | |
| /*
 | |
|  * jQuery Hotkeys Plugin
 | |
|  * Copyright 2010, John Resig
 | |
|  * Dual licensed under the MIT or GPL Version 2 licenses.
 | |
|  *
 | |
|  * Based upon the plugin by Tzury Bar Yochay:
 | |
|  * http://github.com/tzuryby/hotkeys
 | |
|  *
 | |
|  * Original idea by:
 | |
|  * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * One small change is: now keys are passed by object { keys: '...' }
 | |
|  * Might be useful, when you want to pass some other data to your handler
 | |
|  */
 | |
| 
 | |
| (function(jQuery) {
 | |
| 
 | |
|   jQuery.hotkeys = {
 | |
|     version: "0.8",
 | |
| 
 | |
|     specialKeys: {
 | |
|       8: "backspace",
 | |
|       9: "tab",
 | |
|       10: "return",
 | |
|       13: "return",
 | |
|       16: "shift",
 | |
|       17: "ctrl",
 | |
|       18: "alt",
 | |
|       19: "pause",
 | |
|       20: "capslock",
 | |
|       27: "esc",
 | |
|       32: "space",
 | |
|       33: "pageup",
 | |
|       34: "pagedown",
 | |
|       35: "end",
 | |
|       36: "home",
 | |
|       37: "left",
 | |
|       38: "up",
 | |
|       39: "right",
 | |
|       40: "down",
 | |
|       45: "insert",
 | |
|       46: "del",
 | |
|       59: ";",
 | |
|       61: "=",
 | |
|       96: "0",
 | |
|       97: "1",
 | |
|       98: "2",
 | |
|       99: "3",
 | |
|       100: "4",
 | |
|       101: "5",
 | |
|       102: "6",
 | |
|       103: "7",
 | |
|       104: "8",
 | |
|       105: "9",
 | |
|       106: "*",
 | |
|       107: "+",
 | |
|       109: "-",
 | |
|       110: ".",
 | |
|       111: "/",
 | |
|       112: "f1",
 | |
|       113: "f2",
 | |
|       114: "f3",
 | |
|       115: "f4",
 | |
|       116: "f5",
 | |
|       117: "f6",
 | |
|       118: "f7",
 | |
|       119: "f8",
 | |
|       120: "f9",
 | |
|       121: "f10",
 | |
|       122: "f11",
 | |
|       123: "f12",
 | |
|       144: "numlock",
 | |
|       145: "scroll",
 | |
|       173: "-",
 | |
|       186: ";",
 | |
|       187: "=",
 | |
|       188: ",",
 | |
|       189: "-",
 | |
|       190: ".",
 | |
|       191: "/",
 | |
|       192: "`",
 | |
|       219: "[",
 | |
|       220: "\\",
 | |
|       221: "]",
 | |
|       222: "'"
 | |
|     },
 | |
| 
 | |
|     shiftNums: {
 | |
|       "`": "~",
 | |
|       "1": "!",
 | |
|       "2": "@",
 | |
|       "3": "#",
 | |
|       "4": "$",
 | |
|       "5": "%",
 | |
|       "6": "^",
 | |
|       "7": "&",
 | |
|       "8": "*",
 | |
|       "9": "(",
 | |
|       "0": ")",
 | |
|       "-": "_",
 | |
|       "=": "+",
 | |
|       ";": ": ",
 | |
|       "'": "\"",
 | |
|       ",": "<",
 | |
|       ".": ">",
 | |
|       "/": "?",
 | |
|       "\\": "|"
 | |
|     },
 | |
| 
 | |
|     // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url
 | |
|     textAcceptingInputTypes: [
 | |
|       "text", "password", "number", "email", "url", "range", "date", "month", "week", "time", "datetime",
 | |
|       "datetime-local", "search", "color", "tel"],
 | |
| 
 | |
|     options: {
 | |
|       filterTextInputs: true
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   function keyHandler(handleObj) {
 | |
|     if (typeof handleObj.data === "string") {
 | |
|       handleObj.data = {
 | |
|         keys: handleObj.data
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     // Only care when a possible input has been specified
 | |
|     if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== "string") {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     var origHandler = handleObj.handler,
 | |
|       keys = handleObj.data.keys.toLowerCase().split(" ");
 | |
| 
 | |
|     handleObj.handler = function(event) {
 | |
|       if (jQuery.hotkeys.options.filterTextInputs &&
 | |
|             event.target.tagName != 'WEBVIEW' &&
 | |
|             jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       var special = event.type !== "keypress" && jQuery.hotkeys.specialKeys[event.which],
 | |
|         character = String.fromCharCode(event.which).toLowerCase(),
 | |
|         modif = "",
 | |
|         possible = {};
 | |
| 
 | |
|       jQuery.each(["alt", "ctrl", "shift"], function(index, specialKey) {
 | |
| 
 | |
|         if (event[specialKey + 'Key'] && special !== specialKey) {
 | |
|           modif += specialKey + '+';
 | |
|         }
 | |
|       });
 | |
| 
 | |
|       // metaKey is triggered off ctrlKey erronously
 | |
|       if (event.metaKey && !event.ctrlKey && special !== "meta") {
 | |
|         modif += "meta+";
 | |
|       }
 | |
| 
 | |
|       if (event.metaKey && special !== "meta" && modif.indexOf("alt+ctrl+shift+") > -1) {
 | |
|         modif = modif.replace("alt+ctrl+shift+", "hyper+");
 | |
|       }
 | |
| 
 | |
|       if (special) {
 | |
|         possible[modif + special] = true;
 | |
|       }
 | |
|       else {
 | |
|         possible[modif + character] = true;
 | |
|         possible[modif + jQuery.hotkeys.shiftNums[character]] = true;
 | |
| 
 | |
|         // "$" can be triggered as "Shift+4" or "Shift+$" or just "$"
 | |
|         if (modif === "shift+") {
 | |
|           possible[jQuery.hotkeys.shiftNums[character]] = true;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       for (var i = 0, l = keys.length; i < l; i++) {
 | |
|         if (possible[keys[i]]) {
 | |
|           return origHandler.apply(this, arguments);
 | |
|         }
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   jQuery.each(["keydown", "keyup", "keypress"], function() {
 | |
|     jQuery.event.special[this] = {
 | |
|       add: keyHandler
 | |
|     };
 | |
|   });
 | |
| 
 | |
| })(jQuery || this.jQuery || window.jQuery);
 |