Improve hotkey framework by making own file & register function.
This commit is contained in:
parent
2901fefe65
commit
5c97086df3
6 changed files with 80 additions and 74 deletions
|
@ -121,15 +121,3 @@ function html_to_element(html)
|
|||
template.innerHTML = html;
|
||||
return template.content.firstChild;
|
||||
}
|
||||
|
||||
function should_prevent_hotkey(event)
|
||||
{
|
||||
if (event.target.tagName == "INPUT" && event.target.type == "checkbox")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return INPUT_TYPES.has(event.target.tagName);
|
||||
}
|
||||
}
|
||||
|
|
69
frontends/etiquette_flask/static/js/hotkeys.js
Normal file
69
frontends/etiquette_flask/static/js/hotkeys.js
Normal file
|
@ -0,0 +1,69 @@
|
|||
HOTKEYS = {};
|
||||
|
||||
function hotkey_identifier(key, ctrlKey, shiftKey, altKey)
|
||||
{
|
||||
// Return the string that will represent this hotkey in the dictionary.
|
||||
return key.toLowerCase() + "." + (ctrlKey & 1) + "." + (shiftKey & 1) + "." + (altKey & 1);
|
||||
}
|
||||
|
||||
function hotkey_human(key, ctrlKey, shiftKey, altKey)
|
||||
{
|
||||
// Return the string that will be displayed to the user to represent this hotkey.
|
||||
mods = [];
|
||||
if (ctrlKey) { mods.push("Ctrl"); }
|
||||
if (shiftKey) { mods.push("Shift"); }
|
||||
if (altKey) { mods.push("Alt"); }
|
||||
mods = mods.join("+");
|
||||
if (mods) { mods = mods + "+"; }
|
||||
return mods + key.toUpperCase();
|
||||
}
|
||||
|
||||
function register_hotkey(key, ctrlKey, shiftKey, altKey, action, description)
|
||||
{
|
||||
identifier = hotkey_identifier(key, ctrlKey, shiftKey, altKey);
|
||||
human = hotkey_human(key, ctrlKey, shiftKey, altKey);
|
||||
HOTKEYS[identifier] = {"action": action, "human": human, "description": description}
|
||||
}
|
||||
|
||||
function should_prevent_hotkey(event)
|
||||
{
|
||||
if (event.target.tagName == "INPUT" && event.target.type == "checkbox")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
return INPUT_TYPES.has(event.target.tagName);
|
||||
}
|
||||
}
|
||||
|
||||
function show_all_keybinds()
|
||||
{
|
||||
// Display an Alert with a list of all the keybinds.
|
||||
var lines = [];
|
||||
for (var identifier in HOTKEYS)
|
||||
{
|
||||
var line = HOTKEYS[identifier]["human"] + " : " + HOTKEYS[identifier]["description"];
|
||||
lines.push(line);
|
||||
}
|
||||
lines = lines.join("\n");
|
||||
alert(lines);
|
||||
}
|
||||
|
||||
|
||||
window.addEventListener(
|
||||
"keydown",
|
||||
function(event)
|
||||
{
|
||||
if (should_prevent_hotkey(event)) { return; }
|
||||
identifier = hotkey_identifier(event.key, event.ctrlKey, event.shiftKey, event.altKey);
|
||||
console.log(identifier);
|
||||
if (identifier in HOTKEYS)
|
||||
{
|
||||
HOTKEYS[identifier]["action"]();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
register_hotkey("/", 0, 0, 0, show_all_keybinds, "Show keybinds.");
|
|
@ -260,65 +260,6 @@ function open_full_clipboard_tab()
|
|||
window.open(url, "full_clipboard");
|
||||
}
|
||||
|
||||
function set_keybinds()
|
||||
{
|
||||
// HOTKEY: Photoclipboard select all
|
||||
window.addEventListener(
|
||||
"keydown",
|
||||
function(event)
|
||||
{
|
||||
if (should_prevent_hotkey(event)) { return; }
|
||||
if (event.key == "a" && event.ctrlKey && !event.shiftKey && !event.altKey)
|
||||
{
|
||||
select_all_photos();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// HOTKEY: Photoclipboard deselect all
|
||||
window.addEventListener(
|
||||
"keydown",
|
||||
function(event)
|
||||
{
|
||||
if (should_prevent_hotkey(event)) { return; }
|
||||
if (event.key == "d" && event.ctrlKey && !event.shiftKey && !event.altKey)
|
||||
{
|
||||
unselect_all_photos();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// HOTKEY: Photoclipboard toggle
|
||||
window.addEventListener(
|
||||
"keydown",
|
||||
function(event)
|
||||
{
|
||||
if (should_prevent_hotkey(event)) { return; }
|
||||
if (event.key == "c" && !event.ctrlKey && !event.shiftKey && !event.altKey)
|
||||
{
|
||||
clipboard_tray_collapse_toggle();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// HOTKEY: Photoclipboard open full clipboard tab
|
||||
window.addEventListener(
|
||||
"keydown",
|
||||
function(event)
|
||||
{
|
||||
if (should_prevent_hotkey(event)) { return; }
|
||||
if (event.key == "x" && event.altKey && !event.ctrlKey && !event.shiftKey)
|
||||
{
|
||||
open_full_clipboard_tab();
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function update_clipboard_count()
|
||||
{
|
||||
var elements = document.getElementsByClassName("clipboard_count");
|
||||
|
@ -327,7 +268,7 @@ function update_clipboard_count()
|
|||
elements[index].innerText = photo_clipboard.size;
|
||||
}
|
||||
}
|
||||
function on_storage()
|
||||
function on_storage_event()
|
||||
{
|
||||
/*
|
||||
Receive storage events from other tabs and update our state to match.
|
||||
|
@ -335,16 +276,21 @@ function on_storage()
|
|||
load_photo_clipboard();
|
||||
update_pagestate();
|
||||
}
|
||||
|
||||
function update_pagestate()
|
||||
{
|
||||
update_clipboard_count();
|
||||
update_clipboard_tray();
|
||||
apply_check_all();
|
||||
}
|
||||
|
||||
function on_pageload()
|
||||
{
|
||||
window.addEventListener("storage", on_storage, false);
|
||||
set_keybinds();
|
||||
window.addEventListener("storage", on_storage_event, false);
|
||||
register_hotkey("a", 1, 0, 0, select_all_photos, "Select all photos.");
|
||||
register_hotkey("d", 1, 0, 0, unselect_all_photos, "Deselect all photos.");
|
||||
register_hotkey("c", 0, 0, 0, clipboard_tray_collapse_toggle, "Toggle clipboard tray.");
|
||||
register_hotkey("c", 0, 1, 0, open_full_clipboard_tab, "Open full clipboard page.");
|
||||
load_photo_clipboard();
|
||||
update_pagestate();
|
||||
}
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
<script src="/static/js/common.js"></script>
|
||||
<script src="/static/js/albums.js"></script>
|
||||
<script src="/static/js/editor.js"></script>
|
||||
<script src="/static/js/hotkeys.js"></script>
|
||||
<script src="/static/js/photoclipboard.js"></script>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
<link rel="stylesheet" href="/static/css/photo_card.css">
|
||||
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
||||
<script src="/static/js/common.js"></script>
|
||||
<script src="/static/js/hotkeys.js"></script>
|
||||
<script src="/static/js/photoclipboard.js"></script>
|
||||
|
||||
<style>
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
<link rel="stylesheet" href="/static/css/photo_card.css">
|
||||
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
||||
<script src="/static/js/common.js"></script>
|
||||
<script src="/static/js/hotkeys.js"></script>
|
||||
<script src="/static/js/photoclipboard.js"></script>
|
||||
|
||||
<style>
|
||||
|
|
Loading…
Reference in a new issue