mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-28 18:00:09 +00:00
working on the tag system...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
84f737e554
commit
c9d3ad1736
@ -55,6 +55,105 @@ module.PersistentTags = core.ImageGridFeatures.Feature({
|
||||
//
|
||||
|
||||
var TagUIActions = actions.Actions({
|
||||
config: {
|
||||
// XXX should this be a list or a tree (list of paths)????
|
||||
// XXX support tag chains...
|
||||
// ...a chain is a means to combine tags like:
|
||||
// vehicle/car + color/red can be represented as car:red
|
||||
// this would mean that an image both has a 'car' and 'red'
|
||||
// but also specifically states that it contains a 'red car'
|
||||
// ...need to think of a good way to implement this...
|
||||
// ...the obvious way is when tagging with 'car:red' to
|
||||
// tag the image with: 'car', 'red' and 'car:red'
|
||||
// Q: is 'car:red' the same as 'red:car'??
|
||||
// ...feels that it should be...
|
||||
// XXX support tag paths as tags???
|
||||
// ...a tag can be part of several paths, we should be able
|
||||
// to use a specific one...
|
||||
// ...an example would be something like:
|
||||
// species/man
|
||||
// people/man
|
||||
// Q: do we need this???
|
||||
// Q: can this be implemented via chains???
|
||||
// XXX should we have associative aliases???
|
||||
// like:
|
||||
// 'men' is 'many:man'
|
||||
// 'women' is 'many:woman'
|
||||
// ...
|
||||
// XXX need a tree api to query the tag tree...
|
||||
// .tagParents(tag)
|
||||
// .tagChildren(tag)
|
||||
// .tagOrpahns()
|
||||
// ...
|
||||
// XXX should this be here or in .data???
|
||||
// XXX do a whitepaper (RFC?) on this system when done...
|
||||
'base-tags': [
|
||||
'count',
|
||||
'count/one',
|
||||
'count/two',
|
||||
'count/many',
|
||||
|
||||
'people',
|
||||
'people/crowd',
|
||||
'people/group',
|
||||
'people/couple',
|
||||
'people/man',
|
||||
'people/woman',
|
||||
'people/lady',
|
||||
'people/girl',
|
||||
'people/boy',
|
||||
'people/child',
|
||||
|
||||
'name',
|
||||
|
||||
'role',
|
||||
'role/photographer',
|
||||
'role/artist',
|
||||
'role/painter',
|
||||
|
||||
'color',
|
||||
'color/red',
|
||||
'color/green',
|
||||
'color/blue',
|
||||
'color/white',
|
||||
'color/black',
|
||||
'color/orange',
|
||||
'color/yellow',
|
||||
'color/gray',
|
||||
|
||||
// XXX should this be 'type' or something else???
|
||||
'genre',
|
||||
'genre/documentary',
|
||||
'genre/landscape',
|
||||
'genre/portrait',
|
||||
'genre/wildlife',
|
||||
'genre/macro',
|
||||
'genre/abstract',
|
||||
'genre/sport',
|
||||
|
||||
'activity',
|
||||
'activity/sport',
|
||||
'activity/sport/football',
|
||||
'activity/sport/american-football',
|
||||
'activity/sport/baseball',
|
||||
'activity/sport/tennis',
|
||||
// ...
|
||||
],
|
||||
},
|
||||
|
||||
// Tag cloud/list...
|
||||
//
|
||||
// XXX move this to the base tags feature...
|
||||
get tags(){
|
||||
return []
|
||||
// XXX load this from a file...
|
||||
.concat((this.config['base-tags'] || [])
|
||||
// split tag paths...
|
||||
.map(function(e){ return e.split(/[\\\/]/g) })
|
||||
.flat())
|
||||
.concat(Object.keys((this.data || {}).tags || {}))
|
||||
.unique() },
|
||||
|
||||
// XXX use global tag list... (???)
|
||||
// XXX make this reusable...
|
||||
showTagCloud: ['Tag|Edit|Image/$Tags...',
|
||||
@ -94,7 +193,7 @@ var TagUIActions = actions.Actions({
|
||||
// - partial - some are tagged
|
||||
// - off - none are tagged
|
||||
// XXX add key binding to delete a tag...
|
||||
Object.keys(that.data.tags || {})
|
||||
that.tags
|
||||
.sort()
|
||||
.map(function(tag){
|
||||
return make(tag, {
|
||||
@ -155,6 +254,14 @@ var TagUIActions = actions.Actions({
|
||||
widgets.makeUIDialog(function(){
|
||||
// XXX
|
||||
})],
|
||||
|
||||
|
||||
// Tag tree...
|
||||
//
|
||||
get tagTree(){
|
||||
// XXX
|
||||
},
|
||||
|
||||
})
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user