So closegit diff

This commit is contained in:
retoor 2025-06-29 00:04:42 +02:00
parent ea047411ef
commit 6e0aa3c46c

View File

@ -2,6 +2,47 @@ class STTButton extends HTMLElement {
/** monitor target attribute so it can change on-the-fly */
static get observedAttributes() { return ['target']; }
simulateTypingWithEvents(element, text, delay = 100) {
let index = 0;
function triggerEvent(type, key) {
const event = new KeyboardEvent(type, {
key: key,
bubbles: true,
cancelable: true,
});
element.dispatchEvent(event);
}
const interval = setInterval(() => {
if (index < text.length) {
const char = text.charAt(index);
// Trigger keydown
triggerEvent('keydown', char);
// Update the value
if (element.isContentEditable) {
// For contentEditable elements
document.execCommand('insertText', false, char);
} else {
// For input or textarea
element.value += char;
}
// Trigger keypress
triggerEvent('keypress', char);
// Trigger keyup
triggerEvent('keyup', char);
index++;
} else {
clearInterval(interval);
}
}, delay);
}
constructor() {
super();
this.attachShadow({mode: 'open'});
@ -55,20 +96,19 @@ this.recog.onresult = (e) => {
txt.charAt(0).toUpperCase() + txt.slice(1);
// 2) Ensure closing punctuation
const punctuated =
let punctuated =
/[.!?]$/.test(sentence) ? sentence : sentence + '.';
committed += punctuated + ' '; // add to permanent text
} else {
interim += txt + ' '; // live but volatile
}
}
/* --- paint to DOM --- */
if (this.targetEl) {
if (this.targetEl) {
this.targetEl.focus()
this.targetEl.value = committed + interim
punctuated = punctuated.replace(/\./g, ".\n")
punctuated = punctuated.replace(/\?/g, "?\n")
punctuated = punctuated.replace(/\!/g, "!\n")
this.simulateTypingWithEvents(this.targetEl, punctuated,50)
triggerEvent('keydown', "Enter");
triggerEvent('keydown', "Return");
//this.targetEl.value = committed + interim
/*this.targetElement.dispatchEvent(new ChangeEvent('change', {
bubbles: true,
@ -76,6 +116,13 @@ this.recog.onresult = (e) => {
}));*/
}
} else {
interim += txt + ' '; // live but volatile
}
}
/* --- paint to DOM --- */
};
/* const transcript = Array.from(e.results)