Skip to content

Commit

Permalink
fix: add a new event handler when a new one is present when diffing e…
Browse files Browse the repository at this point in the history
…vent listeners
  • Loading branch information
kbrsh committed Aug 1, 2017
1 parent d845a63 commit ae84cfb
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 37 deletions.
38 changes: 20 additions & 18 deletions dist/moon.js
Original file line number Diff line number Diff line change
Expand Up @@ -323,33 +323,35 @@
return attrs;
}


/**
* Adds metadata Event Listeners to an Element
* Adds An Event Handler to a Type of Listener
* @param {Object} node
* @param {String} type
* @param {Object} eventListeners
*/
var addEventListeners = function(node, eventListeners) {
var addHandler = function(type) {
// Create handle function
var handle = function(evt) {
var handlers = handle.handlers;
for(var i = 0; i < handlers.length; i++) {
handlers[i](evt);
}
var addEventHandler = function(node, type, eventListeners) {
// Create handle function
var handle = function(evt) {
var handlers = handle.handlers;
for(var i = 0; i < handlers.length; i++) {
handlers[i](evt);
}
}

// Add handlers to handle
handle.handlers = eventListeners[type];
// Add handlers to handle
handle.handlers = eventListeners[type];

// Add handler to vnode
eventListeners[type] = handle;
// Add handler to vnode
eventListeners[type] = handle;

// Add event listener
node.addEventListener(type, handle);
}
// Add event listener
node.addEventListener(type, handle);
}

var addEventListeners = function(node, eventListeners) {
for(var type in eventListeners) {
addHandler(type);
addEventHandler(node, type, eventListeners);
}
}

Expand Down Expand Up @@ -706,7 +708,7 @@
for(var type in eventListeners) {
var oldEventListener = oldEventListeners[type];
if(oldEventListener === undefined) {
node.removeEventListener(type, oldEventListener);
addEventHandler(node, type, eventListeners);
} else {
oldEventListeners[type].handlers = eventListeners[type];
}
Expand Down
2 changes: 1 addition & 1 deletion dist/moon.min.js

Large diffs are not rendered by default.

36 changes: 19 additions & 17 deletions src/util/dom.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,33 +11,35 @@ const extractAttrs = function(node) {
return attrs;
}


/**
* Adds metadata Event Listeners to an Element
* Adds An Event Handler to a Type of Listener
* @param {Object} node
* @param {String} type
* @param {Object} eventListeners
*/
const addEventListeners = function(node, eventListeners) {
const addHandler = function(type) {
// Create handle function
const handle = function(evt) {
const handlers = handle.handlers;
for(let i = 0; i < handlers.length; i++) {
handlers[i](evt);
}
const addEventHandler = function(node, type, eventListeners) {
// Create handle function
const handle = function(evt) {
const handlers = handle.handlers;
for(let i = 0; i < handlers.length; i++) {
handlers[i](evt);
}
}

// Add handlers to handle
handle.handlers = eventListeners[type];
// Add handlers to handle
handle.handlers = eventListeners[type];

// Add handler to vnode
eventListeners[type] = handle;
// Add handler to vnode
eventListeners[type] = handle;

// Add event listener
node.addEventListener(type, handle);
}
// Add event listener
node.addEventListener(type, handle);
}

const addEventListeners = function(node, eventListeners) {
for(let type in eventListeners) {
addHandler(type);
addEventHandler(node, type, eventListeners);
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/util/vdom.js
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,7 @@ const diffEventListeners = function(node, eventListeners, oldEventListeners) {
for(const type in eventListeners) {
const oldEventListener = oldEventListeners[type];
if(oldEventListener === undefined) {
node.removeEventListener(type, oldEventListener);
addEventHandler(node, type, eventListeners);
} else {
oldEventListeners[type].handlers = eventListeners[type];
}
Expand Down

0 comments on commit ae84cfb

Please sign in to comment.