Skip to content

Commit da6ebbe

Browse files
committed
fix hot-reload with fragments
1 parent a93054e commit da6ebbe

File tree

1 file changed

+33
-17
lines changed

1 file changed

+33
-17
lines changed

obsidian.js

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,46 +1358,62 @@ function getMermaidScriptEntry() {
13581358
function getAutoReloadScript() {
13591359
return `<script>
13601360
(function() {
1361-
let scrollY = 0;
1362-
let slideIndices = null;
13631361
const es = new EventSource('/hot-reload');
1362+
13641363
es.addEventListener('reload', function() {
13651364
if (window.Reveal && Reveal.getIndices) {
1366-
slideIndices = Reveal.getIndices();
1365+
const slideIndices = Reveal.getIndices();
13671366
sessionStorage.setItem("revealSlide", JSON.stringify(slideIndices));
13681367
} else {
1369-
scrollY = window.scrollY;
1370-
sessionStorage.setItem("scrollY", scrollY);
1368+
sessionStorage.setItem("scrollY", window.scrollY);
13711369
}
13721370
location.reload();
13731371
});
13741372
13751373
window.addEventListener("DOMContentLoaded", function() {
1376-
// Hide body until slide/scroll is restored
13771374
document.body.style.display = "none";
1375+
1376+
const savedSlide = sessionStorage.getItem("revealSlide");
1377+
const savedScroll = sessionStorage.getItem("scrollY");
1378+
13781379
if (window.Reveal && Reveal.slide) {
1379-
const saved = sessionStorage.getItem("revealSlide");
1380-
if (saved) {
1381-
const idx = JSON.parse(saved);
1382-
Reveal.slide(idx.h, idx.v || 0);
1383-
sessionStorage.removeItem("revealSlide");
1384-
setTimeout(function() {
1380+
if (savedSlide) {
1381+
const idx = JSON.parse(savedSlide);
1382+
const h = idx.h || 0;
1383+
const v = idx.v || 0;
1384+
const f = (typeof idx.f === "number") ? idx.f : 0;
1385+
1386+
const restore = () => {
1387+
Reveal.slide(h, v, f);
1388+
Reveal.layout(); // neu berechnen
13851389
document.body.style.display = "";
1386-
}, 0); // Reveal.slide is synchronous, but just in case
1390+
sessionStorage.removeItem("revealSlide");
1391+
};
1392+
1393+
// Wenn Reveal schon ready ist, sofort
1394+
if (Reveal.isReady()) {
1395+
restore();
1396+
} else {
1397+
// Sonst auf ready warten
1398+
Reveal.on('ready', restore, { once: true });
1399+
// Fallback, falls ready nicht feuert
1400+
setTimeout(() => {
1401+
document.body.style.display = "";
1402+
}, 1000);
1403+
}
13871404
} else {
13881405
document.body.style.display = "";
13891406
}
13901407
} else {
1391-
const savedY = sessionStorage.getItem("scrollY");
1392-
if (savedY) {
1393-
window.scrollTo(0, parseInt(savedY, 10));
1408+
if (savedScroll) {
1409+
window.scrollTo(0, parseInt(savedScroll, 10));
13941410
sessionStorage.removeItem("scrollY");
13951411
}
13961412
document.body.style.display = "";
13971413
}
13981414
});
13991415
})();
1400-
</script>`
1416+
</script>`;
14011417
}
14021418

14031419
export async function wrapInPage(html, startPage, req) {

0 commit comments

Comments
 (0)