fixed most of the issues with .walk2(..), preparing for the move/cleanup...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2019-08-30 22:23:52 +03:00
parent d74482e037
commit 8e565bdad2

View File

@ -1973,6 +1973,11 @@ var BaseBrowserPrototype = {
// next([elem, ...]) // next([elem, ...])
// -> input // -> input
// //
// Explicitly pass children to be handled and process them sync...
// next(browser, true)
// next([elem, ...], true)
// -> input
//
// //
// Stop walking (return undefined)... // Stop walking (return undefined)...
// stop() // stop()
@ -2049,8 +2054,7 @@ var BaseBrowserPrototype = {
// } // }
// //
// //
// XXX migrate .render(..) to use .walk2(..) // XXX might be good to be able to return the partial result via stop(..)
// - are we rendering with the nested .render(..)???
walk2: function(func, options){ walk2: function(func, options){
var that = this var that = this
var [func=null, options={}, path=[], context={}] = [...arguments] var [func=null, options={}, path=[], context={}] = [...arguments]
@ -2135,7 +2139,7 @@ var BaseBrowserPrototype = {
// skip... // skip...
((!iterateCollapsed && elem.collapsed) ((!iterateCollapsed && elem.collapsed)
|| (skipDisabled == 'branch')) ? || (skipDisabled == 'branch')) ?
[] false
// inlined... // inlined...
: !options.skipInlined : !options.skipInlined
&& (elem instanceof BaseBrowser || elem instanceof Array) ? && (elem instanceof BaseBrowser || elem instanceof Array) ?
@ -2143,32 +2147,38 @@ var BaseBrowserPrototype = {
// nested... // nested...
: (!options.skipNested && elem.children) ) : (!options.skipNested && elem.children) )
|| [] || []
var next = function(elems){ var next = function(elems, now){
return (children = return (children =
// skip... // skip...
elems == null ? elems == null ?
[] []
// force processing now... // force processing now...
: elems === true ? : now === true || elems === true ?
processChildren() processChildren(now && elems)
// set elems as children... // set elems as children...
: elems) } : elems) }
var processed var processed
// NOTE: this will calc the value once and return it cached next... var processChildren = function(elems){
var processChildren = function(){ elems = elems instanceof Array ?
elems
: children
return (processed = return (processed =
processed !== undefined ? // nodes processed via next(true), no need to re-process...
elems === processed ?
[]
// cached value...
: processed !== undefined ?
processed processed
: children instanceof Array ? : elems instanceof Array ?
handleReverse(children) handleReverse(elems)
.map(makeMap(p)) .map(makeMap(p))
.flat() .flat()
: children instanceof BaseBrowser ? : elems instanceof BaseBrowser ?
// NOTE: this will never return non-array as // NOTE: this will never return non-array as
// when stop(..) is called it will break // when stop(..) is called it will break
// execution and get handled in the catch // execution and get handled in the catch
// clause below... // clause below...
children elems
.walk2(func, options, p, context) .walk2(func, options, p, context)
: []) } : []) }
@ -2786,7 +2796,7 @@ var BaseBrowserPrototype = {
options || {}, options || {},
{rawResults: true})) }, {rawResults: true})) },
/*/ // XXX WALK2 /*/ // XXX
map: function(func, options){ map: function(func, options){
var that = this var that = this
@ -3647,7 +3657,7 @@ var BaseBrowserPrototype = {
// XXX should from/to/around/count be a feature of this or of .walk(..)??? // XXX should from/to/around/count be a feature of this or of .walk(..)???
// XXX might be a good idea to use this.root === this instead of context.root === this // XXX might be a good idea to use this.root === this instead of context.root === this
/*/ XXX WALK2... // XXX WALK2...
// XXX this still has problems.... // XXX this still has problems....
// - nested browser rendering not yet working correctly -- rendered flat... // - nested browser rendering not yet working correctly -- rendered flat...
render: function(options, renderer, context){ render: function(options, renderer, context){
@ -3798,7 +3808,7 @@ var BaseBrowserPrototype = {
: elem.children ? : elem.children ?
[ renderer.renderNested( [ renderer.renderNested(
renderer.renderNestedHeader(elem, i, context), renderer.renderNestedHeader(elem, i, context),
elem.children instanceof BaseBrowser ? (!elem.collapsed && elem.children instanceof BaseBrowser) ?
(nested(false), (nested(false),
elem.children.render(options, renderer, context)) elem.children.render(options, renderer, context))
: nested(true), : nested(true),
@ -3977,9 +3987,18 @@ var BaseBrowserPrototype = {
: items } }, : items } },
//*/ //*/
// XXX .walk2(..): shoulc calling. next(..) return the list to the
// user and let them handle it???
// ...currently the user will get the list and each item will
// be added to the stream to the list by .walk2(..) this
// preventing the user from actually modifying the output...
render2: function(options, renderer, context){ render2: function(options, renderer, context){
// XXX args... // XXX args...
options = {
includeInlinedBlocks: true,
iterateNonIterable: true,
}
// XXX rendering... // XXX rendering...
var inline = function(lst){ var inline = function(lst){
@ -3987,7 +4006,7 @@ var BaseBrowserPrototype = {
var nest = function(header, lst){ var nest = function(header, lst){
return [ return [
header, header,
...lst.map(function(e){ ...(lst || []).map(function(e){
return header +'/'+ e })]} return header +'/'+ e })]}
var elem = function(e){ var elem = function(e){
return e.id || e } return e.id || e }
@ -4007,17 +4026,16 @@ var BaseBrowserPrototype = {
// nested... // nested...
: e.children instanceof BaseBrowser ? : e.children instanceof BaseBrowser ?
nest(elem(e), e.children.render2(options, renderer, context)) nest(elem(e),
!e.collapsed
&& e.children.render2(options, renderer, context))
: e.children instanceof Array ? : e.children instanceof Array ?
nest(elem(e), children(true)) nest(elem(e), children(true))
// normal item... // normal item...
: elem(e) ) : elem(e) )
}, { }, options)
includeInlinedBlocks: true,
iterateNonIterable: true,
})
}, },