mirror of
https://github.com/flynx/pWiki.git
synced 2025-10-29 01:50:07 +00:00
experimenting....
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
6d76b0cb64
commit
b580c6b0c3
128
pwiki2.js
128
pwiki2.js
@ -148,9 +148,13 @@ module.path = {
|
||||
// To create a store adapter:
|
||||
// - inherit from BaseStore
|
||||
// - overload:
|
||||
// .__paths__(..)
|
||||
// .__paths__()
|
||||
// -> <keys>
|
||||
// .__exists__(..)
|
||||
// -> false
|
||||
// -> <path>
|
||||
// .__get__(..)
|
||||
// -> <data>
|
||||
// - optionally (for writable stores)
|
||||
// .__update__(..)
|
||||
// .__set__(..)
|
||||
@ -231,22 +235,26 @@ module.BaseStore = {
|
||||
__exists__: function(path){
|
||||
var data = this.data
|
||||
return (path in data
|
||||
&& path)
|
||||
// NOTE: all paths at this point and in store are absolute,
|
||||
// so we check both with the leading '/' and without
|
||||
// it to make things a bit more relaxed and return the
|
||||
// actual matching path...
|
||||
|| (path[0] == '/' ?
|
||||
(path.slice(1) in data
|
||||
&& path.slice(1))
|
||||
: (('/'+ path) in data)
|
||||
&& '/'+path) },
|
||||
&& path) },
|
||||
exists: function(path){
|
||||
return this.__exists__(module.path.normalize(path, 'string'))
|
||||
// delegate to .next...
|
||||
path = module.path.normalize(path, 'string')
|
||||
return this.__exists__(path, 'string')
|
||||
// NOTE: all paths at this point and in store are
|
||||
// absolute, so we check both with the leading
|
||||
// '/' and without it to make things a bit more
|
||||
// relaxed and return the actual matching path...
|
||||
|| this.__exists__(
|
||||
path[0] == '/' ?
|
||||
path.slice(1)
|
||||
: ('/'+ path))
|
||||
// XXX NEXT
|
||||
// delegate to .next...
|
||||
|| ((this.next || {}).__exists__
|
||||
&& this.next.__exists__(path)) },
|
||||
&& (this.next.__exists__(path)
|
||||
|| this.next.__exists__(
|
||||
path[0] == '/' ?
|
||||
path.slice(1)
|
||||
: ('/'+ path)))) },
|
||||
|
||||
/*/ XXX do we actually need this???
|
||||
// ...this is the same as .get('**')
|
||||
@ -277,7 +285,6 @@ module.BaseStore = {
|
||||
// match all sub-paths.
|
||||
//
|
||||
match: function(path, strict=false){
|
||||
var data = this.data
|
||||
// pattern match * / **
|
||||
if(path.includes('*')
|
||||
|| path.includes('**')){
|
||||
@ -325,7 +332,6 @@ module.BaseStore = {
|
||||
return this.data[key] },
|
||||
get: function(path, strict=false){
|
||||
var that = this
|
||||
var data = this.data
|
||||
path = this.match(path, strict)
|
||||
return path instanceof Array ?
|
||||
// XXX should we return matched paths???
|
||||
@ -418,43 +424,79 @@ module.store =
|
||||
// XXX EXPERIMENTAL
|
||||
var localStorageStore =
|
||||
module.localStorageStore = {
|
||||
__proto__: BaseParser,
|
||||
// XXX
|
||||
__store__:
|
||||
__proto__: BaseStore,
|
||||
__prefix__: '--pwiki:',
|
||||
|
||||
// XXX add caching of unserialized data...
|
||||
data:
|
||||
typeof(localStorage) != 'undefined' ?
|
||||
localStorage
|
||||
: undefined,
|
||||
// XXX key to store data under...
|
||||
// ....if undefined then each page will be stored as a root path...
|
||||
__key__: 'pWiki-data',
|
||||
|
||||
__data: undefined,
|
||||
get data(){
|
||||
return this.__key__ ?
|
||||
(this.__data = this.__data
|
||||
?? JSON.parse(this.__store__[this.__key__]))
|
||||
: this.__store__ },
|
||||
|
||||
//__paths__: function(path){},
|
||||
//__exists__: function(path){},
|
||||
__paths__: function(path){
|
||||
var that = this
|
||||
return Object.keys(this.data)
|
||||
.map(function(k){
|
||||
return k.startsWith(that.__prefix__) ?
|
||||
k.slice((that.__prefix__ ?? '').length)
|
||||
: [] })
|
||||
.flat() },
|
||||
__exists__: function(path){
|
||||
return ((this.__prefix__ ?? '')+ path) in this.data
|
||||
&& path },
|
||||
__get__: function(path){
|
||||
return this.__key__ ?
|
||||
this.data[path]
|
||||
// XXX CACHE...
|
||||
: JSON.parse(this.data[path]) },
|
||||
// XXX *time...
|
||||
__set__: function(path, data){
|
||||
this.data[path] = this.__key__ ?
|
||||
data
|
||||
: JSON.stringify(data) },
|
||||
__update__: function(){
|
||||
// XXX
|
||||
path = (this.__prefix__ ?? '')+ path
|
||||
return path in this.data ?
|
||||
JSON.parse(this.data[path])
|
||||
: undefined },
|
||||
__set__: function(path, data={}){
|
||||
path = (this.__prefix__ ?? '')+ path
|
||||
var t = Date.now()
|
||||
this.data[path] =
|
||||
JSON.stringify(
|
||||
Object.assign(
|
||||
{ctime: t},
|
||||
data,
|
||||
{mtime: t}))
|
||||
return this },
|
||||
delete: function(){},
|
||||
// XXX for some magical reason this overwrites both ctime and mtime...
|
||||
__update__: function(path, data={}){
|
||||
path = (this.__prefix__ ?? '')+ path
|
||||
var t = Date.now()
|
||||
this.data[path] =
|
||||
JSON.stringify(
|
||||
Object.assign(
|
||||
{ctime: t},
|
||||
this.__get__(path),
|
||||
data,
|
||||
{mtime: t}))
|
||||
return this },
|
||||
// XXX
|
||||
delete: function(){
|
||||
},
|
||||
|
||||
load: function(){},
|
||||
}
|
||||
|
||||
var localStorageNestedStore =
|
||||
module.localStorageNestedStore = {
|
||||
__proto__: BaseStore,
|
||||
__data__: '__pwiki_data__',
|
||||
__cache__: '__pwiki_cache__',
|
||||
|
||||
__data: undefined,
|
||||
get data(){
|
||||
return this.__data
|
||||
?? (this.__data =
|
||||
Object.assign(
|
||||
{ __proto__: JSON.parse(localStorage[this.__data__] || '{}') },
|
||||
JSON.parse(localStorage[this.__cache__] || '{}') )) },
|
||||
|
||||
// XXX do partials saves -> cache + write cache...
|
||||
// XXX on full save merge cache and save...
|
||||
}
|
||||
|
||||
|
||||
|
||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user