UNPKG

mostly-dom

Version:
85 lines 2.88 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import { BaseModule } from './BaseModule'; import { emptyVNode } from './emptyVNode'; export function createPropsModule() { return new PropsModule(); } export var PROPERTIES_TO_SKIP = { class: true, on: true, listener: true, focus: true, style: true, attrs: true, key: true, module: true, init: true, create: true, update: true, insert: true, remove: true, destroy: true, prepatch: true, postpatch: true, }; export var ATTRIBUTE_TO_REMOVE = { id: true, }; var PropsModule = /** @class */ (function (_super) { __extends(PropsModule, _super); function PropsModule() { return _super !== null && _super.apply(this, arguments) || this; } PropsModule.prototype.create = function (vNode) { updateProps(emptyVNode, vNode); }; PropsModule.prototype.update = function (formerVNode, vNode) { updateProps(formerVNode, vNode); }; return PropsModule; }(BaseModule)); function updateProps(formerVNode, vNode) { var element = vNode.element; var formerProps = formerVNode.props; var props = vNode.props; if (!formerProps && !props) return; formerProps = formerProps || {}; props = props || {}; for (var key in formerProps) { var propertyIsMissing = !PROPERTIES_TO_SKIP[key] && !props[key]; var keyIsClassName = propertyIsMissing && key === 'className'; var shouldRemoveAttribute = propertyIsMissing && ATTRIBUTE_TO_REMOVE[key]; if (propertyIsMissing) delete element[key]; if (keyIsClassName) removePreviousClassName(formerProps[key], element); if (shouldRemoveAttribute) element.removeAttribute(key); } for (var key in props) if (!PROPERTIES_TO_SKIP[key]) element[key] = props[key]; } function removePreviousClassName(className, element) { var _a; var shouldRemoveClassName = className && element.classList; var shouldRemoveClassAttribute = shouldRemoveClassName && element.getAttribute('class') === ''; if (shouldRemoveClassName) (_a = element.classList).remove.apply(_a, className.split(' ')); if (shouldRemoveClassAttribute) element.removeAttribute('class'); } //# sourceMappingURL=props.js.map