mirror of
				https://github.com/flynx/pWiki.git
				synced 2025-10-31 19:10:08 +00:00 
			
		
		
		
	reworked macro attr inheritance...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									82fb5fa9ac
								
							
						
					
					
						commit
						b5a8214263
					
				| @ -1325,30 +1325,8 @@ object.Constructor('Page', BasePage, { | |||||||
| 				['strict', 'nonstrict', 'isolated', 'unisolated']], | 				['strict', 'nonstrict', 'isolated', 'unisolated']], | ||||||
| 			async function*(args, body, state){ | 			async function*(args, body, state){ | ||||||
| 				var that = this | 				var that = this | ||||||
| 				var name = args.name //?? args[0]
 |  | ||||||
| 				var src = args.src |  | ||||||
| 				var base = this.get(this.path.split(/\*/).shift()) |  | ||||||
| 				var sort = (args.sort ?? '') |  | ||||||
| 					.split(/\s+/g) |  | ||||||
| 					.filter(function(e){  |  | ||||||
| 						return e != '' }) |  | ||||||
| 				// NOTE: args.text will need parsing...
 |  | ||||||
| 				var text = args.text  |  | ||||||
| 					?? body  |  | ||||||
| 					?? [] |  | ||||||
| 				text = typeof(text) == 'string' ? |  | ||||||
| 					[...this.__parser__.group(this, text+'</macro>', 'macro')] |  | ||||||
| 					: text |  | ||||||
| 				var strict = args.strict |  | ||||||
| 					&& !args.nonstrict |  | ||||||
| 				var isolated = args.isolated  |  | ||||||
| 					|| !args.unisolated  |  | ||||||
| 				var join |  | ||||||
| 
 |  | ||||||
| 				var depends = state.depends =  |  | ||||||
| 					state.depends  |  | ||||||
| 						?? new Set() |  | ||||||
| 
 | 
 | ||||||
|  | 				// helpers...
 | ||||||
| 				var _getBlock = function(name){ | 				var _getBlock = function(name){ | ||||||
| 					var block = args[name] ? | 					var block = args[name] ? | ||||||
| 						[{ | 						[{ | ||||||
| @ -1369,18 +1347,66 @@ object.Constructor('Page', BasePage, { | |||||||
| 							?? block.body | 							?? block.body | ||||||
| 					return block } | 					return block } | ||||||
| 
 | 
 | ||||||
| 				if(name){ | 				var base = this.get(this.path.split(/\*/).shift()) | ||||||
| 					name = await base.parse(name, state) | 
 | ||||||
|  | 				var depends = state.depends =  | ||||||
|  | 					state.depends  | ||||||
|  | 						?? new Set() | ||||||
|  | 
 | ||||||
|  | 				// uninheritable args...
 | ||||||
|  | 				// NOTE: arg handling is split in two, to make things simpler 
 | ||||||
|  | 				// 		to process for retrieved named macros...
 | ||||||
|  | 				var src = args.src | ||||||
|  | 				var text = args.text  | ||||||
|  | 					?? body  | ||||||
|  | 					?? [] | ||||||
|  | 				text = typeof(text) == 'string' ? | ||||||
|  | 					[...this.__parser__.group(this, text+'</macro>', 'macro')] | ||||||
|  | 					: text | ||||||
|  | 				var join | ||||||
|  | 				var iargs = {} | ||||||
|  | 
 | ||||||
|  | 				// stored macros...
 | ||||||
|  | 				if(args.name){ | ||||||
|  | 					var name = await base.parse(args.name, state) | ||||||
| 					// define new named macro...
 | 					// define new named macro...
 | ||||||
| 					if(text.length != 0){ | 					if(text.length != 0){ | ||||||
| 						// NOTE: we do not need to worry about saving 
 | 						// NOTE: we do not need to worry about saving 
 | ||||||
| 						// 		stateful text here because it is only 
 | 						// 		stateful text here because it is only 
 | ||||||
| 						// 		grouped and not expanded...
 | 						// 		grouped and not expanded...
 | ||||||
| 						;(state.macros = state.macros ?? {})[name] = [text, _getBlock('join')] | 						;(state.macros = state.macros ?? {})[name] =  | ||||||
|  | 							// XXX should we store all the args???
 | ||||||
|  | 							[text, _getBlock('join'), JSON.parse(JSON.stringify(args))] | ||||||
| 					// use existing macro...
 | 					// use existing macro...
 | ||||||
| 					} else if(state.macros  | 					} else if(state.macros  | ||||||
| 							&& name in state.macros){ | 							&& name in state.macros){ | ||||||
| 						[text, join] = state.macros[name] } } | 						;[itext, join, iargs] = state.macros[name] } } | ||||||
|  | 
 | ||||||
|  | 				// XXX is there a point in overloading text???
 | ||||||
|  | 				text = text.length > 0 ?  | ||||||
|  | 					text  | ||||||
|  | 					: itext | ||||||
|  | 				// inheritable args...
 | ||||||
|  | 				var sort = (args.sort  | ||||||
|  | 						?? iargs.sort  | ||||||
|  | 						?? '') | ||||||
|  | 					.split(/\s+/g) | ||||||
|  | 					.filter(function(e){  | ||||||
|  | 						return e != '' }) | ||||||
|  | 				// default is false...
 | ||||||
|  | 				var strict =  | ||||||
|  | 					('strict' in args || 'nonstrict' in args) ? | ||||||
|  | 						args.strict  | ||||||
|  | 							&& !args.nonstrict  | ||||||
|  | 						: iargs.strict  | ||||||
|  | 							&& !iargs.nonstrict | ||||||
|  | 				// default is true...
 | ||||||
|  | 				var isolated =  | ||||||
|  | 					('isolated' in args || 'unisolated' in args) ? | ||||||
|  | 						args.isolated | ||||||
|  | 						|| !args.unisolated | ||||||
|  | 					: iargs.isolated | ||||||
|  | 						|| !iargs.unisolated | ||||||
| 
 | 
 | ||||||
| 				if(src){ | 				if(src){ | ||||||
| 					src = await base.parse(src, state) | 					src = await base.parse(src, state) | ||||||
|  | |||||||
| @ -18,9 +18,9 @@ | |||||||
| * 		- CLI										-  | * 		- CLI										-  | ||||||
| * | * | ||||||
| * | * | ||||||
| * XXX MACRO: should <macro>'s isolated be on by default??? | * XXX macro: bug: see /NamedMacroTest... | ||||||
| * 			...do we need to isolate named macros too??? | * XXX macro: should isolated and other args be inherited??? | ||||||
| * 			...should this isolation be one-directional??? | * XXX macro: should macro isolation be one-directional??? | ||||||
| * 			...i.e. iterations see/overload things defined above but  | * 			...i.e. iterations see/overload things defined above but  | ||||||
| * 			can not affect the above context... | * 			can not affect the above context... | ||||||
| * XXX STYLE: should style loading be done via the event mechanics  | * XXX STYLE: should style loading be done via the event mechanics  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user