Files
mnote/rust/crates/mnote-web/browser/tree-shell-state-runtime.js
T

55 lines
1.5 KiB
JavaScript

// MNote debug /tree shell state parsing and normalization helpers.
export function parseTreeShellState(stateElement) {
try {
return JSON.parse(stateElement?.textContent || "{}");
} catch {
return {};
}
}
export function normalizeTreeShellText(value, fallback = "") {
if (typeof value !== "string") return fallback;
const trimmed = value.trim();
return trimmed || fallback;
}
export function normalizeTreeShellStringArray(value) {
return Array.isArray(value)
? value
.map((item) => (typeof item === "string" ? item.trim() : ""))
.filter(Boolean)
: [];
}
export function normalizeTreeShellNumber(value, fallback = Number.MAX_SAFE_INTEGER) {
return Number.isFinite(value) ? Number(value) : fallback;
}
export function resolveTreeShellMode(state) {
const rawMode = typeof state?.mode === "string" ? state.mode.trim() : "";
if (rawMode === "picker") return "picker";
if (rawMode === "filetree") return "filetree";
return "page";
}
export function resolveTreeShellTargetOrigin(documentRef) {
try {
if (!documentRef?.referrer) return "*";
return new URL(documentRef.referrer).origin || "*";
} catch {
return "*";
}
}
export function parseTreeShellStateFromHtml(html) {
const doc = new DOMParser().parseFromString(html, "text/html");
const nextStateElement = doc.getElementById("tree-shell-state");
if (!nextStateElement) return null;
try {
return JSON.parse(nextStateElement.textContent || "{}");
} catch {
return null;
}
}