From a26ba942cf31f8b1461a290d40c9e7f174b6fa24 Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Tue, 23 Apr 2019 23:34:23 +0300 Subject: [PATCH] adding item count to .walk(..), not yet counting correctly... Signed-off-by: Alex A. Naanou --- ui (gen4)/lib/widget/browse2.html | 3 +- ui (gen4)/lib/widget/browse2.js | 94 +++++++++++++++++++------------ 2 files changed, 61 insertions(+), 36 deletions(-) diff --git a/ui (gen4)/lib/widget/browse2.html b/ui (gen4)/lib/widget/browse2.html index 9a7c7056..ecff25b0 100755 --- a/ui (gen4)/lib/widget/browse2.html +++ b/ui (gen4)/lib/widget/browse2.html @@ -115,8 +115,9 @@ requirejs([ //make('e') // embeded browser... make(browser.Browser(function(make){ - make('nested browser item 0') + make('inlined browser item 0') make(1) + make(2) })) // basic nested list... make.nest('nested', [ diff --git a/ui (gen4)/lib/widget/browse2.js b/ui (gen4)/lib/widget/browse2.js index 6c41b45e..25da3b7e 100755 --- a/ui (gen4)/lib/widget/browse2.js +++ b/ui (gen4)/lib/widget/browse2.js @@ -742,11 +742,11 @@ var BaseBrowserPrototype = { // collapsed... (item.collapsed ? null - // renderable... - :item.sublist.render instanceof Function ? - item.sublist.render(context) - // list of items... - : item.sublist.map(_render)), + // renderable... + : item.sublist.render instanceof Function ? + item.sublist.render(context) + // list of items... + : item.sublist.map(_render)), item, context) // basic item... @@ -1275,7 +1275,7 @@ var BaseBrowserPrototype = { // -> result // // - // item_handler(path, elem, nested, sublist) + // item_handler(path, elem, index, nested, sublist) // -> array // // nested(list[, options]) @@ -1317,6 +1317,7 @@ var BaseBrowserPrototype = { // } // // + // XXX item count is broken... // XXX EXPERIMENTAL... walk: function(func, options){ var that = this @@ -1330,6 +1331,9 @@ var BaseBrowserPrototype = { || typeof(args[0]) == typeof('str')) ? args.shift() : undefined + var i = typeof(args[0]) == typeof(123) ? + args.shift() + : 0 var path = (args[0] instanceof Array || typeof(args[0]) == typeof('str')) ? args.shift() @@ -1374,35 +1378,39 @@ var BaseBrowserPrototype = { : (list || sublist) list = list === true ? sublist : list nested_called = true + return ( - // request manual iteration... - (skip || list === false) ? - [] - :list instanceof Array ? - walk(p, list) - // user-defined recursion... - : recursion instanceof Function ? - recursion.call(that, func, p, list, opts || options) - : list[recursion || 'walk'](func, p, opts || options)) } + // request manual iteration... + (skip || list === false) ? + [] + :list instanceof Array ? + walk(p, list) + // user-defined recursion... + : recursion instanceof Function ? + recursion.call(that, func, i, p, list, opts || options) + : list[recursion || 'walk'](func, i, p, opts || options)) + .run(function(){ + i += this.length-1 })} return ( // inline browser or array... (elem instanceof Array || elem instanceof Browser) ? + // XXX need to decrement i here... func.call(that, - p = path, + i, p = path, null, nested, sublist = elem) // nested browser / array... : (elem.sublist instanceof Browser || elem.sublist instanceof Array) ? func.call(that, - p = path.concat([elem_id]), + i++, p = path.concat([elem_id]), elem, nested, sublist = elem.sublist) // normal element... : func.call(that, - p = path.concat([elem_id]), + i++, p = path.concat([elem_id]), elem, null, sublist = null) ) // append nested elements... @@ -1433,9 +1441,12 @@ var BaseBrowserPrototype = { options = context.options renderer = renderer || this + var getValue = function(item){ + return item.value || item } + var items = this .walk( - function(path, item, nested, sublist){ + function(i, path, item, nested, sublist){ var indent = path.map(e => ' ').join('') return ( // inline... @@ -1444,16 +1455,19 @@ var BaseBrowserPrototype = { // inline browser/list, i.e. ignoring // options.skipNested for inline stuff... nested(true) - .map(e => indent + (e.value || e)) + .map(function(e){ + return indent + getValue(e) }) // nested... : sublist ? [item.value] .concat( nested() - .map(e => indent + (e.value || e))) - : [item.value || item] + .map(function(e){ + return indent + getValue(e) })) + // single item... + : [getValue(item)] ) }, - function(func, path, sublist, options){ + function(func, i, path, sublist, options){ return sublist.text2(context) }, options) @@ -1480,10 +1494,14 @@ var BaseBrowserPrototype = { options = context.options renderer = renderer || this + var getValue = function(item){ + return item.value || item } + var items = this .walk( - function(path, item, nested, sublist){ + function(i, path, item, nested, sublist){ var indent = path.map(e => ' ').join('') + // XXX call renderers... return ( // inline... (item == null && sublist) ? @@ -1491,20 +1509,21 @@ var BaseBrowserPrototype = { // inline browser/list, i.e. ignoring // options.skipNested for inline stuff... nested(true) - .map(e => indent + (e.value || e)) // nested... : sublist ? - [item.value] - .concat( - nested() - .map(e => indent + (e.value || e))) - : [item.value || item] + renderer.renderNested( + that.renderNestedHeader(item, i, context), + nested(), + item, + context) + // normal item... + : that.renderItem(item, i, context) ) }, function(func, path, sublist, options){ return sublist.render2(context) }) return context.root === this ? - items.join('\n') + renderer.renderList(items, context) : items }, @@ -1521,6 +1540,9 @@ var BaseBrowserPrototype = { func = args[0] instanceof Function ? args.shift() : undefined + var i = typeof(args[0]) == typeof(123) ? + args.shift() + : 0 var path = (args[0] instanceof Array || typeof(args[0]) == typeof('str')) ? args.shift() @@ -1528,17 +1550,19 @@ var BaseBrowserPrototype = { var options = args.pop() || {} return this.walk( - function(path, elem){ + function(i, path, elem){ return elem != null ? [func === undefined ? elem - : func.call(that, elem, path)] + : func.call(that, elem, i, path)] : [] }, - function(_, path, sublist, options){ + function(_, i, path, sublist, options){ // NOTE: this needs to call the actual func that the user // gave us and not the constructed function that we // pass to .walk(..) above... - return sublist.map2(func, path, options) }, + // XXX need to get the number of items passed here into current i... + return sublist.map2(func, i, path, options) }, + i, path, options) },