vomebook commited on
Commit
e217eef
·
1 Parent(s): a8da145

Upload app.js

Browse files
Files changed (1) hide show
  1. static/app.js +23 -4
static/app.js CHANGED
@@ -639,13 +639,29 @@ function readInlineInitialPayload() {
639
  async function loadSidebarInitial(sourceSlug) {
640
  const url = sidebarInitialUrlForSource(sourceSlug);
641
  if (sidebarInitialCache.has(url)) return sidebarInitialCache.get(url);
642
- const resp = await fetch(url);
643
- if (!resp.ok) return null;
644
- const data = await resp.json();
 
 
 
 
 
645
  sidebarInitialCache.set(url, data);
646
  return data;
647
  }
648
 
 
 
 
 
 
 
 
 
 
 
 
649
  function currentStateCanUseInitial() {
650
  return STATE.page === 1
651
  && STATE.query === ""
@@ -1829,7 +1845,10 @@ async function init() {
1829
  syncUrl();
1830
  restorePreviewFromUrl({ scroll: false });
1831
  const initialSearch = doSearch();
1832
- STATE.sources = await API.getSources();
 
 
 
1833
  STATE.sourceMap = Object.fromEntries(STATE.sources.map((source) => [source.slug, source]));
1834
  await renderSourcesFilter();
1835
  const routeId = ++routeRenderId;
 
639
  async function loadSidebarInitial(sourceSlug) {
640
  const url = sidebarInitialUrlForSource(sourceSlug);
641
  if (sidebarInitialCache.has(url)) return sidebarInitialCache.get(url);
642
+ const inlineData = readInlineJson("initial-sidebar-data");
643
+ if (inlineData && ((inlineData.source || null) === (sourceSlug || null))) {
644
+ sidebarInitialCache.set(url, inlineData);
645
+ return inlineData;
646
+ }
647
+ const pending = fetch(url).then((resp) => resp.ok ? resp.json() : null);
648
+ sidebarInitialCache.set(url, pending);
649
+ const data = await pending;
650
  sidebarInitialCache.set(url, data);
651
  return data;
652
  }
653
 
654
+ function readInlineJson(id) {
655
+ const node = document.getElementById(id);
656
+ if (!node || node.dataset.consumed === "1") return null;
657
+ node.dataset.consumed = "1";
658
+ try {
659
+ return JSON.parse(node.textContent || "null");
660
+ } catch (_error) {
661
+ return null;
662
+ }
663
+ }
664
+
665
  function currentStateCanUseInitial() {
666
  return STATE.page === 1
667
  && STATE.query === ""
 
1845
  syncUrl();
1846
  restorePreviewFromUrl({ scroll: false });
1847
  const initialSearch = doSearch();
1848
+ const inlineSources = readInlineJson("initial-sidebar-sources");
1849
+ STATE.sources = inlineSources && Array.isArray(inlineSources.sources)
1850
+ ? inlineSources.sources
1851
+ : await API.getSources();
1852
  STATE.sourceMap = Object.fromEntries(STATE.sources.map((source) => [source.slug, source]));
1853
  await renderSourcesFilter();
1854
  const routeId = ++routeRenderId;