Keep dropdowns open through re-renders

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rope 2026-10-27 20:32:58 +00:00
parent fd85580466
commit bb56d618df

View file

@ -658,7 +658,8 @@ function render() {
setHtml($("#top"), topbar()); setHtml($("#top"), topbar());
// The fires keep burning through a re-render: put the old canvases back in place of the new ones. // The fires keep burning through a re-render: put the old canvases back in place of the new ones.
const burning = [...document.querySelectorAll("canvas[data-flame]")]; const burning = [...document.querySelectorAll("canvas[data-flame]")];
setHtml($("#main"), S.me ? pageHtml() : register()); // Replacing a focused dropdown closes it mid-pick: hold the page until it lets go.
if (!document.activeElement?.matches("#main select")) setHtml($("#main"), S.me ? pageHtml() : register());
for (const old of burning) { for (const old of burning) {
const fresh = document.querySelector(`canvas[data-flame="${old.dataset.flame}"]`); const fresh = document.querySelector(`canvas[data-flame="${old.dataset.flame}"]`);
if (fresh && fresh !== old) fresh.replaceWith(old); if (fresh && fresh !== old) fresh.replaceWith(old);
@ -3030,7 +3031,12 @@ document.addEventListener("input", (e) => {
render(); render();
}); });
document.addEventListener("focusout", (e) => {
if (S && e.target.matches("#main select")) setTimeout(render);
});
document.addEventListener("change", (e) => { document.addEventListener("change", (e) => {
if (e.target.matches("#main select")) e.target.blur();
if (e.target.dataset.qset) { if (e.target.dataset.qset) {
const n = Math.floor(Number(e.target.value)); const n = Math.floor(Number(e.target.value));
if (!(n >= 1 && n <= C.make_max)) return toast(`1 to ${fmt(C.make_max)}`, "bad"); if (!(n >= 1 && n <= C.make_max)) return toast(`1 to ${fmt(C.make_max)}`, "bad");