websites: default: fix sw adn co

This commit is contained in:
nym21
2025-06-11 21:08:42 +02:00
parent 1348f3c24c
commit c8b3afa56b
8 changed files with 68 additions and 42 deletions
+2 -2
View File
@@ -20,9 +20,9 @@ struct Cli {
#[derive(Subcommand, Debug)]
enum Commands {
/// Run the indexer, computer and server
/// Run the indexer, computer and server, use `run -h` for more information
Run(RunConfig),
/// Query generated datasets via the `run` command in a similar fashion as the server's API
/// Query generated datasets via the `run` command in a similar fashion as the server's API, use `query -h` for more information
Query(QueryArgs),
}
+16 -3
View File
@@ -1140,9 +1140,22 @@
window.document.documentElement.dataset.display = "standalone";
}
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/service-worker.js");
}
window.addEventListener("load", () => {
navigator.serviceWorker
.register("/service-worker.js")
.then((registration) => {
console.log(
"Service Worker registered with scope:",
registration.scope,
);
})
.catch((error) => {
console.error("Service Worker registration failed:", error);
});
});
// if ("serviceWorker" in navigator) {
// navigator.serviceWorker.register("/service-worker.js");
// }
</script>
<!-- --- -->
@@ -174,8 +174,6 @@ export default import("./v5.0.7-treeshaked/script.js").then((lc) => {
? 120
: 0.5;
console.log({ minBarSpacing, fitContent });
ichart.applyOptions({
timeScale: {
timeVisible:
@@ -379,13 +377,13 @@ export default import("./v5.0.7-treeshaked/script.js").then((lc) => {
const fetchedKey = vecsResources.defaultFetchedKey;
signals.createEffect(
() => [
timeResource.fetched[fetchedKey].vec(),
valuesResource.fetched[fetchedKey].vec(),
timeResource.fetched().get(fetchedKey)?.vec(),
valuesResource.fetched().get(fetchedKey)?.vec(),
],
([indexes, _ohlcs]) => {
if (!indexes || !_ohlcs) return;
if (!indexes?.length || !_ohlcs?.length) return;
const seriesData = series.inner.data();
// const seriesData = series.inner.data();
// const set = seriesData.length === 0;
const ohlcs = /** @type {OHLCTuple[]} */ (_ohlcs);
@@ -31,13 +31,13 @@ const importSignals = import("./v0.3.2-treeshaked/script.js").then(
if (dispose) {
dispose();
dispose = null;
console.debug("effectCount = ", --effectCount);
// console.log("effectCount = ", --effectCount);
}
}
// @ts-ignore
_signals.createEffect(compute, (v, oldV) => {
console.debug("effectCount = ", ++effectCount);
// console.log("effectCount = ", ++effectCount);
cleanup();
signals.createRoot((_dispose) => {
dispose = _dispose;
+21 -9
View File
@@ -1494,8 +1494,11 @@ function createVecsResources(signals, utils) {
return signals.runWithOwner(owner, () => {
/** @typedef {T extends number ? SingleValueData : CandlestickData} Value */
const fetchedRecord =
/** @type {Record<string, {loading: boolean, at: Date | null, vec: Signal<T[] | null>}>} */ ({});
const fetchedRecord = signals.createSignal(
/** @type {Map<string, {loading: boolean, at: Date | null, vec: Signal<T[] | null>}>} */ (
new Map()
),
);
return {
url: utils.api.genUrl(index, id, defaultFrom),
@@ -1513,12 +1516,18 @@ function createVecsResources(signals, utils) {
const from = args?.from ?? defaultFrom;
const to = args?.to ?? defaultTo;
const fetchedKey = genFetchedKey({ from, to });
fetchedRecord[fetchedKey] ??= {
loading: false,
at: null,
vec: signals.createSignal(/** @type {T[] | null} */ (null)),
};
const fetched = fetchedRecord[fetchedKey];
if (!fetchedRecord().has(fetchedKey)) {
fetchedRecord.set((map) => {
map.set(fetchedKey, {
loading: false,
at: null,
vec: signals.createSignal(/** @type {T[] | null} */ (null)),
});
return map;
});
}
const fetched = fetchedRecord().get(fetchedKey);
if (!fetched) throw Error("Unreachable");
if (fetched.loading) return fetched.vec();
if (fetched.at) {
const diff = new Date().getTime() - fetched.at.getTime();
@@ -1529,7 +1538,9 @@ function createVecsResources(signals, utils) {
const res = /** @type {T[] | null} */ (
await utils.api.fetchVec(
(values) => {
fetched.vec.set(/** @type {T[]} */ (values));
if (values.length || !fetched.vec()) {
fetched.vec.set(values);
}
},
index,
id,
@@ -2268,6 +2279,7 @@ function main() {
}
}
await utils.next();
await utils.next();
utils.dom
+1 -1
View File
@@ -3106,7 +3106,7 @@ export function initOptions({
summary.append(supCount);
signals.createEffect(childOptionsCount, (childOptionsCount) => {
supCount.innerHTML = childOptionsCount.toLocaleString();
supCount.innerHTML = childOptionsCount.toLocaleString("en-us");
});
details.addEventListener("toggle", () => {
+17 -14
View File
@@ -305,22 +305,25 @@ function createTable({
return l;
});
signals.createEffect(vec.fetched[fetchedKey].vec, (vec) => {
if (!vec) return;
signals.createEffect(
() => vec.fetched().get(fetchedKey)?.vec(),
(vec) => {
if (!vec?.length) return;
const thIndex = colIndex() + 1;
const thIndex = colIndex() + 1;
for (let i = 0; i < rowElements.length; i++) {
const iRev = vec.length - 1 - i;
const value = vec[iRev];
// @ts-ignore
rowElements[i].childNodes[thIndex].innerHTML =
serializeValue({
value,
unit,
});
}
});
for (let i = 0; i < rowElements.length; i++) {
const iRev = vec.length - 1 - i;
const value = vec[iRev];
// @ts-ignore
rowElements[i].childNodes[thIndex].innerHTML =
serializeValue({
value,
unit,
});
}
},
);
return () => vecId;
},
+5 -5
View File
@@ -10,7 +10,7 @@ sw.addEventListener("install", (event) => {
sw.addEventListener("activate", (event) => {
console.log("sw: active");
event.waitUntil(sw.clients.claim());
sw.clients.claim();
event.waitUntil(
caches
.keys()
@@ -42,6 +42,8 @@ sw.addEventListener("fetch", (event) => {
return; // let the browser handle it
}
const cache = caches.open(CACHE_NAME);
// 2) NAVIGATION: networkfirst on your shell
if (req.mode === "navigate") {
event.respondWith(
@@ -52,9 +54,7 @@ sw.addEventListener("fetch", (event) => {
if (response.ok || response.status === 304) {
if (response.ok) {
const clone = response.clone();
caches
.open(CACHE_NAME)
.then((cache) => cache.put("/index.html", clone));
cache.then((cache) => cache.put("/index.html", clone));
}
return response;
}
@@ -72,7 +72,7 @@ sw.addEventListener("fetch", (event) => {
.then((response) => {
if (response.ok) {
const clone = response.clone();
caches.open(CACHE_NAME).then((cache) => cache.put(req, clone));
cache.then((cache) => cache.put(req, clone));
}
return response;
})