This commit is contained in:
Mateusz Gruszczyński committed 2026-10-15 09:37:47 +02:00
1 parent bbfa8cbc3f
commit 2ccc598b12
49 files changed
+4771 -639

No files matched your search

+58
View File
@@ -0,0 +1,58 @@
window.rustProxyOverviewSamples = (() => {
const allowed = new Set([60, 120, 300, 600]);
const storageKey = "rustproxy.overview.liveChartSamples";
let saved = 60;
try {
const stored = Number(localStorage.getItem(storageKey));
if (allowed.has(stored)) saved = stored;
} catch { /* Private browsing or storage policy: temporary selection still works. */ }
let limit = saved;
const callbacks = new Set();
const getLimit = () => limit;
const trim = array => {
if (Array.isArray(array) && array.length > limit) array.splice(0, array.length - limit);
return array;
};
function sync(messageKey = limit === saved ? "overviewSamplesSaved" : "overviewSamplesTemporary") {
const select = document.getElementById("overview-live-samples");
if (select) select.value = String(limit);
const state = document.getElementById("overview-samples-state");
if (state) {
state.dataset.i18n = messageKey;
state.textContent = t(messageKey);
}
const save = document.getElementById("overview-samples-save");
if (save) save.disabled = limit === saved;
}
function setLimit(value, persist = false) {
const count = Number(value);
if (!allowed.has(count)) return false;
if (persist) {
try {
localStorage.setItem(storageKey, String(count));
saved = count;
} catch {
const changed = count !== limit;
limit = count;
if (changed) for (const callback of callbacks) callback(limit);
sync("overviewSamplesStorageUnavailable");
return false;
}
}
const changed = count !== limit;
limit = count;
if (changed) for (const callback of callbacks) callback(limit);
sync();
return true;
}
function init() {
const select = document.getElementById("overview-live-samples");
const save = document.getElementById("overview-samples-save");
select?.addEventListener("change", () => setLimit(select.value));
save?.addEventListener("click", () => setLimit(select.value, true));
sync();
}
if (document.readyState !== "complete") document.addEventListener("DOMContentLoaded", init, { once: true });
else queueMicrotask(init);
return { getLimit, trim, setLimit, onChange: callback => callbacks.add(callback) };
})();