correctly handling dynamic palceholders when autocompleting. see #553

This commit is contained in:
mic 2025-12-26 23:03:23 +01:00
parent c9b0e39433
commit de7a2ca831

View file

@ -34,7 +34,7 @@ export function textareaAutocomplete(textarea, suggestions, type_value = -1) {
type = tr.querySelector('.type_output').value type = tr.querySelector('.type_output').value
} }
// console.log(">>>>>>>>> type: " + type); // console.log(">>>>>>>>> type: " + type);
// console.log(">>>>>>>>> suggestions: " + JSON.stringify(suggestions)); // console.log(">>>>>>>>> suggestions: " + JSON.stringify(suggestions));
// console.log(">>>>>>>>> lastWord: " + lastWord); // console.log(">>>>>>>>> lastWord: " + lastWord);
const matches = suggestions.filter(s => s.command.startsWith(lastWord) && (String(s.type) == String(type) || String(s.type) == '0' )).map(s => s.command); const matches = suggestions.filter(s => s.command.startsWith(lastWord) && (String(s.type) == String(type) || String(s.type) == '0' )).map(s => s.command);
// console.log(">>>>>>>>> matches: " + JSON.stringify(matches)); // console.log(">>>>>>>>> matches: " + JSON.stringify(matches));
@ -106,6 +106,7 @@ export function textareaAutocomplete(textarea, suggestions, type_value = -1) {
} }
function insertAutocomplete(suggestion, textarea) { function insertAutocomplete(suggestion, textarea) {
// console.log(">>>>>>>>> insertAutocomplete suggestion: " + JSON.stringify(suggestion));
const cursorPosition = textarea.selectionStart; const cursorPosition = textarea.selectionStart;
const textBefore = textarea.value.substring(0, cursorPosition); const textBefore = textarea.value.substring(0, cursorPosition);
const textAfter = textarea.value.substring(cursorPosition); const textAfter = textarea.value.substring(cursorPosition);
@ -115,7 +116,7 @@ export function textareaAutocomplete(textarea, suggestions, type_value = -1) {
const completion = suggestion.substring(lastWord.length); const completion = suggestion.substring(lastWord.length);
const newText = textBefore + completion + textAfter; const newText = textBefore + completion + textAfter;
textarea.value = newText; textarea.value = newText;
const newCursorPosition = cursorPosition + completion.length; const newCursorPosition = cursorPosition + completion.length - (suggestion.endsWith(':%}') ? 2 : 0);
textarea.setSelectionRange(newCursorPosition, newCursorPosition); textarea.setSelectionRange(newCursorPosition, newCursorPosition);
} }
} }