mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-29 18:30:09 +00:00 
			
		
		
		
	refactored out some redundency in event code... (not done yet)
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									4e5a6409bb
								
							
						
					
					
						commit
						f200d24f56
					
				| @ -372,6 +372,7 @@ function(item, event, evt, ...args){ | |||||||
| // NOTE: item events do not directly trigger the original caller's handlers
 | // NOTE: item events do not directly trigger the original caller's handlers
 | ||||||
| // 		those will get celled recursively when the events are propagated
 | // 		those will get celled recursively when the events are propagated
 | ||||||
| // 		up the tree.
 | // 		up the tree.
 | ||||||
|  | // XXX use destructuring (a-la makeItemOptionOnEventMethod(..) / makeItemOptionOffEventMethod(..))...
 | ||||||
| var makeItemEventMethod =  | var makeItemEventMethod =  | ||||||
| module.makeItemEventMethod = | module.makeItemEventMethod = | ||||||
| function(event, handler, action, default_item, filter, options){ | function(event, handler, action, default_item, filter, options){ | ||||||
| @ -442,6 +443,49 @@ function(event, handler, action, default_item, filter, options){ | |||||||
|    			base) } |    			base) } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | // XXX should these .update()
 | ||||||
|  | var makeItemOptionOnEventMethod = | ||||||
|  | module.makeItemOptionOnEventMethod = | ||||||
|  | function(event, option, {handler, default_item, filter, options, update=true}={}){ | ||||||
|  | 	return makeItemEventMethod(event,  | ||||||
|  | 		function(evt, items){ | ||||||
|  | 			var that = this | ||||||
|  | 			var change = false | ||||||
|  | 			items.forEach(function(item){ | ||||||
|  | 				change = item[option] = true  | ||||||
|  | 				handler | ||||||
|  | 					&& handler.call(that, item) })  | ||||||
|  | 			// need to update for changes to show up...
 | ||||||
|  | 			change | ||||||
|  | 				&& update | ||||||
|  | 				&& this.update() }, | ||||||
|  | 		null, | ||||||
|  | 		default_item  | ||||||
|  | 			|| function(){ return this.focused }, | ||||||
|  | 		filter, | ||||||
|  | 		options) } | ||||||
|  | var makeItemOptionOffEventMethod = | ||||||
|  | module.makeItemOptionOffEventMethod = | ||||||
|  | function(event, option, {handler, default_item, filter, options, update=true}={}){ | ||||||
|  | 	return makeItemEventMethod(event,  | ||||||
|  | 		function(evt, items){ | ||||||
|  | 			var change = false | ||||||
|  | 			items.forEach(function(item){ | ||||||
|  | 				change = change || item[option] | ||||||
|  | 				delete item[option]  | ||||||
|  | 				handler | ||||||
|  | 					&& handler.call(that, item) }) | ||||||
|  | 			// need to update for changes to show up...
 | ||||||
|  | 			change | ||||||
|  | 				&& update | ||||||
|  | 				&& this.update() }, | ||||||
|  | 		null, | ||||||
|  | 		default_item  | ||||||
|  | 			|| function(){ return this.focused }, | ||||||
|  | 		filter, | ||||||
|  | 		options) } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| // Generate item event/state toggler...
 | // Generate item event/state toggler...
 | ||||||
| //
 | //
 | ||||||
| // XXX should this make a toggler.Toggler???
 | // XXX should this make a toggler.Toggler???
 | ||||||
| @ -744,6 +788,20 @@ var BaseBrowserPrototype = { | |||||||
| 			.select(value) }, | 			.select(value) }, | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | 	// XXX should this be cached???
 | ||||||
|  | 	// XXX should this set .options???
 | ||||||
|  | 	// XXX need to normalizePath(..)
 | ||||||
|  | 	// 		...array .value is not compliant with POLS
 | ||||||
|  | 	get path(){ | ||||||
|  | 		return this.__items != null ? | ||||||
|  | 			this.get('focused',  | ||||||
|  | 				function(e, i, p){ return p.join('/') })  | ||||||
|  | 			// XXX do we use .options.path???
 | ||||||
|  | 			: (this.options || {}).path }, | ||||||
|  | 	set path(value){ | ||||||
|  | 		this.load(value) }, | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 	// Length...
 | 	// Length...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// visible only...
 | 	// visible only...
 | ||||||
| @ -2616,8 +2674,8 @@ var BaseBrowserPrototype = { | |||||||
| 		'focus', 'blur',  | 		'focus', 'blur',  | ||||||
| 		function(){ return this.focused || 0 },  | 		function(){ return this.focused || 0 },  | ||||||
| 		false), | 		false), | ||||||
| 
 | 	// selection...
 | ||||||
| 	// XXX these should skip disabled...
 | 	// XXX these should skip disabled... option???
 | ||||||
| 	select: makeItemEventMethod('select',  | 	select: makeItemEventMethod('select',  | ||||||
| 		function(evt, items){ | 		function(evt, items){ | ||||||
| 			items.forEach(function(item){ | 			items.forEach(function(item){ | ||||||
| @ -2631,67 +2689,40 @@ var BaseBrowserPrototype = { | |||||||
| 				delete item.selected }) }, | 				delete item.selected }) }, | ||||||
| 		null, | 		null, | ||||||
| 		function(){ return this.focused }), | 		function(){ return this.focused }), | ||||||
| 	// XXX use a real toggler here??? (i.e. finish makeItemEventToggler2(..))
 | 	toggleSelect: makeItemEventToggler( | ||||||
| 	toggleSelect: makeItemEventToggler('selected', 'select', 'deselect', 'focused'), | 		'selected',  | ||||||
| 
 | 		'select', 'deselect',  | ||||||
| 	// NOTE: .expand(..) / .collapse(..) ignore item.collapsed state...
 | 		'focused'), | ||||||
| 	collapse: makeItemEventMethod('collapse',  | 	// topology...
 | ||||||
| 		function(evt, item){ | 	collapse: makeItemOptionOnEventMethod('expand', 'collapsed', { | ||||||
| 			item.forEach(function(e){ e.collapsed = true })  | 		filter: function(elem){ return elem.value && elem.children }, | ||||||
| 			this.update() | 		options: {iterateCollapsed: true}, }), | ||||||
| 		}, | 	expand: makeItemOptionOffEventMethod('expand', 'collapsed', { | ||||||
| 		null, | 		filter: function(elem){ return elem.value && elem.children }, | ||||||
| 		function(){ return this.focused }, | 		options: {iterateCollapsed: true}, }), | ||||||
| 		function(elem){ return elem.value && elem.children }, |  | ||||||
| 		{iterateCollapsed: true}), |  | ||||||
| 	expand: makeItemEventMethod('expand',  |  | ||||||
| 		function(evt, item){ |  | ||||||
| 			item.forEach(function(e){ delete e.collapsed })  |  | ||||||
| 			this.update() |  | ||||||
| 		}, |  | ||||||
| 		null, |  | ||||||
| 		function(){ return this.focused }, |  | ||||||
| 		function(elem){ return elem.value && elem.children }, |  | ||||||
| 		{iterateCollapsed: true}), |  | ||||||
| 	toggleCollapse: makeItemEventToggler( | 	toggleCollapse: makeItemEventToggler( | ||||||
| 		'collapsed',  | 		'collapsed',  | ||||||
| 		'collapse', 'expand',  | 		'collapse', 'expand',  | ||||||
| 		'focused', | 		'focused', | ||||||
| 		function(elem){ return elem.value && elem.children }, | 		function(elem){ return elem.value && elem.children }, | ||||||
| 		{iterateCollapsed: true}), | 		{iterateCollapsed: true}), | ||||||
| 
 | 	// item state events...
 | ||||||
| 	// XXX not sure about these... 
 | 	disable: makeItemOptionOnEventMethod('disable', 'disabled',  | ||||||
| 	disable: makeItemEventMethod('disable',  | 		{ handler: function(item){ this.blur(item) }, }), | ||||||
| 		function(evt, items){ | 	enable: makeItemOptionOffEventMethod('enable', 'disabled',  | ||||||
| 			var that = this | 		{ options: {skipDisabled: false}, }), | ||||||
| 			var change = false |  | ||||||
| 			items.forEach(function(item){ |  | ||||||
| 				change = item.disabled = true  |  | ||||||
| 				item.focused |  | ||||||
| 					&& that.blur(item) |  | ||||||
| 			})  |  | ||||||
| 			// need to update for changes to show up...
 |  | ||||||
| 			change |  | ||||||
| 				&& this.update() }, |  | ||||||
| 		null, |  | ||||||
| 		// XXX is this a good default???
 |  | ||||||
| 		function(){ return this.focused }), |  | ||||||
| 	enable: makeItemEventMethod('enable',  |  | ||||||
| 		function(evt, items){ |  | ||||||
| 			var change = false |  | ||||||
| 			items.forEach(function(item){ |  | ||||||
| 				change = change || item.disabled |  | ||||||
| 				delete item.disabled })  |  | ||||||
| 			// need to update for changes to show up...
 |  | ||||||
| 			change |  | ||||||
| 				&& this.update() }, |  | ||||||
| 		null, |  | ||||||
| 		{ skipDisabled: false }), |  | ||||||
| 	toggleDisabled: makeItemEventToggler( | 	toggleDisabled: makeItemEventToggler( | ||||||
| 		'disabled',  | 		'disabled',  | ||||||
| 		'disable', 'enable',  | 		'disable', 'enable',  | ||||||
| 		'focused', | 		'focused', | ||||||
| 		{ skipDisabled: false }), | 		{ skipDisabled: false }), | ||||||
|  | 	// visibility...
 | ||||||
|  | 	hide: makeItemOptionOnEventMethod('hide', 'hidden'), | ||||||
|  | 	show: makeItemOptionOffEventMethod('show', 'hidden'), | ||||||
|  | 	toggleHidden: makeItemEventToggler( | ||||||
|  | 		'hidden',  | ||||||
|  | 		'hide', 'show',  | ||||||
|  | 		'focused'), | ||||||
| 
 | 
 | ||||||
| 	// primary/secondary/ternary? item actions...
 | 	// primary/secondary/ternary? item actions...
 | ||||||
| 	open: makeItemEventMethod('open',  | 	open: makeItemEventMethod('open',  | ||||||
| @ -2737,6 +2768,11 @@ var BaseBrowserPrototype = { | |||||||
| 	 | 	 | ||||||
| 	// NOTE: if given a path that does not exist this will try and load 
 | 	// NOTE: if given a path that does not exist this will try and load 
 | ||||||
| 	// 		the longest existing sub-path...
 | 	// 		the longest existing sub-path...
 | ||||||
|  | 	// XXX should level drawing be a feature of the browser or the 
 | ||||||
|  | 	// 		client (as-is in browser.js)???
 | ||||||
|  | 	// XXX would also need to pass the path to .make(..) and friends for 
 | ||||||
|  | 	// 		compatibility...
 | ||||||
|  | 	// 		...or set .options.path (and keep it up to date in the API)...
 | ||||||
| 	load: makeEventMethod('load',  | 	load: makeEventMethod('load',  | ||||||
| 		function(evt, target){}, | 		function(evt, target){}, | ||||||
| 		function(evt, target){ | 		function(evt, target){ | ||||||
| @ -2833,7 +2869,7 @@ module.KEYBOARD_CONFIG = { | |||||||
| 
 | 
 | ||||||
| 		Enter: 'open', | 		Enter: 'open', | ||||||
| 
 | 
 | ||||||
| 		Space: 'toggleSelect', | 		Space: 'toggleSelect!', | ||||||
| 		ctrl_A: 'select!: "*"', | 		ctrl_A: 'select!: "*"', | ||||||
| 		ctrl_D: 'deselect!: "*"', | 		ctrl_D: 'deselect!: "*"', | ||||||
| 		ctrl_I: 'toggleSelect!: "*"', | 		ctrl_I: 'toggleSelect!: "*"', | ||||||
| @ -3327,6 +3363,7 @@ var BrowserPrototype = { | |||||||
| 			.concat(item['class'] || item.cls || []) | 			.concat(item['class'] || item.cls || []) | ||||||
| 			// special classes...
 | 			// special classes...
 | ||||||
| 			.concat([ | 			.concat([ | ||||||
|  | 				'focused', | ||||||
| 				'selected', | 				'selected', | ||||||
| 				'disabled', | 				'disabled', | ||||||
| 				'hidden', | 				'hidden', | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user