mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 19:00:09 +00:00 
			
		
		
		
	reworking the action browser...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									25d5fcfc60
								
							
						
					
					
						commit
						2e0f8d0cb4
					
				| @ -692,6 +692,215 @@ var BrowseActionsActions = actions.Actions({ | |||||||
| 	}, | 	}, | ||||||
| 
 | 
 | ||||||
| 	browseActions: ['Interface/Browse actions...', | 	browseActions: ['Interface/Browse actions...', | ||||||
|  | 		makeUIDialog(function(path){ | ||||||
|  | 			var actions = this | ||||||
|  | 
 | ||||||
|  | 			// Action tree...
 | ||||||
|  | 			//
 | ||||||
|  | 			// Format:
 | ||||||
|  | 			// 	{
 | ||||||
|  | 			// 		<name>: <tree>,
 | ||||||
|  | 			//
 | ||||||
|  | 			// 		<name>: [
 | ||||||
|  | 			// 			<action-name>,
 | ||||||
|  | 			// 			<disabled>,
 | ||||||
|  | 			// 		],
 | ||||||
|  | 			//
 | ||||||
|  | 			// 		...
 | ||||||
|  | 			// 	}
 | ||||||
|  | 			//
 | ||||||
|  | 			// NOTE: this is created once per call, so to refresh the 
 | ||||||
|  | 			// 		actions tree we'll need to re-open the dialog...
 | ||||||
|  | 			var tree = {} | ||||||
|  | 
 | ||||||
|  | 			// pre-order the main categories...
 | ||||||
|  | 			// NOTE: pre_order can be a list of long paths...
 | ||||||
|  | 			var pre_order = this.config['action-category-order'] || [] | ||||||
|  | 			pre_order.forEach(function(k){ | ||||||
|  | 				var p = tree | ||||||
|  | 				k = k.split(/[\\\/]/g).filter(function(e){ return e.trim() != '' }) | ||||||
|  | 				k.slice(0, -1).forEach(function(e){ | ||||||
|  | 					p = p[e] = {} | ||||||
|  | 				}) | ||||||
|  | 				p[k.pop()] = null | ||||||
|  | 			}) | ||||||
|  | 
 | ||||||
|  | 			// buld the tree...
 | ||||||
|  | 			var _build = function(path, leaf, action, disabled, tree){ | ||||||
|  | 				path = path.slice() | ||||||
|  | 				// build alternative paths...
 | ||||||
|  | 				path.shift().split(/\|/g) | ||||||
|  | 					.forEach(function(e){ | ||||||
|  | 						// build branch element...
 | ||||||
|  | 						var branch = tree[e] = tree[e] || {} | ||||||
|  | 
 | ||||||
|  | 						// continue building sub-tree...
 | ||||||
|  | 						if(path.length > 0){ | ||||||
|  | 							_build(path, leaf, action, disabled, branch) | ||||||
|  | 
 | ||||||
|  | 						// build leaf...
 | ||||||
|  | 						} else { | ||||||
|  | 							branch[leaf] = [action, disabled] | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 			} | ||||||
|  | 			var paths = this.getPath() | ||||||
|  | 			Object.keys(paths).forEach(function(key){ | ||||||
|  | 				// handle disabled flag...
 | ||||||
|  | 				var disabled = key.split(/^- /) | ||||||
|  | 				var path = disabled.pop() | ||||||
|  | 				disabled = disabled.length > 0 | ||||||
|  | 
 | ||||||
|  | 				path = path.split(/[\\\/]/g) | ||||||
|  | 				var leaf = path.pop() | ||||||
|  | 
 | ||||||
|  | 				// start the build...
 | ||||||
|  | 				_build(path, leaf, paths[key][0], disabled, tree) | ||||||
|  | 			}) | ||||||
|  | 
 | ||||||
|  | 			//console.log('!!!!!', tree)
 | ||||||
|  | 
 | ||||||
|  | 			var dialog = browse.makeLister(null, function(path, make){ | ||||||
|  | 				var that = this | ||||||
|  | 				var cur = tree | ||||||
|  | 
 | ||||||
|  | 				// get level...
 | ||||||
|  | 				// NOTE: we need to get the level till first '*'...
 | ||||||
|  | 				// XXX account for NN:<text>
 | ||||||
|  | 				var rest = path.slice() | ||||||
|  | 				while(rest.length > 0 && !('*' in cur)){ | ||||||
|  | 					cur = cur[rest.shift()] || {} | ||||||
|  | 				} | ||||||
|  | 
 | ||||||
|  | 				// render a level...
 | ||||||
|  | 
 | ||||||
|  | 				// toggler states...
 | ||||||
|  | 				// XXX can cur be an array in any other case???
 | ||||||
|  | 				if(cur instanceof Array  | ||||||
|  | 						&& actions.isToggler && actions.isToggler(cur[0])){ | ||||||
|  | 					var action = cur[0] | ||||||
|  | 					var disabled = cur[1] | ||||||
|  | 					 | ||||||
|  | 					var cur_state = actions[action]('?') | ||||||
|  | 					var states = actions[action]('??') | ||||||
|  | 
 | ||||||
|  | 					// handle on/off togglers...
 | ||||||
|  | 					// XXX should these directly return 'on'/'off'???
 | ||||||
|  | 					if(states.length == 2  | ||||||
|  | 							&& states.indexOf('none') >= 0  | ||||||
|  | 							&& (cur_state == 'on' || cur_state == 'off')){ | ||||||
|  | 						states = ['on', 'off'] | ||||||
|  | 					} | ||||||
|  | 
 | ||||||
|  | 					states.forEach(function(state){ | ||||||
|  | 						make(state, { disabled: disabled }) | ||||||
|  | 							.addClass(state == cur_state ? 'selected highlighted' : '') | ||||||
|  | 							.on('open', function(){ | ||||||
|  | 								actions[action](state) | ||||||
|  | 								that.pop() | ||||||
|  | 							}) | ||||||
|  | 					}) | ||||||
|  | 
 | ||||||
|  | 				// lister...
 | ||||||
|  | 				} else if('*' in cur){ | ||||||
|  | 					actions[cur['*'][0]](path, make) | ||||||
|  | 
 | ||||||
|  | 				// normal action...
 | ||||||
|  | 				} else { | ||||||
|  | 					var level = Object.keys(cur) | ||||||
|  | 					level | ||||||
|  | 						.slice() | ||||||
|  | 						// sort according to pattern: 'NN: <text>'
 | ||||||
|  | 						//	NN > 0		- is sorted above the non-prioritized
 | ||||||
|  | 						//					elements, the greater the number 
 | ||||||
|  | 						//					the higher the element
 | ||||||
|  | 						//	NN < 0		- is sorted below the non-prioritized
 | ||||||
|  | 						//					elements, the lower the number 
 | ||||||
|  | 						//					the lower the element
 | ||||||
|  | 						.sort(function(a, b){ | ||||||
|  | 							var ai = /^(-?[0-9]+):/.exec(a) | ||||||
|  | 							ai = ai ? ai.pop()*1 : null | ||||||
|  | 							ai = ai > 0 ? -ai | ||||||
|  | 								: ai < 0 ? -ai + level.length | ||||||
|  | 								: level.indexOf(a) | ||||||
|  | 
 | ||||||
|  | 							var bi = /^(-?[0-9]+):/.exec(b) | ||||||
|  | 							bi = bi ? bi.pop()*1 : null | ||||||
|  | 							bi = bi > 0 ? -bi | ||||||
|  | 								: bi < 0 ? -bi + level.length | ||||||
|  | 								: level.indexOf(b) | ||||||
|  | 
 | ||||||
|  | 							return ai - bi | ||||||
|  | 						}) | ||||||
|  | 						.forEach(function(key){ | ||||||
|  | 							// remove the order...
 | ||||||
|  | 							var text = key.replace(/^(-?[0-9]+):/, '').trim() | ||||||
|  | 
 | ||||||
|  | 							if(cur[key] instanceof Array){ | ||||||
|  | 								var action = cur[key][0] | ||||||
|  | 								var disabled = cur[key][1] | ||||||
|  | 
 | ||||||
|  | 								// toggler action...
 | ||||||
|  | 								if(actions.isToggler && actions.isToggler(action)){ | ||||||
|  | 									make(text + '/', {  | ||||||
|  | 										disabled: disabled,  | ||||||
|  | 										buttons: [ | ||||||
|  | 											[actions[action]('?'),  | ||||||
|  | 												function(){ | ||||||
|  | 													actions[action]() | ||||||
|  | 													that.update() | ||||||
|  | 													that.select('"'+ text +'"') | ||||||
|  | 												}] | ||||||
|  | 										]}) | ||||||
|  | 										.on('open', function(){ | ||||||
|  | 											actions[action]() | ||||||
|  | 											that.update() | ||||||
|  | 											that.select('"'+ text +'"') | ||||||
|  | 										}) | ||||||
|  | 
 | ||||||
|  | 								// normal action...
 | ||||||
|  | 								} else { | ||||||
|  | 									make(text, { disabled: disabled }) | ||||||
|  | 										.on('open', function(){ | ||||||
|  | 											var res = actions[action]() | ||||||
|  | 
 | ||||||
|  | 											// XXX check if res wants to handle closing...
 | ||||||
|  | 											// XXX
 | ||||||
|  | 
 | ||||||
|  | 											// XXX do we close the dialog here???
 | ||||||
|  | 											that.parent.close() | ||||||
|  | 										}) | ||||||
|  | 								} | ||||||
|  | 
 | ||||||
|  | 							// dir...
 | ||||||
|  | 							// XXX should we render empty dirs???
 | ||||||
|  | 							//} else if(Object.keys(cur[key]).length > 0){
 | ||||||
|  | 							} else {  | ||||||
|  | 								make(text + '/') | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 				} | ||||||
|  | 			}, { | ||||||
|  | 				path: path, | ||||||
|  | 
 | ||||||
|  | 				flat: false, | ||||||
|  | 				traversable: true, | ||||||
|  | 				pathPrefix: '/', | ||||||
|  | 				fullPathEdit: true, | ||||||
|  | 
 | ||||||
|  | 				showDisabled: actions.config['browse-actions-settings'].showDisabled, | ||||||
|  | 			}) | ||||||
|  | 			// save show disabled state to .config...
 | ||||||
|  | 			.on('close', function(){ | ||||||
|  | 				var config = actions.config['browse-actions-settings']  | ||||||
|  | 
 | ||||||
|  | 				config.showDisabled = dialog.options.showDisabled | ||||||
|  | 			}) | ||||||
|  | 
 | ||||||
|  | 			return dialog | ||||||
|  | 		})], | ||||||
|  | 
 | ||||||
|  | 	_browseActions: ['- Interface/Browse actions (old)...', | ||||||
| 		makeActionLister(browse.makePathList, true)], | 		makeActionLister(browse.makePathList, true)], | ||||||
| 	listActions:['Interface/List actions...', | 	listActions:['Interface/List actions...', | ||||||
| 		makeActionLister(browse.makeList,  | 		makeActionLister(browse.makeList,  | ||||||
| @ -702,7 +911,6 @@ var BrowseActionsActions = actions.Actions({ | |||||||
| 				var a = l.pop() | 				var a = l.pop() | ||||||
| 				return a +' ('+ l.join(', ') +')' | 				return a +' ('+ l.join(', ') +')' | ||||||
| 			})], | 			})], | ||||||
| 
 |  | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
| var BrowseActions =  | var BrowseActions =  | ||||||
| @ -781,7 +989,7 @@ var WidgetTestActions = actions.Actions({ | |||||||
| 	// 	.testDrawer('Overlay', 'Header', 'paragraph')
 | 	// 	.testDrawer('Overlay', 'Header', 'paragraph')
 | ||||||
| 	// 										- show html in overlay with 
 | 	// 										- show html in overlay with 
 | ||||||
| 	// 										  custom text...
 | 	// 										  custom text...
 | ||||||
| 	testDrawer: ['Test/Drawer widget test...', | 	testDrawer: ['Test/99: Drawer widget test...', | ||||||
| 		makeUIDialog('Drawer',  | 		makeUIDialog('Drawer',  | ||||||
| 			function(h, txt){ | 			function(h, txt){ | ||||||
| 				return $('<div>') | 				return $('<div>') | ||||||
| @ -801,7 +1009,7 @@ var WidgetTestActions = actions.Actions({ | |||||||
| 				background: 'white', | 				background: 'white', | ||||||
| 				focusable: true, | 				focusable: true, | ||||||
| 			})], | 			})], | ||||||
| 	testBrowse: ['Test/Demo new style dialog...', | 		testBrowse: ['Test/-99: Demo new style dialog...', | ||||||
| 		makeUIDialog(function(){ | 		makeUIDialog(function(){ | ||||||
| 			var actions = this | 			var actions = this | ||||||
| 
 | 
 | ||||||
| @ -881,13 +1089,13 @@ var WidgetTestActions = actions.Actions({ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	// XXX this is just a test...
 | 	// XXX this is just a test...
 | ||||||
| 	embededListerTest: ['Test/Lister test (embeded)/*', | 	embededListerTest: ['Test/50: Lister test (embeded)/*', | ||||||
| 		function(path, make){ | 		function(path, make){ | ||||||
| 			make('a/') | 			make('a/') | ||||||
| 			make('b/') | 			make('b/') | ||||||
| 			make('c/') | 			make('c/') | ||||||
| 		}], | 		}], | ||||||
| 	floatingListerTest: ['Test/Lister test (floating)...', | 	floatingListerTest: ['Test/50:Lister test (floating)...', | ||||||
| 		function(path){ | 		function(path){ | ||||||
| 			// we got an argument and can exit...
 | 			// we got an argument and can exit...
 | ||||||
| 			if(path){ | 			if(path){ | ||||||
|  | |||||||
| @ -1870,6 +1870,18 @@ var ControlActions = actions.Actions({ | |||||||
| 							// do the actual move...
 | 							// do the actual move...
 | ||||||
| 							d.setOffset(this, data.left + (g.deltaX / s)) | 							d.setOffset(this, data.left + (g.deltaX / s)) | ||||||
| 
 | 
 | ||||||
|  | 							/* XXX this seems to offer no speed advantages  | ||||||
|  | 							 * 		vs. .setOffset(..) but does not play | ||||||
|  | 							 * 		well with .updateRibbon(..) | ||||||
|  | 							$(this) | ||||||
|  | 								.velocity('stop') | ||||||
|  | 								.velocity({  | ||||||
|  | 									translateX: data.left + (g.deltaX / s), | ||||||
|  | 									translateY: 0,  | ||||||
|  | 									translateZ: 0, | ||||||
|  | 								}, 0) | ||||||
|  | 							*/ | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 							// update ribbon when "pulling" with two fingers...
 | 							// update ribbon when "pulling" with two fingers...
 | ||||||
| 							//
 | 							//
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user