49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
|
// Utilities
|
||
|
import { eventName, isOn } from "./helpers.mjs";
|
||
|
const handlers = new WeakMap();
|
||
|
export function bindProps(el, props) {
|
||
|
Object.keys(props).forEach(k => {
|
||
|
if (isOn(k)) {
|
||
|
const name = eventName(k);
|
||
|
const handler = handlers.get(el);
|
||
|
if (props[k] == null) {
|
||
|
handler?.forEach(v => {
|
||
|
const [n, fn] = v;
|
||
|
if (n === name) {
|
||
|
el.removeEventListener(name, fn);
|
||
|
handler.delete(v);
|
||
|
}
|
||
|
});
|
||
|
} else if (!handler || ![...handler]?.some(v => v[0] === name && v[1] === props[k])) {
|
||
|
el.addEventListener(name, props[k]);
|
||
|
const _handler = handler || new Set();
|
||
|
_handler.add([name, props[k]]);
|
||
|
if (!handlers.has(el)) handlers.set(el, _handler);
|
||
|
}
|
||
|
} else {
|
||
|
if (props[k] == null) {
|
||
|
el.removeAttribute(k);
|
||
|
} else {
|
||
|
el.setAttribute(k, props[k]);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
export function unbindProps(el, props) {
|
||
|
Object.keys(props).forEach(k => {
|
||
|
if (isOn(k)) {
|
||
|
const name = eventName(k);
|
||
|
const handler = handlers.get(el);
|
||
|
handler?.forEach(v => {
|
||
|
const [n, fn] = v;
|
||
|
if (n === name) {
|
||
|
el.removeEventListener(name, fn);
|
||
|
handler.delete(v);
|
||
|
}
|
||
|
});
|
||
|
} else {
|
||
|
el.removeAttribute(k);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
//# sourceMappingURL=bindProps.mjs.map
|