added 'live' state options for toggle actions, essentially built automatic setup mechanics, still not sure if this is not an overkill...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2012-08-15 03:30:35 +04:00
parent 05e0a7d1b7
commit f94c14ca13

View File

@ -22,8 +22,11 @@ var ImageGrid = {
// call - callable // call - callable
// XXX revise... // XXX revise...
ACTION: function(obj){ ACTION: function(obj){
var call = obj.call
// add all the attrs to the function... // add all the attrs to the function...
if(this._type_handler[obj.type] != null){
this._type_handler[obj.type](obj)
}
var call = obj.call
for(i in obj){ for(i in obj){
if(i == 'doc' && call.doc != null){ if(i == 'doc' && call.doc != null){
call.func_doc = call.doc call.func_doc = call.doc
@ -31,9 +34,6 @@ var ImageGrid = {
call[i] = obj[i] call[i] = obj[i]
} }
this[obj.title] = call this[obj.title] = call
if(this._type_handler[obj.type] != null){
this._type_handler[obj.type](obj)
}
return call return call
}, },
// define an option... // define an option...
@ -41,20 +41,10 @@ var ImageGrid = {
this.option[obj.name] = obj.value this.option[obj.name] = obj.value
this.option_props[obj.name] = obj this.option_props[obj.name] = obj
}, },
TYPE: function(name, handler){
this._type_handler[name] = handler
},
_type_handler: { _type_handler: {
/* XXX also need to make the action change the option...
toggle: function(obj){
// XXX add an option to store the state...
ImageGrid.OPTION({
name: obj.title,
doc: 'Stores the state of '+obj.title+' action.',
value: ImageGrid[obj.title]('?'),
callback: function(){
ImageGrid[obj.title](ImageGrid.option[obj.title])
}
})
},
*/
}, },
} }
@ -66,9 +56,10 @@ ImageGrid.ACTION({
for(var n in obj){ for(var n in obj){
this.option[n] = obj[n] this.option[n] = obj[n]
} }
// NOTE: this seporate so as to remove the posibility of race // NOTE: this is separate so as to exclude the posibility of race
// conditions... // conditions...
// ...thogh there is still a posibility of conflicting modes // ...thogh there is still a posibility of conflicting
// modes, especially if one mode sets more modes...
for(var n in obj){ for(var n in obj){
// call the callback if it exists... // call the callback if it exists...
if(this.option_props[n].callback != null){ if(this.option_props[n].callback != null){
@ -89,6 +80,24 @@ ImageGrid.ACTION({
} }
} }
}) })
ImageGrid.TYPE('toggle', function(obj){
var call = obj.call
// wrap the call to set the option...
obj.call = function(action){
var res = call(action)
ImageGrid.option[obj.title] = call('?')
return res
}
// add an option to store the state...
ImageGrid.OPTION({
name: obj.title,
doc: 'Stores the state of '+obj.title+' action.',
value: obj.call('?'),
callback: function(){
ImageGrid[obj.title](ImageGrid.option[obj.title])
}
})
})