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