prasi-lib/comps/md/utils/md-hash.ts

59 lines
1.3 KiB
TypeScript
Executable File

import { MDLocal } from "./typings";
export const masterDetailParseHash = (md: MDLocal) => {
let raw_hash = decodeURIComponent(location.hash);
md.params.hash = {};
md.params.tabs = {};
for (const h of raw_hash.split("#")) {
if (h) {
if (h.includes("=")) {
const [tab_name, tab_val] = h.split("=");
if (tab_name && tab_val) {
md.params.hash[tab_name] = tab_val;
}
} else if (h.includes("~")) {
const [tab_name, tab_val] = h.split("~");
if (tab_name && tab_val) {
md.params.tabs[tab_name] = tab_val;
}
}
}
}
};
export const masterDetailApplyParams = (md: MDLocal) => {
let hash = "";
const row = md.selected;
if (row) {
if (md.tab.active) {
if (md.tab.list.length > 1) {
md.params.tabs[md.name] = md.tab.active;
} else {
delete md.params.tabs[md.name];
}
}
const pk = md.pk;
if (pk && row[pk.name]) {
md.params.hash[md.name] = row[pk.name];
}
} else {
delete md.params.tabs[md.name];
delete md.params.hash[md.name];
}
for (const [k, v] of Object.entries(md.params.hash)) {
hash += `#${k}=${v}`;
}
for (const [k, v] of Object.entries(md.params.tabs)) {
hash += `#${k}~${v}`;
}
if (!isEditor) {
location.hash = hash;
}
};