Skip to content

Instantly share code, notes, and snippets.

@Infocatcher
Created August 6, 2013 06:47
Show Gist options
  • Save Infocatcher/6162616 to your computer and use it in GitHub Desktop.
Save Infocatcher/6162616 to your computer and use it in GitHub Desktop.
Detect pressed keys (Ctrl, Alt, Shift or Meta), code for https://addons.mozilla.org/addon/custom-buttons/ or something like http://userchromejs.mozdev.org/
// Allow styles like
// :root[cb_pressed] { /* Pressed any modifier */ }
// :root[cb_pressed~="shift"] { /* Pressed Shift */ }
var pressed = {
ctrl: false,
alt: false,
shift: false,
meta: false,
__proto__: null
};
function detectPressed(e) {
var type = e.type;
if(type == "focus" || type == "blur") {
// Just reset: not correct, but good for most cases
for(var key in pressed)
pressed[key] = false;
}
else {
var isPressed = type == "keydown";
switch(e.keyCode) {
case e.DOM_VK_CONTROL: pressed.ctrl = isPressed; break;
case e.DOM_VK_ALT: pressed.alt = isPressed; break;
case e.DOM_VK_SHIFT: pressed.shift = isPressed; break;
case e.DOM_VK_META: pressed.meta = isPressed; break;
default: return;
}
}
var state = [];
for(var key in pressed)
if(pressed[key])
state.push(key);
var stateStr = state.join(" ");
if(stateStr)
document.documentElement.setAttribute("cb_pressed", stateStr);
else
document.documentElement.removeAttribute("cb_pressed");
}
addEventListener("keydown", detectPressed, true);
addEventListener("keyup", detectPressed, true);
addEventListener("focus", detectPressed, true);
addEventListener("blur", detectPressed, true);
addEventListener("unload", function destroy() {
removeEventListener("unload", destroy, false);
removeEventListener("keydown", detectPressed, true);
removeEventListener("keyup", detectPressed, true);
removeEventListener("focus", detectPressed, true);
removeEventListener("blur", detectPressed, true);
}, false);
/* Show preview in Tab Scope only if Shift pressed */
#main-window:not([cb_pressed~="shift"]) #tabscope-popup stack {
display: none !important;
}
/* Show preview in Tab Scope if pressed any modifier */
#main-window:not([cb_pressed]) #tabscope-popup stack {
display: none !important;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment