mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 18:30:09 +00:00
reworked the event system...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
c5ea87c015
commit
5203f32bda
@ -188,6 +188,32 @@ Items.ListTitle = function(){}
|
|||||||
//
|
//
|
||||||
// XXX might be a good idea to make this a generic module...
|
// XXX might be a good idea to make this a generic module...
|
||||||
|
|
||||||
|
var BrowserEvent =
|
||||||
|
module.BrowserEvent =
|
||||||
|
object.makeConstructor('BrowserEvent',
|
||||||
|
{
|
||||||
|
// event name...
|
||||||
|
name: undefined,
|
||||||
|
|
||||||
|
data: undefined,
|
||||||
|
|
||||||
|
propagationStopped: false,
|
||||||
|
stopPropagation: function(){
|
||||||
|
this.propagationStopped = true },
|
||||||
|
|
||||||
|
__init__: function(name, ...data){
|
||||||
|
// sanity check...
|
||||||
|
if(arguments.length < 1){
|
||||||
|
throw new Error('new BrowserEvent(..): '
|
||||||
|
+'at least event name must be passed as argument.') }
|
||||||
|
|
||||||
|
this.name = name
|
||||||
|
this.data = data.length > 0 ?
|
||||||
|
data
|
||||||
|
: undefined
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
// Generate an event method...
|
// Generate an event method...
|
||||||
//
|
//
|
||||||
@ -203,7 +229,9 @@ 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, retrigger){
|
||||||
|
retrigger = retrigger !== false
|
||||||
|
|
||||||
return Object.assign(
|
return Object.assign(
|
||||||
function(item){
|
function(item){
|
||||||
// register handler...
|
// register handler...
|
||||||
@ -211,21 +239,15 @@ var makeEventMethod = function(event, handler){
|
|||||||
return this.on(event, item)
|
return this.on(event, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX STUB: event object...
|
var evt = new BrowserEvent(event)
|
||||||
// XXX can we generate this in one spot???
|
|
||||||
// ...currently it is generated here and in .trigger(..)
|
|
||||||
var evt = {
|
|
||||||
name: event,
|
|
||||||
// XXX
|
|
||||||
//stopPropagation: function(){
|
|
||||||
//},
|
|
||||||
}
|
|
||||||
|
|
||||||
handler
|
handler
|
||||||
&& handler.call(this, evt, ...arguments)
|
&& handler.call(this, evt, ...arguments)
|
||||||
|
|
||||||
return this
|
return retrigger ?
|
||||||
|
this
|
||||||
.trigger(evt, ...arguments)
|
.trigger(evt, ...arguments)
|
||||||
|
: this
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
event: event,
|
event: event,
|
||||||
@ -244,7 +266,10 @@ var callItemEventHandlers = function(item, event, evt, ...args){
|
|||||||
.concat((item.events || {})[event] || [])
|
.concat((item.events || {})[event] || [])
|
||||||
.forEach(function(handler){
|
.forEach(function(handler){
|
||||||
// XXX revise call signature...
|
// XXX revise call signature...
|
||||||
handler.call(item, evt, item, ...args) }) }
|
handler.call(item, evt, item, ...args) })
|
||||||
|
// propagate the event...
|
||||||
|
item.parent
|
||||||
|
&& item.parent.trigger(evt, ...args) }
|
||||||
|
|
||||||
// Generate item event method...
|
// Generate item event method...
|
||||||
//
|
//
|
||||||
@ -319,7 +344,8 @@ var makeItemEventMethod = function(event, handler, options){
|
|||||||
handler
|
handler
|
||||||
&& 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) }) },
|
||||||
|
false)
|
||||||
return Object.assign(
|
return Object.assign(
|
||||||
// the actual method we return...
|
// the actual method we return...
|
||||||
function(item, ...args){
|
function(item, ...args){
|
||||||
@ -1931,19 +1957,11 @@ var BaseBrowserPrototype = {
|
|||||||
// - call the event handlers passing them <event-object> and args
|
// - call the event handlers passing them <event-object> and args
|
||||||
// - call parent's .trigger(<event-name>, ..)
|
// - call parent's .trigger(<event-name>, ..)
|
||||||
//
|
//
|
||||||
// <event-object> format:
|
// for docs on <event-object> see BrowserEvent(..)
|
||||||
// {
|
|
||||||
// name: <name>,
|
|
||||||
//
|
|
||||||
// propagationStopped: <bool>,
|
|
||||||
// stopPropagation: <func>,
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
//
|
//
|
||||||
// XXX need to make stopPropagation(..) work even if we got an
|
// XXX need to make stopPropagation(..) work even if we got an
|
||||||
// externally made event object...
|
// externally made event object...
|
||||||
// XXX need to make this workable with DOM events... (???)
|
// XXX need to make this workable with DOM events... (???)
|
||||||
// XXX construct the event in one spot...
|
|
||||||
trigger: function(evt, ...args){
|
trigger: function(evt, ...args){
|
||||||
var that = this
|
var that = this
|
||||||
|
|
||||||
@ -1959,18 +1977,14 @@ var BaseBrowserPrototype = {
|
|||||||
this[evt](...args)
|
this[evt](...args)
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
// propagation is stopped...
|
||||||
// XXX need to make stopPropagation(..) work even if we got an
|
// XXX expand this check to support DOM events...
|
||||||
// externally made event object...
|
if(evt.propagationStopped || evt.cancelBubble){
|
||||||
var stopPropagation = false
|
return this
|
||||||
var evt = typeof(evt) == typeof('str') ?
|
|
||||||
// XXX construct this in one place...
|
|
||||||
// ...currently it is constructed here and in makeEventMethod(..)
|
|
||||||
{
|
|
||||||
name: evt,
|
|
||||||
stopPropagation: function(){
|
|
||||||
this.propagationStopped = stopPropagation = true },
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var evt = typeof(evt) == typeof('str') ?
|
||||||
|
new BrowserEvent(evt)
|
||||||
: evt
|
: evt
|
||||||
|
|
||||||
// call the main set of handlers...
|
// call the main set of handlers...
|
||||||
@ -1981,14 +1995,11 @@ var BaseBrowserPrototype = {
|
|||||||
handler.call(that, evt, ...args) })
|
handler.call(that, evt, ...args) })
|
||||||
|
|
||||||
// trigger the parent's event...
|
// trigger the parent's event...
|
||||||
!stopPropagation
|
!(evt.propagationStopped || evt.cancelBubble)
|
||||||
&& !evt.propagationStopped
|
|
||||||
&& this.parent
|
&& this.parent
|
||||||
&& this.parent.trigger instanceof Function
|
&& this.parent.trigger instanceof Function
|
||||||
// XXX should we trigger with and event object or an event
|
// XXX should we pass trigger and event object or event name???
|
||||||
// name???
|
&& this.parent.trigger(evt, ...args)
|
||||||
//&& this.parent.trigger(evt, ...args)
|
|
||||||
&& this.parent.trigger(evt.name, ...args)
|
|
||||||
|
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user