/* widget: Flitswoorden */
/* =========================================================
Flash words widget
==========================================================*/
function mountFlits(root, initState){
const S = { card:0, dur:2, idx:0, order:[] };
if(initState){ S.card = initState.card ?? 0; S.dur = initState.dur || 2; }
let flashTimer = null;
root.innerHTML = `
`;
const el = s => root.querySelector(s);
const srcSel = el(".fl-src"), durSel = el(".fl-dur"),
wordEl = el(".fl-word"), picEl = el(".fl-pic"), cntEl = el(".fl-cnt");
function list(){ S.card = normWordSource(S.card); return wordSourceList(S.card); }
function buildSrc(){
fillWordSourceSel(srcSel, S.card);
durSel.innerHTML = "";
[0.5,1,2,3,5].forEach(d=>{
const o = document.createElement("option");
o.value = d; o.textContent = d+" "+T("flSec");
durSel.appendChild(o);
});
durSel.value = S.dur;
}
function newRound(){
S.order = shuffle(list().map((_,i)=>i));
S.idx = 0;
}
function cur(){ return list()[S.order[S.idx]]; }
function hide(){
wordEl.textContent = "• • •";
wordEl.classList.add("dim");
picEl.textContent = "";
}
function flash(){
clearTimeout(flashTimer);
wordEl.textContent = cur()[0];
wordEl.classList.remove("dim");
picEl.textContent = "";
cntEl.textContent = `${T("word")} ${S.idx+1}/${S.order.length}`;
flashTimer = setTimeout(hide, S.dur*1000);
}
function show(){
clearTimeout(flashTimer);
wordEl.textContent = cur()[0];
wordEl.classList.remove("dim");
setPic(picEl, cur()[1]);
}
el(".fl-flash").addEventListener("click", flash);
el(".fl-show").addEventListener("click", show);
el(".fl-next").addEventListener("click", ()=>{
S.idx++;
if(S.idx >= S.order.length) newRound();
flash();
});
srcSel.addEventListener("change", ()=>{
S.card = srcSel.value;
newRound(); hide();
cntEl.textContent = "";
});
durSel.addEventListener("change", ()=>{ S.dur = +durSel.value; });
function labels(){
el(".fl-flash").textContent = T("flFlash");
el(".fl-show").textContent = T("flShow");
el(".fl-next").textContent = T("flNext");
buildSrc();
}
document.addEventListener("langchange", ()=>{ S.card=0; labels(); newRound(); hide(); });
document.addEventListener("wordschange", ()=>{ buildSrc(); newRound(); hide(); });
labels(); newRound();
return { getState: ()=>({card:S.card, dur:S.dur}) };
}