// 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-kuerzel="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 imEingabefeld(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-kuerzel-speichern). if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) { var form = event.target.closest && event.target.closest("form[data-kuerzel-speichern]"); if (form) { event.preventDefault(); // requestSubmit löst wie ein Klick die Prüfung der Felder und // das submit-Ereignis aus (wichtig für ungespeichert.js). form.requestSubmit(); } return; } if (event.ctrlKey || event.metaKey || event.altKey || imEingabefeld(event.target)) { return; } if (event.key === "/") { var suche = document.querySelector("input[type=search]"); if (suche) { event.preventDefault(); suche.focus(); suche.select(); } return; } var ziel = document.querySelector('[data-kuerzel="' + event.key + '"]'); if (ziel) { event.preventDefault(); ziel.click(); } }); })();