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;
|
template.innerHTML = html;
|
||||||
return template.content.firstChild;
|
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");
|
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()
|
function update_clipboard_count()
|
||||||
{
|
{
|
||||||
var elements = document.getElementsByClassName("clipboard_count");
|
var elements = document.getElementsByClassName("clipboard_count");
|
||||||
|
@ -327,7 +268,7 @@ function update_clipboard_count()
|
||||||
elements[index].innerText = photo_clipboard.size;
|
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.
|
Receive storage events from other tabs and update our state to match.
|
||||||
|
@ -335,16 +276,21 @@ function on_storage()
|
||||||
load_photo_clipboard();
|
load_photo_clipboard();
|
||||||
update_pagestate();
|
update_pagestate();
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_pagestate()
|
function update_pagestate()
|
||||||
{
|
{
|
||||||
update_clipboard_count();
|
update_clipboard_count();
|
||||||
update_clipboard_tray();
|
update_clipboard_tray();
|
||||||
apply_check_all();
|
apply_check_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
function on_pageload()
|
function on_pageload()
|
||||||
{
|
{
|
||||||
window.addEventListener("storage", on_storage, false);
|
window.addEventListener("storage", on_storage_event, false);
|
||||||
set_keybinds();
|
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();
|
load_photo_clipboard();
|
||||||
update_pagestate();
|
update_pagestate();
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
<script src="/static/js/albums.js"></script>
|
<script src="/static/js/albums.js"></script>
|
||||||
<script src="/static/js/editor.js"></script>
|
<script src="/static/js/editor.js"></script>
|
||||||
|
<script src="/static/js/hotkeys.js"></script>
|
||||||
<script src="/static/js/photoclipboard.js"></script>
|
<script src="/static/js/photoclipboard.js"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
<link rel="stylesheet" href="/static/css/photo_card.css">
|
<link rel="stylesheet" href="/static/css/photo_card.css">
|
||||||
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
|
<script src="/static/js/hotkeys.js"></script>
|
||||||
<script src="/static/js/photoclipboard.js"></script>
|
<script src="/static/js/photoclipboard.js"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
<link rel="stylesheet" href="/static/css/photo_card.css">
|
<link rel="stylesheet" href="/static/css/photo_card.css">
|
||||||
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
<link rel="stylesheet" href="/static/css/clipboard_tray.css">
|
||||||
<script src="/static/js/common.js"></script>
|
<script src="/static/js/common.js"></script>
|
||||||
|
<script src="/static/js/hotkeys.js"></script>
|
||||||
<script src="/static/js/photoclipboard.js"></script>
|
<script src="/static/js/photoclipboard.js"></script>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
Loading…
Reference in a new issue