UNPKG

mostly-dom

Version:
128 lines 4.47 kB
"use strict"; 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 __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); var BaseModule_1 = require("./BaseModule"); var emptyVNode_1 = require("./emptyVNode"); function createStylesModule() { return new StylesModule(); } exports.createStylesModule = createStylesModule; var StylesModule = /** @class */ (function (_super) { __extends(StylesModule, _super); function StylesModule() { return _super !== null && _super.apply(this, arguments) || this; } StylesModule.prototype.pre = function () { setRequestAnimationFrame(); }; StylesModule.prototype.create = function (vNode) { updateStyle(emptyVNode_1.emptyVNode, vNode); }; StylesModule.prototype.update = function (formerVNode, vNode) { updateStyle(formerVNode, vNode); }; StylesModule.prototype.remove = function (vNode, removeElement) { applyRemoveStyle(vNode, removeElement); }; StylesModule.prototype.destroy = function (vNode) { applyDestroyStyle(vNode); }; return StylesModule; }(BaseModule_1.BaseModule)); var requestAnimationFrame; function setRequestAnimationFrame() { if (!requestAnimationFrame) requestAnimationFrame = (typeof window !== 'undefined' && window.requestAnimationFrame) || setTimeout; } exports.pre = setRequestAnimationFrame; function nextFrame(fn) { requestAnimationFrame(function () { requestAnimationFrame(fn); }); } function setValueOnNextFrame(obj, prop, value) { nextFrame(function () { obj[prop] = value; }); } function updateStyle(formerVNode, vNode) { var styleValue; var element = vNode.element; var formerStyle = formerVNode.props.style; var style = vNode.props.style; if (!formerStyle && !style) return; formerStyle = formerStyle || {}; style = style || {}; var formerHasDelayedProperty = !!formerStyle.delayed; // tslint:disable-next-line:prefer-const for (var key in formerStyle) if (!style[key]) element.style[key] = ''; for (var key in style) { styleValue = style[key]; if (key === 'delayed') { // tslint:disable-next-line:prefer-const for (var delayKey in style.delayed) { styleValue = style.delayed[delayKey]; if (!formerHasDelayedProperty || styleValue !== formerStyle.delayed[delayKey]) setValueOnNextFrame(element.style, delayKey, styleValue); } } else if (key !== 'remove') { element.style[key] = styleValue; } } } exports.create = updateStyle; exports.update = updateStyle; function applyDestroyStyle(vNode) { var element = vNode.element; var style = vNode.props.style; if (!style || !style.destroy) return; var destroy = style.destroy; for (var key in destroy) element.style[key] = destroy[key]; } exports.destroy = applyDestroyStyle; function applyRemoveStyle(vNode, callback) { var style = vNode.props.style; if (!style || !style.remove) return callback(); var element = vNode.element; var index = 0; var computedStyle; var listenerCount = 0; var appliedStyles = []; for (var key in style) { appliedStyles.push(key); element.style[key] = style[key]; } computedStyle = getComputedStyle(element); var transitionProperties = computedStyle['transition-property'].split(', '); for (; index < transitionProperties.length; ++index) if (appliedStyles.indexOf(transitionProperties[index]) !== -1) listenerCount++; element.addEventListener('transitionend', function (event) { if (event.target === element) --listenerCount; if (listenerCount === 0) callback(); }); } exports.remove = applyRemoveStyle; //# sourceMappingURL=styles.js.map