mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-12-18 01:01:40 +00:00
added a basic tags implementations to data.js -- boy, I hate manual super calls!
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
d281b6e06e
commit
b972835da0
@ -1815,16 +1815,205 @@ var DataPrototype = {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************/
|
||||||
|
|
||||||
|
var DataWithTagsPrototype = {
|
||||||
|
|
||||||
|
// XXX need a unified init/dump/load scheme...
|
||||||
|
loadJSON: function(json){
|
||||||
|
json = typeof(json) == typeof('str') ? JSON.parse(json) : json
|
||||||
|
|
||||||
|
// XXX hate manual super calls...
|
||||||
|
DataWithTagsPrototype.__proto__.loadJSON.call(this, json)
|
||||||
|
|
||||||
|
if(json.tags != null){
|
||||||
|
// XXX should we make copy here???
|
||||||
|
this.tags = json.tags
|
||||||
|
this.sortTags()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
dumpJSON: function(){
|
||||||
|
// XXX hate manual super calls...
|
||||||
|
var res = DataWithTagsPrototype.__proto__.dumpJSON.call(this)
|
||||||
|
|
||||||
|
if(this.tags != null){
|
||||||
|
var tags = this.tags
|
||||||
|
res.tags = {}
|
||||||
|
Object.keys(tags).forEach(function(tag){
|
||||||
|
res.tags[tag] = tags[tag].compact()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
},
|
||||||
|
|
||||||
|
sortTags: function(){
|
||||||
|
var that = this
|
||||||
|
var tags = this.tags
|
||||||
|
|
||||||
|
if(tags == null){
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.keys(tags).forEach(function(tag){
|
||||||
|
tags[tag] = that.makeSparseImages(tags[tag])
|
||||||
|
})
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
|
||||||
|
tag: function(tags, gids){
|
||||||
|
tags = tags.constructor !== Array ? [tags] : tags
|
||||||
|
|
||||||
|
gids = gids == null ? this.getImage() : gids
|
||||||
|
gids = gids.constructor !== Array ? [gids] : gids
|
||||||
|
|
||||||
|
if(this.tags == null){
|
||||||
|
this.tags = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
var tagset = this.tags
|
||||||
|
var order = this.order
|
||||||
|
tags.forEach(function(tag){
|
||||||
|
gids.forEach(function(gid){
|
||||||
|
if(tagset[tag] == null){
|
||||||
|
tagset[tag] = []
|
||||||
|
}
|
||||||
|
tagset[tag][order.indexOf(gid)] = gid
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
untag: function(tags, gids){
|
||||||
|
tags = tags.constructor !== Array ? [tags] : tags
|
||||||
|
|
||||||
|
gids = gids == null ? this.getImage() : gids
|
||||||
|
gids = gids.constructor !== Array ? [gids] : gids
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
var tagset = this.tags
|
||||||
|
var order = this.order
|
||||||
|
tags.forEach(function(tag){
|
||||||
|
gids.forEach(function(gid){
|
||||||
|
delete tagset[tag][order.indexOf(gid)]
|
||||||
|
})
|
||||||
|
if(tagset[tag].length == 0){
|
||||||
|
delete tagset[tag]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return this
|
||||||
|
},
|
||||||
|
|
||||||
|
getTags: function(gids){
|
||||||
|
gids = gids == null ? this.getImage() : gids
|
||||||
|
gids = gids.constructor !== Array ? [gids] : gids
|
||||||
|
|
||||||
|
if(this.tags == null){
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
var tags = this.tags
|
||||||
|
var order = this.order
|
||||||
|
|
||||||
|
// index the gids...
|
||||||
|
var indexes = gids.map(function(gid){ return order.indexOf(gid) })
|
||||||
|
|
||||||
|
// return only those tags that have at least one non-null gid index...
|
||||||
|
return Object.keys(tags).filter(function(tag){
|
||||||
|
return indexes.filter(function(i){
|
||||||
|
return tags[tag][i] != null
|
||||||
|
}).length > 0
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
// selectors...
|
||||||
|
getTaggedByAny: function(tags){
|
||||||
|
tags = tags.constructor !== Array ? [tags] : tags
|
||||||
|
|
||||||
|
var res = []
|
||||||
|
|
||||||
|
if(this.tags == null){
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
var tagset = this.tags
|
||||||
|
tags.forEach(function(tag){
|
||||||
|
if(tag in tagset){
|
||||||
|
that.makeSparseImages(tagset[tag], res)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return res.compact()
|
||||||
|
},
|
||||||
|
getTaggedByAll: function(tags){
|
||||||
|
tags = tags.constructor !== Array ? [tags] : tags
|
||||||
|
|
||||||
|
if(this.tags == null){
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
var index = []
|
||||||
|
var l = tags.length
|
||||||
|
|
||||||
|
// count how many of the tags each image is tagged...
|
||||||
|
var that = this
|
||||||
|
var tagset = this.tags
|
||||||
|
tags.forEach(function(tag){
|
||||||
|
if(tag in tagset){
|
||||||
|
Object.keys(tagset[tag]).forEach(function(n){
|
||||||
|
if(index[n] == null){
|
||||||
|
index[n] = 1
|
||||||
|
} else {
|
||||||
|
index[n] += 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// filter only the images tagged by all of the tags...
|
||||||
|
var order = this.order
|
||||||
|
var res = []
|
||||||
|
var i = index.indexOf(l)
|
||||||
|
while(i != -1){
|
||||||
|
res.push(order[i])
|
||||||
|
delete index[i]
|
||||||
|
|
||||||
|
i = index.indexOf(l)
|
||||||
|
}
|
||||||
|
|
||||||
|
return res
|
||||||
|
},
|
||||||
|
}
|
||||||
|
DataWithTagsPrototype.__proto__ = DataPrototype
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
|
|
||||||
// Main Data object...
|
// Main Data object...
|
||||||
var Data =
|
var BaseData =
|
||||||
module.Data =
|
module.BaseData =
|
||||||
object.makeConstructor('Data',
|
object.makeConstructor('BaseData',
|
||||||
DataClassPrototype,
|
DataClassPrototype,
|
||||||
DataPrototype)
|
DataPrototype)
|
||||||
|
|
||||||
|
|
||||||
|
var DataWithTags =
|
||||||
|
module.DataWithTags =
|
||||||
|
object.makeConstructor('DataWithTags',
|
||||||
|
DataClassPrototype,
|
||||||
|
DataWithTagsPrototype)
|
||||||
|
|
||||||
|
|
||||||
|
var Data =
|
||||||
|
module.Data = DataWithTags
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* vim:set ts=4 sw=4 : */
|
* vim:set ts=4 sw=4 : */
|
||||||
|
|||||||
@ -1338,7 +1338,8 @@ Array.prototype.compact = function(){
|
|||||||
// like .length but for sparse arrays will return the element count...
|
// like .length but for sparse arrays will return the element count...
|
||||||
// XXX make this a prop...
|
// XXX make this a prop...
|
||||||
Array.prototype.len = function(){
|
Array.prototype.len = function(){
|
||||||
return this.compact().length
|
//return this.compact().length
|
||||||
|
return Object.keys(this).length
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,44 +0,0 @@
|
|||||||
/**********************************************************************
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
define(function(require){ var module = {}
|
|
||||||
console.log('>>> tags')
|
|
||||||
|
|
||||||
//var DEBUG = DEBUG != null ? DEBUG : true
|
|
||||||
|
|
||||||
var object = require('object')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
|
||||||
|
|
||||||
var TagsClassPrototype = {}
|
|
||||||
|
|
||||||
|
|
||||||
var TagsPrototype = {
|
|
||||||
loadJSON: function(json){
|
|
||||||
},
|
|
||||||
dumpJSON: function(){
|
|
||||||
},
|
|
||||||
|
|
||||||
_reset: function(){
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
|
||||||
|
|
||||||
var Tags =
|
|
||||||
module.Tags =
|
|
||||||
object.makeConstructor('Tags',
|
|
||||||
TagsClassPrototype,
|
|
||||||
TagsPrototype)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* vim:set ts=4 sw=4 : */
|
|
||||||
return module })
|
|
||||||
Loading…
x
Reference in New Issue
Block a user