From 5ee4b4dfd54aa50bc0f44891446219d8bf7f1d47 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Sun, 15 Nov 2020 02:27:20 +0300 Subject: [PATCH] all known issues with event.js are fixed, no on to the unknown ones... Signed-off-by: Alex A. Naanou --- event.js | 29 ++++++++++++++++++++--------- test.js | 16 ++++++++++++---- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/event.js b/event.js index 54f3ac3..cc2de96 100644 --- a/event.js +++ b/event.js @@ -41,15 +41,26 @@ function(name, func, options={}){ // NOTE: this will stop event handling if one of the handlers // explicitly returns false... - var handle = function(){ - return handlers - .reduce(function(res, handler){ - return res === true - && handler(...args) !== false }, true) } - var res - func ? - (res = func.call(this, handle, ...args)) - : handle(...args) + // NOTE: to explicitly disable calling the handlers func must + // call handle(false) + // XXX should he user be able to control the args passed to + // the handlers??? + var did_handle = false + var handle = function(skip=false){ + did_handle = skip === true + return skip ? + undefined + : handlers + .reduce(function(res, handler){ + return res === true + && handler(name, ...args) !== false }, true) } + + var res = func ? + func.call(this, handle, ...args) + : undefined + + !did_handle + && handle() return res }, { diff --git a/test.js b/test.js index 7a76c21..8d34651 100755 --- a/test.js +++ b/test.js @@ -366,6 +366,7 @@ UniqueKeyMap.tests({ var Events = test.TestSet() test.Case('Events', Events) +// XXX test aborting handlers... Events.cases({ base: function(assert){ var called = {} @@ -374,6 +375,11 @@ Events.cases({ var ObjWithEvents = assert( object.mixinFlat({ + // NOTE: we will also use virtual events later -- 'moo' + // and 'foo', these do not have to be defined to + // be usable... + + // blank events... bareEventBlank: assert( events.bareEventMethod('bareEventBlank'), '.bareEventMethod(..): blank'), @@ -381,20 +387,22 @@ Events.cases({ events.eventMethod('eventBlank'), '.eventMethod(..): blank'), - // XXX test aborting handlers... + // normal events... bareEvent: assert(events.bareEventMethod('bareEvent', function(handle, ...args){ called['bareEvent-call'] = true - assert(handle(...args), '.bareEventMethod(..) -> handle(..)') + assert(handle(), '.bareEventMethod(..) -> handle(..)') return 'bareEvent' }), '.bareEventMethod(..)'), event: assert(events.eventMethod('event', function(handle, ...args){ called['event-call'] = true - assert(handle(...args), '.eventMethod(..) -> handle(..)') + assert(handle(), '.eventMethod(..) -> handle(..)') }), '.eventMethod(..)'), }, events.EventMixin), 'object with event mixin created.') + + // create an "instance"... var obj = Object.create(ObjWithEvents) @@ -453,7 +461,7 @@ Events.cases({ assert(call('event') === obj, '.event(..) return value.') assert(call('bareEvent') == 'bareEvent', '.bareEvent(..) return value.') - + obj.event(1,2,3) // unbind...