mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 02:40:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			209 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
| /**********************************************************************
 | |
| * 
 | |
| *
 | |
| *
 | |
| **********************************************************************/
 | |
| ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
 | |
| (function(require){ var module={} // make module AMD/node compatible...
 | |
| /*********************************************************************/
 | |
| 
 | |
| module.VERSIONS = []
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| // Convert legacy Gen1 data format to Gen3 format version 2.0+
 | |
| //
 | |
| // XXX external deps:
 | |
| // 		imageDateCmp
 | |
| //module.convertDataGen1 =
 | |
| module.VERSIONS['2.0'] =
 | |
| function(data, cmp){
 | |
| 	//data = data.version < '2.0' ? module.VERSIONS['2.0'](data) : data
 | |
| 
 | |
| 	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...
 | |
| 	data.ribbons.forEach(function(input_images, i){
 | |
| 		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
 | |
| 		}
 | |
| 		cmp && ribbon.sort(cmp)
 | |
| 	})
 | |
| 
 | |
| 	cmp && order.sort(cmp)
 | |
| 
 | |
| 	// 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...
 | |
| // NOTE: this uses require('imagegrid/data').Data().newGID(..) for ribbon gid 
 | |
| // 		generation...
 | |
| //
 | |
| module.VERSIONS['3.0'] =
 | |
| function(data){
 | |
| 	data = data.version < '2.0' ? module.VERSIONS['2.0'](data) : data
 | |
| 
 | |
| 	// XXX is this the right way to go???
 | |
| 	var that = require('imagegrid/data').Data()
 | |
| 
 | |
| 	var res = {}
 | |
| 	res.version = '3.0'
 | |
| 	res.current = data.current
 | |
| 	res.order = data.order.slice()
 | |
| 	res.ribbon_order = data.ribbon_order == null ? [] : data.ribbon_order.slice()
 | |
| 	res.ribbons = {} 
 | |
| 
 | |
| 	// generate gids...
 | |
| 	// 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){
 | |
| 		var gid = k*1 == null ? k : that.newGID()
 | |
| 		res.ribbon_order.push(gid)
 | |
| 		res.ribbons[gid] = data.ribbons[k].slice()
 | |
| 	})
 | |
| 
 | |
| 	// we set the base to the first ribbon...
 | |
| 	res.base = data.base == null ? res.ribbon_order[0] : res.base
 | |
| 
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /* This is best kept as a separate entity...
 | |
| // 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
 | |
| }
 | |
| */
 | |
| 
 | |
| /* XXX we do not have a ref to images...
 | |
| module.VERSIONS['3.1'] =
 | |
| function(data){
 | |
| 	res = module.VERSIONS['3.0'](data)
 | |
| 
 | |
| 	res.version = '3.1'
 | |
| 
 | |
| 	// XXX we do not have a ref to images here...
 | |
| 	Object.values(res.images || {})
 | |
| 		.forEach(function(img){
 | |
| 			Object.keys(img.preview)
 | |
| 				.forEach(function(res){
 | |
| 					var p = img.preview[res]
 | |
| 					img.preview[res] = p.indexOf('%20') >= 0 ? decodeURI(p) : p
 | |
| 				})
 | |
| 		})
 | |
| 
 | |
| 	return res
 | |
| }
 | |
| //*/
 | |
| 
 | |
| 
 | |
| // Get latest updater version...
 | |
| //
 | |
| module.getLatestUpdaterVersion = function(){
 | |
| 	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()
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| // 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.
 | |
| module.updateData = function(data, clean){
 | |
| 	var v = module.getLatestUpdaterVersion()
 | |
| 	var res = data.version < v
 | |
| 		? module.VERSIONS[v](data) 
 | |
| 		: completeData(data)
 | |
| 
 | |
| 	!clean
 | |
| 		&& Object.keys(data).forEach(function(k){
 | |
| 			if(res[k] === undefined){
 | |
| 				res[k] = data[k]
 | |
| 			}
 | |
| 		})
 | |
| 
 | |
| 	return res
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * vim:set ts=4 sw=4 :                               */ return module })
 |