mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
more work on the universal editor...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
4921924840
commit
d356483226
@ -968,7 +968,7 @@ var EditorActions = actions.Actions({
|
|||||||
// as-is into .makeEditorBlock(..)'s spec to be able to create things
|
// as-is into .makeEditorBlock(..)'s spec to be able to create things
|
||||||
// like '---' -> <hr> and other stuff...
|
// like '---' -> <hr> and other stuff...
|
||||||
__editor_fields__: {
|
__editor_fields__: {
|
||||||
// generic field...
|
// Generic field...
|
||||||
//
|
//
|
||||||
// options format:
|
// options format:
|
||||||
// {
|
// {
|
||||||
@ -980,29 +980,6 @@ var EditorActions = actions.Actions({
|
|||||||
// //
|
// //
|
||||||
// value: <value> | <func([value])>,
|
// value: <value> | <func([value])>,
|
||||||
//
|
//
|
||||||
// values: <array> | <func([values])>,
|
|
||||||
//
|
|
||||||
// // XXX not implemented...
|
|
||||||
// value_editable: <bool>,
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // value list dialog...
|
|
||||||
// //
|
|
||||||
// // NOTE: <opts> is a .showList(..) / .showEditableList(..)
|
|
||||||
// // compatible options object...
|
|
||||||
// list: false | <opts> | <func(cur, callback(val))>,
|
|
||||||
//
|
|
||||||
// list_editable: <bool>,
|
|
||||||
//
|
|
||||||
// // XXX not implemented...
|
|
||||||
// list_button: <str>,
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// // if true will not call make.dialog.update() on value
|
|
||||||
// // update...
|
|
||||||
// // XXX revise...
|
|
||||||
// doNotAutoUpdateDialog: <bool>,
|
|
||||||
//
|
|
||||||
//
|
//
|
||||||
// // XXX not implemented...
|
// // XXX not implemented...
|
||||||
// doc: <str> | <func>,
|
// doc: <str> | <func>,
|
||||||
@ -1037,13 +1014,45 @@ var EditorActions = actions.Actions({
|
|||||||
], options)
|
], options)
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Editable field...
|
||||||
|
//
|
||||||
// XXX need to set .value...
|
// XXX need to set .value...
|
||||||
editable: function(actions, make, options){
|
//editable: function(actions, make, options){},
|
||||||
return this.field(actions, make.Editable, options) },
|
|
||||||
|
|
||||||
|
// value toggle...
|
||||||
|
//
|
||||||
|
// options format:
|
||||||
|
// {
|
||||||
|
// values: <array> | <func([values])>,
|
||||||
|
//
|
||||||
|
// // XXX not implemented...
|
||||||
|
// value_editable: <bool>,
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // value list dialog...
|
||||||
|
// //
|
||||||
|
// // NOTE: <opts> is a .showList(..) / .showEditableList(..)
|
||||||
|
// // compatible options object...
|
||||||
|
// list: false | <opts> | <func(cur, callback(val))>,
|
||||||
|
//
|
||||||
|
// list_editable: <bool>,
|
||||||
|
//
|
||||||
|
// // XXX not implemented...
|
||||||
|
// list_button: <str>,
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// // if true will not call make.dialog.update() on value
|
||||||
|
// // update...
|
||||||
|
// // XXX revise...
|
||||||
|
// doNotAutoUpdateDialog: <bool>,
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
toggle: function(actions, make, options){
|
toggle: function(actions, make, options){
|
||||||
this.field(actions, make,
|
this.field(actions, make,
|
||||||
Object.assign(
|
Object.assign(
|
||||||
|
// XXX not sure about this...
|
||||||
|
options,
|
||||||
{
|
{
|
||||||
type: 'toggle',
|
type: 'toggle',
|
||||||
|
|
||||||
@ -1136,49 +1145,110 @@ var EditorActions = actions.Actions({
|
|||||||
: 'off' } })))
|
: 'off' } })))
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// attribute value toggle...
|
||||||
|
//
|
||||||
// options format:
|
// options format:
|
||||||
// {
|
// {
|
||||||
|
// obj: <obj> | <func>,
|
||||||
// key: <str>,
|
// key: <str>,
|
||||||
|
//
|
||||||
// values_key: [<value>, ...],
|
// values_key: [<value>, ...],
|
||||||
// value_dict: {
|
// value_dict: {
|
||||||
// <key>: <value>,
|
// <key>: <value>,
|
||||||
// ...
|
// ...
|
||||||
// },
|
// },
|
||||||
// callback: <func(mode, value)>,
|
//
|
||||||
|
// live_update: <bool>,
|
||||||
|
// callback: <func(value, values)>,
|
||||||
|
// read_only: <bool>,
|
||||||
//
|
//
|
||||||
// ...
|
// ...
|
||||||
// }
|
// }
|
||||||
//
|
//
|
||||||
// XXX should this be a more generic .attributeToggle(..) ???
|
// XXX should we support dialog.close(..)'s reject mode here???
|
||||||
configToggle: function(actions, make, options){
|
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,
|
this.toggle(actions, make,
|
||||||
Object.assign(
|
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){
|
value: function(value){
|
||||||
|
var obj = options.obj instanceof Function ?
|
||||||
|
options.obj.call(actions)
|
||||||
|
: options.obj
|
||||||
var d = options.value_dict
|
var d = options.value_dict
|
||||||
var mode = arguments.length == 0 ? 'get' : 'set'
|
// get...
|
||||||
// get and normalize...
|
value = arguments.length > 0 ?
|
||||||
value = mode == 'get' ?
|
value
|
||||||
actions.config[options.key]
|
: '__value' in options ?
|
||||||
: value
|
options.__value
|
||||||
value = d ? d[value] : value
|
: d ?
|
||||||
// set and return...
|
d[obj[options.key]]
|
||||||
value = mode == 'set' ?
|
: obj[options.key]
|
||||||
(actions.config[options.key] = value)
|
// set...
|
||||||
: value
|
arguments.length != 0
|
||||||
// callback...
|
&& (options.__value = value)
|
||||||
// XXX revise...
|
// live mode...
|
||||||
options.callback
|
&& options.live_update
|
||||||
&& options.callback.call(actions, mode, value)
|
&& update()
|
||||||
return value },
|
return value },
|
||||||
// XXX
|
//__values: null,
|
||||||
values: function(value){
|
values: function(value){
|
||||||
|
var obj = options.obj instanceof Function ?
|
||||||
|
options.obj.call(actions)
|
||||||
|
: options.obj
|
||||||
return arguments.length == 0 ?
|
return arguments.length == 0 ?
|
||||||
actions.config[options.values_key]
|
('__values' in options ?
|
||||||
: (actions.config[options.values_key] = value) },
|
options.__values
|
||||||
|
: obj[options.values_key].slice())
|
||||||
|
: (options.__values = value) },
|
||||||
},
|
},
|
||||||
options)) },
|
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:
|
// XXX todo:
|
||||||
// - date
|
// - date
|
||||||
// - ...
|
// - ...
|
||||||
@ -1259,7 +1329,9 @@ var EditorActions = actions.Actions({
|
|||||||
spec.reduce(function(res, e){
|
spec.reduce(function(res, e){
|
||||||
var id = e.id || e.title
|
var id = e.id || e.title
|
||||||
id != undefined
|
id != undefined
|
||||||
&& (res[id] = e.value)
|
&& (res[id] = e.value instanceof Function ?
|
||||||
|
e.value.call(that)
|
||||||
|
: e.value)
|
||||||
return res }, {}),
|
return res }, {}),
|
||||||
// NOTE: technically we do not need to pass this
|
// NOTE: technically we do not need to pass this
|
||||||
// through as we are mutating the data inside
|
// through as we are mutating the data inside
|
||||||
@ -1280,7 +1352,10 @@ var EditorActions = actions.Actions({
|
|||||||
// pass the results...
|
// pass the results...
|
||||||
.close(function(){
|
.close(function(){
|
||||||
_callback
|
_callback
|
||||||
&& _callback(spec) }) })],
|
&& _callback(spec)
|
||||||
|
// XXX fixing a double .close() bug...
|
||||||
|
_callback = null
|
||||||
|
}) })],
|
||||||
|
|
||||||
|
|
||||||
// XXX move this to examples.js
|
// XXX move this to examples.js
|
||||||
@ -1291,19 +1366,11 @@ var EditorActions = actions.Actions({
|
|||||||
// basic field...
|
// basic field...
|
||||||
[['Basic static field: ', 'value']],
|
[['Basic static field: ', 'value']],
|
||||||
|
|
||||||
/*/ XXX
|
|
||||||
{
|
|
||||||
type: 'editable',
|
|
||||||
title: 'String: ',
|
|
||||||
value: '',
|
|
||||||
},
|
|
||||||
//*/
|
|
||||||
|
|
||||||
// toggle...
|
|
||||||
{
|
{
|
||||||
type: 'toggle',
|
type: 'toggle',
|
||||||
title: '$Toggle: ',
|
title: '$Toggle: ',
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
type: 'toggle',
|
type: 'toggle',
|
||||||
title: 'Direct toggle: ',
|
title: 'Direct toggle: ',
|
||||||
@ -1331,6 +1398,11 @@ var EditorActions = actions.Actions({
|
|||||||
title: 'Theme: ',
|
title: 'Theme: ',
|
||||||
key: 'theme',
|
key: 'theme',
|
||||||
values_key: 'themes',
|
values_key: 'themes',
|
||||||
|
|
||||||
|
// optional stuff...
|
||||||
|
live_update: true,
|
||||||
|
callback: function(cfg, value){
|
||||||
|
this.toggleTheme(value) },
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user