UNPKG

kaiju

Version:

Virtual dom, observables and stateful components

60 lines (42 loc) 1.53 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.eventsModule = undefined; var _util = require('./util'); var _messages = require('./messages'); /* snabbdom module extension used to register Messages as event listeners */ function updateEventListeners(oldVnode, vnode) { var oldEvents = oldVnode.data.events; var events = vnode.data.events; if (!events) return; var listeners = oldEvents ? oldEvents.listeners : {}; events.listeners = listeners; var _loop = function _loop() { var message = events[name]; var oldMessage = oldEvents && oldEvents[name]; if (message && message !== oldMessage) { if (oldMessage && isSameMessageAndPayload(message, oldMessage)) return 'continue'; if (listeners[name]) vnode.elm.removeEventListener(name, listeners[name]); listeners[name] = function (evt) { return (0, _messages._sendToElement)(evt.currentTarget, message(evt)); }; vnode.elm.addEventListener(name, listeners[name]); } }; for (name in events) { var _ret = _loop(); if (_ret === 'continue') continue; } if (!oldEvents) return; for (name in oldEvents) { if (events[name] === undefined) vnode.elm.removeEventListener(name, listeners[name]); } } function isSameMessageAndPayload(message, oldMessage) { return message._id === oldMessage._id && message.payload === oldMessage.payload; } var eventsModule = exports.eventsModule = { create: updateEventListeners, update: updateEventListeners };