// Tastenkürzel für Leute, die viel pflegen. // // / Suchfeld der Seite // n neuer Eintrag // e Eintrag bearbeiten // Strg+Enter Formular speichern (Cmd+Enter auf dem Mac) // // Welches Ziel eine Taste hat, steht in der Seite selbst: Ein Link oder Knopf // mit data-shortcut="n" wird bei "n" ausgelöst. Gibt es keinen — weil die // Rolle nicht schreiben darf oder die Seite keinen Eintrag zeigt —, passiert // nichts. So bleiben die Rechte an genau einer Stelle, im Template. // // Einzelne Buchstaben gelten nur, wenn gerade kein Eingabefeld den Fokus hat. // Sonst ließe sich kein "n" mehr tippen. Mit Strg/Alt/Cmd zusammen bleiben sie // ebenfalls dem Browser überlassen (Strg+N = neues Fenster). (function () { "use strict"; function inInputField(element) { if (!element) { return false; } var tag = element.tagName; return tag === "INPUT" || tag === "TEXTAREA" || tag === "SELECT" || element.isContentEditable; } document.addEventListener("keydown", function (event) { // Strg+Enter / Cmd+Enter: das Formular abschicken, in dem man gerade // schreibt — nur bei Formularen, die das wollen (data-shortcut-save). if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) { var form = event.target.closest && event.target.closest("form[data-shortcut-save]"); if (form) { event.preventDefault(); // requestSubmit löst wie ein Klick die Prüfung der Felder und // das submit-Ereignis aus (wichtig für unsaved.js). form.requestSubmit(); } return; } if (event.ctrlKey || event.metaKey || event.altKey || inInputField(event.target)) { return; } if (event.key === "/") { var search = document.querySelector("input[type=search]"); if (search) { event.preventDefault(); search.focus(); search.select(); } return; } var dest = document.querySelector('[data-shortcut="' + event.key + '"]'); if (dest) { event.preventDefault(); dest.click(); } }); })();