mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
more exploring with store API...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
2f14d723b2
commit
7a70c77d9b
@ -125,6 +125,7 @@ var StoreActions = actions.Actions({
|
|||||||
res.store = (this.stores[query[0]] || query.length > 1) ?
|
res.store = (this.stores[query[0]] || query.length > 1) ?
|
||||||
query.shift().split(/\|/g)
|
query.shift().split(/\|/g)
|
||||||
: defaults.store
|
: defaults.store
|
||||||
|
//: Object.keys(this.stores)
|
||||||
res.key = query.length > 0 ?
|
res.key = query.length > 0 ?
|
||||||
query.pop().split(/\|/g)
|
query.pop().split(/\|/g)
|
||||||
: defaults.key
|
: defaults.key
|
||||||
@ -197,6 +198,66 @@ var StoreActions = actions.Actions({
|
|||||||
NOTE: only one store data set is included per call.`,
|
NOTE: only one store data set is included per call.`,
|
||||||
function(data){ return data || {} }],
|
function(data){ return data || {} }],
|
||||||
|
|
||||||
|
// XXX this avoids the .prepareStoreTo*(..) API...
|
||||||
|
store: ['- Store/',
|
||||||
|
core.doc`
|
||||||
|
|
||||||
|
Get stored key(s)...
|
||||||
|
.store(query)
|
||||||
|
-> value{s}
|
||||||
|
|
||||||
|
Write value to key(s)...
|
||||||
|
.store(query, value)
|
||||||
|
|
||||||
|
Remove key(s)...
|
||||||
|
.store(query, null)
|
||||||
|
|
||||||
|
|
||||||
|
NOTE: for query syntax see .parseStoreQuery(..)
|
||||||
|
|
||||||
|
`,
|
||||||
|
function(query, value){
|
||||||
|
query = this.parseStoreQuery(query)
|
||||||
|
var defaults = this.parseStoreQuery()
|
||||||
|
|
||||||
|
var handlers = this.stores
|
||||||
|
|
||||||
|
// get...
|
||||||
|
if(arguments.length == 1){
|
||||||
|
var res = {}
|
||||||
|
// expand store '*'...
|
||||||
|
query.store = (query.store.length == 1 && query.store[0] == '*') ?
|
||||||
|
Object.keys(handlers)
|
||||||
|
: query.store
|
||||||
|
// expand key '*'...
|
||||||
|
query.key = query.key.length == 1 && query.key[0] == '*' ?
|
||||||
|
'*'
|
||||||
|
: query.key
|
||||||
|
query.store
|
||||||
|
.forEach(function(s){
|
||||||
|
// ask the handler...
|
||||||
|
var r = this[handlers[s]](query.key)
|
||||||
|
// only keep non-empty sections...
|
||||||
|
Object.keys(r).length > 0
|
||||||
|
&& (res[s] = r)
|
||||||
|
}.bind(this))
|
||||||
|
// hoist if we requested only one store...
|
||||||
|
res = query.store.length == 1 ?
|
||||||
|
res[query.store[0]]
|
||||||
|
: res
|
||||||
|
return res
|
||||||
|
|
||||||
|
// delete...
|
||||||
|
} else if(value === undefined && arguments.length == 2){
|
||||||
|
// XXX
|
||||||
|
|
||||||
|
// set...
|
||||||
|
} else {
|
||||||
|
// XXX
|
||||||
|
}
|
||||||
|
}],
|
||||||
|
|
||||||
|
// XXX REVISE API
|
||||||
// XXX this is different from .prepareIndexForWrite(..) in that there
|
// XXX this is different from .prepareIndexForWrite(..) in that there
|
||||||
// is no default data set...
|
// is no default data set...
|
||||||
// XXX async???
|
// XXX async???
|
||||||
@ -298,6 +359,7 @@ module.Store = core.ImageGridFeatures.Feature({
|
|||||||
],
|
],
|
||||||
suggested: [
|
suggested: [
|
||||||
'store-localstorage',
|
'store-localstorage',
|
||||||
|
'store-fs',
|
||||||
],
|
],
|
||||||
isApplicable: function(){ return typeof(localStorage) != 'undefined' },
|
isApplicable: function(){ return typeof(localStorage) != 'undefined' },
|
||||||
|
|
||||||
@ -348,6 +410,7 @@ var __storageHandler_doc =
|
|||||||
-> keys
|
-> keys
|
||||||
|
|
||||||
.localStorageDataHandler()
|
.localStorageDataHandler()
|
||||||
|
.localStorageDataHandler('*')
|
||||||
.localStorageDataHandler('??')
|
.localStorageDataHandler('??')
|
||||||
-> data
|
-> data
|
||||||
|
|
||||||
@ -369,15 +432,16 @@ var __storageHandler_doc =
|
|||||||
`
|
`
|
||||||
function makeStorageHandler(storage){
|
function makeStorageHandler(storage){
|
||||||
var func = function(a, b){
|
var func = function(a, b){
|
||||||
|
// normalize a...
|
||||||
|
a = a == '??' ? '*' : a
|
||||||
|
|
||||||
storage = typeof(storage) == typeof('str') ? window[storage] : storage
|
storage = typeof(storage) == typeof('str') ? window[storage] : storage
|
||||||
|
|
||||||
var instance = this.config['store-instance-key']
|
var instance = this.config['store-instance-key']
|
||||||
var resolvePath = function(p){
|
var resolvePath = function(p){
|
||||||
return p
|
return p
|
||||||
.replace('${INSTANCE}', instance)
|
.replace('${INSTANCE}', instance) }
|
||||||
}
|
|
||||||
|
|
||||||
// XXX should this be all keys by default???
|
|
||||||
var keys = Object.keys(storage)
|
var keys = Object.keys(storage)
|
||||||
|
|
||||||
var dict_key = '${INSTANCE}/__dict__'
|
var dict_key = '${INSTANCE}/__dict__'
|
||||||
@ -391,13 +455,17 @@ function makeStorageHandler(storage){
|
|||||||
.map(function(key){ return dict[key] || key })
|
.map(function(key){ return dict[key] || key })
|
||||||
|
|
||||||
// get store contents...
|
// get store contents...
|
||||||
} else if(a == '??'
|
} else if(a == '*'
|
||||||
|| arguments.length == 0
|
|| arguments.length == 0
|
||||||
|| (a instanceof Array && (b == '??' || arguments.length == 1))){
|
|| (a instanceof Array && (b == '??' || arguments.length == 1))){
|
||||||
var res = {}
|
var res = {}
|
||||||
var keys = a instanceof Array ? a : keys
|
var keys = a instanceof Array ? a : keys
|
||||||
keys.forEach(function(key){
|
keys
|
||||||
res[dict[key] || key] = JSON.parse(storage[key]) })
|
// clear keys not in store...
|
||||||
|
.filter(function(k){
|
||||||
|
return dict[k] in storage || k in storage })
|
||||||
|
.forEach(function(k){
|
||||||
|
res[dict[k] || k] = JSON.parse(storage[k]) })
|
||||||
return res
|
return res
|
||||||
|
|
||||||
// remove all keys...
|
// remove all keys...
|
||||||
@ -416,12 +484,14 @@ function makeStorageHandler(storage){
|
|||||||
storage[k] = JSON.stringify(a[key]) })
|
storage[k] = JSON.stringify(a[key]) })
|
||||||
|
|
||||||
// remove key...
|
// remove key...
|
||||||
|
// XXX revise, should this be null or undefined???
|
||||||
} else if(b === null){
|
} else if(b === null){
|
||||||
var k = resolvePath(a)
|
var k = resolvePath(a)
|
||||||
delete dict[k]
|
delete dict[k]
|
||||||
delete storage[k]
|
delete storage[k]
|
||||||
|
|
||||||
// get key...
|
// get keys...
|
||||||
|
// XXX revise, should this be null or undefined???
|
||||||
} else if(b === undefined){
|
} else if(b === undefined){
|
||||||
var k = resolvePath(a)
|
var k = resolvePath(a)
|
||||||
return k in storage ?
|
return k in storage ?
|
||||||
@ -489,12 +559,41 @@ module.StoreLocalStorage = core.ImageGridFeatures.Feature({
|
|||||||
// Lookup order:
|
// Lookup order:
|
||||||
// - app dir
|
// - app dir
|
||||||
// - $HOME
|
// - $HOME
|
||||||
|
var StoreFSJSONActions = actions.Actions({
|
||||||
|
config: {
|
||||||
|
},
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
localStorageFSJSONSyncHandler: ['- Store/',
|
||||||
|
{handle_data_store: 'fileSync',},
|
||||||
|
function(a, b){
|
||||||
|
// XXX
|
||||||
|
}],
|
||||||
|
// XXX
|
||||||
|
localStorageFSJSONHandler: ['- Store/',
|
||||||
|
{handle_data_store: 'file',},
|
||||||
|
function(a, b){
|
||||||
|
// XXX
|
||||||
|
return new Promise(function(resolve, reject){
|
||||||
|
// XXX
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
}],
|
||||||
|
})
|
||||||
|
|
||||||
|
var StoreFSJSON =
|
||||||
|
module.StoreFSJSONSync = core.ImageGridFeatures.Feature({
|
||||||
|
title: '',
|
||||||
|
doc: '',
|
||||||
|
|
||||||
//---------------------------------------------------------------------
|
tag: 'store-fs',
|
||||||
|
depends: [
|
||||||
|
'fs',
|
||||||
|
'store',
|
||||||
|
],
|
||||||
|
|
||||||
// XXX StoreFSJSON
|
actions: StoreFSJSONActions,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user