mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
224 lines
5.3 KiB
JavaScript
Executable File
224 lines
5.3 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){
|
|
// XXX there should be a better way to report this...
|
|
console.log('\t\tUpdating to:', '2.0')
|
|
|
|
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'
|
|
// XXX there should be a better way to report this...
|
|
console.log('\t\tUpdating to:', res.version)
|
|
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 }
|
|
|
|
|
|
module.VERSIONS['3.1'] =
|
|
function(data){
|
|
var res =
|
|
data.version < '3.0' ?
|
|
module.VERSIONS['3.0'](data)
|
|
: data
|
|
|
|
res.version = '3.1'
|
|
// XXX there should be a better way to report this...
|
|
console.log('\t\tUpdating to:', res.version)
|
|
|
|
data.tags
|
|
&& (res.tags = { tags: data.tags })
|
|
|
|
return res }
|
|
|
|
|
|
/* XXX template...
|
|
module.VERSIONS['3.2'] =
|
|
function(data){
|
|
var res =
|
|
data.version < '3.1' ?
|
|
module.VERSIONS['3.1'](data)
|
|
: data
|
|
|
|
res.version = '3.2'
|
|
|
|
// XXX
|
|
|
|
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, version, clean){
|
|
var v = version || module.getLatestUpdaterVersion()
|
|
|
|
// patch a typo (.varsion -> .version)...
|
|
//
|
|
// NOTE: this was discovered during the transition to v3.1, thus
|
|
// anything later than that (201812) is OK...
|
|
// ...this affects pre-release versions only.
|
|
// NOTE: yes, it's a typo in the format version =)
|
|
var version = data.version || data.varsion
|
|
data.version = version
|
|
delete data.varsion
|
|
|
|
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 })
|