diff --git a/frontend/js/main.js b/frontend/js/main.js index 210ab52..3ac2091 100644 --- a/frontend/js/main.js +++ b/frontend/js/main.js @@ -3419,19 +3419,32 @@ function showShareModal(session, stats, points) { `; document.body.appendChild(ov); + // Register in the global window stack so the hardware/gesture back closes THIS + // modal instead of paging the screens behind it (winPush adds a history entry). + let base = winStack.length, closed = false; + winPush("share", () => ov.remove()); + let closeShare = () => { + if (closed) return; + closed = true; + let count = winStack.length - base; + for (let i = 0; i < count; i++) winStack.pop().close(); + _skipPops = count; + if (count > 0) history.go(-count); + ov.remove(); + }; let bg = "transparent", dataUrl = null; let img = ov.querySelector("#share-img"); let bt = ov.querySelector("#share-bg-t"), bp = ov.querySelector("#share-bg-p"); async function render() { dataUrl = await buildShareImage(session, stats, points, { bg }); img.src = dataUrl; } bt.onclick = () => { bg = "transparent"; bt.classList.add("active"); bp.classList.remove("active"); render(); }; bp.onclick = () => { - if (!localStorage.getItem("baldav_share_bg")) { showToast("Подложка не выбрана — задайте в Настройках"); return; } + if (!localStorage.getItem("baldav_share_bg")) { showToast("Подложка не выбрана - задайте в Настройках"); return; } bg = "photo"; bp.classList.add("active"); bt.classList.remove("active"); render(); }; let filename = () => "baldav-" + ((session && session.date) || "track") + ".png"; ov.querySelector("#share-do").onclick = () => exportShareImage(dataUrl, filename(), "share"); ov.querySelector("#share-save").onclick = () => exportShareImage(dataUrl, filename(), "save"); - ov.querySelector("#share-close").onclick = () => ov.remove(); + ov.querySelector("#share-close").onclick = () => closeShare(); render(); }