| 
									
										
										
										
											2022-04-12 01:31:28 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											2022-08-06 01:26:31 +03:00
										 |  |  | * XXX wikiword filter seems to act up on / | 
					
						
							| 
									
										
										
										
											2022-08-04 19:47:08 +03:00
										 |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2022-08-04 22:48:48 +03:00
										 |  |  | * 	- markdown										-- DONE?? | 
					
						
							| 
									
										
										
										
											2022-08-04 19:47:08 +03:00
										 |  |  | * 	- pwa | 
					
						
							| 
									
										
										
										
											2022-08-04 11:00:21 +03:00
										 |  |  | * 	- archive old code | 
					
						
							|  |  |  | * 	- update docs | 
					
						
							|  |  |  | * 	- refactor and cleanup | 
					
						
							| 
									
										
										
										
											2022-08-06 01:26:31 +03:00
										 |  |  | * 		- module structure							-- DONE | 
					
						
							| 
									
										
										
										
											2022-08-04 11:00:21 +03:00
										 |  |  | * 	- 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-05 18:21:18 +03:00
										 |  |  | var pwpath = require('./pwiki/path') | 
					
						
							|  |  |  | var page = require('./pwiki/page') | 
					
						
							| 
									
										
										
										
											2022-04-12 01:31:28 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-05 18:21:18 +03:00
										 |  |  | var basestore = require('./pwiki/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 }) |