From 174941c6a49fff91e4e3949fa39423c7cb28939c Mon Sep 17 00:00:00 2001 From: Kayo Phoenix Date: Wed, 3 Aug 2016 02:33:43 +0500 Subject: [PATCH] Added vnode as last argument to event handler --- modules/eventlisteners.js | 6 +++--- test/eventlisteners.js | 31 ++++++++++++++++++++++++++++--- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/modules/eventlisteners.js b/modules/eventlisteners.js index 5f79c0c..53ffffb 100644 --- a/modules/eventlisteners.js +++ b/modules/eventlisteners.js @@ -1,14 +1,14 @@ function invokeHandler(handler, vnode, event) { if (typeof handler === "function") { // call function handler - handler.call(vnode, event); + handler.call(vnode, event, vnode); } else if (typeof handler === "object") { // call handler with arguments if (typeof handler[0] === "function") { // special case for single argument for performance handler.length === 2 ? - handler[0].call(vnode, handler[1], event) : - handler[0].apply(vnode, handler.slice(1).concat(event)); + handler[0].call(vnode, handler[1], event, vnode) : + handler[0].apply(vnode, handler.slice(1).concat(event, vnode)); } else { // call multiple handlers for (var i = 0; i < handler.length; i++) { diff --git a/test/eventlisteners.js b/test/eventlisteners.js index 6ec2879..7bc5eeb 100644 --- a/test/eventlisteners.js +++ b/test/eventlisteners.js @@ -69,7 +69,7 @@ describe('event listeners', function() { }); it('handles changed several values in array', function() { var result = []; - function clicked() { result.push([].slice.call(arguments, 0, arguments.length-1)); } + function clicked() { result.push([].slice.call(arguments, 0, arguments.length-2)); } var vnode1 = h('div', {on: {click: [clicked, 1, 2, 3]}}, [ h('a', 'Click my parent'), ]); @@ -121,14 +121,39 @@ describe('event listeners', function() { }); it('access to virtual node in event handler', function() { var result = []; - function clicked(ev) { result.push(this); } + function clicked(ev, vnode) { result.push(this); result.push(vnode); } var vnode1 = h('div', {on: {click: clicked }}, [ h('a', 'Click my parent'), ]); elm = patch(vnode0, vnode1).elm; elm.click(); - assert.equal(1, result.length); + assert.equal(2, result.length); + assert.equal(vnode1, result[0]); + assert.equal(vnode1, result[1]); + }), + it('access to virtual node in event handler with argument', function() { + var result = []; + function clicked(arg, ev, vnode) { result.push(this); result.push(vnode); } + var vnode1 = h('div', {on: {click: [clicked, 1] }}, [ + h('a', 'Click my parent'), + ]); + elm = patch(vnode0, vnode1).elm; + elm.click(); + assert.equal(2, result.length); + assert.equal(vnode1, result[0]); + assert.equal(vnode1, result[1]); + }), + it('access to virtual node in event handler with arguments', function() { + var result = []; + function clicked(arg1, arg2, ev, vnode) { result.push(this); result.push(vnode); } + var vnode1 = h('div', {on: {click: [clicked, 1, "2"] }}, [ + h('a', 'Click my parent'), + ]); + elm = patch(vnode0, vnode1).elm; + elm.click(); + assert.equal(2, result.length); assert.equal(vnode1, result[0]); + assert.equal(vnode1, result[1]); }); it('shared handlers in parent and child nodes', function() { var result = [];