mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 19:00:09 +00:00
now filterGIDs(..) accepts negative filters -- preceded with '\!' + added an experemental key binding for alignRibbons(..)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
c38cda3746
commit
876a6cb414
@ -325,6 +325,10 @@ function filterImagesDialog(){
|
|||||||
+'All filter text fields support\n'
|
+'All filter text fields support\n'
|
||||||
+'regular expressions.\n'
|
+'regular expressions.\n'
|
||||||
+'\n'
|
+'\n'
|
||||||
|
+'Adding a "!" to any text filter\n'
|
||||||
|
+'will negate it, selecting unmatching\n'
|
||||||
|
+'images only.\n'
|
||||||
|
+'\n'
|
||||||
+'Only non-empty fields are used\n'
|
+'Only non-empty fields are used\n'
|
||||||
+'for filtering.',
|
+'for filtering.',
|
||||||
cfg,
|
cfg,
|
||||||
|
|||||||
32
ui/data.js
32
ui/data.js
@ -1474,6 +1474,13 @@ function makePrevFromListAction(get_closest, get_list, restrict_to_ribbon){
|
|||||||
// - if image attribute value is a list, the pattern must match at
|
// - if image attribute value is a list, the pattern must match at
|
||||||
// least one element of the list (OR)
|
// least one element of the list (OR)
|
||||||
//
|
//
|
||||||
|
// A filter can be negated by prepending with '!', this will change the
|
||||||
|
// matching rules:
|
||||||
|
// - an attribute is non-existent
|
||||||
|
// - an attribute does not match the filter
|
||||||
|
// - if image attribute value is a list, the pattern must not match any
|
||||||
|
// of the elements (AND)
|
||||||
|
//
|
||||||
// If gids is passed, it will be used as the source, otherwise
|
// If gids is passed, it will be used as the source, otherwise
|
||||||
// getLoadedGIDs(..) will be used to produce a list of gids.
|
// getLoadedGIDs(..) will be used to produce a list of gids.
|
||||||
//
|
//
|
||||||
@ -1491,29 +1498,38 @@ function filterGIDs(filter, gids, data, images){
|
|||||||
// normalize filter...
|
// normalize filter...
|
||||||
for(var k in filter){
|
for(var k in filter){
|
||||||
if(typeof(filter[k]) == typeof('str')){
|
if(typeof(filter[k]) == typeof('str')){
|
||||||
filter[k] = RegExp(filter[k])
|
if(filter[k][0] == '!'){
|
||||||
|
filter[k] = [ RegExp(filter[k].slice(1)), false ]
|
||||||
|
} else {
|
||||||
|
filter[k] = [ RegExp(filter[k]), true ]
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
filter[k] = [ RegExp(filter[k]), true ]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var res = gids.filter(function(gid){
|
var res = gids.filter(function(gid){
|
||||||
var img = images[gid]
|
var img = images[gid]
|
||||||
for(var k in filter){
|
for(var k in filter){
|
||||||
// if key does not exist we have no match...
|
var f = filter[k]
|
||||||
if(!(k in img)){
|
var exp = f[1]
|
||||||
return false
|
f = f[0]
|
||||||
|
var val = img[k]
|
||||||
|
|
||||||
|
// if key does not exist...
|
||||||
|
if(val == null){
|
||||||
|
return exp ? false : true
|
||||||
}
|
}
|
||||||
|
|
||||||
var f = filter[k]
|
|
||||||
var val = img[k]
|
|
||||||
val = typeof(val) == typeof('str') ? val.trim() : val
|
val = typeof(val) == typeof('str') ? val.trim() : val
|
||||||
|
|
||||||
// value is a list, check items, at least one needs to match...
|
// value is a list, check items, at least one needs to match...
|
||||||
if(val.constructor.name == 'Array'
|
if(val.constructor.name == 'Array'
|
||||||
&& val.filter(function(e){ return f.test(e) }).length < 1){
|
&& val.filter(function(e){ return f.test(e) == exp }).length < 1){
|
||||||
return false
|
return false
|
||||||
|
|
||||||
// check the whole value...
|
// check the whole value...
|
||||||
} else if(!f.test(val)){
|
} else if(f.test(val) != exp){
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -369,6 +369,15 @@ var KEYBOARD_CONFIG = {
|
|||||||
'ctrl+shift': 'next-screen',
|
'ctrl+shift': 'next-screen',
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// align to base ribbon...
|
||||||
|
// XXX base ribbon concept is not yet fully defined...
|
||||||
|
Down: {
|
||||||
|
'ctrl+alt': doc('Align sorted section to current ribbon (EXPERIMENTAL)',
|
||||||
|
function(){
|
||||||
|
alignRibbons()
|
||||||
|
}),
|
||||||
|
},
|
||||||
|
|
||||||
// zooming...
|
// zooming...
|
||||||
'#1': doc('Fit one image', function(){ fitNImages(1) }),
|
'#1': doc('Fit one image', function(){ fitNImages(1) }),
|
||||||
'#2': doc('Fit two images', function(){ fitNImages(2) }),
|
'#2': doc('Fit two images', function(){ fitNImages(2) }),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user