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 + `
|