closed most of the wiki engine features, still several bugs to squash...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2022-05-03 12:28:03 +03:00
parent 7c35da904a
commit 94d65f6064

View File

@ -131,6 +131,9 @@ module.path = {
if(tpl[0] == '/'){ if(tpl[0] == '/'){
break } break }
p.pop() } } } }, p.pop() } } } },
split: function(path){
return this.normalize(path, 'array') },
} }
@ -139,6 +142,7 @@ module.path = {
// NOTE: store keys must be normalized... // NOTE: store keys must be normalized...
// //
// XXX BUG: mixing up '/' and '' paths...
// XXX LEADING_SLASH should this be strict about leading '/' in paths??? // XXX LEADING_SLASH should this be strict about leading '/' in paths???
// ...this may lead to duplicate paths created -- '/a/b' and 'a/b' // ...this may lead to duplicate paths created -- '/a/b' and 'a/b'
// XXX would be nice to be able to create sub-stores, i.e. an object that // XXX would be nice to be able to create sub-stores, i.e. an object that
@ -147,8 +151,8 @@ module.path = {
// XXX must support store stacks... // XXX must support store stacks...
// XXX path macros??? // XXX path macros???
// XXX should we support page symlinking??? // XXX should we support page symlinking???
var store = var BaseStore =
module.store = { module.BaseStore = {
exists: function(path){ exists: function(path){
path = module.path.normalize(path, 'string') path = module.path.normalize(path, 'string')
return path in this return path in this
@ -282,17 +286,31 @@ module.store = {
// XXX need to specify page format.... // XXX need to specify page format....
// XXX need a way to set the page path... // XXX need a way to set the page path...
var actions = var store =
module.actions = { module.store = {
__proto__: store, __proto__: BaseStore,
// base actions (virtual pages)... // base actions (virtual pages)...
'System/raw': function(page, path){ 'System/path': function(page){
return { text: this.get(path +'/..') } }, return this.get('..').path },
// XXX ... 'System/dir': function(page){
return this.get('..').dir },
'System/name': function(page){
return this.get('..').name },
'System/title': function(page){
var p = this.get('..')
return p.title
?? p.name },
// XXX other things to do...
// - title
//
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
var relProxy = var relProxy =
@ -344,6 +362,13 @@ object.Constructor('BasePage', {
set path(value){ set path(value){
this.location = value }, this.location = value },
get name(){
return module.path.split(this.path).pop() },
// XXX should this rename or change path???
//set name(value){ },
get dir(){
return module.path.relative(this.location, '..') },
//* XXX HISTORY... //* XXX HISTORY...
// NOTE: set this to false to disable history... // NOTE: set this to false to disable history...
__history: undefined, __history: undefined,
@ -497,7 +522,6 @@ object.Constructor('BasePage', {
//--------------------------------------------------------------------- //---------------------------------------------------------------------
// Parser... // Parser...
// XXX should we warn about stuff like <macro src=/moo/> -- currently // XXX should we warn about stuff like <macro src=/moo/> -- currently
// this will simply be ignored, i.e. passed trough the parser // this will simply be ignored, i.e. passed trough the parser
// without change... // without change...
@ -767,7 +791,7 @@ module.BaseParser = {
: lex : lex
var quoting = to var quoting = to
&& page.QUOTING_MACROS.includes(to) && (page.QUOTING_MACROS ?? []).includes(to)
&& [] && []
// NOTE: we are not using for .. of .. here as it depletes the // NOTE: we are not using for .. of .. here as it depletes the
@ -922,6 +946,8 @@ module.parser = {
} }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// XXX revise... // XXX revise...
var Filter = var Filter =
module.Filter = module.Filter =
@ -932,14 +958,17 @@ function(...args){
return func } return func }
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// XXX PATH_VARS need to handle path variables... // XXX PATH_VARS need to handle path variables...
// XXX macros and filters should be features for simpler plugin handlng (???) // XXX macros and filters should be features for simpler plugin handlng (???)
var Page = var Page =
module.Page = module.Page =
object.Constructor('Page', BasePage, { object.Constructor('Page', BasePage, {
//NO_FILTERS: 'nofilters', // Filter that will isolate the page/include/.. from parent filters...
ISOLATED_FILTERS: 'isolated', ISOLATED_FILTERS: 'isolated',
// list of macros that will get raw text of their content...
QUOTING_MACROS: ['quote'], QUOTING_MACROS: ['quote'],
// //
@ -977,6 +1006,15 @@ object.Constructor('Page', BasePage, {
return source }, return source },
}, },
//
// <macro>(<args>, <body>, <state>){ .. }
// -> undefined
// -> <text>
// -> <array>
// -> <iterator>
// -> <func>(<state>)
// -> ...
//
// XXX need a good way to get the first positional arg without // XXX need a good way to get the first positional arg without
// mixing it up with other args -- see src/name args below... // mixing it up with other args -- see src/name args below...
macros: { macros: {
@ -1008,7 +1046,6 @@ object.Constructor('Page', BasePage, {
// <filter> <filter-spec> // <filter> <filter-spec>
// | -<filter> <filter-spec> // | -<filter> <filter-spec>
// //
// XXX support .NO_FILTERS ...
filter: function(args, body, state, expand=true){ filter: function(args, body, state, expand=true){
var that = this var that = this
var filters = state.filters = var filters = state.filters =
@ -1026,7 +1063,7 @@ object.Constructor('Page', BasePage, {
// trigger quote-filter... // trigger quote-filter...
var quote = local var quote = local
.map(function(filter){ .map(function(filter){
return that.filters[filter]['quote'] ?? [] }) return (that.filters[filter] ?? {})['quote'] ?? [] })
.flat() .flat()
quote.length > 0 quote.length > 0
&& this.macros['quote-filter'] && this.macros['quote-filter']
@ -1311,7 +1348,9 @@ object.Constructor('Page', BasePage, {
// //
__parser__: module.parser, __parser__: module.parser,
parse: function(state={}){ parse: function(state={}){
return this.__parser__.parse(this, null, state) }, // NOTE: we do not need to pass this.raw here but it is still
// here for illustration...
return this.__parser__.parse(this, this.raw, state) },
// raw page text... // raw page text...
@ -1323,7 +1362,7 @@ object.Constructor('Page', BasePage, {
var data = this.data var data = this.data
return data instanceof Function ? return data instanceof Function ?
// XXX FUNC not sure about this... // XXX FUNC not sure about this...
data.call(this, 'text') data.call(this)
: data.text }, : data.text },
set raw(value){ set raw(value){
this.store.update(this.location, {text: value}) }, this.store.update(this.location, {text: value}) },