59 lines
1.6 KiB
JavaScript
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);
|
|
}
|