mirror of
				https://github.com/flynx/actions.js.git
				synced 2025-10-31 03:10:09 +00:00 
			
		
		
		
	added alias handling in Actions(..)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									0a0ac752b9
								
							
						
					
					
						commit
						0d1a788410
					
				
							
								
								
									
										115
									
								
								actions.js
									
									
									
									
									
								
							
							
						
						
									
										115
									
								
								actions.js
									
									
									
									
									
								
							| @ -305,7 +305,30 @@ function(txt){ | |||||||
| 	// parse arguments...
 | 	// parse arguments...
 | ||||||
| 	var args = JSON.parse('['+( | 	var args = JSON.parse('['+( | ||||||
| 		((c[1] || '') | 		((c[1] || '') | ||||||
| 			.match(/"[^"]*"|'[^']*'|\{[^\}]*\}|\[[^\]]*\]|\d+|\d+\.\d*|null/gm)  | 			.match(RegExp([ | ||||||
|  | 				// strings...
 | ||||||
|  | 				'"[^"]*"', | ||||||
|  | 				"'[^']*'", | ||||||
|  | 				'`[^`]*`', | ||||||
|  | 
 | ||||||
|  | 				// objects...
 | ||||||
|  | 				// XXX hack-ish...
 | ||||||
|  | 				'\\{[^\\}]*\\}', | ||||||
|  | 
 | ||||||
|  | 				// lists...
 | ||||||
|  | 				// XXX hack-ish...
 | ||||||
|  | 				'\\[[^\]]*\]', | ||||||
|  | 
 | ||||||
|  | 				// numbers...
 | ||||||
|  | 				'\\d+\\.\\d+|\\d+', | ||||||
|  | 
 | ||||||
|  | 				// identifiers...
 | ||||||
|  | 				// XXX not JSON compatible...
 | ||||||
|  | 				//'[a-zA-Z$@#_][a-zA-Z0-9$@#_]*',
 | ||||||
|  | 
 | ||||||
|  | 				// null...
 | ||||||
|  | 				'null' | ||||||
|  | 			].join('|'), 'gm'))  | ||||||
| 		|| []) | 		|| []) | ||||||
| 		.join(','))+']') | 		.join(','))+']') | ||||||
| 
 | 
 | ||||||
| @ -321,6 +344,21 @@ function(txt){ | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | // XXX make this stricter...
 | ||||||
|  | var isStringAction = | ||||||
|  | module.isStringAction = | ||||||
|  | function(txt){ | ||||||
|  | 	try{ | ||||||
|  | 		var parsed = typeof(txt) == typeof('str') | ||||||
|  | 			&& (this.parseStringAction || parseStringAction)(txt) | ||||||
|  | 		return parsed  | ||||||
|  | 			&& /[a-zA-Z_][a-zA-Z0-9_]*/.test(parsed.action) | ||||||
|  | 	} catch(e){ | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| /*********************************************************************/ | /*********************************************************************/ | ||||||
| 
 | 
 | ||||||
| @ -664,7 +702,6 @@ function Alias(alias, doc, ldoc, attrs, target){ | |||||||
| 
 | 
 | ||||||
| 	doc = (!doc && parsed) ? parsed.doc : doc | 	doc = (!doc && parsed) ? parsed.doc : doc | ||||||
| 
 | 
 | ||||||
| 	// XXX would be good to pre-parse the target...
 |  | ||||||
| 	var meth = Action(alias,  | 	var meth = Action(alias,  | ||||||
| 		doc,  | 		doc,  | ||||||
| 		null,  | 		null,  | ||||||
| @ -737,17 +774,42 @@ module.MetaActions = { | |||||||
| 		return this.actions | 		return this.actions | ||||||
| 			.filter(function(n){ return that[n] instanceof Alias }) }, | 			.filter(function(n){ return that[n] instanceof Alias }) }, | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| 	// XXX move this to the right spot...
 | 	// XXX move this to the right spot...
 | ||||||
| 	parseStringAction: parseStringAction, | 	parseStringAction: parseStringAction, | ||||||
|  | 	isStringAction: isStringAction, | ||||||
| 
 | 
 | ||||||
| 
 | 	// Set/remove action alias...
 | ||||||
|  | 	//
 | ||||||
|  | 	// 	Set alias...
 | ||||||
|  | 	// 	.alias(alias, code)
 | ||||||
|  | 	// 		-> action-set
 | ||||||
|  | 	//
 | ||||||
|  | 	// 	Remove alias...
 | ||||||
|  | 	// 	.alias(alias, null)
 | ||||||
|  | 	// 		-> action-set
 | ||||||
|  | 	//
 | ||||||
|  | 	// code should be compatible with .parseStringAction(..)
 | ||||||
|  | 	//
 | ||||||
|  | 	// NOTE: this does not check if it will override anything, so it is
 | ||||||
|  | 	// 		possible to override/delete an action/method/attribute with 
 | ||||||
|  | 	// 		this...
 | ||||||
|  | 	//
 | ||||||
| 	// XXX should this prevent overriding stuff???
 | 	// XXX should this prevent overriding stuff???
 | ||||||
| 	// XXX move to a better spot...
 | 	// XXX move to a better spot...
 | ||||||
| 	alias: Action('alias', function(alias, target){  | 	alias: Action('alias', function(alias, target){  | ||||||
| 		var parsed = typeof(target) == typeof('str') ? | 		// remove alias...
 | ||||||
| 			this.parseStringAction(target) | 		if((target === false || target === null)  | ||||||
| 			: target | 				&& this[alias] instanceof Alias){ | ||||||
| 		this[alias] = Alias(alias, parsed) | 			delete this[alias] | ||||||
|  | 
 | ||||||
|  | 		// set alias...
 | ||||||
|  | 		} else { | ||||||
|  | 			var parsed = typeof(target) == typeof('str') ? | ||||||
|  | 				this.parseStringAction(target) | ||||||
|  | 				: target | ||||||
|  | 			this[alias] = Alias(alias, parsed) | ||||||
|  | 		} | ||||||
| 	}), | 	}), | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1746,6 +1808,15 @@ function Actions(a, b){ | |||||||
| 	var proto = b == null ? b : a | 	var proto = b == null ? b : a | ||||||
| 	obj = obj || new ActionSet() | 	obj = obj || new ActionSet() | ||||||
| 
 | 
 | ||||||
|  | 	if(proto != null){ | ||||||
|  | 		obj.__proto__ = proto | ||||||
|  | 
 | ||||||
|  | 		// XXX is this the right way to go???
 | ||||||
|  | 		if(obj.config != null && proto.config != null){ | ||||||
|  | 			obj.config.__proto__ = proto.config | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// NOTE: this is intentionally done only for own attributes...
 | 	// NOTE: this is intentionally done only for own attributes...
 | ||||||
| 	Object.keys(obj).forEach(function(k){ | 	Object.keys(obj).forEach(function(k){ | ||||||
| 		// NOTE: we are not getting the attrs directly (vars = obj[k])
 | 		// NOTE: we are not getting the attrs directly (vars = obj[k])
 | ||||||
| @ -1761,25 +1832,29 @@ function Actions(a, b){ | |||||||
| 				// 		from node console instanceof tests fail...
 | 				// 		from node console instanceof tests fail...
 | ||||||
| 				//|| !(arg instanceof Array)
 | 				//|| !(arg instanceof Array)
 | ||||||
| 				|| arg.constructor.name != 'Array' | 				|| arg.constructor.name != 'Array' | ||||||
| 				// and arrays the last element of which is not a function...
 | 				// skip arrays where the last element of which is not a function...
 | ||||||
| 				|| typeof(arg[arg.length-1]) != 'function'){ |  | ||||||
| 				//|| !(arg[arg.length-1] instanceof Function)){
 | 				//|| !(arg[arg.length-1] instanceof Function)){
 | ||||||
|  | 				// XXX EXPERIMENTAL...
 | ||||||
|  | 				// XXX for this to work we need obj to be an 
 | ||||||
|  | 				// 		instance of ActionSet...
 | ||||||
|  | 				// 		...need a way to check this yet not require obj
 | ||||||
|  | 				// 		to strictly be anything special, the problem is 
 | ||||||
|  | 				// 		that the string action syntax is defined in the 
 | ||||||
|  | 				// 		action-set, thus we need to know about it here...
 | ||||||
|  | 				|| !(arg[arg.length-1] instanceof Function | ||||||
|  | 					|| (typeof(arg[arg.length-1]) == typeof('str') | ||||||
|  | 						// XXX should this be stricter???
 | ||||||
|  | 						&& (obj.isStringAction || isStringAction)(arg[arg.length-1]))) ){ | ||||||
|  | 				//*/
 | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// create a new action...
 | 		// create a new action/alias...
 | ||||||
| 		var a = obj[k] = new Action(k, arg) | 		var a = obj[k] = arg[arg.length-1] instanceof Function ? | ||||||
|  | 			(new Action(k, arg)) | ||||||
|  | 			: (new Alias(k, arg)) | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
| 	if(proto != null){ |  | ||||||
| 		obj.__proto__ = proto |  | ||||||
| 
 |  | ||||||
| 		// XXX is this the right way to go???
 |  | ||||||
| 		if(obj.config != null && proto.config != null){ |  | ||||||
| 			obj.config.__proto__ = proto.config |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	return obj | 	return obj | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "ig-actions", |   "name": "ig-actions", | ||||||
|   "version": "3.4.0", |   "version": "3.5.0", | ||||||
|   "description": "", |   "description": "", | ||||||
|   "main": "actions.js", |   "main": "actions.js", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user