filter macro now cleaned up and working...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2022-04-27 23:31:11 +03:00
parent ca62396ef0
commit c0644dcd30

View File

@ -841,29 +841,18 @@ object.Constructor('Page', BasePage, {
// | -<filter> <filter-spec> // | -<filter> <filter-spec>
// //
// XXX support .NO_FILTERS ... // XXX support .NO_FILTERS ...
// XXX not working on the test page...
filter: function*(args, body, state){ filter: function*(args, body, state){
var filters = state.filters = var filters = state.filters =
state.filters state.filters ?? []
?? [] // separate local filters...
// local filters...
if(body){ if(body){
var parent_filters = state.filters var outer_filters = filters
filters = state.filters = filters = state.filters =
[parent_filters] } [outer_filters] }
// populate filters...
Object.values(args) // merge in new filters...
.forEach(function(filter){ filters.splice(filters.length, 0, ...Object.values(args))
// clear disabled filters...
// NOTE: '-<filter>' has precedence over '<filter>'...
if(filter[0] == '-'
&& filters.includes(filter.slice(1))){
filters.splice(filters.indexOf(filter.slice(1)), 1) }
// only add once...
!filters.includes(filter)
&& (filter[0] == '-'
|| !filters.includes('-'+filter))
&& filters.push(filter) })
// local filters... // local filters...
if(body){ if(body){
// isolate from parent... // isolate from parent...
@ -871,22 +860,21 @@ object.Constructor('Page', BasePage, {
&& state.filters[0] instanceof Array && state.filters[0] instanceof Array
&& state.filters.shift() && state.filters.shift()
// serialize the block for later processing... // expand the body...
var data = [...this.__parser__.expand(this, body, state)] var ast = [...this.__parser__.expand(this, body, state)]
filters = state.filters filters = state.filters
// restore global filters... state.filters = outer_filters
state.filters = parent_filters
// post handler... // parse the body after we are done expanding...
yield function(state){ yield function(state){
var outer_filters = state.filters
state.filters = this.__parser__.normalizeFilters(filters) state.filters = this.__parser__.normalizeFilters(filters)
var res = [...this.__parser__.parse(this, data, state)] var res = [...this.__parser__.parse(this, ast, state)]
.flat() .flat()
.join('') .join('')
state.filters = filters state.filters = outer_filters
return { data: res } } } return { data: res } } } },
return },
// //
// @include(<path>) // @include(<path>)
// //