mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-11-01 03:40:09 +00:00
added multi-part text filter to browser dialog...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
cca24fad85
commit
43496dafc8
@ -323,11 +323,21 @@ var BrowserPrototype = {
|
|||||||
// elements will be searched too.
|
// elements will be searched too.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// TODO pattern modes:
|
// Extended string patterns:
|
||||||
// - lazy match
|
//
|
||||||
// abc -> *abc* -> ^.*abc.*$
|
// The pattern string is split by whitespace and each resulting
|
||||||
// ab cd -> *ab*cd* -> ^.*ab.*cd.*$
|
// substring is searched independently.
|
||||||
// - glob
|
// Order is not considered.
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
// 'aaa' - matches any element containing 'aaa'
|
||||||
|
// same as: /aaa/
|
||||||
|
// 'aa bb' - matches any element containing both 'aa'
|
||||||
|
// AND 'bb' in any order.
|
||||||
|
// same as: /aa.*bb|bb.*aa/
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//
|
||||||
// TODO need to support glob / nested patterns...
|
// TODO need to support glob / nested patterns...
|
||||||
// ..things like /**/a*/*moo/
|
// ..things like /**/a*/*moo/
|
||||||
//
|
//
|
||||||
@ -376,17 +386,21 @@ var BrowserPrototype = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// string...
|
// string...
|
||||||
|
// NOTE: this supports several space-separated patterns.
|
||||||
// XXX support glob...
|
// XXX support glob...
|
||||||
} else if(typeof(pattern) == typeof('str')){
|
} else if(typeof(pattern) == typeof('str')){
|
||||||
|
var pl = pattern.trim().split(/\s+/)
|
||||||
var filter = function(i, e){
|
var filter = function(i, e){
|
||||||
e = $(e)
|
e = $(e)
|
||||||
var t = e.text()
|
var t = e.text()
|
||||||
var i = t.search(pattern)
|
for(var p=0; p < pl.length; p++){
|
||||||
if(!(i >= 0)){
|
var i = t.search(pl[p])
|
||||||
if(rejected){
|
if(!(i >= 0)){
|
||||||
rejected.call(e, i, e)
|
if(rejected){
|
||||||
|
rejected.call(e, i, e)
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@ -411,7 +425,7 @@ var BrowserPrototype = {
|
|||||||
// internal actions...
|
// internal actions...
|
||||||
|
|
||||||
// NOTE: this uses .filter(..) for actual filtering...
|
// NOTE: this uses .filter(..) for actual filtering...
|
||||||
// XXX revise API...
|
// XXX revise API -- seems a bit overcomplicated...
|
||||||
showFiltered: function(pattern){
|
showFiltered: function(pattern){
|
||||||
var that = this
|
var that = this
|
||||||
var browser = this.dom
|
var browser = this.dom
|
||||||
@ -426,6 +440,7 @@ var BrowserPrototype = {
|
|||||||
|
|
||||||
// basic filter...
|
// basic filter...
|
||||||
} else {
|
} else {
|
||||||
|
var p = RegExp('(' + pattern.trim().split(/\s+/).join('|') + ')', 'g')
|
||||||
this.filter(pattern,
|
this.filter(pattern,
|
||||||
// rejected...
|
// rejected...
|
||||||
function(i, e){
|
function(i, e){
|
||||||
@ -441,10 +456,12 @@ var BrowserPrototype = {
|
|||||||
false)
|
false)
|
||||||
// passed...
|
// passed...
|
||||||
.removeClass('filtered-out')
|
.removeClass('filtered-out')
|
||||||
|
// NOTE: this will mess up (clear) any highlighting that was
|
||||||
|
// present before...
|
||||||
.each(function(_, e){
|
.each(function(_, e){
|
||||||
e = $(e)
|
e = $(e)
|
||||||
var t = e.text()
|
var t = e.text()
|
||||||
e.html(t.replace(pattern, pattern.bold()))
|
e.html(t.replace(p, '<b>$1</b>'))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -753,13 +770,15 @@ var BrowserPrototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
// extension methods...
|
// extension methods...
|
||||||
// XXX this is wrong...
|
|
||||||
// ...need to actually open something...
|
// Open action...
|
||||||
|
//
|
||||||
open: function(path){
|
open: function(path){
|
||||||
path = path || this.path
|
path = path || this.path
|
||||||
var m = this.options.open
|
var m = this.options.open
|
||||||
return m ? m.apply(this, arguments) : path
|
return m ? m.apply(this, arguments) : path
|
||||||
},
|
},
|
||||||
|
|
||||||
// List the path...
|
// List the path...
|
||||||
//
|
//
|
||||||
// This will get passed a path and an item constructor and should
|
// This will get passed a path and an item constructor and should
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user