Share modal joins the window stack so back closes it, not the screens behind

This commit is contained in:
4aiman 2026-09-14 12:57:52 +03:00
commit eb2aab3e6b

View file

@ -3419,19 +3419,32 @@ function showShareModal(session, stats, points) {
</div>
</div>`;
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();
}