Created
March 28, 2022 16:37
-
-
Save ten9miq/5608802d8e8203067c2d38abc41bdde3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(()=>{ | |
/** | |
* http://www.openjs.com/scripts/events/keyboard_shortcuts/ | |
* Version : 2.01.B | |
* By Binny V A | |
* License : BSD | |
*/ | |
const shortcut = { | |
'all_shortcuts':{},//All the shortcuts are stored in this array | |
'add': function(shortcut_combination,callback,opt) { | |
//Provide a set of default options | |
var default_options = { | |
'type':'keydown', | |
'propagate':false, | |
'disable_in_input':false, | |
'target':document, | |
'keycode':false | |
} | |
if(!opt) opt = default_options; | |
else { | |
for(var dfo in default_options) { | |
if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo]; | |
} | |
} | |
var ele = opt.target; | |
if(typeof opt.target == 'string') ele = document.getElementById(opt.target); | |
var ths = this; | |
shortcut_combination = shortcut_combination.toLowerCase(); | |
//The function to be called at keypress | |
var func = function(e) { | |
e = e || window.event; | |
if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields | |
var element; | |
if(e.target) element=e.target; | |
else if(e.srcElement) element=e.srcElement; | |
if(element.nodeType==3) element=element.parentNode; | |
if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return; | |
} | |
//Find Which key is pressed | |
if (e.keyCode) code = e.keyCode; | |
else if (e.which) code = e.which; | |
var character = String.fromCharCode(code).toLowerCase(); | |
if(code == 188) character=","; //If the user presses , when the type is onkeydown | |
if(code == 190) character="."; //If the user presses , when the type is onkeydown | |
var keys = shortcut_combination.split("+"); | |
//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked | |
var kp = 0; | |
//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken | |
var shift_nums = { | |
"`":"~", | |
"1":"!", | |
"2":"@", | |
"3":"#", | |
"4":"$", | |
"5":"%", | |
"6":"^", | |
"7":"&", | |
"8":"*", | |
"9":"(", | |
"0":")", | |
"-":"_", | |
"=":"+", | |
";":":", | |
"'":"\"", | |
",":"<", | |
".":">", | |
"/":"?", | |
"\\":"|" | |
} | |
//Special Keys - and their codes | |
var special_keys = { | |
'esc':27, | |
'escape':27, | |
'tab':9, | |
'space':32, | |
'return':13, | |
'enter':13, | |
'backspace':8, | |
'scrolllock':145, | |
'scroll_lock':145, | |
'scroll':145, | |
'capslock':20, | |
'caps_lock':20, | |
'caps':20, | |
'numlock':144, | |
'num_lock':144, | |
'num':144, | |
'pause':19, | |
'break':19, | |
'insert':45, | |
'home':36, | |
'delete':46, | |
'end':35, | |
'pageup':33, | |
'page_up':33, | |
'pu':33, | |
'pagedown':34, | |
'page_down':34, | |
'pd':34, | |
'left':37, | |
'up':38, | |
'right':39, | |
'down':40, | |
'f1':112, | |
'f2':113, | |
'f3':114, | |
'f4':115, | |
'f5':116, | |
'f6':117, | |
'f7':118, | |
'f8':119, | |
'f9':120, | |
'f10':121, | |
'f11':122, | |
'f12':123 | |
} | |
var modifiers = { | |
shift: { wanted:false, pressed:false}, | |
ctrl : { wanted:false, pressed:false}, | |
alt : { wanted:false, pressed:false}, | |
meta : { wanted:false, pressed:false} //Meta is Mac specific | |
}; | |
if(e.ctrlKey) modifiers.ctrl.pressed = true; | |
if(e.shiftKey) modifiers.shift.pressed = true; | |
if(e.altKey) modifiers.alt.pressed = true; | |
if(e.metaKey) modifiers.meta.pressed = true; | |
for(var i=0; k=keys[i],i<keys.length; i++) { | |
//Modifiers | |
if(k == 'ctrl' || k == 'control') { | |
kp++; | |
modifiers.ctrl.wanted = true; | |
} else if(k == 'shift') { | |
kp++; | |
modifiers.shift.wanted = true; | |
} else if(k == 'alt') { | |
kp++; | |
modifiers.alt.wanted = true; | |
} else if(k == 'meta') { | |
kp++; | |
modifiers.meta.wanted = true; | |
} else if(k.length > 1) { //If it is a special key | |
if(special_keys[k] == code) kp++; | |
} else if(opt['keycode']) { | |
if(opt['keycode'] == code) kp++; | |
} else { //The special keys did not match | |
if(character == k) kp++; | |
else { | |
if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase | |
character = shift_nums[character]; | |
if(character == k) kp++; | |
} | |
} | |
} | |
} | |
if(kp == keys.length && | |
modifiers.ctrl.pressed == modifiers.ctrl.wanted && | |
modifiers.shift.pressed == modifiers.shift.wanted && | |
modifiers.alt.pressed == modifiers.alt.wanted && | |
modifiers.meta.pressed == modifiers.meta.wanted) { | |
callback(e); | |
if(!opt['propagate']) { //Stop the event | |
//e.cancelBubble is supported by IE - this will kill the bubbling process. | |
e.cancelBubble = true; | |
e.returnValue = false; | |
//e.stopPropagation works in Firefox. | |
if (e.stopPropagation) { | |
e.stopPropagation(); | |
e.preventDefault(); | |
} | |
return false; | |
} | |
} | |
} | |
this.all_shortcuts[shortcut_combination] = { | |
'callback':func, | |
'target':ele, | |
'event': opt['type'] | |
}; | |
//Attach the function with the event | |
if(ele.addEventListener) ele.addEventListener(opt['type'], func, false); | |
else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func); | |
else ele['on'+opt['type']] = func; | |
}, | |
//Remove the shortcut - just specify the shortcut and I will remove the binding | |
'remove':function(shortcut_combination) { | |
shortcut_combination = shortcut_combination.toLowerCase(); | |
var binding = this.all_shortcuts[shortcut_combination]; | |
delete(this.all_shortcuts[shortcut_combination]) | |
if(!binding) return; | |
var type = binding['event']; | |
var ele = binding['target']; | |
var callback = binding['callback']; | |
if(ele.detachEvent) ele.detachEvent('on'+type, callback); | |
else if(ele.removeEventListener) ele.removeEventListener(type, callback, false); | |
else ele['on'+type] = false; | |
} | |
} | |
shortcut.add("Ctrl+Shift+8",async (e)=>{ | |
console.log("8"); | |
GM_setClipboard('<ul><li></li></ul>', 'html'); | |
document.execCommand("paste"); | |
},{ | |
'type':'keydown', | |
'propagate':true, | |
'target':document | |
}); | |
shortcut.add("Ctrl+Shift+9",()=>{ | |
console.log("9"); | |
GM_setClipboard('<ol><li></li></ol>', 'html'); | |
document.execCommand("paste"); | |
},{ | |
'type':'keydown', | |
'propagate':true, | |
'target':document | |
}); | |
})(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment