2022-04-12 01:31:28 +03:00
|
|
|
/**********************************************************************
|
|
|
|
|
*
|
|
|
|
|
*
|
2022-08-04 19:47:08 +03:00
|
|
|
* XXX wikiword filter seems to hang on /
|
|
|
|
|
* XXX do filters affect the whole page or only what comes after???
|
|
|
|
|
* XXX BUG: need to be able to affect the default render wrpaper...
|
|
|
|
|
* i.e.: /some/path vs. /some/path/_text vs. /some/path/_raw
|
|
|
|
|
*
|
|
|
|
|
*
|
2022-08-04 11:00:21 +03:00
|
|
|
* XXX ROADMAP:
|
|
|
|
|
* - run in browser
|
2022-08-04 14:29:25 +03:00
|
|
|
* - basics, loading -- DONE
|
|
|
|
|
* - test localStorage / sessionStorage -- DONE
|
|
|
|
|
* - test pouch -- DONE
|
2022-08-04 19:47:08 +03:00
|
|
|
* - render page -- DONE
|
2022-08-04 14:29:25 +03:00
|
|
|
* - navigation
|
2022-08-04 19:47:08 +03:00
|
|
|
* - hash/anchor -- DONE
|
2022-08-04 14:29:25 +03:00
|
|
|
* - service worker
|
2022-08-04 19:47:08 +03:00
|
|
|
* ...handle relative urls (???)
|
2022-08-04 14:29:25 +03:00
|
|
|
* - migrate bootstrap
|
2022-08-04 19:47:08 +03:00
|
|
|
* - store topology
|
|
|
|
|
* - WikiWord
|
|
|
|
|
* - markdown -- DONE
|
|
|
|
|
* - service worker
|
|
|
|
|
* - pwa
|
2022-08-04 11:00:21 +03:00
|
|
|
* - archive old code
|
|
|
|
|
* - update docs
|
|
|
|
|
* - refactor and cleanup
|
|
|
|
|
* - pack as electron app (???)
|
|
|
|
|
*
|
|
|
|
|
*
|
2022-08-04 14:29:25 +03:00
|
|
|
*
|
|
|
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
|
*
|
|
|
|
|
* Architecture:
|
|
|
|
|
* store
|
|
|
|
|
* page
|
|
|
|
|
* renderer
|
|
|
|
|
*
|
|
|
|
|
* Modules:
|
|
|
|
|
* page - base pages and page APIs (XXX should this be in lib???)
|
|
|
|
|
* parser - pWiki macro parser (XXX should this be in lib???)
|
|
|
|
|
* store - stores
|
|
|
|
|
* base - memory store and store utils
|
|
|
|
|
* file - file storage
|
|
|
|
|
* localstorage - localStorage / sessionStorage stores
|
|
|
|
|
* pouchdb -
|
|
|
|
|
* ...
|
|
|
|
|
* filter - page filters
|
|
|
|
|
* base - base filters incl. wikiword
|
|
|
|
|
* markdown - markdown renderer
|
|
|
|
|
* ...
|
|
|
|
|
* pwiki2 - main cli / node entry point
|
|
|
|
|
* browser - browser entry point
|
|
|
|
|
* pwiki2-test - testing and experimenting (XXX move to test.js)
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* Q: can we make this a single module with +/- some plugins??
|
|
|
|
|
* ...this would make things quite a bit simpler but will negate the
|
|
|
|
|
* use of high level libs like types...
|
|
|
|
|
*
|
|
|
|
|
*
|
2022-07-11 18:14:11 +03:00
|
|
|
* XXX weaknesses to review:
|
|
|
|
|
* - <store>.paths() as an index...
|
|
|
|
|
* + decouples the search logic from the store backend
|
|
|
|
|
* - requires the whole list of pages to be in memory
|
|
|
|
|
* ...need to be independent of the number of pages if at
|
|
|
|
|
* all possible -- otherwise this will hinder long-term use...
|
|
|
|
|
* -
|
|
|
|
|
* TODO:
|
|
|
|
|
* - <page>.then() -- resolve when all pending write operations done ???
|
2022-07-25 23:58:23 +03:00
|
|
|
* - an async REPL???
|
2022-08-04 19:47:08 +03:00
|
|
|
* - custom element???
|
2022-07-11 18:14:11 +03:00
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
***********************************************************************
|
2022-07-10 15:38:56 +03:00
|
|
|
*
|
2022-04-16 10:53:41 +03:00
|
|
|
* XXX might be a good idea to try signature based security:
|
|
|
|
|
* - sign changes
|
|
|
|
|
* - sign sync session
|
|
|
|
|
* - refuse changes with wrong signatures
|
|
|
|
|
* - public keys available on client and on server
|
|
|
|
|
* - check signatures localy
|
|
|
|
|
* - check signatures remotely
|
|
|
|
|
* - private key available only with author
|
|
|
|
|
* - keep both the last signed and superceding unsigned version
|
|
|
|
|
* - on sync ask to overwrite unsigned with signed
|
|
|
|
|
* - check if we can use the same mechanics as ssh...
|
|
|
|
|
* - in this view a user in the system is simply a set of keys and
|
|
|
|
|
* a signature (a page =))
|
2022-04-12 01:31:28 +03:00
|
|
|
*
|
2022-08-03 01:35:19 +03:00
|
|
|
* XXX pages into lib/page ???
|
2022-05-17 01:26:39 +03:00
|
|
|
*
|
|
|
|
|
* XXX add action to reset overloaded (bootstrap) pages...
|
|
|
|
|
* - per page
|
|
|
|
|
* - global
|
|
|
|
|
*
|
2022-05-17 17:36:42 +03:00
|
|
|
* XXX need to think about search -- page function argument syntax???
|
2022-05-17 01:26:39 +03:00
|
|
|
*
|
|
|
|
|
* XXX might need to get all the links (macro-level) from a page...
|
|
|
|
|
* ...would be useful for caching...
|
|
|
|
|
*
|
2022-06-17 12:15:37 +03:00
|
|
|
* XXX .__paths__(..) may be a bottleneck...
|
|
|
|
|
* need to either think of a way around it or cache the path index
|
|
|
|
|
* in a sync way...
|
|
|
|
|
*
|
2022-05-04 18:26:02 +03:00
|
|
|
*
|
|
|
|
|
*
|
2022-04-12 01:31:28 +03:00
|
|
|
**********************************************************************/
|
|
|
|
|
((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
|
|
|
|
|
(function(require){ var module={} // make module AMD/node compatible...
|
|
|
|
|
/*********************************************************************/
|
|
|
|
|
|
2022-04-21 18:33:08 +03:00
|
|
|
// XXX
|
|
|
|
|
//var object = require('lib/object')
|
|
|
|
|
var object = require('ig-object')
|
2022-04-25 16:00:12 +03:00
|
|
|
var types = require('ig-types')
|
2022-04-21 18:33:08 +03:00
|
|
|
|
2022-08-03 01:35:19 +03:00
|
|
|
var pwpath = require('./lib/path')
|
2022-08-04 11:00:21 +03:00
|
|
|
var page = require('./page')
|
2022-04-12 01:31:28 +03:00
|
|
|
|
2022-08-03 01:35:19 +03:00
|
|
|
var basestore = require('./store/base')
|
2022-04-12 02:07:19 +03:00
|
|
|
|
2022-08-04 11:00:21 +03:00
|
|
|
//var localstoragestore = require('./store/localstorage')
|
|
|
|
|
// XXX for some reason this does not run quietly in browser
|
|
|
|
|
//var pouchdbstore = require('./store/pouchdb')
|
|
|
|
|
//var filestore = require('./store/file')
|
2022-04-13 03:14:21 +03:00
|
|
|
|
|
|
|
|
|
2022-04-13 12:18:13 +03:00
|
|
|
|
2022-04-13 03:14:21 +03:00
|
|
|
//---------------------------------------------------------------------
|
2022-05-11 15:36:35 +03:00
|
|
|
// Basic setup...
|
|
|
|
|
//
|
|
|
|
|
//
|
2022-05-11 16:46:27 +03:00
|
|
|
// Store topology:
|
2022-05-11 15:36:35 +03:00
|
|
|
//
|
|
|
|
|
// root (BaseStore) ---next--- main (MetaStore)
|
|
|
|
|
// |
|
|
|
|
|
// +-- System/... (BaseStore)
|
|
|
|
|
//
|
2022-05-11 16:46:27 +03:00
|
|
|
// Alternative store topology:
|
|
|
|
|
//
|
|
|
|
|
// root (BaseStore) ---next--- main (MetaStore)
|
|
|
|
|
// System/... (static)
|
|
|
|
|
//
|
2022-05-11 15:36:35 +03:00
|
|
|
//
|
2022-04-22 12:00:48 +03:00
|
|
|
|
2022-05-10 23:58:13 +03:00
|
|
|
var store =
|
|
|
|
|
module.store =
|
2022-05-11 15:27:15 +03:00
|
|
|
//BaseStore.nest()
|
2022-08-03 01:35:19 +03:00
|
|
|
// XXX clone...
|
2022-08-04 11:00:21 +03:00
|
|
|
{ __proto__: basestore.BaseStore }
|
|
|
|
|
.nest({ __proto__: basestore.MetaStore })
|
2022-05-10 23:58:13 +03:00
|
|
|
|
2022-05-11 15:27:15 +03:00
|
|
|
|
2022-06-12 12:04:44 +03:00
|
|
|
// XXX note sure how to organize the system actions -- there can be two
|
2022-05-11 15:27:15 +03:00
|
|
|
// options:
|
|
|
|
|
// - a root ram store with all the static stuff and nest the rest
|
|
|
|
|
// - a nested store (as is the case here)
|
|
|
|
|
// XXX nested system store...
|
2022-05-12 09:06:38 +03:00
|
|
|
store.update('System',
|
2022-08-04 14:29:25 +03:00
|
|
|
Object.create(basestore.BaseStore).load(page.System))
|
2022-07-28 22:35:41 +03:00
|
|
|
|
2022-05-10 23:58:13 +03:00
|
|
|
|
2022-04-23 10:56:24 +03:00
|
|
|
// NOTE: in general the root wiki api is simply a page instance.
|
2022-05-03 16:47:43 +03:00
|
|
|
// XXX not yet sure how to organize the actual client -- UI, hooks, .. etc
|
2022-04-25 20:53:20 +03:00
|
|
|
var pwiki =
|
2022-04-22 12:00:48 +03:00
|
|
|
module.pwiki =
|
2022-08-04 11:00:21 +03:00
|
|
|
page.Page('/', '/', store)
|
2022-04-13 12:18:13 +03:00
|
|
|
|
2022-04-13 03:14:21 +03:00
|
|
|
|
2022-05-11 15:36:35 +03:00
|
|
|
//---------------------------------------------------------------------
|
2022-08-04 11:00:21 +03:00
|
|
|
// comandline...
|
2022-05-11 15:36:35 +03:00
|
|
|
|
2022-08-04 11:00:21 +03:00
|
|
|
if(typeof(__filename) != 'undefined'
|
|
|
|
|
&& __filename == (require.main || {}).filename){
|
2022-05-11 15:36:35 +03:00
|
|
|
|
|
|
|
|
|
2022-04-25 20:53:20 +03:00
|
|
|
|
2022-08-04 11:00:21 +03:00
|
|
|
}
|
2022-04-25 20:53:20 +03:00
|
|
|
|
2022-04-12 01:31:28 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
2022-04-28 14:12:02 +03:00
|
|
|
* vim:set ts=4 sw=4 nowrap : */ return module })
|