mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
working on the event system...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
9dde5d0326
commit
daf5e96951
@ -192,6 +192,7 @@ Items.ListTitle = function(){}
|
|||||||
// XXX should this be simply a shorthand to .trigger(..) ???
|
// XXX should this be simply a shorthand to .trigger(..) ???
|
||||||
var makeEventMethod = function(event, handler){
|
var makeEventMethod = function(event, handler){
|
||||||
return function(item){
|
return function(item){
|
||||||
|
// register handler...
|
||||||
if(item instanceof Function){
|
if(item instanceof Function){
|
||||||
return this.on(event, item)
|
return this.on(event, item)
|
||||||
}
|
}
|
||||||
@ -214,6 +215,31 @@ var makeEventMethod = function(event, handler){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var callItemEventHandlers = function(item, event, ...args){
|
||||||
|
;(item[event] ?
|
||||||
|
[item[event]]
|
||||||
|
: [])
|
||||||
|
.concat((item.events || {})[event] || [])
|
||||||
|
.forEach(function(handler){
|
||||||
|
// XXX revise call signature...
|
||||||
|
handler.call(item, evt, item, ...args) }) }
|
||||||
|
|
||||||
|
var makeItemEventMethod = function(event, handler){
|
||||||
|
return makeEventMethod(event, function(evt, item, ...args){
|
||||||
|
item = item ?
|
||||||
|
// XXX
|
||||||
|
this.get(item)
|
||||||
|
: []
|
||||||
|
item = item instanceof Array ? item : [item]
|
||||||
|
|
||||||
|
handler
|
||||||
|
&& handler.call(this, evt, item, ...args)
|
||||||
|
|
||||||
|
item.forEach(function(item){
|
||||||
|
callItemEventHandlers(item, event) })
|
||||||
|
}) }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
@ -464,9 +490,11 @@ var BaseBrowserPrototype = {
|
|||||||
id_changed ?
|
id_changed ?
|
||||||
{}
|
{}
|
||||||
: old_index[key] || {},
|
: old_index[key] || {},
|
||||||
// XXX ???
|
|
||||||
options || {},
|
options || {},
|
||||||
opts)
|
opts,
|
||||||
|
{
|
||||||
|
parent: this,
|
||||||
|
})
|
||||||
|
|
||||||
// store the item...
|
// store the item...
|
||||||
items.push(item)
|
items.push(item)
|
||||||
@ -653,6 +681,7 @@ var BaseBrowserPrototype = {
|
|||||||
// e.g. item.focus(..) -> root.focus(..)
|
// e.g. item.focus(..) -> root.focus(..)
|
||||||
// XXX also need to design a means for this system to interact both
|
// XXX also need to design a means for this system to interact both
|
||||||
// ways with DOM events...
|
// ways with DOM events...
|
||||||
|
// XXX need to bubble the event up through the nested browsers...
|
||||||
on: function(evt, handler){
|
on: function(evt, handler){
|
||||||
var handlers = this.__event_handlers = this.__event_handlers || {}
|
var handlers = this.__event_handlers = this.__event_handlers || {}
|
||||||
handlers = handlers[evt] = handlers[evt] || []
|
handlers = handlers[evt] = handlers[evt] || []
|
||||||
@ -701,21 +730,49 @@ var BaseBrowserPrototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// domain events/actions...
|
// domain events/actions...
|
||||||
// XXX call item-specific events where applicable...
|
// XXX need a way to extend these to:
|
||||||
focus: makeEventMethod('focus', function(evt, item){
|
// - be able to trigger an external (DOM) event...
|
||||||
// XXX exclusively set item.focused...
|
// - be able to be triggered from an external (DOM) event...
|
||||||
// XXX call item.focus handlers...
|
focus: makeItemEventMethod('focus', function(evt, items){
|
||||||
|
// NOTE: if we got multiple matches we care only about the last one...
|
||||||
|
var item = items.pop()
|
||||||
|
|
||||||
|
if(!item){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// blur .focused...
|
||||||
|
this.focused
|
||||||
|
&& this.blur(this.focused)
|
||||||
|
|
||||||
|
item.focused = true
|
||||||
}),
|
}),
|
||||||
select: makeEventMethod('select', function(evt, item){
|
blur: makeItemEventMethod('blur', function(evt, items){
|
||||||
// XXX set item.selected...
|
items.forEach(function(item){
|
||||||
}),
|
delete item.focused }) }),
|
||||||
open: makeEventMethod('open', function(evt, item){}),
|
// XXX update this.selected in a more granular way...
|
||||||
enter: makeEventMethod('enter', function(evt, item){}),
|
select: makeItemEventMethod('select', function(evt, items){
|
||||||
|
items.forEach(function(item){
|
||||||
|
item.selected = true
|
||||||
|
// XXX update this.selected in a more granular way...
|
||||||
|
delete this.__selected
|
||||||
|
}) }),
|
||||||
|
deselect: makeItemEventMethod('deselect', function(evt, item){
|
||||||
|
items.forEach(function(item){
|
||||||
|
delete item.selected
|
||||||
|
// XXX update this.selected in a more granular way...
|
||||||
|
delete this.__selected
|
||||||
|
}) }),
|
||||||
|
|
||||||
|
open: makeItemEventMethod('open', function(evt, item){}),
|
||||||
|
enter: makeItemEventMethod('enter', function(evt, item){}),
|
||||||
// XXX can/should we unify these???
|
// XXX can/should we unify these???
|
||||||
collapse: makeEventMethod('collapse', function(evt, item){}),
|
collapse: makeItemEventMethod('collapse', function(evt, item){}),
|
||||||
expand: makeEventMethod('expand', function(evt, item){}),
|
expand: makeItemEventMethod('expand', function(evt, item){}),
|
||||||
|
|
||||||
// XXX target can be item or path...
|
// XXX target can be item or path...
|
||||||
load: makeEventMethod('load', function(evt, item){}),
|
load: makeEventMethod('load', function(evt, item){}),
|
||||||
|
|
||||||
close: makeEventMethod('close', function(evt, reason){}),
|
close: makeEventMethod('close', function(evt, reason){}),
|
||||||
|
|
||||||
// XXX should there return an array or a .constructor(..) instance??
|
// XXX should there return an array or a .constructor(..) instance??
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user