added masic tag listing...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2022-10-26 19:54:22 +03:00
parent a0152c4192
commit 01e59af5a1
3 changed files with 34 additions and 8 deletions

View File

@ -76,8 +76,8 @@ object.Constructor('BasePage', {
type: true,
ctime: true,
mtime: true,
// XXX TAGS HACK -- should this be a list???
tags: 'tagstr',
// XXX
//tags: true,
},
// These actions will be default get :$ARGS appended if no args are
// explicitly given...
@ -358,9 +358,6 @@ object.Constructor('BasePage', {
...(await this.data),
tags: [...value],
} }.call(this) },
// XXX TAGS HACK -- should this be a list???
get tagstr(){ return async function(){
return JSON.stringify(await this.tags ?? []).slice(1,-1) }.call(this) },
tag: async function(...tags){
this.tags = [...new Set([
...(await this.tags),
@ -2065,7 +2062,7 @@ module.System = {
type: @source(../type)<br>
tags: @source(../tags)<br>
tags: @source(../tags join=", ")<br>
ctime: @source(../ctime)<br>
mtime: @source(../mtime)<br>
@ -2077,8 +2074,19 @@ module.System = {
stores: function(){
return Object.keys(this.store.substores ?? {}) },
tagslist: function(){
return this.tags },
// tags...
//
// XXX should these be actions???
// ...actions do not yet support lists/generators...
tags: async function*(){
yield* this.get('..').tags },
allTags: async function*(){
yield* Object.keys((await this.store.tags).tags) },
relatedTags: async function*(){
yield* this.store.relatedTags(
...((await this.args.tags)
?? this.get('..').tags
?? [])) },
// page parts...
//

View File

@ -282,6 +282,18 @@ module.BaseStore = {
get tags(){
return this.__tags() },
relatedTags: function*(...tags){
var cur = tags
var {tags, paths} = this.tags
var seen = new Set()
for(var tag of cur){
for(var p of tags[tag] ?? []){
for(var t of paths[p] ?? []){
if(!seen.has(t)){
seen.add(t)
yield t } } } } },
// XXX text search index (???)

View File

@ -17,6 +17,12 @@
* - CLI
*
*
* XXX BUG:
* await pwiki.parse('@source(/Test/list/static join=", ")')
* -> 'abcdef, abcdef, abcdef, abcdef, abcdef, abcdef'
* should be:
* await pwiki.parse('@source(/Test/list/static join=", ")')
* -> 'a, b, c, d, e, f'
* XXX TAGS should ./tags (i.e. .tagstr) return a list of tags???
* XXX TAGS
* - add tags to page -- macro/filter