mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-04 05:10:07 +00:00 
			
		
		
		
	changed action semantics to acomodate data threading through action call chains...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									ebc579615f
								
							
						
					
					
						commit
						74b538c768
					
				@ -51,6 +51,10 @@ define(function(require){ var module = {}
 | 
			
		||||
// 		  handlers in its inheritance chain will be called before the 
 | 
			
		||||
// 		  respective actions they are bound to and all the post handlers
 | 
			
		||||
// 		  are called directly after.
 | 
			
		||||
// 		- pre handlers are passed the same arguments the original actions
 | 
			
		||||
// 		  got when it was called.
 | 
			
		||||
// 		- post action handlers will get the root action result as first 
 | 
			
		||||
// 		  argument succeeded by the action arguments.
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
//
 | 
			
		||||
@ -117,23 +121,23 @@ if(typeof(args2array) != 'function'){
 | 
			
		||||
// Action function format:
 | 
			
		||||
//
 | 
			
		||||
// 		// pre event code...
 | 
			
		||||
// 		function(){
 | 
			
		||||
// 		function(..){
 | 
			
		||||
//			... // pre code
 | 
			
		||||
// 		}
 | 
			
		||||
//
 | 
			
		||||
// 		// pre/post event code...
 | 
			
		||||
// 		function(){
 | 
			
		||||
// 		function(..){
 | 
			
		||||
//			... // pre code
 | 
			
		||||
//			return function(){
 | 
			
		||||
//			return function(<return>, ..){
 | 
			
		||||
//				... // post code
 | 
			
		||||
//			}
 | 
			
		||||
// 		}
 | 
			
		||||
//
 | 
			
		||||
// 		// same as above but using a deferred instead of a callback...
 | 
			
		||||
// 		function(){
 | 
			
		||||
// 		function(..){
 | 
			
		||||
//			... // pre code
 | 
			
		||||
//			return $.Deferred()
 | 
			
		||||
//				.done(function(){
 | 
			
		||||
//				.done(function(<return>, ..){
 | 
			
		||||
//					... // post code
 | 
			
		||||
//				})
 | 
			
		||||
// 		}
 | 
			
		||||
@ -146,6 +150,9 @@ if(typeof(args2array) != 'function'){
 | 
			
		||||
// 				event is fired
 | 
			
		||||
// 		post:	if the action returns a callback function or a deferred
 | 
			
		||||
// 				object it will be executed after the event is fired
 | 
			
		||||
// 				NOTE: the signature if the post stage is the same as the
 | 
			
		||||
// 					action's with the added return value as first argument
 | 
			
		||||
// 					(the rest og the arguments are shifted by 1).
 | 
			
		||||
//
 | 
			
		||||
// 	- actions automatically call the shadowed action, the pre stage is
 | 
			
		||||
// 	  executed down-up while the post stage is run in reverse order, 
 | 
			
		||||
@ -161,6 +168,10 @@ if(typeof(args2array) != 'function'){
 | 
			
		||||
// 	- an action will return the deepest (root) action's return, if that 
 | 
			
		||||
// 	  return is undefined, then the action set is returned instead.
 | 
			
		||||
//
 | 
			
		||||
// 	- action arguments are "threaded" through the action chain down and 
 | 
			
		||||
// 	  root action return value and arguments are threaded back up the 
 | 
			
		||||
// 	  action chain.
 | 
			
		||||
//
 | 
			
		||||
// NOTE: if the root handler is instance of Toggler (jli) and the action
 | 
			
		||||
// 		is called with '?' as argument, then the toggler will be called 
 | 
			
		||||
// 		with the argument and return the result bypassing the handlers.
 | 
			
		||||
@ -235,17 +246,27 @@ function Action(name, doc, ldoc, func){
 | 
			
		||||
 | 
			
		||||
		// call handlers -- post phase...
 | 
			
		||||
		// NOTE: post handlers need to get called last run pre first run post...
 | 
			
		||||
		var results = handlers.reverse().map(function(h, i){ 
 | 
			
		||||
		var results = []
 | 
			
		||||
		handlers.reverse().forEach(function(h, i){ 
 | 
			
		||||
			var res = h
 | 
			
		||||
			// function...
 | 
			
		||||
			if(h instanceof Function){
 | 
			
		||||
				return h.apply(that, args)
 | 
			
		||||
				//res = h.apply(that, args)
 | 
			
		||||
				res = h.apply(that,
 | 
			
		||||
					[results[0] !== undefined ?
 | 
			
		||||
						reults[0] 
 | 
			
		||||
						: that].concat(args))
 | 
			
		||||
 | 
			
		||||
			// deferred...
 | 
			
		||||
			} else if(h != null && h.resolve instanceof Function){
 | 
			
		||||
				return h.resolve()
 | 
			
		||||
				//res = h.resolve()
 | 
			
		||||
				res = h.resolve.apply(h,
 | 
			
		||||
					[results[0] !== undefined ? 
 | 
			
		||||
						results[0] 
 | 
			
		||||
						: that].concat(args))
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return h
 | 
			
		||||
			results.push(res)
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		// XXX might be a good idea to add an option to return the full
 | 
			
		||||
@ -402,6 +423,12 @@ module.MetaActions = {
 | 
			
		||||
	// 	'post'		- the handler is fired after the action is finished.
 | 
			
		||||
	// 					this is the default.
 | 
			
		||||
	//
 | 
			
		||||
	// Handler Arguments:
 | 
			
		||||
	// 	'pre'		- the handler will get the same arguments as the main
 | 
			
		||||
	// 					action when called.
 | 
			
		||||
	// 	'post'		- the handler will get the action return value followed
 | 
			
		||||
	// 					by action arguments.
 | 
			
		||||
	//
 | 
			
		||||
	// The optional tag marks the handler to enable group removal via 
 | 
			
		||||
	// .off(..)
 | 
			
		||||
	//
 | 
			
		||||
 | 
			
		||||
@ -276,10 +276,15 @@ actions.Actions({
 | 
			
		||||
	json: ['File/Dump state as JSON object',
 | 
			
		||||
		'This will collect JSON data from every available attribute '
 | 
			
		||||
			+'supporting the .dumpJSON() method.',
 | 
			
		||||
		function(){
 | 
			
		||||
		function(mode){
 | 
			
		||||
			var res = {}
 | 
			
		||||
			for(var k in this){
 | 
			
		||||
				if(this[k] != null && this[k].dumpJSON != null){
 | 
			
		||||
				// dump the base crop state...
 | 
			
		||||
				if(k == 'data' && this.crop_stack && this.crop_stack.length > 0){
 | 
			
		||||
					res[k] = this.crop_stack[0].dumpJSON()
 | 
			
		||||
 | 
			
		||||
				// dump current state...
 | 
			
		||||
				} else if(this[k] != null && this[k].dumpJSON != null){
 | 
			
		||||
					res[k] = this[k].dumpJSON()
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
@ -668,6 +673,8 @@ actions.Actions({
 | 
			
		||||
 | 
			
		||||
	// crop...
 | 
			
		||||
	//
 | 
			
		||||
	// XXX should we keep this isolated or should we connect stuff like 
 | 
			
		||||
	// 		tags, ...
 | 
			
		||||
	crop: ['Crop/Crop image list',
 | 
			
		||||
		function(list, flatten){ 
 | 
			
		||||
			list = list || this.data.order
 | 
			
		||||
@ -1856,7 +1863,7 @@ module.PartialRibbons = ImageGridFeatures.Feature({
 | 
			
		||||
				this.updateRibbon(target)
 | 
			
		||||
			}],
 | 
			
		||||
		['focusImage.post', 
 | 
			
		||||
			function(target){
 | 
			
		||||
			function(res, target){
 | 
			
		||||
				this.preCacheJumpTargets(target)
 | 
			
		||||
			}],
 | 
			
		||||
		['fitImage.pre', 
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user