From 83404e9714e4d3ea3d037f0ae3d4240de8709c5a Mon Sep 17 00:00:00 2001 From: "Alex A. Naanou" Date: Wed, 24 Feb 2021 22:39:09 +0300 Subject: [PATCH] refactoring... Signed-off-by: Alex A. Naanou --- Viewer/features/collections.js | 286 +++++++++++---------------------- 1 file changed, 91 insertions(+), 195 deletions(-) diff --git a/Viewer/features/collections.js b/Viewer/features/collections.js index 2e3201b6..e5588b1d 100755 --- a/Viewer/features/collections.js +++ b/Viewer/features/collections.js @@ -120,8 +120,7 @@ var CollectionActions = actions.Actions({ var c = this.collections || {} Object.keys(c) .forEach(function(title){ - res[c[title].gid || title] = title - }) + res[c[title].gid || title] = title }) return res }, get collection(){ @@ -141,8 +140,7 @@ var CollectionActions = actions.Actions({ // no collections -> return defaults | [] if(this.collections == null){ - return defaults.slice() - } + return defaults.slice() } var keys = Object.keys(collections) var order = this.__collection_order = this.__collection_order || [] @@ -166,14 +164,14 @@ var CollectionActions = actions.Actions({ if(res.length > keys.length){ res = res.filter(function(e){ return e in collections - || defaults.indexOf(e) >= 0 }) - } + || defaults.indexOf(e) >= 0 }) } this.__collection_order.splice(0, this.__collection_order.length, ...res) return this.__collection_order.slice() }, set collection_order(value){ - value && this.sortCollections(value) }, + value + && this.sortCollections(value) }, // NOTE: this accounts only for actual collections and does not counts // MAIN_COLLECTION_TITLE that can be contained in .collections, @@ -202,8 +200,7 @@ var CollectionActions = actions.Actions({ return this.cache('collection_handlers', function(handlers){ // cached value... if(handlers){ - return Object.assign({}, handlers) - } + return Object.assign({}, handlers) } var that = this handlers = {} @@ -214,14 +211,11 @@ var CollectionActions = actions.Actions({ handlers[fmt] && console.warn('Multiple handlers for collection format:', store) if(fmt){ - handlers[fmt] = action - } - }) + handlers[fmt] = action } }) // cleanup... if(handlers['data'] == null){ - delete handlers['data'] - } + delete handlers['data'] } return handlers }) }, @@ -321,7 +315,7 @@ var CollectionActions = actions.Actions({ return running[collection] } // handle collection... - p = running[collection] = new Promise(function(resolve, reject){ + return (running[collection] = new Promise(function(resolve, reject){ // NOTE: we do not need to return this as we'll resolve/reject // manually in .then(..) / .catch(..) Promise @@ -337,9 +331,7 @@ var CollectionActions = actions.Actions({ resolve(collection_data) }) .catch(function(err){ delete running[collection] - reject(err) }) }) - - return p }], + reject(err) }) })) }], // Collection life-cycle... @@ -474,8 +466,8 @@ var CollectionActions = actions.Actions({ that.load.chainCall(that, function(){ that.collectionUnloaded( - prev || MAIN_COLLECTION_TITLE) - }, { + prev || MAIN_COLLECTION_TITLE) }, + { location: that.location, data: data, @@ -496,15 +488,13 @@ var CollectionActions = actions.Actions({ // locations... delete that.collections[MAIN_COLLECTION_TITLE] delete this.location.collection - } else { that.data.collection = that.location.collection = collection // cleanup... if(collection == null){ - delete this.location.collection } } - }, + delete this.location.collection } } }, collection) }) }], // XXX should this call .loadCollection('!') when saving to current // collection??? @@ -584,8 +574,11 @@ var CollectionActions = actions.Actions({ && collection != MAIN_COLLECTION_TITLE // save the data... - var state = collections[collection] = collections[collection] || {} - state.title = state.title || collection + var state = collections[collection] = + collections[collection] + || {} + state.title = state.title + || collection state.gid = state.gid // maintain the GID of MAIN_COLLECTION_TITLE as MAIN_COLLECTION_GID... || (collection == MAIN_COLLECTION_TITLE ? @@ -596,8 +589,7 @@ var CollectionActions = actions.Actions({ do{ var gid = that.data.newGID() } while(gids[gid] != null) - return gid - })()) + return gid })()) // NOTE: we do not need to care about tags here as they // will get overwritten on load... state.data = (mode == 'empty' ? @@ -610,8 +602,7 @@ var CollectionActions = actions.Actions({ : this.data.clone() .run(function(){ var d = this - this.collection = collection - }) + this.collection = collection }) .clear('unloaded')) // crop mode -> handle crop stack... @@ -649,8 +640,7 @@ var CollectionActions = actions.Actions({ just remove it from .collections and do nothing...`, function(collection){ if(!this.collections || collection == MAIN_COLLECTION_TITLE){ - return - } + return } collection = this.collectionGIDs[collection] || collection if(collection in this.collections){ delete this.collections[collection] @@ -699,21 +689,16 @@ var CollectionActions = actions.Actions({ function(cmp){ // XXX handle the case when there's no .__collection_order if(!this.__collection_order){ - return - } - + return } // sort via list... if(cmp instanceof Array){ this.__collection_order = cmp.slice() - // cmp... } else if(cmp instanceof Function){ this.__collection_order.sort(cmp) - // basic sort... } else { - this.__collection_order.sort() - } + this.__collection_order.sort() } this.collection_order }], collectionToTop: ['Collections/Bring collection to $top', core.doc`Bring collection to top... @@ -737,8 +722,7 @@ var CollectionActions = actions.Actions({ var o = this.collection_order if(!collection || o.indexOf(collection) < 0){ - return - } + return } this.collection_order = [collection].concat(o).unique() }], @@ -1055,7 +1039,9 @@ var CollectionActions = actions.Actions({ var that = this gids = gids || 'current' gids = gids instanceof Array ? gids : [gids] - gids = gids.map(function(gid){ return that.data.getRibbon(gid) }) + gids = gids + .map(function(gid){ + return that.data.getRibbon(gid) }) return this.uncollect(gids, collection) }], @@ -1111,8 +1097,7 @@ var CollectionActions = actions.Actions({ .forEach(function(key){ if(key in state){ return } - state[key] = c[title][key] - }) }) + state[key] = c[title][key] }) }) return function(){ if(Object.keys(collections).length > 0){ @@ -1177,8 +1162,7 @@ var CollectionActions = actions.Actions({ // build the JSON... var s = res.collections[title] = { title: title } if(state.gid){ - s.gid = state.gid - } + s.gid = state.gid } var data = ((mode == 'base' && state.crop_stack) ? (state.crop_stack[0] || state.data) : state.data) @@ -1193,16 +1177,14 @@ var CollectionActions = actions.Actions({ // NOTE: in base mode, crop_stack is ignored... if(mode != 'base' && state.crop_stack){ s.crop_stack = state.crop_stack - .map(function(d){ return d.json() }) } - }) } } }], + .map(function(d){ return d.json() }) } }) } } }], clone: [function(full){ return function(res){ if(this.collections){ var cur = this.collections if(this.collection){ - res.location.collection = this.collection - } + res.location.collection = this.collection } collections = res.collections = {} this.collection_order @@ -1335,9 +1317,7 @@ module.Collection = core.ImageGridFeatures.Feature({ return function(){ ;(this.collection_order || []) .filter(function(e, i){ return e != o[i] }).length > 0 - && this.markChanged('collections') - } - }], + && this.markChanged('collections') } }], // collection title/list... ['renameCollection', function(_, from, to){ @@ -1378,9 +1358,7 @@ module.Collection = core.ImageGridFeatures.Feature({ && that.markChanged( 'collection: ' +JSON.stringify(collection.gid || title), - ['data']) - }) } - }], + ['data']) }) } }], ['joinCollect', function(_, align, collection, data){ var args = [...arguments] @@ -1393,16 +1371,14 @@ module.Collection = core.ImageGridFeatures.Feature({ && this.markChanged( 'collection: ' +JSON.stringify(collection.gid || title), - ['data']) - }], + ['data']) }], // transfer changes on load/unload collection... ['collectionLoading.pre', function(to){ var that = this var from = this.collection || MAIN_COLLECTION_TITLE if(from == to || this.changes === undefined || this.changes === true){ - return - } + return } var change_tags = this.config['collection-transfer-changes'] || COLLECTION_TRANSFER_CHANGES @@ -1413,8 +1389,7 @@ module.Collection = core.ImageGridFeatures.Feature({ return function(){ if(to == from){ - return - } + return } var gid = (this.collections[to] || {}).gid || to var changes = this.changes !== false ? this.changes['collection: '+JSON.stringify(gid)] @@ -1426,8 +1401,7 @@ module.Collection = core.ImageGridFeatures.Feature({ // everything has changed, no need to bother with details... if(changes === true){ - return - } + return } // save changes to 'from'... from_changes.length > 0 @@ -1439,11 +1413,7 @@ module.Collection = core.ImageGridFeatures.Feature({ that.markChanged(item) } else if(that.changes && that.changes[item]){ - delete that.changes[item] - } - }) - } - }], + delete that.changes[item] } }) } }], // update current collection changes... // // This will: @@ -1457,15 +1427,13 @@ module.Collection = core.ImageGridFeatures.Feature({ function(mode){ var cur = this.collection || MAIN_COLLECTION_TITLE if(cur == null || cur == MAIN_COLLECTION_TITLE){ - return - } + return } var changes = this.changes // everything/nothing changed -- nothing to do... if(!changes || changes === true || changes[cur] === true){ - return - } + return } var gid = this.collectionGID var id = 'collection: '+ JSON.stringify(gid) @@ -1479,8 +1447,7 @@ module.Collection = core.ImageGridFeatures.Feature({ if(changed.length > 0 && this.changes[id] !== true){ this.changes[id] = (this.changes[id] || []) .concat(changed) - .unique() - } + .unique() } // reset the base change tags to the base data (from collection data)... if(mode == 'base'){ @@ -1496,10 +1463,7 @@ module.Collection = core.ImageGridFeatures.Feature({ delete res.changes[tag] }) // set... base.forEach(function(tag){ - res.changes[tag] = true }) - } - } - }], + res.changes[tag] = true }) } } }], // Handle collection serialization format... @@ -1580,8 +1544,7 @@ module.Collection = core.ImageGridFeatures.Feature({ ['prepareIndexForWrite', function(res){ if(!res.changes){ - return - } + return } var that = this var changes = res.changes var collections = this.collections @@ -1622,15 +1585,11 @@ module.Collection = core.ImageGridFeatures.Feature({ var m = index[gid] = { title: title } if(res.raw.collections[title].count){ - m['count'] = res.raw.collections[title].count - } + m['count'] = res.raw.collections[title].count } // empty / default collections (placeholders)... } else { - index[title] = false - } - }) - } + index[title] = false } }) } // collections... if((full.length > 0 || partial.length > 0) @@ -1658,15 +1617,14 @@ module.Collection = core.ImageGridFeatures.Feature({ var local_changes = partial.indexOf(k) < 0 || {} if(local_changes !== true && res.changes[id] !== true){ (res.changes[id] || []) - .forEach(function(c){ local_changes[c] = true }) - } + .forEach(function(c){ + local_changes[c] = true }) } // collections//metadata var metadata = {} if(full.indexOf(k) >= 0 || res.changes[id].indexOf('metadata') >= 0){ - res.index[path +'/metadata'] = metadata - } + res.index[path +'/metadata'] = metadata } Object.keys(raw) .forEach(function(key){ metadata[key] = raw[key] }) @@ -1678,16 +1636,11 @@ module.Collection = core.ImageGridFeatures.Feature({ .filter(function(key){ return key != 'collections' }) .forEach(function(key){ res.index[path +'/'+ key] = prepared[key] - delete metadata[key] - }) + delete metadata[key] }) // cleanup metadata... // XXX do we need this??? change_tags.forEach(function(key){ - delete metadata[key] - }) - }) - } - }], + delete metadata[key] }) }) } }], // XXX merge multiple collections... // ...this can be called multiple times pre single load, once // per merged index... @@ -1705,14 +1658,12 @@ module.Collection = core.ImageGridFeatures.Feature({ .map(function(k){ return index[k] ? index[k].gid || index[k].title || k : k }) if(order.length > 0){ - res.collection_order = order - } + res.collection_order = order } // collection data... Object.keys(index).forEach(function(gid){ if(index[gid] === false){ - return - } + return } //var title = index[gid] var title = index[gid].title || index[gid] @@ -1727,14 +1678,10 @@ module.Collection = core.ImageGridFeatures.Feature({ } if(index[gid].count){ - m.count = index[gid].count - } - }) - } + m.count = index[gid].count } }) } if(Object.keys(collections).length > 0){ - res.collections = collections - } + res.collections = collections } // group collection data... // @@ -1764,10 +1711,7 @@ module.Collection = core.ImageGridFeatures.Feature({ // other stuff -> collection data... } else { - data[key] = json[k] - } - } - }) + data[key] = json[k] } } }) // XXX prepare collection data for loading... Object.keys(collection_data) @@ -1959,17 +1903,13 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ ;(this.crop_stack || []) .forEach(function(d){ d.tags = tags }) - this.data.tags = tags - } - }], + this.data.tags = tags } }], // remove tags from unloaded collections... ['collectionUnloaded', function(_, title){ if(title in this.collections && 'data' in this.collections[title]){ - delete this.collections[title].data.tags - } - }], + delete this.collections[title].data.tags } }], // remove tags when saving... ['saveCollection.pre', function(title, mode, force){ @@ -1979,8 +1919,7 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ // do not do anything for main collection unless force is true... if(title == MAIN_COLLECTION_TITLE && !force){ - return - } + return } // we need this to prevent copy of tags on first save... var new_set = !(title in (this.collections || {})) @@ -2006,8 +1945,7 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ }) // delete the .data.tags of the collections... - delete (this.collections[title].data || {}).__tags || {} - } + delete (this.collections[title].data || {}).__tags || {} } }], // prevent .uncollect(..) from removing global tags... // XXX this seems a bit hacky (???) @@ -2023,9 +1961,7 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ return function(){ // update local tags... - tags.untag(local_tag_names, gids) - } - }], + tags.untag(local_tag_names, gids) } }], // save .local_tags to json... // NOTE: we do not need to explicitly load anything as .load() // will load everything we need... @@ -2052,8 +1988,7 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ .forEach(function(tag){ rtags[tag] = tags.tags[tag] }) // overwrite the local tags for the base... Object.keys(ltags) - .forEach(function(tag){ rtags[tag] = ltags[tag] }) - } + .forEach(function(tag){ rtags[tag] = ltags[tag] }) } // clear tags for all collections... rc @@ -2061,8 +1996,7 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ // XXX skip unloaded collections... .filter(function(title){ return !!rc[title].data }) .forEach(function(title){ - rc[title].data.tags.tags = c[title].local_tags }) - }], + rc[title].data.tags.tags = c[title].local_tags }) }], // load collection local tags from .data.tags to .local_tags... // ...this is needed if the collections are fully loaded as part // of the index... @@ -2081,17 +2015,14 @@ module.CollectionTags = core.ImageGridFeatures.Feature({ var c = that.collections[title] if(!c || !c.data){ - return - } + return } var t = (c.data.tags || {}).tags || {} var lt = c.local_tags = c.local_tags || {} ;(that.config['collection-local-tags'] || []) .forEach(function(tag){ - lt[tag] = new Set(lt[tag] || t[tag] || []) }) - }) - }], + lt[tag] = new Set(lt[tag] || t[tag] || []) }) }) }], ], }) @@ -2169,8 +2100,7 @@ var AutoCollectionsActions = actions.Actions({ this.saveCollection(title, 'empty') this.collections[title].level_query = query - this.collections[title].source = source - }], + this.collections[title].source = source }], // XXX do we need real tag queries??? collectionAutoTagsLoader: ['- Collections/', @@ -2221,13 +2151,9 @@ var AutoCollectionsActions = actions.Actions({ tags = tags instanceof Array ? tags : [tags] if(tags.length == 0){ - return - } - + return } this.saveCollection(title, 'empty') - - this.collections[title].tag_query = tags - }], + this.collections[title].tag_query = tags }], }) var AutoCollections = @@ -2263,8 +2189,7 @@ module.AutoCollections = core.ImageGridFeatures.Feature({ var r = rc[title] if(!cur){ - return - } + return } // XXX is this the right way to go??? if('tag_query' in cur){ @@ -2273,11 +2198,7 @@ module.AutoCollections = core.ImageGridFeatures.Feature({ } else if('level_query' in cur){ r.level_query = cur.level_query if(cur.source){ - r.source = cur.source - } - } - }) - }], + r.source = cur.source } } }) }], ], }) @@ -2540,9 +2461,8 @@ var UICollectionActions = actions.Actions({ // rename was successful... if(to in that.collections){ - collections[collections.indexOf(from)] = to } }, - }) - }, { + collections[collections.indexOf(from)] = to } }, }) }, + { cls: 'collection-list', // focus current collection... selected: (last_used @@ -2580,8 +2500,7 @@ var UICollectionActions = actions.Actions({ .on('update', function(){ dialog.filter(JSON.stringify((that.collection || MAIN_COLLECTION_TITLE) .replace(/\$/g, ''))) - .addClass('highlighted') - }) + .addClass('highlighted') }) all = all || that.collection_order || [] if(defaults){ @@ -2606,9 +2525,7 @@ var UICollectionActions = actions.Actions({ // too often... clearTimeout(t) t = setTimeout(function(){ - dialog.update() - }, 100) - }) + dialog.update() }, 100) }) return c }) // containing collections... @@ -2634,23 +2551,16 @@ var UICollectionActions = actions.Actions({ to_remove: to_remove, itemopen: function(_, title){ var i = to_remove.indexOf(title) - i >= 0 ? to_remove.splice(i, 1) : to_remove.push(title) - - dialog.update() - }, + dialog.update() }, itemedit: function(_, from, to){ that.renameCollection(from, to) - all[all.indexOf(from)] = to - - that.collection_order = all - }, + that.collection_order = all }, }) - : make.Empty('No collections...') - }) + : make.Empty('No collections...') }) .close(function(){ that.collection_order = all @@ -2659,9 +2569,7 @@ var UICollectionActions = actions.Actions({ && to_remove.indexOf(title.replace(/\$/g, '')) < 0 && that.collect(gid, title) }) to_remove.forEach(function(title){ - that.uncollect(gid, title) }) - }) - })], + that.uncollect(gid, title) }) }) })], // Collection actions with collection selection... @@ -2717,9 +2625,7 @@ var UICollectionActions = actions.Actions({ this.ensureCollection(title) .then(function(collection){ var images = collection.data.getImages('all') - - that.crop(images, false) - }) }, + that.crop(images, false) }) }, null, { last_used: false })], cropOutImagesInCollection: ['Collections|Crop/Remove collection images from crop...', @@ -2731,8 +2637,7 @@ var UICollectionActions = actions.Actions({ var to_remove = collection.data.getImages('all') var images = that.data.getImages('loaded') .filter(function(gid){ return to_remove.indexOf(gid) < 0 }) - that.crop(images, false) - }) }, + that.crop(images, false) }) }, null, { last_used: false })], @@ -2865,23 +2770,19 @@ module.UICollection = core.ImageGridFeatures.Feature({ ], function(_, gids, collection){ (collection == null || this.collection == collection) - && this.reload(true) - }], + && this.reload(true) }], // maintain crop viewer state when loading/unloading collections... ['load clear reload collectionLoading collectionUnloaded', function(){ if(!this.dom){ - return - } + return } this.dom[this.collection ? 'addClass' : 'removeClass']('collection-mode') - this.dom[this.cropped ? 'addClass' - : 'removeClass']('crop-mode') - }], + : 'removeClass']('crop-mode') }], ], }) @@ -2917,7 +2818,9 @@ var CollectionMarksActions = actions.Actions({ return this.collect(this.marked, collection) }], uncollectMarked: ['Collections|Mark/Remove marked from collection', {mode: function(){ - return (!this.collection || this.marked.length == 0) && 'disabled' }}, + return (!this.collection + || this.marked.length == 0) + && 'disabled' }}, function(collection){ return this.uncollect(this.marked, collection) }], @@ -2964,7 +2867,8 @@ var UICollectionMarksActions = actions.Actions({ that.toggleMark(images, 'on') }) })], addMarkedToCollection: ['Collections|Mark/Add marked to $collection...', {mode: function(){ - return this.marked.length == 0 && 'disabled' }}, + return this.marked.length == 0 + && 'disabled' }}, mixedModeCollectionAction(function(title){ this.collectMarked(title) })], }) @@ -3015,8 +2919,7 @@ var FileSystemCollectionActions = actions.Actions({ // if data is present, do not reload... if(state.data){ - return - } + return } // XXX get a logger... logger = logger || this.logger @@ -3035,10 +2938,7 @@ var FileSystemCollectionActions = actions.Actions({ .then(function(res){ // load the collection data... that.collections[title].data = - that.prepareIndexForLoad(res[path]).data - }) - })) - }], + that.prepareIndexForLoad(res[path]).data }) })) }], // XXX revise... // XXX this should be generic... (???) @@ -3050,8 +2950,7 @@ var FileSystemCollectionActions = actions.Actions({ var that = this if(this.changes === true || this.changes === undefined){ - return - } + return } // XXX get a logger... logger = logger || this.logger @@ -3073,10 +2972,7 @@ var FileSystemCollectionActions = actions.Actions({ logger && logger.emit('title', title) c.count = c.data.length - delete c.data - } - }) - }], + delete c.data } }) }], importCollectionsFromPath: ['- Collections|File/Import collections from path', function(path){