mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 18:30:09 +00:00
resolved the chicken-vs-egg issue with events...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
5a83e76010
commit
c2f1412f84
@ -200,29 +200,32 @@ Items.ListTitle = function(){}
|
|||||||
// XXX make the event object customizable...
|
// XXX make the event object customizable...
|
||||||
// XXX STUB event object...
|
// XXX STUB event object...
|
||||||
var makeEventMethod = function(event, handler){
|
var makeEventMethod = function(event, handler){
|
||||||
return function(item){
|
return Object.assign(
|
||||||
// register handler...
|
function(item){
|
||||||
if(item instanceof Function){
|
// register handler...
|
||||||
return this.on(event, item)
|
if(item instanceof Function){
|
||||||
}
|
return this.on(event, item)
|
||||||
|
}
|
||||||
|
|
||||||
// XXX STUB: event object...
|
// XXX STUB: event object...
|
||||||
// XXX can we generate this in one spot???
|
// XXX can we generate this in one spot???
|
||||||
// ...currently it is generated here and in .trigger(..)
|
// ...currently it is generated here and in .trigger(..)
|
||||||
var evt = {
|
var evt = {
|
||||||
name: event,
|
name: event,
|
||||||
// XXX
|
// XXX
|
||||||
//stopPropagation: function(){
|
//stopPropagation: function(){
|
||||||
//},
|
//},
|
||||||
}
|
}
|
||||||
|
|
||||||
handler
|
handler
|
||||||
&& handler.call(this, evt, ...arguments)
|
&& handler.call(this, evt, ...arguments)
|
||||||
|
|
||||||
return this
|
return this
|
||||||
.trigger(evt, ...arguments)
|
.trigger(evt, ...arguments)
|
||||||
}
|
},
|
||||||
}
|
{
|
||||||
|
event: event,
|
||||||
|
}) }
|
||||||
|
|
||||||
// Call item event handlers...
|
// Call item event handlers...
|
||||||
//
|
//
|
||||||
@ -266,24 +269,27 @@ var makeItemEventMethod = function(event, handler, options){
|
|||||||
&& handler.call(this, evt, item.slice(), ...args)
|
&& handler.call(this, evt, item.slice(), ...args)
|
||||||
item.forEach(function(item){
|
item.forEach(function(item){
|
||||||
callItemEventHandlers(item, event, evt, ...args) }) })
|
callItemEventHandlers(item, event, evt, ...args) }) })
|
||||||
return function(item, ...args){
|
return Object.assign(
|
||||||
var that = this
|
function(item, ...args){
|
||||||
return method.call(this,
|
var that = this
|
||||||
// event handler...
|
return method.call(this,
|
||||||
item instanceof Function ?
|
// event handler...
|
||||||
item
|
item instanceof Function ?
|
||||||
// array of queries...
|
item
|
||||||
: item instanceof Array ?
|
// array of queries...
|
||||||
item
|
: item instanceof Array ?
|
||||||
.map(function(e){
|
item
|
||||||
return that.search(e, options) })
|
.map(function(e){
|
||||||
.flat()
|
return that.search(e, options) })
|
||||||
.unique()
|
.flat()
|
||||||
// explicit item or query...
|
.unique()
|
||||||
: item != null ?
|
// explicit item or query...
|
||||||
this.search(item, options)
|
: item != null ?
|
||||||
: [],
|
this.search(item, options)
|
||||||
...args) } }
|
: [],
|
||||||
|
...args) },
|
||||||
|
// keep the event method format...
|
||||||
|
method) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1788,12 +1794,12 @@ var BaseBrowserPrototype = {
|
|||||||
//
|
//
|
||||||
// NOTE: evt can be '*' or 'all' to indicate all events.
|
// NOTE: evt can be '*' or 'all' to indicate all events.
|
||||||
off: function(evt, handler){
|
off: function(evt, handler){
|
||||||
var handlers = this.__event_handlers || {}
|
|
||||||
|
|
||||||
if(arguments.length == 0){
|
if(arguments.length == 0){
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var handlers = this.__event_handlers || {}
|
||||||
|
|
||||||
// parse args...
|
// parse args...
|
||||||
handler = handler || '*'
|
handler = handler || '*'
|
||||||
evt =
|
evt =
|
||||||
@ -1838,14 +1844,55 @@ var BaseBrowserPrototype = {
|
|||||||
} while(i > -1) })
|
} while(i > -1) })
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
// XXX .focus(..) and .trigger('focus', ..) should be the same...
|
//
|
||||||
// ...now .focus(..) does all the domain stuff then calls
|
// Trigger an event by name...
|
||||||
// .trigger('focus', ..) while .trigger('focus') handles only
|
// .trigger(<event-name>, ..)
|
||||||
// the event stuff... (the usual chicken/egg problem)
|
// -> this
|
||||||
// ...should what is currently done in .focus(..) be done via
|
//
|
||||||
// handlers???
|
// Trigger an event...
|
||||||
|
// .trigger(<event-object>, ..)
|
||||||
|
// -> this
|
||||||
|
//
|
||||||
|
// Passing an <event-name> will do the following:
|
||||||
|
// - if an <event-name> handler is available call it and return
|
||||||
|
// - the handler should:
|
||||||
|
// - do any specifics that it needs
|
||||||
|
// - create an <event-object>
|
||||||
|
// - call trigger with <event-object>
|
||||||
|
// - if <event-name> has no handler:
|
||||||
|
// - create an <event-object>
|
||||||
|
// - call the event handlers passing them <event-object> and args
|
||||||
|
// - call parent's .trigger(<event-name>, ..)
|
||||||
|
//
|
||||||
|
// <event-object> format:
|
||||||
|
// {
|
||||||
|
// name: <name>,
|
||||||
|
//
|
||||||
|
// propagationStopped: <bool>,
|
||||||
|
// stopPropagation: <func>,
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// XXX need to make stopPropagation(..) work even if we got an
|
||||||
|
// externally made event object...
|
||||||
trigger: function(evt, ...args){
|
trigger: function(evt, ...args){
|
||||||
var that = this
|
var that = this
|
||||||
|
|
||||||
|
// trigger the appropriate event handler if available...
|
||||||
|
// NOTE: this makes .someEvent(..) and .trigger('someEvent', ..)
|
||||||
|
// do the same thing by always triggering .someEvent(..)
|
||||||
|
// first and letting it decide how to call .trigger(..)...
|
||||||
|
// NOTE: the event method should pass a fully formed event object
|
||||||
|
// into trigger when it requires to call the handlers...
|
||||||
|
if(typeof(evt) == typeof('str')
|
||||||
|
&& this[evt] instanceof Function
|
||||||
|
&& this[evt].event == evt){
|
||||||
|
this[evt](...args)
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX need to make stopPropagation(..) work even if we got an
|
||||||
|
// externally made event object...
|
||||||
var stopPropagation = false
|
var stopPropagation = false
|
||||||
var evt = typeof(evt) == typeof('str') ?
|
var evt = typeof(evt) == typeof('str') ?
|
||||||
// XXX construct this in one place...
|
// XXX construct this in one place...
|
||||||
@ -1853,7 +1900,7 @@ var BaseBrowserPrototype = {
|
|||||||
{
|
{
|
||||||
name: evt,
|
name: evt,
|
||||||
stopPropagation: function(){
|
stopPropagation: function(){
|
||||||
stopPropagation = true },
|
this.propagationStopped = stopPropagation = true },
|
||||||
}
|
}
|
||||||
: evt
|
: evt
|
||||||
|
|
||||||
@ -1866,8 +1913,13 @@ var BaseBrowserPrototype = {
|
|||||||
|
|
||||||
// trigger the parent's event...
|
// trigger the parent's event...
|
||||||
!stopPropagation
|
!stopPropagation
|
||||||
|
&& !evt.propagationStopped
|
||||||
&& this.parent
|
&& this.parent
|
||||||
&& this.parent.trigger(evt, ...args)
|
&& this.parent.trigger instanceof Function
|
||||||
|
// XXX should we trigger with and event object or an event
|
||||||
|
// name???
|
||||||
|
//&& this.parent.trigger(evt, ...args)
|
||||||
|
&& this.parent.trigger(evt.name, ...args)
|
||||||
|
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user