From 4230318b10a82830ee2584a6d09c2e0f243e05b4 Mon Sep 17 00:00:00 2001 From: mic Date: Sun, 13 Oct 2024 23:31:11 +0200 Subject: [PATCH] first version of autocomplete. see #157 --- customprompts/mzta-custom-prompts.css | 52 +++++++++++- customprompts/mzta-custom-prompts.html | 5 +- customprompts/mzta-custom-prompts.js | 107 ++++++++++++++++++++++++- 3 files changed, 160 insertions(+), 4 deletions(-) diff --git a/customprompts/mzta-custom-prompts.css b/customprompts/mzta-custom-prompts.css index 4d7fb217..5a8e9bb1 100644 --- a/customprompts/mzta-custom-prompts.css +++ b/customprompts/mzta-custom-prompts.css @@ -163,6 +163,44 @@ table .sort.desc { margin-bottom: 0px; } +.autocomplete-container { + position: relative; +} + +.autocomplete-list { + position: absolute; + top: 100%; + left: 0; + right: 0; + background-color: white; + border: 1px solid #ccc; + z-index: 1000; + max-height: 200px; + overflow-y: auto; + padding: 0; + margin: 0; + list-style: none; + font-size: small; +} + +.autocomplete-list li { + padding: 8px; + cursor: pointer; +} + +.autocomplete-list li:hover { + background-color: #f0f0f0; +} + +.autocomplete-list li.active { + background-color: #ddd; +} + +.hidden { + display: none; +} + + @media (prefers-color-scheme: dark) { body { @@ -196,6 +234,18 @@ table .sort.desc { .storage_space{ color: rgb(182, 182, 182); - } + } + .autocomplete-list { + background-color: #2E2F36; + border: 1px solid #2E2F36; + } + + .autocomplete-list li:hover { + background-color: #4c4e58; + } + + .autocomplete-list li.active { + background-color: #4c4e58; + } } \ No newline at end of file diff --git a/customprompts/mzta-custom-prompts.html b/customprompts/mzta-custom-prompts.html index 22055da4..513ec5e9 100644 --- a/customprompts/mzta-custom-prompts.html +++ b/customprompts/mzta-custom-prompts.html @@ -34,7 +34,10 @@
- +
+ + +
diff --git a/customprompts/mzta-custom-prompts.js b/customprompts/mzta-custom-prompts.js index 50dc438a..443fc8b0 100644 --- a/customprompts/mzta-custom-prompts.js +++ b/customprompts/mzta-custom-prompts.js @@ -19,6 +19,7 @@ import { getPrompts, setDefaultPromptsProperties, setCustomPrompts, preparePromptsForExport, preparePromptsForImport } from "../js/mzta-prompts.js"; import { isThunderbird128OrGreater, getCustomPromptsUsedSpace } from "../js/mzta-utils.js"; import { taLogger } from "../js/mzta-logger.js"; +import { getPlaceholders } from "../js/mzta-placeholders.js"; var promptsList = null; var somethingChanged = false; @@ -27,6 +28,7 @@ var positionMax_display = 0; var idnumMax = 0; var msgTimeout = null; let taLog = null; +let autocompleteSuggestions = []; document.addEventListener('DOMContentLoaded', async () => { @@ -111,6 +113,13 @@ document.addEventListener('DOMContentLoaded', async () => { }); } + const textareas = document.querySelectorAll('.editor'); + autocompleteSuggestions = (await getPlaceholders(true)).map(p => '{%'+p.id+'%}'); + + // console.log('>>>>>>>>>>> suggestions: ' + JSON.stringify(suggestions)); + + textareas.forEach(textarea => textareaAutocomplete(textarea, autocompleteSuggestions)); + i18n.updateDocument(); //To add a new item @@ -274,7 +283,9 @@ function showItemRowEditor(tr) { tr.querySelector('.id_show').style.display = 'none'; tr.querySelector('.name_output').style.display = 'inline'; tr.querySelector('.name_show').style.display = 'none'; - tr.querySelector('.text_output').style.display = 'inline'; + const text_output = tr.querySelector('.text_output'); + text_output.style.display = 'inline'; + textareaAutocomplete(text_output, autocompleteSuggestions) tr.querySelector('.text_show').style.display = 'none'; tr.querySelector('.type_output').style.display = 'inline'; tr.querySelector('.type_show').style.display = 'none'; @@ -399,7 +410,7 @@ function loadPromptsList(values){ let output = ` - +
` + type_output + `