fractal-core
Version:
A minimalist and well crafted app, content or component is our conviction
69 lines • 2.89 kB
JavaScript
;
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