55 lines
1.5 KiB
JavaScript
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;
|
|
}
|
|
}
|