mirror of
https://github.com/flynx/pWiki.git
synced 2026-07-13 20:10:57 +00:00
cleanup and notes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
c7be62a48f
commit
d24257d3e2
@ -770,8 +770,6 @@ module.BaseParser = {
|
|||||||
: ast.iter()
|
: ast.iter()
|
||||||
|
|
||||||
// merge resolved elements into the last item of elems...
|
// merge resolved elements into the last item of elems...
|
||||||
// XXX can ast be a promise???
|
|
||||||
// XXX elems can be unresolved -- need a merge strategy for them...
|
|
||||||
var elems = []
|
var elems = []
|
||||||
for(var elem of ast){
|
for(var elem of ast){
|
||||||
// nesting...
|
// nesting...
|
||||||
@ -806,7 +804,6 @@ module.BaseParser = {
|
|||||||
// nested macro with no value set -- skip...
|
// nested macro with no value set -- skip...
|
||||||
if(that.macros[elem.name] instanceof Array){
|
if(that.macros[elem.name] instanceof Array){
|
||||||
continue }
|
continue }
|
||||||
//* XXX unresolved...
|
|
||||||
;(state.unresolved ??= [])
|
;(state.unresolved ??= [])
|
||||||
.push(elem.resolving instanceof Promise ?
|
.push(elem.resolving instanceof Promise ?
|
||||||
elem.resolving
|
elem.resolving
|
||||||
@ -818,6 +815,14 @@ module.BaseParser = {
|
|||||||
|
|
||||||
return elems },
|
return elems },
|
||||||
|
|
||||||
|
isResolved: function(ast){
|
||||||
|
if(!(ast instanceof Array)){
|
||||||
|
return false }
|
||||||
|
for(var e of ast){
|
||||||
|
if(typeof(e) == 'object'){
|
||||||
|
return false } }
|
||||||
|
return true },
|
||||||
|
|
||||||
// XXX render api...
|
// XXX render api...
|
||||||
// XXX how should this play with filters???
|
// XXX how should this play with filters???
|
||||||
// ...should filters be client-side only??
|
// ...should filters be client-side only??
|
||||||
@ -830,12 +835,15 @@ module.BaseParser = {
|
|||||||
// XXX might be a good idea to limit recursion depth here...
|
// XXX might be a good idea to limit recursion depth here...
|
||||||
var merge = function(ast){
|
var merge = function(ast){
|
||||||
return Promise.awaitOrRun(
|
return Promise.awaitOrRun(
|
||||||
...state.unresolved,
|
...(state.unresolved ?? []),
|
||||||
function(){
|
function(){
|
||||||
delete state.unresolved
|
delete state.unresolved
|
||||||
// re-resolve...
|
// re-resolve...
|
||||||
ast = that.resolve(page, ast, state, nested_handlers)
|
ast = that.resolve(page, ast, state, nested_handlers)
|
||||||
|
|
||||||
|
// NOTE: this is essentially running in the same frame
|
||||||
|
// as .resolve(..) above so there should not be
|
||||||
|
// any races to delete .unresolved...
|
||||||
return state.unresolved ?
|
return state.unresolved ?
|
||||||
merge(ast)
|
merge(ast)
|
||||||
: (ast ?? '').join('') }) }
|
: (ast ?? '').join('') }) }
|
||||||
@ -844,14 +852,11 @@ module.BaseParser = {
|
|||||||
this.resolve(page, ast, state, nested_handlers),
|
this.resolve(page, ast, state, nested_handlers),
|
||||||
state[wait],
|
state[wait],
|
||||||
function(ast){
|
function(ast){
|
||||||
// NOTE: since we are waiting for state[wait], state.unresolved
|
// NOTE: in an async world where any promised macro can
|
||||||
// might get cleaned out by this point so we need to check
|
// call .parse(..) / .parseNested(..) we can't trust
|
||||||
// manually...
|
// the lack of .unresolved in state...
|
||||||
for(var e of ast){
|
return (state.unresolved
|
||||||
if(typeof(e) == 'object'){
|
|| !that.isResolved(ast)) ?
|
||||||
state.unresolved = []
|
|
||||||
break } }
|
|
||||||
return state.unresolved ?
|
|
||||||
merge(ast)
|
merge(ast)
|
||||||
: (ast ?? '').join('') }) },
|
: (ast ?? '').join('') }) },
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user