mirror of
https://github.com/flynx/pWiki.git
synced 2025-10-29 18:10:09 +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)
|
||||||
|
|||||||
10
pwiki2.js
10
pwiki2.js
@ -18,11 +18,11 @@
|
|||||||
* - 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
|
||||||
* (see: pwiki2.html) or via the base templates (see: pwiki/page.js:_view
|
* (see: pwiki2.html) or via the base templates (see: pwiki/page.js:_view
|
||||||
* template)???
|
* template)???
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user