dompro
Version:
83 lines (73 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setBooleanProp = setBooleanProp;
exports.removeBooleanProp = removeBooleanProp;
exports.isEventProp = isEventProp;
exports.isCustomProp = isCustomProp;
exports.setProp = setProp;
exports.removeProp = removeProp;
exports.setProps = setProps;
exports.updateProp = updateProp;
exports.updateProps = updateProps;
function setBooleanProp($target, name, value) {
if (value) {
$target.setAttribute(name, value);
$target[name] = true;
} else {
$target[name] = false;
}
}
function removeBooleanProp($target, name) {
$target.removeAttribute(name);
$target[name] = false;
}
function isEventProp(name) {
return (/^on/.test(name)
);
}
function isCustomProp(name) {
return isEventProp(name) || name === 'forceUpdate';
}
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);
}
}
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);
}
}
function setProps($target, props) {
Object.keys(props).forEach(function (name) {
setProp($target, name, props[name]);
});
}
function updateProp($target, name, newVal, oldVal) {
if (!newVal) {
removeProp($target, name, oldVal);
} else if (!oldVal || newVal !== oldVal) {
setProp($target, name, newVal);
}
}
function updateProps($target, newProps) {
var oldProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var props = Object.assign({}, newProps, oldProps);
Object.keys(props).forEach(function (name) {
updateProp($target, name, newProps[name], oldProps[name]);
});
}