diff --git a/ui (gen4)/features/ui-widgets.js b/ui (gen4)/features/ui-widgets.js
index f32998f6..61d010e0 100755
--- a/ui (gen4)/features/ui-widgets.js
+++ b/ui (gen4)/features/ui-widgets.js
@@ -968,7 +968,7 @@ var EditorActions = actions.Actions({
// as-is into .makeEditorBlock(..)'s spec to be able to create things
// like '---' ->
and other stuff...
__editor_fields__: {
- // generic field...
+ // Generic field...
//
// options format:
// {
@@ -980,29 +980,6 @@ var EditorActions = actions.Actions({
// //
// value: | ,
//
- // values: | ,
- //
- // // XXX not implemented...
- // value_editable: ,
- //
- //
- // // value list dialog...
- // //
- // // NOTE: is a .showList(..) / .showEditableList(..)
- // // compatible options object...
- // list: false | | ,
- //
- // list_editable: ,
- //
- // // XXX not implemented...
- // list_button: ,
- //
- //
- // // if true will not call make.dialog.update() on value
- // // update...
- // // XXX revise...
- // doNotAutoUpdateDialog: ,
- //
//
// // XXX not implemented...
// doc: | ,
@@ -1037,13 +1014,45 @@ var EditorActions = actions.Actions({
], options)
},
+ // Editable field...
+ //
// XXX need to set .value...
- editable: function(actions, make, options){
- return this.field(actions, make.Editable, options) },
+ //editable: function(actions, make, options){},
+ // value toggle...
+ //
+ // options format:
+ // {
+ // values: | ,
+ //
+ // // XXX not implemented...
+ // value_editable: ,
+ //
+ //
+ // // value list dialog...
+ // //
+ // // NOTE: is a .showList(..) / .showEditableList(..)
+ // // compatible options object...
+ // list: false | | ,
+ //
+ // list_editable: ,
+ //
+ // // XXX not implemented...
+ // list_button: ,
+ //
+ //
+ // // if true will not call make.dialog.update() on value
+ // // update...
+ // // XXX revise...
+ // doNotAutoUpdateDialog: ,
+ //
+ // }
+ //
toggle: function(actions, make, options){
this.field(actions, make,
Object.assign(
+ // XXX not sure about this...
+ options,
{
type: 'toggle',
@@ -1136,49 +1145,110 @@ var EditorActions = actions.Actions({
: 'off' } })))
},
+ // attribute value toggle...
+ //
// options format:
// {
+ // obj: | ,
// key: ,
+ //
// values_key: [, ...],
// value_dict: {
// : ,
// ...
// },
- // callback: ,
+ //
+ // live_update: ,
+ // callback: ,
+ // read_only: ,
//
// ...
// }
//
- // XXX should this be a more generic .attributeToggle(..) ???
- configToggle: function(actions, make, options){
+ // XXX should we support dialog.close(..)'s reject mode here???
+ attrToggle: function(actions, make, options){
+ var update = function(){
+ if(!options.read_only){
+ var obj = options.obj instanceof Function ?
+ options.obj.call(actions)
+ : options.obj
+ '__value' in options
+ //&& (options.value = obj[options.key] = options.__value)
+ && (obj[options.key] = options.__value)
+ '__values' in options
+ //&& (options.values = obj[options.values_key] = options.__values) }
+ && (obj[options.values_key] = options.__values) }
+ options.callback
+ && options.callback.call(actions, obj, options.__value, options.__values) }
+
+ make.dialog.close(function(){
+ options.live_update
+ || update() })
+
this.toggle(actions, make,
Object.assign(
+ // XXX not sure about this...
+ options,
{
+ // XXX PROBLEM: the value of this does not get
+ // propagated to the original options...
+ //__value: null,
value: function(value){
+ var obj = options.obj instanceof Function ?
+ options.obj.call(actions)
+ : options.obj
var d = options.value_dict
- var mode = arguments.length == 0 ? 'get' : 'set'
- // get and normalize...
- value = mode == 'get' ?
- actions.config[options.key]
- : value
- value = d ? d[value] : value
- // set and return...
- value = mode == 'set' ?
- (actions.config[options.key] = value)
- : value
- // callback...
- // XXX revise...
- options.callback
- && options.callback.call(actions, mode, value)
+ // get...
+ value = arguments.length > 0 ?
+ value
+ : '__value' in options ?
+ options.__value
+ : d ?
+ d[obj[options.key]]
+ : obj[options.key]
+ // set...
+ arguments.length != 0
+ && (options.__value = value)
+ // live mode...
+ && options.live_update
+ && update()
return value },
- // XXX
+ //__values: null,
values: function(value){
+ var obj = options.obj instanceof Function ?
+ options.obj.call(actions)
+ : options.obj
return arguments.length == 0 ?
- actions.config[options.values_key]
- : (actions.config[options.values_key] = value) },
+ ('__values' in options ?
+ options.__values
+ : obj[options.values_key].slice())
+ : (options.__values = value) },
},
options)) },
+
+
+ // Config editable value...
+ //
+ // XXX
+ //configEditable: function(){},
+
+
+ // Config value toggle...
+ //
+ configToggle: function(actions, make, options){
+ this.attrToggle(actions, make,
+ Object.assign(
+ // XXX not sure about this...
+ options,
+ {
+ obj: function(){
+ return actions.config }
+ },
+ options)) },
+
+
+
// XXX todo:
// - date
// - ...
@@ -1259,7 +1329,9 @@ var EditorActions = actions.Actions({
spec.reduce(function(res, e){
var id = e.id || e.title
id != undefined
- && (res[id] = e.value)
+ && (res[id] = e.value instanceof Function ?
+ e.value.call(that)
+ : e.value)
return res }, {}),
// NOTE: technically we do not need to pass this
// through as we are mutating the data inside
@@ -1280,7 +1352,10 @@ var EditorActions = actions.Actions({
// pass the results...
.close(function(){
_callback
- && _callback(spec) }) })],
+ && _callback(spec)
+ // XXX fixing a double .close() bug...
+ _callback = null
+ }) })],
// XXX move this to examples.js
@@ -1291,19 +1366,11 @@ var EditorActions = actions.Actions({
// basic field...
[['Basic static field: ', 'value']],
- /*/ XXX
- {
- type: 'editable',
- title: 'String: ',
- value: '',
- },
- //*/
-
- // toggle...
{
type: 'toggle',
title: '$Toggle: ',
},
+
{
type: 'toggle',
title: 'Direct toggle: ',
@@ -1331,6 +1398,11 @@ var EditorActions = actions.Actions({
title: 'Theme: ',
key: 'theme',
values_key: 'themes',
+
+ // optional stuff...
+ live_update: true,
+ callback: function(cfg, value){
+ this.toggleTheme(value) },
},
],