@kamod-ch/preactpress 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/client/app.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAkD3C,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAA;CAAE,gCAwI5F"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/client/app.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAwD3C,wBAAgB,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAA;CAAE,gCAwJ5F"}
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx } from "preact/jsx-runtime";
2
- import { useEffect, useState } from "preact/hooks";
2
+ import { useEffect, useRef, useState } from "preact/hooks";
3
3
  import Layout from "virtual:preactpress-layout";
4
4
  import { pagesMeta, routes } from "virtual:preactpress-pages";
5
5
  import { i18n, mpa, site, themeConfig } from "virtual:preactpress-site";
6
6
  import { usePageHead } from "./usePageHead.js";
7
7
  import { normalizeRoute, routeFromPathname } from "../shared/route.js";
8
- import { loadPage, prefetchPage, seedPage } from "./loadPage.js";
8
+ import { consumeScrollRestoreOnPopstate, restoreScrollPositionAfterLayout, saveScrollPositionBeforeNavigation, setupScrollRestoration, } from "../shared/scrollRestoration.js";
9
+ import { getCachedPage, loadPage, prefetchPage, seedPage } from "./loadPage.js";
9
10
  import { setupViewportPrefetch } from "./prefetchLinks.js";
10
11
  import { localeFromRoute, localizedRouteForLocale, siteForRoute, themeConfigForRoute, } from "../shared/locale.js";
11
12
  function routeFromLocation() {
@@ -44,6 +45,7 @@ function loadingPage(route) {
44
45
  export function App({ routePath, initialPage }) {
45
46
  const [currentRoute, setCurrentRoute] = useState(() => normalizeRoute(routePath));
46
47
  const [page, setPage] = useState(() => initialPage ?? loadingPage(routePath));
48
+ const pendingScrollRestore = useRef(false);
47
49
  const availableRoutes = new Set(routes);
48
50
  const activeLocale = localeFromRoute(currentRoute, i18n);
49
51
  const activeSite = siteForRoute(site, currentRoute, i18n);
@@ -54,11 +56,18 @@ export function App({ routePath, initialPage }) {
54
56
  }, [initialPage, routePath]);
55
57
  useEffect(() => {
56
58
  let cancelled = false;
57
- setPage(loadingPage(currentRoute));
59
+ const cached = getCachedPage(currentRoute);
60
+ if (!cached)
61
+ setPage(loadingPage(currentRoute));
58
62
  void loadPage(currentRoute, site.base)
59
63
  .then((loaded) => {
60
- if (!cancelled)
64
+ if (!cancelled) {
61
65
  setPage(loaded);
66
+ if (pendingScrollRestore.current) {
67
+ pendingScrollRestore.current = false;
68
+ restoreScrollPositionAfterLayout();
69
+ }
70
+ }
62
71
  })
63
72
  .catch(() => {
64
73
  if (!cancelled) {
@@ -82,7 +91,13 @@ export function App({ routePath, initialPage }) {
82
91
  if (mpa) {
83
92
  return () => stopViewportPrefetch();
84
93
  }
85
- const onPopState = () => setCurrentRoute(routeFromLocation());
94
+ const stopScrollRestoration = setupScrollRestoration();
95
+ const onPopState = () => {
96
+ if (consumeScrollRestoreOnPopstate()) {
97
+ pendingScrollRestore.current = true;
98
+ }
99
+ setCurrentRoute(routeFromLocation());
100
+ };
86
101
  const onClick = (event) => {
87
102
  if (event.defaultPrevented ||
88
103
  event.button !== 0 ||
@@ -104,9 +119,10 @@ export function App({ routePath, initialPage }) {
104
119
  return;
105
120
  }
106
121
  event.preventDefault();
122
+ saveScrollPositionBeforeNavigation();
107
123
  window.history.pushState({}, "", url);
108
124
  setCurrentRoute(route);
109
- window.scrollTo({ top: 0 });
125
+ window.scrollTo({ top: 0, behavior: "auto" });
110
126
  };
111
127
  const onMouseEnter = (event) => {
112
128
  const link = anchorFromEvent(event);
@@ -120,6 +136,7 @@ export function App({ routePath, initialPage }) {
120
136
  document.addEventListener("click", onClick);
121
137
  document.addEventListener("mouseenter", onMouseEnter, true);
122
138
  return () => {
139
+ stopScrollRestoration();
123
140
  stopViewportPrefetch();
124
141
  window.removeEventListener("popstate", onPopState);
125
142
  document.removeEventListener("click", onClick);
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/client/app.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,MAAM,MAAM,4BAA4B,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,uBAAuB,EACvB,YAAY,EACZ,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,SAAS,iBAAiB;IACxB,OAAO,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACnE,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QAC1E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC1E,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,eAAe,CAAC,KAAiB;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,OAAO,GACX,MAAM,YAAY,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,YAAY,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,OAAO,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;AAC7C,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,WAAW,EAAE,IAAI,EAAE,WAAW;QAC9B,IAAI,EAAE,IAAI,EAAE,IAAI;QAChB,KAAK,EAAE,IAAI,EAAE,KAAK;QAClB,QAAQ,EAAE,IAAI,EAAE,QAAQ;QACxB,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;QACtB,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAiD;IAC3F,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,GAAG,EAAE,CAAC,WAAW,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACxF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAE/E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW;YAAE,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;QACnC,KAAK,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;aACnC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,SAAS;gBAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC;oBACN,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,wBAAwB;oBAC9B,KAAK,EAAE,KAAK;oBACZ,WAAW,EAAE,UAAU,CAAC,WAAW;oBACnC,IAAI,EAAE,EAAE;oBACR,QAAQ,EAAE,EAAE;iBACb,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,EAAE,CAAC,oBAAoB,EAAE,CAAC;QACtC,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,CAAC,KAAiB,EAAE,EAAE;YACpC,IACE,KAAK,CAAC,gBAAgB;gBACtB,KAAK,CAAC,MAAM,KAAK,CAAC;gBAClB,KAAK,CAAC,OAAO;gBACb,KAAK,CAAC,MAAM;gBACZ,KAAK,CAAC,OAAO;gBACb,KAAK,CAAC,QAAQ,EACd,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;gBAAE,OAAO;YAClE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,GAAG,CAAC,IAAI,IAAI,KAAK,KAAK,YAAY,EAAE,CAAC;gBACvC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACtC,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC;QACF,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAChD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,QAAQ,CAAC,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,OAAO,GAAG,EAAE;YACV,oBAAoB,EAAE,CAAC;YACvB,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YACnD,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC/C,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QACjE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,KAAK,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/C,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC;IAE9B,WAAW,CAAC;QACV,IAAI;QACJ,IAAI;QACJ,MAAM,EAAE,eAAe;QACvB,KAAK,EAAE,YAAY;QACnB,IAAI,EACF,IAAI,EAAE,IAAI,KAAK,UAAU;YACvB,CAAC,CAAC;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB;YACH,CAAC,CAAC,IAAI;gBACJ,CAAC,CAAC;oBACE,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,IAAI,EAAE,KAAK;iBACZ;gBACH,CAAC,CAAC,SAAS;KAClB,CAAC,CAAC;IAEH,OAAO,CACL,KAAC,MAAM,IACL,IAAI,EAAE,UAAU,EAChB,WAAW,EAAE,iBAAiB,EAC9B,SAAS,EAAE,YAAY,EACvB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,IAAI,EAAE,OAAO,EACtB,aAAa,EAAE,CAAC,MAAsB,EAAE,EAAE,CACxC,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,GAEtE,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/client/app.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { PageView } from "./types.js";
2
2
  export declare function seedPage(route: string, page: PageView | undefined): void;
3
+ export declare function getCachedPage(route: string): PageView | undefined;
3
4
  export declare function loadPage(route: string, base: string): Promise<PageView>;
4
5
  export declare function prefetchPage(route: string, base: string): void;
5
6
  //# sourceMappingURL=loadPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loadPage.d.ts","sourceRoot":"","sources":["../../src/client/loadPage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoBzD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAExE;AAiBD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmB7E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAK9D"}
1
+ {"version":3,"file":"loadPage.d.ts","sourceRoot":"","sources":["../../src/client/loadPage.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAoBzD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAExE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAEjE;AAiBD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAmB7E;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAK9D"}
@@ -17,6 +17,9 @@ export function seedPage(route, page) {
17
17
  if (page)
18
18
  cache.set(route, page);
19
19
  }
20
+ export function getCachedPage(route) {
21
+ return cache.get(route);
22
+ }
20
23
  async function loadMarkdownPage(route, base) {
21
24
  const meta = pagesMeta[route];
22
25
  const url = import.meta.env.DEV
@@ -1 +1 @@
1
- {"version":3,"file":"loadPage.js","sourceRoot":"","sources":["../../src/client/loadPage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loadPage.js","sourceRoot":"","sources":["../../src/client/loadPage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const SCROLL_STATE_KEY = "ppScrollY";
2
+ export declare function setupScrollRestoration(): () => void;
3
+ export declare function persistScrollPosition(): void;
4
+ export declare function saveScrollPositionBeforeNavigation(): void;
5
+ export declare function readScrollPositionFromHistory(): number;
6
+ export declare function restoreScrollPosition(): void;
7
+ export declare function restoreScrollPositionAfterLayout(): void;
8
+ export declare function skipNextScrollRestore(): void;
9
+ export declare function consumeScrollRestoreOnPopstate(): boolean;
10
+ //# sourceMappingURL=scrollRestoration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollRestoration.d.ts","sourceRoot":"","sources":["../../src/shared/scrollRestoration.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAI5C,wBAAgB,sBAAsB,IAAI,MAAM,IAAI,CAiBnD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAM5C;AAED,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAItD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,wBAAgB,gCAAgC,IAAI,IAAI,CAWvD;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,wBAAgB,8BAA8B,IAAI,OAAO,CAMxD"}
@@ -0,0 +1,66 @@
1
+ export const SCROLL_STATE_KEY = "ppScrollY";
2
+ let skipScrollRestoreOnce = false;
3
+ export function setupScrollRestoration() {
4
+ if (typeof window === "undefined")
5
+ return () => { };
6
+ if ("scrollRestoration" in window.history) {
7
+ window.history.scrollRestoration = "manual";
8
+ }
9
+ let timeout;
10
+ const onScroll = () => {
11
+ clearTimeout(timeout);
12
+ timeout = setTimeout(persistScrollPosition, 150);
13
+ };
14
+ window.addEventListener("scroll", onScroll, { passive: true });
15
+ return () => {
16
+ window.removeEventListener("scroll", onScroll);
17
+ clearTimeout(timeout);
18
+ };
19
+ }
20
+ export function persistScrollPosition() {
21
+ if (typeof window === "undefined")
22
+ return;
23
+ const scrollY = window.scrollY;
24
+ const state = window.history.state ?? {};
25
+ if (state[SCROLL_STATE_KEY] === scrollY)
26
+ return;
27
+ window.history.replaceState({ ...state, [SCROLL_STATE_KEY]: scrollY }, "");
28
+ }
29
+ export function saveScrollPositionBeforeNavigation() {
30
+ persistScrollPosition();
31
+ }
32
+ export function readScrollPositionFromHistory() {
33
+ if (typeof window === "undefined")
34
+ return 0;
35
+ const scrollY = window.history.state?.[SCROLL_STATE_KEY];
36
+ return typeof scrollY === "number" && Number.isFinite(scrollY) ? scrollY : 0;
37
+ }
38
+ export function restoreScrollPosition() {
39
+ if (typeof window === "undefined")
40
+ return;
41
+ window.scrollTo({ top: readScrollPositionFromHistory(), left: 0, behavior: "auto" });
42
+ }
43
+ export function restoreScrollPositionAfterLayout() {
44
+ if (typeof window === "undefined")
45
+ return;
46
+ requestAnimationFrame(() => {
47
+ requestAnimationFrame(() => {
48
+ const html = document.documentElement;
49
+ const previous = html.style.scrollBehavior;
50
+ html.style.scrollBehavior = "auto";
51
+ restoreScrollPosition();
52
+ html.style.scrollBehavior = previous;
53
+ });
54
+ });
55
+ }
56
+ export function skipNextScrollRestore() {
57
+ skipScrollRestoreOnce = true;
58
+ }
59
+ export function consumeScrollRestoreOnPopstate() {
60
+ if (skipScrollRestoreOnce) {
61
+ skipScrollRestoreOnce = false;
62
+ return false;
63
+ }
64
+ return true;
65
+ }
66
+ //# sourceMappingURL=scrollRestoration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollRestoration.js","sourceRoot":"","sources":["../../src/shared/scrollRestoration.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/shared/search.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,oFAAoF;AACpF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAE7E,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,KAAK,CAInF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAErE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAGhG;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,oBAAoB,CAQtB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG;IACzE,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAUA;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM,CAS3F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAc3E"}
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/shared/search.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gCAAgC,CAAC,EAAE,MAAM,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAED,oFAAoF;AACpF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAE7E,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,KAAK,CAInF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAEnE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAErE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAGhG;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,oBAAoB,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,oBAAoB,CAQtB;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,oBAAoB,GAAG;IACzE,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAUA;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAO,GAAG,MAAM,CAS3F;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgB3E"}
@@ -1,3 +1,4 @@
1
+ import { saveScrollPositionBeforeNavigation, skipNextScrollRestore } from "./scrollRestoration.js";
1
2
  export function resolveSearchProvider(search) {
2
3
  if (search === true)
3
4
  return "local";
@@ -56,8 +57,10 @@ export function navigateDocSearchResult(itemUrl, base) {
56
57
  window.location.assign(href);
57
58
  return;
58
59
  }
60
+ saveScrollPositionBeforeNavigation();
59
61
  window.history.pushState({}, "", href);
62
+ skipNextScrollRestore();
60
63
  window.dispatchEvent(new PopStateEvent("popstate"));
61
- window.scrollTo({ top: 0 });
64
+ window.scrollTo({ top: 0, behavior: "auto" });
62
65
  }
63
66
  //# sourceMappingURL=search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/shared/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/shared/search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kamod-ch/preactpress",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "Vite and Preact powered static site generator",
5
5
  "keywords": [
6
6
  "markdown",
@@ -1,4 +1,4 @@
1
- import { useEffect, useState } from "preact/hooks";
1
+ import { useEffect, useRef, useState } from "preact/hooks";
2
2
  import Layout from "virtual:preactpress-layout";
3
3
  import { pagesMeta, routes } from "virtual:preactpress-pages";
4
4
  import { i18n, mpa, site, themeConfig } from "virtual:preactpress-site";
@@ -6,7 +6,13 @@ import type { PageView } from "./types.js";
6
6
  import type { ResolvedLocale } from "../node/siteConfig.js";
7
7
  import { usePageHead } from "./usePageHead.js";
8
8
  import { normalizeRoute, routeFromPathname } from "../shared/route.js";
9
- import { loadPage, prefetchPage, seedPage } from "./loadPage.js";
9
+ import {
10
+ consumeScrollRestoreOnPopstate,
11
+ restoreScrollPositionAfterLayout,
12
+ saveScrollPositionBeforeNavigation,
13
+ setupScrollRestoration,
14
+ } from "../shared/scrollRestoration.js";
15
+ import { getCachedPage, loadPage, prefetchPage, seedPage } from "./loadPage.js";
10
16
  import { setupViewportPrefetch } from "./prefetchLinks.js";
11
17
  import {
12
18
  localeFromRoute,
@@ -55,6 +61,7 @@ function loadingPage(route: string): PageView {
55
61
  export function App({ routePath, initialPage }: { routePath: string; initialPage?: PageView }) {
56
62
  const [currentRoute, setCurrentRoute] = useState(() => normalizeRoute(routePath));
57
63
  const [page, setPage] = useState<PageView>(() => initialPage ?? loadingPage(routePath));
64
+ const pendingScrollRestore = useRef(false);
58
65
  const availableRoutes = new Set(routes);
59
66
  const activeLocale = localeFromRoute(currentRoute, i18n);
60
67
  const activeSite = siteForRoute(site, currentRoute, i18n);
@@ -66,10 +73,17 @@ export function App({ routePath, initialPage }: { routePath: string; initialPage
66
73
 
67
74
  useEffect(() => {
68
75
  let cancelled = false;
69
- setPage(loadingPage(currentRoute));
76
+ const cached = getCachedPage(currentRoute);
77
+ if (!cached) setPage(loadingPage(currentRoute));
70
78
  void loadPage(currentRoute, site.base)
71
79
  .then((loaded) => {
72
- if (!cancelled) setPage(loaded);
80
+ if (!cancelled) {
81
+ setPage(loaded);
82
+ if (pendingScrollRestore.current) {
83
+ pendingScrollRestore.current = false;
84
+ restoreScrollPositionAfterLayout();
85
+ }
86
+ }
73
87
  })
74
88
  .catch(() => {
75
89
  if (!cancelled) {
@@ -95,7 +109,13 @@ export function App({ routePath, initialPage }: { routePath: string; initialPage
95
109
  return () => stopViewportPrefetch();
96
110
  }
97
111
 
98
- const onPopState = () => setCurrentRoute(routeFromLocation());
112
+ const stopScrollRestoration = setupScrollRestoration();
113
+ const onPopState = () => {
114
+ if (consumeScrollRestoreOnPopstate()) {
115
+ pendingScrollRestore.current = true;
116
+ }
117
+ setCurrentRoute(routeFromLocation());
118
+ };
99
119
  const onClick = (event: MouseEvent) => {
100
120
  if (
101
121
  event.defaultPrevented ||
@@ -117,9 +137,10 @@ export function App({ routePath, initialPage }: { routePath: string; initialPage
117
137
  return;
118
138
  }
119
139
  event.preventDefault();
140
+ saveScrollPositionBeforeNavigation();
120
141
  window.history.pushState({}, "", url);
121
142
  setCurrentRoute(route);
122
- window.scrollTo({ top: 0 });
143
+ window.scrollTo({ top: 0, behavior: "auto" });
123
144
  };
124
145
  const onMouseEnter = (event: MouseEvent) => {
125
146
  const link = anchorFromEvent(event);
@@ -131,6 +152,7 @@ export function App({ routePath, initialPage }: { routePath: string; initialPage
131
152
  document.addEventListener("click", onClick);
132
153
  document.addEventListener("mouseenter", onMouseEnter, true);
133
154
  return () => {
155
+ stopScrollRestoration();
134
156
  stopViewportPrefetch();
135
157
  window.removeEventListener("popstate", onPopState);
136
158
  document.removeEventListener("click", onClick);
@@ -23,6 +23,10 @@ export function seedPage(route: string, page: PageView | undefined): void {
23
23
  if (page) cache.set(route, page);
24
24
  }
25
25
 
26
+ export function getCachedPage(route: string): PageView | undefined {
27
+ return cache.get(route);
28
+ }
29
+
26
30
  async function loadMarkdownPage(route: string, base: string): Promise<PageView> {
27
31
  const meta = pagesMeta[route];
28
32
  const url = import.meta.env.DEV
@@ -0,0 +1,70 @@
1
+ export const SCROLL_STATE_KEY = "ppScrollY";
2
+
3
+ let skipScrollRestoreOnce = false;
4
+
5
+ export function setupScrollRestoration(): () => void {
6
+ if (typeof window === "undefined") return () => {};
7
+
8
+ if ("scrollRestoration" in window.history) {
9
+ window.history.scrollRestoration = "manual";
10
+ }
11
+
12
+ let timeout: ReturnType<typeof setTimeout> | undefined;
13
+ const onScroll = () => {
14
+ clearTimeout(timeout);
15
+ timeout = setTimeout(persistScrollPosition, 150);
16
+ };
17
+ window.addEventListener("scroll", onScroll, { passive: true });
18
+ return () => {
19
+ window.removeEventListener("scroll", onScroll);
20
+ clearTimeout(timeout);
21
+ };
22
+ }
23
+
24
+ export function persistScrollPosition(): void {
25
+ if (typeof window === "undefined") return;
26
+ const scrollY = window.scrollY;
27
+ const state = window.history.state ?? {};
28
+ if (state[SCROLL_STATE_KEY] === scrollY) return;
29
+ window.history.replaceState({ ...state, [SCROLL_STATE_KEY]: scrollY }, "");
30
+ }
31
+
32
+ export function saveScrollPositionBeforeNavigation(): void {
33
+ persistScrollPosition();
34
+ }
35
+
36
+ export function readScrollPositionFromHistory(): number {
37
+ if (typeof window === "undefined") return 0;
38
+ const scrollY = window.history.state?.[SCROLL_STATE_KEY];
39
+ return typeof scrollY === "number" && Number.isFinite(scrollY) ? scrollY : 0;
40
+ }
41
+
42
+ export function restoreScrollPosition(): void {
43
+ if (typeof window === "undefined") return;
44
+ window.scrollTo({ top: readScrollPositionFromHistory(), left: 0, behavior: "auto" });
45
+ }
46
+
47
+ export function restoreScrollPositionAfterLayout(): void {
48
+ if (typeof window === "undefined") return;
49
+ requestAnimationFrame(() => {
50
+ requestAnimationFrame(() => {
51
+ const html = document.documentElement;
52
+ const previous = html.style.scrollBehavior;
53
+ html.style.scrollBehavior = "auto";
54
+ restoreScrollPosition();
55
+ html.style.scrollBehavior = previous;
56
+ });
57
+ });
58
+ }
59
+
60
+ export function skipNextScrollRestore(): void {
61
+ skipScrollRestoreOnce = true;
62
+ }
63
+
64
+ export function consumeScrollRestoreOnPopstate(): boolean {
65
+ if (skipScrollRestoreOnce) {
66
+ skipScrollRestoreOnce = false;
67
+ return false;
68
+ }
69
+ return true;
70
+ }
@@ -1,3 +1,5 @@
1
+ import { saveScrollPositionBeforeNavigation, skipNextScrollRestore } from "./scrollRestoration.js";
2
+
1
3
  export type SearchProvider = "local" | "algolia";
2
4
 
3
5
  export interface LocalSearchConfig {
@@ -99,7 +101,9 @@ export function navigateDocSearchResult(itemUrl: string, base: string): void {
99
101
  window.location.assign(href);
100
102
  return;
101
103
  }
104
+ saveScrollPositionBeforeNavigation();
102
105
  window.history.pushState({}, "", href);
106
+ skipNextScrollRestore();
103
107
  window.dispatchEvent(new PopStateEvent("popstate"));
104
- window.scrollTo({ top: 0 });
108
+ window.scrollTo({ top: 0, behavior: "auto" });
105
109
  }