dompro
Version:
66 lines (58 loc) • 1.74 kB
JavaScript
export function setBooleanProp($target, name, value) {
if (value) {
$target.setAttribute(name, value);
$target[name] = true;
} else {
$target[name] = false;
}
}
export function removeBooleanProp($target, name) {
$target.removeAttribute(name);
$target[name] = false;
}
export function isEventProp(name) {
return /^on/.test(name);
}
export function isCustomProp(name) {
return isEventProp(name) || name === 'forceUpdate';
}
export function setProp($target, name, value) {
if (isCustomProp(name)) {
return;
} else if (name === 'className') {
$target.setAttribute('class', value);
} else if (typeof value === 'boolean') {
setBooleanProp($target, name, value);
} else {
$target.setAttribute(name, value);
}
}
export function removeProp($target, name, value) {
if (isCustomProp(name)) {
return;
} else if (name === 'className') {
$target.removeAttribute('class');
} else if (typeof value === 'boolean') {
removeBooleanProp($target, name);
} else {
$target.removeAttribute(name);
}
}
export function setProps($target, props) {
Object.keys(props).forEach(name => {
setProp($target, name, props[name]);
});
}
export function updateProp($target, name, newVal, oldVal) {
if (!newVal) {
removeProp($target, name, oldVal);
} else if (!oldVal || newVal !== oldVal) {
setProp($target, name, newVal);
}
}
export function updateProps($target, newProps, oldProps = {}) {
const props = Object.assign({}, newProps, oldProps);
Object.keys(props).forEach(name => {
updateProp($target, name, newProps[name], oldProps[name]);
});
}