mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-11-04 07:01:31 +08: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);
 |