UNPKG

fractal-core

Version:

A minimalist and well crafted app, content or component is our conviction

69 lines 2.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const resizeSensor_1 = require("./resizeSensor"); // TODO: CRITICAL, improve performance or deprecate this way in favor of task size evaluator /* istanbul ignore next */ exports.sizeBindingModule = (mod) => { function invokeHandler(evHandler, vnode, eventData) { if (evHandler instanceof Array && typeof evHandler[0] === 'string') { setTimeout(() => { mod.dispatchEv(eventData, evHandler); }, 0); } else if (evHandler instanceof Array) { // call multiple handlers for (var i = 0; i < evHandler.length; i++) { invokeHandler(evHandler[i], vnode, eventData); } } else if (evHandler === 'ignore') { // this handler is ignored return; } else if (evHandler === '' && evHandler === undefined) { // this handler is passed return; } else { mod.error('ViewInterface-sizeBindingModule', 'event handler of type ' + typeof evHandler + 'are not allowed, data: ' + JSON.stringify(evHandler)); } } function createListener() { return function handler() { var vnode = handler.vnode; var evHandler = vnode.data.size; var eventData = vnode.elm.getBoundingClientRect(); invokeHandler(evHandler, vnode, eventData); }; } function updateSizeListener(oldVnode, vnode) { var oldSize = oldVnode.data.size, oldResizeListener = oldVnode.resizeListener, oldResizeSensor = oldVnode.resizeSensor, size = vnode && vnode.data.size, elm = (vnode && vnode.elm); // optimization for reused immutable handlers if (oldSize === size) { return; } // remove existing listeners which no longer used if (oldSize && oldResizeListener) { // if element changed or deleted we remove all existing listeners unconditionally if (!size) { // remove listener if element was changed or existing listeners removed oldResizeSensor.detach(oldResizeListener); } } // add new listeners which has not already attached if (size) { // reuse existing listener or create new var resizeListener = vnode.resizeListener = oldVnode.listener || createListener(); vnode.resizeSensor = oldVnode.listener || new resizeSensor_1.ResizeSensor(elm, resizeListener); // update vnode for listener resizeListener.vnode = vnode; } } return { create: updateSizeListener, update: updateSizeListener, destroy: updateSizeListener, }; }; exports.default = exports.sizeBindingModule; //# sourceMappingURL=sizeBinding.js.map