mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 11:20:09 +00:00 
			
		
		
		
	made browse.Items.EditableList(..) more uniform (changes the input on exit only) + added state merge handling + some fixes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b1ecd237cb
								
							
						
					
					
						commit
						3b7beab501
					
				| @ -136,10 +136,11 @@ var UIAliasActions = actions.Actions({ | ||||
| 								new_item: false, | ||||
| 								to_remove: to_remove, | ||||
| 
 | ||||
| 								itemopen: function(name){ | ||||
| 								update_merge: 'drop_changes', | ||||
| 
 | ||||
| 								itemopen: function(_, name){ | ||||
| 									that.editAlias(name)  | ||||
| 										.on('close', function(){ dialog.update() }) | ||||
| 									dialog.close() | ||||
| 								}, | ||||
| 
 | ||||
| 								each: function(name, elem){ | ||||
| @ -148,17 +149,18 @@ var UIAliasActions = actions.Actions({ | ||||
| 											keys: getKeys(name), | ||||
| 											action: name, | ||||
| 										}) | ||||
| 								} | ||||
| 								}, | ||||
| 							}) | ||||
| 						: make.Empty() | ||||
| 
 | ||||
| 					make('---') | ||||
| 
 | ||||
| 					make('New...') | ||||
| 						.on('open', function(){  | ||||
| 					make('New...', { events: { | ||||
| 						open: function(){  | ||||
| 							that.editAlias()  | ||||
| 								.on('close', function(){ dialog.update() }) | ||||
| 						}) | ||||
| 						}, | ||||
| 					} }) | ||||
| 				}, { | ||||
| 					cls: 'table-view show-keys', | ||||
| 				}) | ||||
|  | ||||
| @ -506,7 +506,7 @@ var makeDrawer = function(direction){ | ||||
| // XXX should these replace the makeConfigListEditor/makeNestedConfigListEditor???
 | ||||
| var makeListEditorDialog = | ||||
| module.makeListEditorDialog = | ||||
| function makeConfigListEditorDialog(list, options){ | ||||
| function makeListEditorDialog(list, options){ | ||||
| 	options = options || {} | ||||
| 
 | ||||
| 	return makeUIDialog(function(){ | ||||
| @ -724,6 +724,21 @@ var DialogsActions = actions.Actions({ | ||||
| 		`,
 | ||||
| 		makeUIDialog(function(list, options){ | ||||
| 			return browse.makeList(null, list, options) })], | ||||
| 	// XXX do we need to split the options???
 | ||||
| 	showEditableList: ['- Interface/',  | ||||
| 		core.doc`Show editable list dialog...
 | ||||
| 
 | ||||
| 			.showEditableList(<list>, <options>) | ||||
| 				-> dialog | ||||
| 
 | ||||
| 		See browse.Items.EditableList(..) for more info. | ||||
| 		`,
 | ||||
| 		makeUIDialog(function(list, options){ | ||||
| 			return browse.makeLister(null,  | ||||
| 				function(path, make){ | ||||
| 					make.EditableList(list, options) | ||||
| 				},  | ||||
| 				options) })], | ||||
| 	showActionList: ['- Interface/',  | ||||
| 		core.doc`Show list of actions dialog...
 | ||||
| 
 | ||||
|  | ||||
| @ -611,6 +611,15 @@ function(data, options){ | ||||
| // 		// internally
 | ||||
| // 		to_remove: null | <list>,
 | ||||
| //
 | ||||
| // 		// Merge list state and external list mode on update...
 | ||||
| // 		//
 | ||||
| // 		// This can be:
 | ||||
| // 		//	null			- keep dialog state, ignore external state (default)
 | ||||
| // 		//	'drop_changes'	- load external state
 | ||||
| // 		//	<function>		- merge the changes
 | ||||
| //		//
 | ||||
| // 		update_merge: null | 'drop_changes' | <function>,
 | ||||
| //
 | ||||
| //		// Special buttons...
 | ||||
| //		//
 | ||||
| //		// NOTE: these can be used only if .sort if not set.
 | ||||
| @ -680,6 +689,8 @@ function(data, options){ | ||||
| // 		overwrite the .__list[id] cache, with the input list, this may
 | ||||
| // 		result in losing the edited state if the lists were not synced
 | ||||
| // 		properly...
 | ||||
| // XXX the problem with this is that it adds elements live while removing
 | ||||
| // 		elements on close, either both should be live or both on close...
 | ||||
| Items.EditableList = | ||||
| function(list, options){ | ||||
| 	var make = this | ||||
| @ -722,7 +733,15 @@ function(list, options){ | ||||
| 	} | ||||
| 	options = opts | ||||
| 
 | ||||
| 	var lst = list instanceof Function ?  | ||||
| 	var lst =  | ||||
| 		// load dialog state...
 | ||||
| 		(options.update_merge != 'drop_changes' && dialog.__list[id]) ?  | ||||
| 			dialog.__list[id] | ||||
| 		// merge states...
 | ||||
| 		: (options.update_merge instanceof Function && dialog.__list[id]) ?  | ||||
| 			options.update_merge(dialog.__list[id]) | ||||
| 		// initial state...
 | ||||
| 		: list instanceof Function ?  | ||||
| 			list()  | ||||
| 		: list | ||||
| 	var editable = dialog.__editable[id] = lst instanceof Array | ||||
| @ -982,8 +1001,8 @@ function(list, options){ | ||||
| 							: undefined) | ||||
| 				} | ||||
| 
 | ||||
| 				lst = dialog.__list[id] = write(list, lst) | ||||
| 
 | ||||
| 				// XXX should this be done here???
 | ||||
| 				//lst = dialog.__list[id] = write(list, lst)
 | ||||
| 				 | ||||
| 				// update list and select new value...
 | ||||
| 				dialog.update() | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user