diff --git a/index.php b/index.php index c021930..c55e5cb 100644 --- a/index.php +++ b/index.php @@ -66,7 +66,7 @@ require_once(SITE_LOCATION . '/php/notificationconditiontree.php'); Part of Speech - + Equivalent Word(s) diff --git a/js/helpers.js b/js/helpers.js index 7ac027b..f4d74a7 100644 --- a/js/helpers.js +++ b/js/helpers.js @@ -6,6 +6,111 @@ function ready(fn) { } } +// Get Keycode based on key name +function keyCodeFor(keyName) { + if (keyName == "backspace") return 8; + else if (keyName == "tab") return 9; + else if (keyName == "ctrlEnter") return 10; + else if (keyName == "enter") return 13; + else if (keyName == "shift") return 16; + else if (keyName == "ctrl") return 17; + else if (keyName == "alt") return 18; + else if (keyName == "pausebreak") return 19; + else if (keyName == "capslock") return 20; + else if (keyName == "escape") return 27; + else if (keyName == "space") return 32; + else if (keyName == "pageup") return 33; + else if (keyName == "pagedown") return 34; + else if (keyName == "end") return 35; + else if (keyName == "home") return 36; + else if (keyName == "left") return 37; + else if (keyName == "up") return 38; + else if (keyName == "right") return 39; + else if (keyName == "down") return 40; + else if (keyName == "insert") return 45; + else if (keyName == "del") return 46; + else if (keyName == "zero") return 48; + else if (keyName == "one") return 49; + else if (keyName == "two") return 50; + else if (keyName == "three") return 51; + else if (keyName == "four") return 52; + else if (keyName == "five") return 53; + else if (keyName == "six") return 54; + else if (keyName == "seven") return 55; + else if (keyName == "eight") return 56; + else if (keyName == "nine") return 57; + else if (keyName == "a") return 65; + else if (keyName == "b") return 66; + else if (keyName == "c") return 67; + else if (keyName == "d") return 68; + else if (keyName == "e") return 69; + else if (keyName == "f") return 70; + else if (keyName == "g") return 71; + else if (keyName == "h") return 72; + else if (keyName == "i") return 73; + else if (keyName == "j") return 74; + else if (keyName == "k") return 75; + else if (keyName == "l") return 76; + else if (keyName == "m") return 77; + else if (keyName == "n") return 78; + else if (keyName == "o") return 79; + else if (keyName == "p") return 80; + else if (keyName == "q") return 81; + else if (keyName == "r") return 82; + else if (keyName == "s") return 83; + else if (keyName == "t") return 84; + else if (keyName == "u") return 85; + else if (keyName == "v") return 86; + else if (keyName == "w") return 87; + else if (keyName == "x") return 88; + else if (keyName == "y") return 89; + else if (keyName == "z") return 90; + else if (keyName == "leftwinkey") return 91; + else if (keyName == "rightwinkey") return 92; + else if (keyName == "selectkey") return 93; + else if (keyName == "numpad_0") return 96; + else if (keyName == "numpad_1") return 97; + else if (keyName == "numpad_2") return 98; + else if (keyName == "numpad_3") return 99; + else if (keyName == "numpad_4") return 100; + else if (keyName == "numpad_5") return 101; + else if (keyName == "numpad_6") return 102; + else if (keyName == "numpad_7") return 103; + else if (keyName == "numpad_8") return 104; + else if (keyName == "numpad_9") return 105; + else if (keyName == "numpad_asterisk") return 106; + else if (keyName == "numpad_plus") return 107; + else if (keyName == "numpad_dash") return 109; + else if (keyName == "numpad_period") return 110; + else if (keyName == "numpad_slash") return 111; + else if (keyName == "f1") return 112; + else if (keyName == "f2") return 113; + else if (keyName == "f3") return 114; + else if (keyName == "f4") return 115; + else if (keyName == "f5") return 116; + else if (keyName == "f6") return 117; + else if (keyName == "f7") return 118; + else if (keyName == "f8") return 119; + else if (keyName == "f9") return 120; + else if (keyName == "f10") return 121; + else if (keyName == "f11") return 122; + else if (keyName == "f12") return 123; + else if (keyName == "numlock") return 144; + else if (keyName == "scrolllock") return 145; + else if (keyName == "semicolon") return 186; + else if (keyName == "equal") return 187; + else if (keyName == "comma") return 188; + else if (keyName == "dash") return 189; + else if (keyName == "period") return 190; + else if (keyName == "slash") return 191; + else if (keyName == "grave") return 192; + else if (keyName == "openbracket") return 219; + else if (keyName == "backslash") return 220; + else if (keyName == "closebraket") return 221; + else if (keyName == "quote") return 222; + else return false; +} + function getInputSelection(el) { // Retrieved from http://stackoverflow.com/a/4207763 var start = 0, end = 0, normalizedValue, range, diff --git a/js/ui.js b/js/ui.js index 23dbb09..d13da6c 100644 --- a/js/ui.js +++ b/js/ui.js @@ -8,6 +8,124 @@ function Initialize() { GetTextFile("PRIVACY.md", "privacyText", true); GetTextFile("LOGIN.form", "loginForm", false); GetTextFile("FORGOT.form", "forgotForm", false); + + SetKeyboardShortcuts(); +} + +function SetKeyboardShortcuts() { + document.addEventListener("keydown", function(e) { + var keyCode = (e.which ? e.which : e.keyCode); + + if (keyCode == keyCodeFor("escape")) { + if (document.getElementById("infoScreen").style.display == "block") { + HideInfo(); + } + else if (document.getElementById("fullScreenTextboxScreen").style.display == "block") { + HideFullScreenTextbox(); + } + else if (document.getElementById("settingsScreen").style.display == "block") { + HideSettings(); + } + else if (document.getElementById("accountSettingsScreen") && document.getElementById("accountSettingsScreen").style.display == "block") { + HideAccountSettings(); + } + } + else if (e.ctrlKey) { + // Only allow shortcuts if not currently using fullscreen textbox + if (document.getElementById("fullScreenTextboxScreen").style.display == "none") { + if (keyCode == keyCodeFor("m")) { + if (document.activeElement.id == "longDefinition") { + e.preventDefault(); + ShowFullScreenTextbox('longDefinition', 'Explanation/Long Definition'); + } + else if (document.activeElement.id == "dictionaryDescriptionEdit") { + e.preventDefault(); + ShowFullScreenTextbox('dictionaryDescriptionEdit', 'Dictionary Details'); + } + else if (document.activeElement.id == "fullScreenTextbox") { + e.preventDefault(); + HideFullScreenTextbox(); + } + } + else if (keyCode == keyCodeFor("u")) { + e.preventDefault(); + ToggleWordFormLock(); + } + else if (keyCode == keyCodeFor("d")) { + e.preventDefault(); + ToggleDescription(); + } + else if ((e.shiftKey && keyCode == keyCodeFor("s")) || keyCode == keyCodeFor("e")) { + e.preventDefault(); + ExportDictionary(); + } + else if (keyCode == keyCodeFor("s")) { + e.preventDefault(); + //ToggleSearchFilter(); + var searchFilterToggle = document.getElementById("searchFilterToggle"); + var searchFilterArea = document.getElementById("searchFilterArea"); + + if (searchFilterArea.style.display == "none") { + searchFilterArea.style.display = "block"; + searchFilterToggle.innerHTML = "Hide Search/Filter Options"; + } + document.getElementById("searchBox").focus(); + } + else if (keyCode == keyCodeFor("h")) { + e.preventDefault(); + ShowInfo('aboutText'); + } + } + else { //If the fullscreen editor *is* open, just prevent the others for consistent behavior. + if (keyCode == keyCodeFor("m")) { + e.preventDefault(); + HideFullScreenTextbox(); + } + else if (keyCode == keyCodeFor("u")) { + e.preventDefault(); + } + else if (keyCode == keyCodeFor("d")) { + e.preventDefault(); + } + else if ((e.shiftKey && keyCode == keyCodeFor("s")) || keyCode == keyCodeFor("e")) { + e.preventDefault(); + } + else if (keyCode == keyCodeFor("s")) { + e.preventDefault(); + } + else if (keyCode == keyCodeFor("h")) { + e.preventDefault(); + } + } + } + else if (e.altKey) { + // Only toggle screens if not currently using fullscreen textbox + if (document.getElementById("fullScreenTextboxScreen").style.display == "none") { + if (keyCode == keyCodeFor("s")) { + e.preventDefault(); + ToggleSettingsScreen(true); + } + else if (keyCode == keyCodeFor("a")) { + e.preventDefault(); + ToggleAccountSettings(); + } + } + } + }, false); +} + +function SubmitWordOnCtrlEnter(keypress) { + var keyCode = (event.which ? event.which : event.keyCode); + + if (keyCode === keyCodeFor("ctrlEnter") || (keyCode == keyCodeFor("enter") && event.ctrlKey)) { //Windows and Linux Chrome accept ctrl+enter as keyCode 10. + event.preventDefault(); + + AddWord(); + + if (document.getElementById("newWordButtonArea").style.display == "none" && document.getElementById("editWordButtonArea").style.display == "none") { + document.getElementById("updateConfirmButton").focus(); + } + } } function LoadUserDictionaries() { @@ -260,18 +378,6 @@ function CloseUpdateConflictArea(displayId) { EnableForm(); } -function SubmitWordOnCtrlEnter(keypress) { - var keyCode = (event.which ? event.which : event.keyCode); - - if (keyCode === 10 || (keyCode == 13 && event.ctrlKey)) { //Windows and Linux Chrome accept ctrl+enter as keyCode 10. - AddWord(); - - if (document.getElementById("newWordButtonArea").style.display == "none" && document.getElementById("editWordButtonArea").style.display == "none") { - document.getElementById("updateConfirmButton").focus(); - } - } -} - function DisableForm() { document.getElementById("word").disabled = true; document.getElementById("pronunciation").disabled = true; @@ -350,8 +456,22 @@ function HideInfo() { document.getElementById("infoScreen").style.display = "none"; } +function ToggleAccountSettings() { + if (document.getElementById("accountSettingsScreen")) { + var accountScreen = document.getElementById("accountSettingsScreen"); + + if (accountScreen.style.display == "block") { + HideAccountSettings(); + } else { + ShowAccountSettings(); + } + } +} + function ShowAccountSettings(variableName) { - document.getElementById("accountSettingsScreen").style.display = "block"; + if (document.getElementById("accountSettingsScreen")) + document.getElementById("accountSettingsScreen").style.display = "block"; + HideInfo(); } @@ -360,6 +480,19 @@ function HideAccountSettings() { document.getElementById("accountSettingsScreen").style.display = "none"; } +function ToggleSettingsScreen(doSave) { + var settingsScreen = document.getElementById("settingsScreen"); + + if (settingsScreen.style.display == "block") { + if (doSave) { + SaveSettings(); + } + HideSettings(); + } else { + ShowSettings(); + } +} + function ShowSettings() { document.getElementById("settingsScreen").style.display = "block"; document.getElementById("dictionaryNameEdit").value = htmlEntitiesParse(currentDictionary.name);