mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
refactored out some redundency in event code... (not done yet)
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
4e5a6409bb
commit
f200d24f56
@ -372,6 +372,7 @@ function(item, event, evt, ...args){
|
||||
// NOTE: item events do not directly trigger the original caller's handlers
|
||||
// those will get celled recursively when the events are propagated
|
||||
// up the tree.
|
||||
// XXX use destructuring (a-la makeItemOptionOnEventMethod(..) / makeItemOptionOffEventMethod(..))...
|
||||
var makeItemEventMethod =
|
||||
module.makeItemEventMethod =
|
||||
function(event, handler, action, default_item, filter, options){
|
||||
@ -442,6 +443,49 @@ function(event, handler, action, default_item, filter, options){
|
||||
base) }
|
||||
|
||||
|
||||
// XXX should these .update()
|
||||
var makeItemOptionOnEventMethod =
|
||||
module.makeItemOptionOnEventMethod =
|
||||
function(event, option, {handler, default_item, filter, options, update=true}={}){
|
||||
return makeItemEventMethod(event,
|
||||
function(evt, items){
|
||||
var that = this
|
||||
var change = false
|
||||
items.forEach(function(item){
|
||||
change = item[option] = true
|
||||
handler
|
||||
&& handler.call(that, item) })
|
||||
// need to update for changes to show up...
|
||||
change
|
||||
&& update
|
||||
&& this.update() },
|
||||
null,
|
||||
default_item
|
||||
|| function(){ return this.focused },
|
||||
filter,
|
||||
options) }
|
||||
var makeItemOptionOffEventMethod =
|
||||
module.makeItemOptionOffEventMethod =
|
||||
function(event, option, {handler, default_item, filter, options, update=true}={}){
|
||||
return makeItemEventMethod(event,
|
||||
function(evt, items){
|
||||
var change = false
|
||||
items.forEach(function(item){
|
||||
change = change || item[option]
|
||||
delete item[option]
|
||||
handler
|
||||
&& handler.call(that, item) })
|
||||
// need to update for changes to show up...
|
||||
change
|
||||
&& update
|
||||
&& this.update() },
|
||||
null,
|
||||
default_item
|
||||
|| function(){ return this.focused },
|
||||
filter,
|
||||
options) }
|
||||
|
||||
|
||||
// Generate item event/state toggler...
|
||||
//
|
||||
// XXX should this make a toggler.Toggler???
|
||||
@ -744,6 +788,20 @@ var BaseBrowserPrototype = {
|
||||
.select(value) },
|
||||
|
||||
|
||||
// XXX should this be cached???
|
||||
// XXX should this set .options???
|
||||
// XXX need to normalizePath(..)
|
||||
// ...array .value is not compliant with POLS
|
||||
get path(){
|
||||
return this.__items != null ?
|
||||
this.get('focused',
|
||||
function(e, i, p){ return p.join('/') })
|
||||
// XXX do we use .options.path???
|
||||
: (this.options || {}).path },
|
||||
set path(value){
|
||||
this.load(value) },
|
||||
|
||||
|
||||
// Length...
|
||||
//
|
||||
// visible only...
|
||||
@ -2616,8 +2674,8 @@ var BaseBrowserPrototype = {
|
||||
'focus', 'blur',
|
||||
function(){ return this.focused || 0 },
|
||||
false),
|
||||
|
||||
// XXX these should skip disabled...
|
||||
// selection...
|
||||
// XXX these should skip disabled... option???
|
||||
select: makeItemEventMethod('select',
|
||||
function(evt, items){
|
||||
items.forEach(function(item){
|
||||
@ -2631,67 +2689,40 @@ var BaseBrowserPrototype = {
|
||||
delete item.selected }) },
|
||||
null,
|
||||
function(){ return this.focused }),
|
||||
// XXX use a real toggler here??? (i.e. finish makeItemEventToggler2(..))
|
||||
toggleSelect: makeItemEventToggler('selected', 'select', 'deselect', 'focused'),
|
||||
|
||||
// NOTE: .expand(..) / .collapse(..) ignore item.collapsed state...
|
||||
collapse: makeItemEventMethod('collapse',
|
||||
function(evt, item){
|
||||
item.forEach(function(e){ e.collapsed = true })
|
||||
this.update()
|
||||
},
|
||||
null,
|
||||
function(){ return this.focused },
|
||||
function(elem){ return elem.value && elem.children },
|
||||
{iterateCollapsed: true}),
|
||||
expand: makeItemEventMethod('expand',
|
||||
function(evt, item){
|
||||
item.forEach(function(e){ delete e.collapsed })
|
||||
this.update()
|
||||
},
|
||||
null,
|
||||
function(){ return this.focused },
|
||||
function(elem){ return elem.value && elem.children },
|
||||
{iterateCollapsed: true}),
|
||||
toggleSelect: makeItemEventToggler(
|
||||
'selected',
|
||||
'select', 'deselect',
|
||||
'focused'),
|
||||
// topology...
|
||||
collapse: makeItemOptionOnEventMethod('expand', 'collapsed', {
|
||||
filter: function(elem){ return elem.value && elem.children },
|
||||
options: {iterateCollapsed: true}, }),
|
||||
expand: makeItemOptionOffEventMethod('expand', 'collapsed', {
|
||||
filter: function(elem){ return elem.value && elem.children },
|
||||
options: {iterateCollapsed: true}, }),
|
||||
toggleCollapse: makeItemEventToggler(
|
||||
'collapsed',
|
||||
'collapse', 'expand',
|
||||
'focused',
|
||||
function(elem){ return elem.value && elem.children },
|
||||
{iterateCollapsed: true}),
|
||||
|
||||
// XXX not sure about these...
|
||||
disable: makeItemEventMethod('disable',
|
||||
function(evt, items){
|
||||
var that = this
|
||||
var change = false
|
||||
items.forEach(function(item){
|
||||
change = item.disabled = true
|
||||
item.focused
|
||||
&& that.blur(item)
|
||||
})
|
||||
// need to update for changes to show up...
|
||||
change
|
||||
&& this.update() },
|
||||
null,
|
||||
// XXX is this a good default???
|
||||
function(){ return this.focused }),
|
||||
enable: makeItemEventMethod('enable',
|
||||
function(evt, items){
|
||||
var change = false
|
||||
items.forEach(function(item){
|
||||
change = change || item.disabled
|
||||
delete item.disabled })
|
||||
// need to update for changes to show up...
|
||||
change
|
||||
&& this.update() },
|
||||
null,
|
||||
{ skipDisabled: false }),
|
||||
// item state events...
|
||||
disable: makeItemOptionOnEventMethod('disable', 'disabled',
|
||||
{ handler: function(item){ this.blur(item) }, }),
|
||||
enable: makeItemOptionOffEventMethod('enable', 'disabled',
|
||||
{ options: {skipDisabled: false}, }),
|
||||
toggleDisabled: makeItemEventToggler(
|
||||
'disabled',
|
||||
'disable', 'enable',
|
||||
'focused',
|
||||
{ skipDisabled: false }),
|
||||
// visibility...
|
||||
hide: makeItemOptionOnEventMethod('hide', 'hidden'),
|
||||
show: makeItemOptionOffEventMethod('show', 'hidden'),
|
||||
toggleHidden: makeItemEventToggler(
|
||||
'hidden',
|
||||
'hide', 'show',
|
||||
'focused'),
|
||||
|
||||
// primary/secondary/ternary? item actions...
|
||||
open: makeItemEventMethod('open',
|
||||
@ -2737,6 +2768,11 @@ var BaseBrowserPrototype = {
|
||||
|
||||
// NOTE: if given a path that does not exist this will try and load
|
||||
// the longest existing sub-path...
|
||||
// XXX should level drawing be a feature of the browser or the
|
||||
// client (as-is in browser.js)???
|
||||
// XXX would also need to pass the path to .make(..) and friends for
|
||||
// compatibility...
|
||||
// ...or set .options.path (and keep it up to date in the API)...
|
||||
load: makeEventMethod('load',
|
||||
function(evt, target){},
|
||||
function(evt, target){
|
||||
@ -2833,7 +2869,7 @@ module.KEYBOARD_CONFIG = {
|
||||
|
||||
Enter: 'open',
|
||||
|
||||
Space: 'toggleSelect',
|
||||
Space: 'toggleSelect!',
|
||||
ctrl_A: 'select!: "*"',
|
||||
ctrl_D: 'deselect!: "*"',
|
||||
ctrl_I: 'toggleSelect!: "*"',
|
||||
@ -3327,6 +3363,7 @@ var BrowserPrototype = {
|
||||
.concat(item['class'] || item.cls || [])
|
||||
// special classes...
|
||||
.concat([
|
||||
'focused',
|
||||
'selected',
|
||||
'disabled',
|
||||
'hidden',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user