mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-28 18:00:09 +00:00
reworked the basic select/focus events...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
adc25ca1a9
commit
e7444df938
@ -205,7 +205,7 @@ var makeEventMethod = function(event, handler){
|
|||||||
return this.on(event, item)
|
return this.on(event, item)
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX STUG: 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 = {
|
||||||
@ -235,14 +235,20 @@ var callItemEventHandlers = function(item, event, ...args){
|
|||||||
// XXX revise call signature...
|
// XXX revise call signature...
|
||||||
handler.call(item, evt, item, ...args) }) }
|
handler.call(item, evt, item, ...args) }) }
|
||||||
|
|
||||||
// XXX use .find(..) instead of .get(..) here....
|
var makeItemEventMethod = function(event, handler, options){
|
||||||
var makeItemEventMethod = function(event, handler){
|
|
||||||
return makeEventMethod(event, function(evt, item, ...args){
|
return makeEventMethod(event, function(evt, item, ...args){
|
||||||
item = item ?
|
var that = this
|
||||||
// XXX
|
|
||||||
this.get(item)
|
item =
|
||||||
|
item instanceof Array ?
|
||||||
|
item
|
||||||
|
.map(function(e){
|
||||||
|
return that.search(e, options) })
|
||||||
|
.flat()
|
||||||
|
.unique()
|
||||||
|
: item != null ?
|
||||||
|
this.search(item, options)
|
||||||
: []
|
: []
|
||||||
item = item instanceof Array ? item : [item]
|
|
||||||
|
|
||||||
handler
|
handler
|
||||||
&& handler.call(this, evt, item, ...args)
|
&& handler.call(this, evt, item, ...args)
|
||||||
@ -324,50 +330,18 @@ var BaseBrowserPrototype = {
|
|||||||
this.__item_index = value },
|
this.__item_index = value },
|
||||||
|
|
||||||
|
|
||||||
// XXX should this be more pedantic???
|
// XXX should we cache the value here????
|
||||||
__focused: undefined,
|
|
||||||
get focused(){
|
get focused(){
|
||||||
return (this.__focused && this.__focused.focused) ?
|
return this.get('focused') },
|
||||||
this.__focused
|
|
||||||
: (this.__focused = this.get('focused')) },
|
|
||||||
// XXX should this trigger focus/blur events???
|
|
||||||
// ...or should this call .focus(..)
|
|
||||||
set focused(value){
|
set focused(value){
|
||||||
delete this.get('focused').focused
|
this.focus(value) },
|
||||||
this.__focused = value == null ?
|
|
||||||
null
|
|
||||||
: this.get(value,
|
|
||||||
function(e){
|
|
||||||
e.focused = true
|
|
||||||
return e}) },
|
|
||||||
|
|
||||||
__selected: null,
|
// XXX should we cache the value here????
|
||||||
get selected(){
|
get selected(){
|
||||||
return this.__selected
|
return this.search('selected') },
|
||||||
|| (this.__selected = this.search('selected')) },
|
|
||||||
// XXX should this trigger select/deselect events???
|
|
||||||
// ...or should this call .select(..)
|
|
||||||
set selected(value){
|
set selected(value){
|
||||||
var that = this
|
this.deselect('selected')
|
||||||
// deselect...
|
this.select(value) },
|
||||||
this.__selected = null
|
|
||||||
this.search('selected',
|
|
||||||
function(e){
|
|
||||||
delete e.selected })
|
|
||||||
// select...
|
|
||||||
this.__selected = value == null ?
|
|
||||||
null
|
|
||||||
: (value instanceof Array ?
|
|
||||||
value
|
|
||||||
: [value])
|
|
||||||
.map(function(p){
|
|
||||||
return that.search(p,
|
|
||||||
function(e){
|
|
||||||
e.selected = true
|
|
||||||
return e }) })
|
|
||||||
.flat()
|
|
||||||
.unique()
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
// Length...
|
// Length...
|
||||||
@ -1436,39 +1410,6 @@ var BaseBrowserPrototype = {
|
|||||||
.run(function(){
|
.run(function(){
|
||||||
that.render() }) },
|
that.render() }) },
|
||||||
|
|
||||||
// XXX support: up/down/left/right/first/last/next/prev
|
|
||||||
// ...make this extensible to handle 2D navigation...
|
|
||||||
// XXX extend support for screen oriented nav in a subclass...
|
|
||||||
// XXX merge this with focus event...
|
|
||||||
// XXX skip disabled...
|
|
||||||
// XXX add .focus() -> current focused...
|
|
||||||
// XXX should this also .reveal(..) ???
|
|
||||||
_focus: function(elem, options){
|
|
||||||
var [focused, i] = this.get(
|
|
||||||
'focused',
|
|
||||||
function(e, i){
|
|
||||||
return [e, i] },
|
|
||||||
options) || [{}, undefined]
|
|
||||||
|
|
||||||
// XXX might be good to wrap around indexes...
|
|
||||||
// i.e. if i+1 > length -> 0 and if i-1 > -length -> -1...
|
|
||||||
// ... what length we get should depend on options.iterateCollapsed...
|
|
||||||
elem = elem == 'next' ?
|
|
||||||
(i == null ? 0 : i+1)
|
|
||||||
: elem == 'prev' ?
|
|
||||||
(i == null ? 0 : i-1)
|
|
||||||
: (elem || 0)
|
|
||||||
|
|
||||||
delete focused.focused
|
|
||||||
return this.get(elem,
|
|
||||||
function(e){
|
|
||||||
e.focused = true
|
|
||||||
return e
|
|
||||||
},
|
|
||||||
options)
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// XXX do we need edit ability here?
|
// XXX do we need edit ability here?
|
||||||
// i.e. .set(..), .remove(..), .sort(..), ...
|
// i.e. .set(..), .remove(..), .sort(..), ...
|
||||||
@ -1844,36 +1785,29 @@ var BaseBrowserPrototype = {
|
|||||||
// XXX need a way to extend these to:
|
// XXX need a way to extend these to:
|
||||||
// - be able to trigger an external (DOM) event...
|
// - be able to trigger an external (DOM) event...
|
||||||
// - be able to be triggered from an external (DOM) event...
|
// - be able to be triggered from an external (DOM) event...
|
||||||
|
// XXX should we trigger the item's focus events???
|
||||||
|
// XXX should this return the focused item????
|
||||||
focus: makeItemEventMethod('focus', function(evt, items){
|
focus: makeItemEventMethod('focus', function(evt, items){
|
||||||
// NOTE: if we got multiple matches we care only about the last one...
|
// NOTE: if we got multiple matches we care only about the first one...
|
||||||
var item = items.pop()
|
var item = items.shift()
|
||||||
|
|
||||||
if(!item){
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// blur .focused...
|
// blur .focused...
|
||||||
this.focused
|
this.focused
|
||||||
&& this.blur(this.focused)
|
&& this.blur(this.focused)
|
||||||
|
|
||||||
item.focused = true
|
item != null
|
||||||
|
&& (item.focused = true)
|
||||||
}),
|
}),
|
||||||
blur: makeItemEventMethod('blur', function(evt, items){
|
blur: makeItemEventMethod('blur', function(evt, items){
|
||||||
items.forEach(function(item){
|
items.forEach(function(item){
|
||||||
delete item.focused }) }),
|
delete item.focused }) }),
|
||||||
// XXX update this.selected in a more granular way...
|
// XXX should we trigger the item's select events???
|
||||||
select: makeItemEventMethod('select', function(evt, items){
|
select: makeItemEventMethod('select', function(evt, items){
|
||||||
items.forEach(function(item){
|
items.forEach(function(item){
|
||||||
item.selected = true
|
item.selected = true }) }),
|
||||||
// XXX update this.selected in a more granular way...
|
deselect: makeItemEventMethod('deselect', function(evt, items){
|
||||||
delete this.__selected
|
|
||||||
}) }),
|
|
||||||
deselect: makeItemEventMethod('deselect', function(evt, item){
|
|
||||||
items.forEach(function(item){
|
items.forEach(function(item){
|
||||||
delete item.selected
|
delete item.selected }) }),
|
||||||
// XXX update this.selected in a more granular way...
|
|
||||||
delete this.__selected
|
|
||||||
}) }),
|
|
||||||
|
|
||||||
open: makeItemEventMethod('open', function(evt, item){}),
|
open: makeItemEventMethod('open', function(evt, item){}),
|
||||||
enter: makeItemEventMethod('enter', function(evt, item){}),
|
enter: makeItemEventMethod('enter', function(evt, item){}),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user