another minor rework of the API...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2019-01-31 07:49:50 +03:00
parent fd2d757d75
commit 08d5d4bad9

View File

@ -270,8 +270,16 @@ var BaseBrowserPrototype = {
return items },
// Render nested list...
// NOTE: to skip rendering an item/list return null...
renderNested: function(sublist, item, options){
return sublist },
// XXX should this take an empty sublist???
// ...this would make it simpler to expand/collapse without
// re-rendering the whole list...
renderNested: function(header, sublist, item, options){
return header ?
this.renderGroup([
header,
sublist,
])
: sublist },
// Render nested list header...
// XXX should this be a renderer or an option to .renderItem(..)???
renderNestedHeader: function(item, i, options){
@ -326,35 +334,38 @@ var BaseBrowserPrototype = {
that.renderGroup(
item.map(_render), options)
// renderable item...
// XXX should this be nested???
: item.render instanceof Function ?
that.renderNested(
null,
item.render(context),
item,
options)
// renderable value -- embedded list...
// XXX should this be nested???
: (item.value || {}).render instanceof Function ?
that.renderNested(
null,
item.value.render(context),
item,
options)
// .sublist -- nested list...
// XXX should we always render the nested list here,
// only rendering it empty if collapsed???
: item.sublist ?
(item.collapsed ?
// collapsed item...
//that.renderItem(item, i, options)
that.renderNestedHeader(item, i, options)
// expanded item (grouped)...
: that.renderGroup([
//that.renderItem(item, i, options),
: that.renderNested(
that.renderNestedHeader(item, i, options),
that.renderNested(
item.sublist.render instanceof Function ?
// renderable...
item.sublist.render(context)
// list of items...
: item.sublist.map(_render),
item,
options) ], options))
item.sublist.render instanceof Function ?
// renderable...
item.sublist.render(context)
// list of items...
: item.sublist.map(_render),
item,
options))
// basic item...
: that.renderItem(item, i, options)) })
.filter(function(e){
@ -443,9 +454,11 @@ var BrowserPrototype = {
// XXX list header
// ...is it the responsibility of sub-list or the parent list???
// XXX save link to dom (???)
renderNested: function(sublist, item, options){
renderNested: function(header, sublist, item, options){
// XXX expand/collapse state???
return sublist },
return header ?
[header, sublist]
: sublist },
// Render group...
renderGroup: function(items, options){
return items },
@ -513,22 +526,25 @@ var TextBrowserPrototype = {
// visible in text...
renderList: function(items, options){
var that = this
return this.renderNested(items, null, options)
return this.renderNested(null, items, null, options)
.join('\n') },
renderItem: function(item, i, options){
var value = item.value || item
return item.current ?
`[ ${value} ]`
: value },
renderNested: function(sublist, item, options){
renderNested: function(header, sublist, item, options){
var that = this
return sublist
var nested = sublist
.flat()
.map(function(e){
return e instanceof Array ?
e.map(function(e){ return (that.options.renderIndent || ' ') + e })
: e })
.flat() },
.flat()
return header ?
[header, nested]
: nested },
renderNestedHeader: function(item, i, options){
return this.renderItem(...arguments) + (item.collapsed ? ' >' : ' v') },
}