59 lines
1.5 KiB
JavaScript
59 lines
1.5 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.metadata) {
|
|
metadata[Number(domNode.dataset.metadata)] = data;
|
|
return;
|
|
}
|
|
domNode.dataset.metadata = createMetadata(data).toString(10);
|
|
}
|
|
export function setCellMetadata(node, key, value) {
|
|
if (!node.dataset.metadata) {
|
|
node.dataset.metadata = createMetadata({ [key]: value }).toString(10);
|
|
} else {
|
|
metadata[Number(node.dataset.metadata)][key] = value;
|
|
}
|
|
processCellOverlays(node, key, true);
|
|
}
|
|
|
|
export function getMetadata(id) {
|
|
if (typeof id === "object") {
|
|
// assume DOM element
|
|
if (id.dataset && id.dataset.metadata) {
|
|
return getMetadata(id.dataset.metadata);
|
|
}
|
|
return null;
|
|
}
|
|
if (typeof id === "string") {
|
|
return getMetadata(Number(id));
|
|
}
|
|
return metadata[id];
|
|
}
|
|
export function getCellMetadata(node, key) {
|
|
return metadata[Number(node.dataset.metadata)][key];
|
|
}
|
|
|
|
export function deleteMetadata(id) {
|
|
if (typeof id === "object") {
|
|
// assume DOM object
|
|
if (id.dataset && id.dataset.metadata) {
|
|
clearCellOverlays(id);
|
|
return deleteMetadata(id.dataset.metadata);
|
|
}
|
|
}
|
|
delete metadata[id];
|
|
}
|
|
export function clearCellMetadata(node, key) {
|
|
if (!node.dataset.metadata) return;
|
|
delete metadata[Number(node.dataset.metadata)][key];
|
|
processCellOverlays(node, key, false);
|
|
}
|