mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
44 lines
1.1 KiB
TypeScript
Executable File
44 lines
1.1 KiB
TypeScript
Executable File
import {VNode, VNodeData} from '../vnode';
|
|
import {Module} from './module';
|
|
|
|
export type Dataset = Record<string, string>;
|
|
|
|
const CAPS_REGEX = /[A-Z]/g;
|
|
|
|
function updateDataset(oldVnode: VNode, vnode: VNode): void {
|
|
let elm: HTMLElement = vnode.elm as HTMLElement,
|
|
oldDataset = (oldVnode.data as VNodeData).dataset,
|
|
dataset = (vnode.data as VNodeData).dataset,
|
|
key: string;
|
|
|
|
if (!oldDataset && !dataset) return;
|
|
if (oldDataset === dataset) return;
|
|
oldDataset = oldDataset || {};
|
|
dataset = dataset || {};
|
|
const d = elm.dataset;
|
|
|
|
for (key in oldDataset) {
|
|
if (!dataset[key]) {
|
|
if (d) {
|
|
if (key in d) {
|
|
delete d[key];
|
|
}
|
|
} else {
|
|
elm.removeAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase());
|
|
}
|
|
}
|
|
}
|
|
for (key in dataset) {
|
|
if (oldDataset[key] !== dataset[key]) {
|
|
if (d) {
|
|
d[key] = dataset[key];
|
|
} else {
|
|
elm.setAttribute('data-' + key.replace(CAPS_REGEX, '-$&').toLowerCase(), dataset[key]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export const datasetModule = {create: updateDataset, update: updateDataset} as Module;
|
|
export default datasetModule;
|