mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-29 18:30:09 +00:00 
			
		
		
		
	working on text search in tags...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									b48441e2cc
								
							
						
					
					
						commit
						fca01b2699
					
				| @ -52,8 +52,8 @@ var TagsClassPrototype = { | |||||||
| 	// 			c:b/a -> b:c/a 		- sort sets within pats (current)
 | 	// 			c:b/a -> b:c/a 		- sort sets within pats (current)
 | ||||||
| 	// 		or
 | 	// 		or
 | ||||||
| 	// 			c:b/a -> b/a:c		- sort paths within sets
 | 	// 			c:b/a -> b/a:c		- sort paths within sets
 | ||||||
| 	// XXX should this be .normalizeTags(..) ???
 |  | ||||||
| 	// XXX should we support priority braces, i.e. c:(b/a)
 | 	// XXX should we support priority braces, i.e. c:(b/a)
 | ||||||
|  | 	// XXX should this be .normalizeTags(..) ???
 | ||||||
| 	normalize: function(...tags){ | 	normalize: function(...tags){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		var tagRemovedChars = (this.config || {})['tagRemovedChars'] | 		var tagRemovedChars = (this.config || {})['tagRemovedChars'] | ||||||
| @ -72,10 +72,10 @@ var TagsClassPrototype = { | |||||||
| 					.toLowerCase() | 					.toLowerCase() | ||||||
| 					.replace(tagRemovedChars, '') | 					.replace(tagRemovedChars, '') | ||||||
| 					// sort sets within paths...
 | 					// sort sets within paths...
 | ||||||
| 					.split(/[\\\/]/g) | 					.split(/[\\\/]+/g) | ||||||
| 						.map(function(e){ | 						.map(function(e){ | ||||||
| 							return e | 							return e | ||||||
| 								.split(/:/g) | 								.split(/:+/g) | ||||||
| 								.sort() | 								.sort() | ||||||
| 								.join(':') }) | 								.join(':') }) | ||||||
| 						.join('/') }) | 						.join('/') }) | ||||||
| @ -89,6 +89,15 @@ var TagsClassPrototype = { | |||||||
| 			res.pop()  | 			res.pop()  | ||||||
| 			: res | 			: res | ||||||
| 	}, | 	}, | ||||||
|  | 	splitTag: function(...tags){ | ||||||
|  | 		tags = (tags.length == 1 && tags[0] instanceof Array) ?  | ||||||
|  | 			tags.pop()  | ||||||
|  | 			: tags | ||||||
|  | 		return this.normalize(tags) | ||||||
|  | 			.map(function(tag){ | ||||||
|  | 				return tag.split(/[:\\\/]/g) }) | ||||||
|  | 			.flat() | ||||||
|  | 			.unique() }, | ||||||
| 
 | 
 | ||||||
| 	// Query parser...
 | 	// Query parser...
 | ||||||
| 	//
 | 	//
 | ||||||
| @ -226,10 +235,12 @@ var TagsPrototype = { | |||||||
| 
 | 
 | ||||||
| 	// Utils...
 | 	// Utils...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// proxy to Tags.normalize(..)
 | 	// proxies to class methods...
 | ||||||
| 	// XXX Q: should this be .normalizeTags(..) ???
 | 	// XXX Q: should this be .normalizeTags(..) ???
 | ||||||
| 	normalize: function(...tags){ | 	normalize: function(...tags){ | ||||||
| 		return this.constructor.normalize.call(this, ...tags) }, | 		return this.constructor.normalize.call(this, ...tags) }, | ||||||
|  | 	splitTag: function(...tags){ | ||||||
|  | 		return this.constructor.splitTag.call(this, ...tags) }, | ||||||
| 	// NOTE: the query parser is generic and thus is implemented in the
 | 	// NOTE: the query parser is generic and thus is implemented in the
 | ||||||
| 	// 		constructor...
 | 	// 		constructor...
 | ||||||
| 	parseQuery: function(query){ | 	parseQuery: function(query){ | ||||||
| @ -365,13 +376,29 @@ var TagsPrototype = { | |||||||
| 	// XXX should we .match(..) the results???
 | 	// XXX should we .match(..) the results???
 | ||||||
| 	// 		...not sure if this is needed as we are taking .tags() as input...
 | 	// 		...not sure if this is needed as we are taking .tags() as input...
 | ||||||
| 	// 		on the other hand we'd need to normalize the search string somehow...
 | 	// 		on the other hand we'd need to normalize the search string somehow...
 | ||||||
|  | 	// 		...this will likely force us into using a special regexp-like 
 | ||||||
|  | 	// 		search syntax with special meanings given to ':' and '/' (and '\\')
 | ||||||
| 	search: function(str, tags){ | 	search: function(str, tags){ | ||||||
| 		// XXX should we do any pre-processing???
 | 		// XXX should we do any pre-processing???
 | ||||||
| 		str = str instanceof RegExp ? str : RegExp(str) | 		str = str instanceof RegExp ? str : RegExp(str) | ||||||
| 		return (tags || this.tags()) | 		return (tags || this._tags()) | ||||||
| 			.filter(function(tag){ | 			.filter(function(tag){ | ||||||
| 				return str.test(tag) }) }, | 				return str.test(tag) }) }, | ||||||
| 
 | 
 | ||||||
|  | 	// XXX find a logical name...
 | ||||||
|  | 	// 		.searchable(..)
 | ||||||
|  | 	// 		.searchableTags(..)
 | ||||||
|  | 	// 		.expandedTags(..)
 | ||||||
|  | 	// 		...
 | ||||||
|  | 	// XXX should we combine this with tags???
 | ||||||
|  | 	_tags: function(...args){ | ||||||
|  | 		var that = this | ||||||
|  | 		return this.tags(...args) | ||||||
|  | 			// include original list...
 | ||||||
|  | 			.run(function(){ | ||||||
|  | 				return this.concat(that.splitTag(this)) }) | ||||||
|  | 			.unique() }, | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 	// Introspection...
 | 	// Introspection...
 | ||||||
| 	//
 | 	//
 | ||||||
| @ -400,6 +427,9 @@ var TagsPrototype = { | |||||||
| 	//
 | 	//
 | ||||||
| 	// NOTE: this includes all the .persistent tags as well as all the 
 | 	// NOTE: this includes all the .persistent tags as well as all the 
 | ||||||
| 	// 		tags actually used.
 | 	// 		tags actually used.
 | ||||||
|  | 	//
 | ||||||
|  | 	// XXX should this return split values???
 | ||||||
|  | 	// 		i.e. 'red:car' -> ['red', 'car']
 | ||||||
| 	tags: function(value, ...tags){ | 	tags: function(value, ...tags){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user