| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-08-21 02:19:24 +03:00
										 |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.VERSIONS = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-08 19:34:49 +03:00
										 |  |  | var completeData =  | 
					
						
							|  |  |  | module.completeData = | 
					
						
							|  |  |  | function(data){ | 
					
						
							|  |  |  | 	// XXX is this the right way to go???
 | 
					
						
							|  |  |  | 	var that = require('imagegrid/data').Data() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var ribbons = data.ribbons = data.ribbons || {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(Object.keys(ribbons).length == 0){ | 
					
						
							|  |  |  | 		ribbons[that.newGid()] = data.order.slice() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	data.ribbon_order = data.ribbon_order || Object.keys(ribbons) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return data | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Convert legacy Gen1 data format to Gen3 format version 2.0+
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // XXX external deps:
 | 
					
						
							|  |  |  | // 		imageDateCmp
 | 
					
						
							|  |  |  | //module.convertDataGen1 =
 | 
					
						
							|  |  |  | module.VERSIONS['2.0'] = | 
					
						
							|  |  |  | function(data, cmp){ | 
					
						
							| 
									
										
										
										
											2017-03-08 19:34:49 +03:00
										 |  |  | 	//data = data.version < '2.0' ? module.VERSIONS['2.0'](data) : data
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	var res = { | 
					
						
							|  |  |  | 		data: { | 
					
						
							|  |  |  | 			version: '2.0', | 
					
						
							|  |  |  | 			current: null, | 
					
						
							|  |  |  | 			ribbons: [], | 
					
						
							|  |  |  | 			order: [],  | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		images: {} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	cmp = cmp == null ? | 
					
						
							|  |  |  | 			function(a, b){  | 
					
						
							|  |  |  | 				return imageDateCmp(a, b, null, res.images)  | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			: cmp | 
					
						
							|  |  |  | 	var ribbons = res.data.ribbons | 
					
						
							|  |  |  | 	var order = res.data.order | 
					
						
							|  |  |  | 	var images = res.images | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// position...
 | 
					
						
							|  |  |  | 	res.data.current = data.position | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	// ribbons and images...
 | 
					
						
							| 
									
										
										
										
											2015-11-14 20:51:22 +03:00
										 |  |  | 	data.ribbons.forEach(function(input_images, i){ | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 		var ribbon = [] | 
					
						
							|  |  |  | 		ribbons.push(ribbon) | 
					
						
							|  |  |  | 		for(var id in input_images){ | 
					
						
							|  |  |  | 			var image = input_images[id] | 
					
						
							|  |  |  | 			ribbon.push(id) | 
					
						
							|  |  |  | 			order.push(id) | 
					
						
							|  |  |  | 			images[id] = image | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-12-31 05:42:28 +03:00
										 |  |  | 		cmp && ribbon.sort(cmp) | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-12-31 05:42:28 +03:00
										 |  |  | 	cmp && order.sort(cmp) | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// XXX STUB
 | 
					
						
							|  |  |  | 	res.data.current = order[0] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return res | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Convert gen3 data to gen4 v3.0+...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // NOTE: this will just convert the JSON format and will not construct 
 | 
					
						
							|  |  |  | // 		the Data object...
 | 
					
						
							| 
									
										
										
										
											2016-06-01 16:12:10 +03:00
										 |  |  | // NOTE: this uses require('imagegrid/data').Data().newGid(..) for ribbon gid 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | // 		generation...
 | 
					
						
							| 
									
										
										
										
											2014-12-31 05:42:28 +03:00
										 |  |  | //
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | module.VERSIONS['3.0'] = | 
					
						
							|  |  |  | function(data){ | 
					
						
							| 
									
										
										
										
											2014-12-31 05:42:28 +03:00
										 |  |  | 	data = data.version < '2.0' ? module.VERSIONS['2.0'](data) : data | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	// XXX is this the right way to go???
 | 
					
						
							| 
									
										
										
										
											2016-06-01 16:12:10 +03:00
										 |  |  | 	var that = require('imagegrid/data').Data() | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	var res = {} | 
					
						
							|  |  |  | 	res.version = '3.0' | 
					
						
							|  |  |  | 	res.current = data.current | 
					
						
							|  |  |  | 	res.order = data.order.slice() | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 	res.ribbon_order = data.ribbon_order == null ? [] : data.ribbon_order.slice() | 
					
						
							|  |  |  | 	res.ribbons = {}  | 
					
						
							| 
									
										
										
										
											2015-11-15 01:25:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	// generate gids...
 | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 	// NOTE: this will use the structures stored in data if available, 
 | 
					
						
							|  |  |  | 	// 		otherwise new structures will be generated...
 | 
					
						
							|  |  |  | 	// NOTE: we need to do this anyway as we also need to deep-copy the 
 | 
					
						
							|  |  |  | 	// 		ribbons...
 | 
					
						
							|  |  |  | 	var keys = data.ribbon_order != null  | 
					
						
							|  |  |  | 		? data.ribbon_order  | 
					
						
							|  |  |  | 		: Object.keys(data.ribbons) | 
					
						
							|  |  |  | 	keys.forEach(function(k){ | 
					
						
							| 
									
										
										
										
											2014-12-31 05:42:28 +03:00
										 |  |  | 		var gid = k*1 == null ? k : that.newGid() | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 		res.ribbon_order.push(gid) | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 		res.ribbons[gid] = data.ribbons[k].slice() | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2015-11-15 01:25:04 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	// we set the base to the first ribbon...
 | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 	res.base = data.base == null ? res.ribbon_order[0] : res.base | 
					
						
							| 
									
										
										
										
											2017-02-23 03:28:44 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	return res | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-14 16:50:46 +04:00
										 |  |  | /* This is best kept as a separate entity... | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | // XXX EXPERIMENTAL...
 | 
					
						
							|  |  |  | module.VERSIONS['3.1'] = | 
					
						
							|  |  |  | function(data){ | 
					
						
							|  |  |  | 	res = module.VERSIONS['3.0'](data) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	res.version = '3.1' | 
					
						
							|  |  |  | 	res.order_list = data.order_list != null ? JSON.parse(JSON.stringify(data.order_list)) : null | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return res | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2014-08-14 16:50:46 +04:00
										 |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-08-12 17:24:56 +04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | // Get latest updater version...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | module.getLatestUpdaterVersion = function(){ | 
					
						
							| 
									
										
										
										
											2017-03-08 19:34:49 +03:00
										 |  |  | 	return Object.keys(module.VERSIONS) | 
					
						
							|  |  |  | 		.map(function(v){ return [v, parseFloat(v)] }) | 
					
						
							|  |  |  | 		.sort(function(a, b){ return a[1] - b[1]  }) | 
					
						
							|  |  |  | 		.map(function(e){ return e[0] }) | 
					
						
							|  |  |  | 		.pop() | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Update data (JSON) to latest version...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // This is the main entry point in this module.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Takes any compatable JSON data version and converts it to the latest 
 | 
					
						
							|  |  |  | // format.
 | 
					
						
							|  |  |  | // NOTE: if data is already in the latest format this will return it 
 | 
					
						
							|  |  |  | // 		as-is.
 | 
					
						
							| 
									
										
										
										
											2017-02-16 02:24:23 +03:00
										 |  |  | module.updateData = function(data, clean){ | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 	var v = module.getLatestUpdaterVersion() | 
					
						
							| 
									
										
										
										
											2017-02-16 02:24:23 +03:00
										 |  |  | 	var res = data.version < v | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | 		? module.VERSIONS[v](data)  | 
					
						
							| 
									
										
										
										
											2017-03-08 19:34:49 +03:00
										 |  |  | 		: completeData(data) | 
					
						
							| 
									
										
										
										
											2017-02-16 02:24:23 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	!clean | 
					
						
							|  |  |  | 		&& Object.keys(data).forEach(function(k){ | 
					
						
							| 
									
										
										
										
											2017-02-23 03:28:44 +03:00
										 |  |  | 			if(res[k] === undefined){ | 
					
						
							| 
									
										
										
										
											2017-02-16 02:24:23 +03:00
										 |  |  | 				res[k] = data[k] | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return res | 
					
						
							| 
									
										
										
										
											2014-07-22 17:09:25 +04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |