Upload app.js
Browse files- 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
|
| 643 |
-
if (
|
| 644 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
|
|
|
|
|
|
|
|
|
| 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;
|