diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json index c2aecd4..73bb4f7 100644 --- a/src/_locales/de/messages.json +++ b/src/_locales/de/messages.json @@ -8,6 +8,9 @@ "quicktext.controlledViaManagedStorage.label": { "message": "Über verwalteten Speicher gesteuert" }, + "quicktext.caseinsensitive.label": { + "message": "Ignoriere groß/kleinschreibung bei Schlüsselwortern" + }, "quicktext.date.label": { "message": "Datum ($P1$)", "placeholders": { diff --git a/src/_locales/en-US/messages.json b/src/_locales/en-US/messages.json index 8cd7cc5..fbab045 100644 --- a/src/_locales/en-US/messages.json +++ b/src/_locales/en-US/messages.json @@ -8,6 +8,9 @@ "quicktext.controlledViaManagedStorage.label": { "message": "Controlled via managed storage" }, + "quicktext.caseinsensitive.label": { + "message": "Keywords are Case-insensitive" + }, "quicktext.date.label": { "message": "Date ($P1$)", "placeholders": { diff --git a/src/dialogs/manager/manager.html b/src/dialogs/manager/manager.html index 2ec8cb7..d19099c 100644 --- a/src/dialogs/manager/manager.html +++ b/src/dialogs/manager/manager.html @@ -52,6 +52,9 @@ +
+ +
diff --git a/src/dialogs/manager/manager.js b/src/dialogs/manager/manager.js index 10e27c6..715cf25 100644 --- a/src/dialogs/manager/manager.js +++ b/src/dialogs/manager/manager.js @@ -133,7 +133,7 @@ async function _refreshVfsProviders() { async function loadAll() { const prefNames = [ "popup", "menuCollapse", "shortcutModifier", "shortcutTypeAdv", - "keywordKey", "counter", "defaultImport", + "keywordKey", "keywordCaseinsensitive", "counter", "defaultImport", ]; for (const pref of prefNames) { const { value, isManaged } = await storage.getPrefWithManagedInfo(pref); @@ -280,6 +280,7 @@ async function saveAll() { await storage.setPref("shortcutModifier", state.prefs.shortcutModifier); await storage.setPref("shortcutTypeAdv", state.prefs.shortcutTypeAdv); await storage.setPref("keywordKey", state.prefs.keywordKey); + await storage.setPref("keywordCaseinsensitive", state.prefs.keywordCaseinsensitive); await storage.setPref("defaultImport", state.prefs.defaultImport); // The storage list (including enabled flags, type, name and // ordering) is part of the regular Save flow. Storage-list edits @@ -392,6 +393,11 @@ function renderGeneral() { applyManaged(selKeyword, managed("keywordKey")); selKeyword.addEventListener("change", () => { state.prefs.keywordKey = selKeyword.value; markChanged(); }); + const chkKeywordCI = document.getElementById("chk-keyword-ci"); + chkKeywordCI.checked = state.prefs.keywordCaseinsensitive; + applyManaged(chkKeywordCI, managed("keywordCaseinsensitive")); + chkKeywordCI.addEventListener("change", () => { state.prefs.keywordCaseinsensitive = chkKeywordCI.checked; markChanged(); }); + document.getElementById("btn-reset-counter").addEventListener("click", () => { state.prefs.counter = 0; storage.setPref("counter", 0); diff --git a/src/modules/quicktext.mjs b/src/modules/quicktext.mjs index 879b241..313ccdf 100644 --- a/src/modules/quicktext.mjs +++ b/src/modules/quicktext.mjs @@ -277,6 +277,7 @@ export async function processTag({ tabId, tag, variables }) { // without further logic to return a Promise. export async function getKeywordsAndShortcuts() { let bundles = await storage.getActiveStorageEntries(); + let keywordCaseinsensitive = await storage.getPref("keywordCaseinsensitive"); let keywords = {}; let shortcuts = {}; @@ -293,6 +294,9 @@ export async function getKeywordsAndShortcuts() { let keyword = text.keyword; if (keyword != "" && typeof keywords[keyword] == "undefined") + if(keywordCaseinsensitive) { + keyword = keyword.toLowerCase(); + } keywords[keyword] = [bundle.storageUuid, i, j]; } } diff --git a/src/modules/storage.mjs b/src/modules/storage.mjs index 510d5cd..ecbc3c9 100644 --- a/src/modules/storage.mjs +++ b/src/modules/storage.mjs @@ -303,6 +303,7 @@ const defaultPrefs = { "toolbar": true, "popup": true, "keywordKey": "Tab", + "keywordCaseinsensitive": false, "shortcutModifier": "alt", "shortcutTypeAdv": false, "collapseState": "", @@ -313,6 +314,7 @@ const managedPrefs = [ "menuCollapse", "popup", "keywordKey", + "keywordCaseinsensitive", "shortcutModifier", "shortcutTypeAdv", ]; diff --git a/src/scripts/compose.js b/src/scripts/compose.js index 99208ce..cea8b6a 100644 --- a/src/scripts/compose.js +++ b/src/scripts/compose.js @@ -8,7 +8,7 @@ const alternatives = { "Enter": ["NumpadEnter"] } -let keywords, keywordKey, shortcutTypeAdv, shortcutModifier, shortcuts; +let keywords, keywordKey, keywordCaseinsensitive, shortcutTypeAdv, shortcutModifier, shortcuts; let advShortcutModifierIsDown = false; let advShortcutString = ""; let popoverShown = false; @@ -147,6 +147,9 @@ function keywordListener(e) { let range = initialSelectionRange.cloneRange(); range.setStart(range.startContainer, 0); let lastWord = range.toString().split(" ").pop(); + if (keywordCaseinsensitive) { + lastWord = lastWord.toLocaleLowerCase(); + } if (!lastWord || !keywords.hasOwnProperty(lastWord)) { return; @@ -213,6 +216,7 @@ async function getLatestPrefs() { keywordKey = await storage.getPref("keywordKey"); shortcutTypeAdv = await storage.getPref("shortcutTypeAdv"); shortcutModifier = await storage.getPref("shortcutModifier"); + keywordCaseinsensitive = await storage.getPref("keywordCaseinsensitive"); let rv = await messenger.runtime.sendMessage({ command: "getKeywordsAndShortcuts" }); keywords = rv.keywords;