nc-planner/scripts/metadata.js

59 lines
1.6 KiB
JavaScript

import { clearCellOverlays, processCellOverlays } from "./overlays.js";
const metadata = {};
let metadataCounter = 0;
function createMetadata(data) {
const id = metadataCounter;
metadata[id] = data;
metadataCounter++;
return id;
}
export function setDomMetadata(domNode, data) {
if (domNode.dataset.solverMetadata) {
metadata[Number(domNode.dataset.solverMetadata)] = data;
return;
}
domNode.dataset.solverMetadata = createMetadata(data).toString(10);
}
export function setCellMetadata(node, key, value) {
if (!node.dataset.solverMetadata) {
node.dataset.solverMetadata = createMetadata({ [key]: value }).toString(10);
} else {
metadata[Number(node.dataset.solverMetadata)][key] = value;
}
processCellOverlays(node, key, true);
}
export function getMetadata(id) {
if (typeof id === "object") {
// assume DOM element
if (id.dataset && id.dataset.solverMetadata) {
return getMetadata(id.dataset.solverMetadata);
}
return null;
}
if (typeof id === "string") {
return getMetadata(Number(id));
}
return metadata[id];
}
export function getCellMetadata(node, key) {
return metadata[Number(node.dataset.solverMetadata)][key];
}
export function deleteMetadata(id) {
if (typeof id === "object") {
// assume DOM object
if (id.dataset && id.dataset.solverMetadata) {
clearCellOverlays(id);
return deleteMetadata(id.dataset.solverMetadata);
}
}
delete metadata[id];
}
export function clearCellMetadata(node, key) {
if (!node.dataset.solverMetadata) return;
delete metadata[Number(node.dataset.solverMetadata)][key];
processCellOverlays(node, key, false);
}