mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-29 18:30:09 +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