diff --git a/pwiki/page.js b/pwiki/page.js index 2229ccf..1bcf1e4 100755 --- a/pwiki/page.js +++ b/pwiki/page.js @@ -169,8 +169,10 @@ object.Constructor('BasePage', { get data(){ return (async function(){ var that = this // NOTE: we need to make sure each page gets the chance to handle - // its context.... - if(this.isPattern){ + // its context (i.e. bind action to page).... + if(this.isPattern + // XXX ENERGETIC... + && !this.store.isEnergetic(this.path)){ return this .map(function(page){ return page.data }) } @@ -179,7 +181,6 @@ object.Constructor('BasePage', { return typeof(res) == 'function' ? res.bind(this) : res }).call(this) }, - //return this.store.get(this.location, !!this.strict) }, set data(value){ this.__update__(value) }, @@ -296,7 +297,9 @@ object.Constructor('BasePage', { path = path ? pwpath.relative(this.path, path) : this.path - var paths = path.includes('*') ? + var paths = path.includes('*') + // XXX ENERGETIC... + && !await this.store.isEnergetic(path) ? this.resolve(path) : path paths = paths instanceof Array ? @@ -1525,14 +1528,15 @@ module.System = { text: object.doc` - @source(/rootpath) - (edit) + @source(./!path) + (edit)

+ ` }, @@ -1612,15 +1616,17 @@ module.System = { @source(../path) - @source(./name) - + @source(./name) + a s - + + (@include(./*/!count)) +   × ` }, // XXX this is really slow... @@ -1706,6 +1712,11 @@ module.System = { return this.get('..').location }, path: function(){ return this.get('..').path }, + // XXX ENERGETIC... + '!path': Object.assign( + function(){ + return this.get('..').path }, + {energetic: true}), rootpath: function(){ return this.root.path }, resolved: async function(){ @@ -1718,6 +1729,13 @@ module.System = { var p = this.get('..') return p.title ?? p.name }, + count: async function(){ + return this.get('..').length }, + // XXX ENERGETIC... + '!count': Object.assign( + async function(){ + return this.get('..').length }, + {energetic: true}), ctime: async function(){ var date = (await this.get('..').data).ctime return date ? diff --git a/pwiki/store/base.js b/pwiki/store/base.js index e6617f7..4f03d6b 100755 --- a/pwiki/store/base.js +++ b/pwiki/store/base.js @@ -60,14 +60,14 @@ function(name, get, update, ...args){ // - overload: // .__paths__() // -> -// .__exists__(..) +// .__exists__(path, ..) // -> // -> false -// .__get__(..) +// .__get__(path, ..) // -> // - optionally (for writable stores) -// .__update__(..) -// .__delete__(..) +// .__update__(path, ..) +// .__delete__(path, ..) // .load(..) // // @@ -356,8 +356,13 @@ module.BaseStore = { return this.data[key] }, get: async function(path, strict=false){ var that = this - //path = this.match(path, strict) + /* XXX ENERGETIC... path = await this.resolve(path, strict) + /*/ + path = path.includes('*') + && await this.isEnergetic(path) + || await this.resolve(path, strict) + //*/ return path instanceof Array ? // XXX should we return matched paths??? Promise.iter(path) @@ -371,6 +376,12 @@ module.BaseStore = { ?? ((this.next || {}).__get__ && this.next.get(path, strict))) }, + // XXX EXPERIMENTAL... + isEnergetic: async function(path){ + var p = await this.find(path) + return !!(await this.get(p, true) ?? {}).energetic + && p }, + // // Get metadata... // .metadata() diff --git a/pwiki2.js b/pwiki2.js index 9c914d5..c43b972 100755 --- a/pwiki2.js +++ b/pwiki2.js @@ -1,6 +1,20 @@ /********************************************************************** * * +* XXX FEATURE need to be able to call some actions on the root page +* before it gets .each()'ed... +* ...for things like: +* - count +* - unexpandedpath (name?) +* - ... +* this can be done in one of two ways: +* - syntax +* + will enable any action to be called energetically... +* - a complication... +* - special actions +* + transparent +* - extra concept -- might be confusing +* - duplicate actions * XXX FEATURE tags and accompanying API... * - add tags to page -- macro/filter * .text -> .tags (cached on .update(..))