mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	changing the .match(..) defaults...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									d816c3eaf4
								
							
						
					
					
						commit
						5b7b7f9257
					
				| @ -1923,6 +1923,12 @@ var CollectionTagsActions = actions.Actions({ | |||||||
| 			return this.uncollect(this.data.tagQuery(query), collection) }], | 			return this.uncollect(this.data.tagQuery(query), collection) }], | ||||||
| }) | }) | ||||||
| 
 | 
 | ||||||
|  | // XXX need to either extend this to use the tag API to support the 
 | ||||||
|  | // 		compound tags or explicitly restrict this to specific tags...
 | ||||||
|  | // 		...currently this in places uses the API and in other places
 | ||||||
|  | // 		directly accesses .__index -- this may lead to odd cases where
 | ||||||
|  | // 		not all tags get loaded/unloaded in spite of correctly conforming 
 | ||||||
|  | // 		to the API specs...
 | ||||||
| var CollectionTags =  | var CollectionTags =  | ||||||
| module.CollectionTags = core.ImageGridFeatures.Feature({ | module.CollectionTags = core.ImageGridFeatures.Feature({ | ||||||
| 	title: 'Collection tag handling', | 	title: 'Collection tag handling', | ||||||
|  | |||||||
| @ -434,6 +434,10 @@ var TagUIActions = actions.Actions({ | |||||||
| 	// Tag cloud/list...
 | 	// Tag cloud/list...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// XXX move this to the base tags feature...
 | 	// XXX move this to the base tags feature...
 | ||||||
|  | 	// XXX this is wrong, should point to either:
 | ||||||
|  | 	// 			.data.tags.tags()
 | ||||||
|  | 	// 		or:
 | ||||||
|  | 	//			.data.tags
 | ||||||
| 	get tags(){ | 	get tags(){ | ||||||
| 		return [] | 		return [] | ||||||
| 			// XXX load this from a file...
 | 			// XXX load this from a file...
 | ||||||
|  | |||||||
| @ -23,6 +23,8 @@ | |||||||
| * 			...values should have the least impact on performance. | * 			...values should have the least impact on performance. | ||||||
| * 	- investigate support for sqlite3 | * 	- investigate support for sqlite3 | ||||||
| * 		- will it be faster? | * 		- will it be faster? | ||||||
|  | * 	- split this out to an npm module... | ||||||
|  | * 		- this would require lib/util to also get split out... | ||||||
| * | * | ||||||
| * | * | ||||||
| * XXX Q: should we do .optimizeTags(tag) on .tag(tag)??? | * XXX Q: should we do .optimizeTags(tag) on .tag(tag)??? | ||||||
| @ -100,7 +102,7 @@ var BaseTagsClassPrototype = { | |||||||
| 	//
 | 	//
 | ||||||
| 	// NOTE: this is not used for anything but .replace(..), thus 'g' 
 | 	// NOTE: this is not used for anything but .replace(..), thus 'g' 
 | ||||||
| 	// 		flag is required here...
 | 	// 		flag is required here...
 | ||||||
| 	TAG_ILLEGAL_CHARS: /[\s-_]/g, | 	TAG_ILLEGAL_CHARS: /[\s-_"']/g, | ||||||
| 
 | 
 | ||||||
| 	// NOTE: do not include 'g' flag here, it will make the RE objects
 | 	// NOTE: do not include 'g' flag here, it will make the RE objects
 | ||||||
| 	// 		stateful which will yield very unpredictable results from 
 | 	// 		stateful which will yield very unpredictable results from 
 | ||||||
| @ -116,6 +118,8 @@ var BaseTagsClassPrototype = { | |||||||
| 
 | 
 | ||||||
| 	// Utils...
 | 	// Utils...
 | ||||||
| 	//
 | 	//
 | ||||||
|  | 	isQuoted: function(tag){ | ||||||
|  | 		return /^\s*(['"]).*\1\s*$/.test(tag) }, | ||||||
| 	//
 | 	//
 | ||||||
| 	// 	.splitSet(tag)
 | 	// 	.splitSet(tag)
 | ||||||
| 	// 	.splitSet(tag, ..)
 | 	// 	.splitSet(tag, ..)
 | ||||||
| @ -303,6 +307,15 @@ var BaseTagsPrototype = { | |||||||
| 	// 		...
 | 	// 		...
 | ||||||
| 	// 	}
 | 	// 	}
 | ||||||
| 	//
 | 	//
 | ||||||
|  | 	// XXX there are cases when it's simpler to access this directly, 
 | ||||||
|  | 	// 		thus, should this be renamed to something??
 | ||||||
|  | 	// 		like:
 | ||||||
|  | 	// 			.index
 | ||||||
|  | 	// 			.tag_value_index
 | ||||||
|  | 	// 			...
 | ||||||
|  | 	// 		...need to make it a bit less convenient to use directly but
 | ||||||
|  | 	// 		at the same time not feel like we are diving into something 
 | ||||||
|  | 	// 		very internal and restricted...
 | ||||||
| 	__index: null, | 	__index: null, | ||||||
| 
 | 
 | ||||||
| 	// Persistent tags...
 | 	// Persistent tags...
 | ||||||
| @ -349,13 +362,17 @@ var BaseTagsPrototype = { | |||||||
| 	// 		instance largely independent of its constructor and thus 
 | 	// 		instance largely independent of its constructor and thus 
 | ||||||
| 	// 		making it possible to use it as a mix-in (copy methods)
 | 	// 		making it possible to use it as a mix-in (copy methods)
 | ||||||
| 	// 		and other approaches...
 | 	// 		and other approaches...
 | ||||||
|  | 	isQuoted: BaseTagsClassPrototype.isQuoted,  | ||||||
| 	splitSet: BaseTagsClassPrototype.splitSet,  | 	splitSet: BaseTagsClassPrototype.splitSet,  | ||||||
| 	splitPath: BaseTagsClassPrototype.splitPath,  | 	splitPath: BaseTagsClassPrototype.splitPath,  | ||||||
| 	normalize: BaseTagsClassPrototype.normalize,  |  | ||||||
| 	splitTag: BaseTagsClassPrototype.splitTag,  | 	splitTag: BaseTagsClassPrototype.splitTag,  | ||||||
|  | 	joinSet: BaseTagsClassPrototype.joinSet,  | ||||||
|  | 	joinPath: BaseTagsClassPrototype.joinPath,  | ||||||
|  | 	normalize: BaseTagsClassPrototype.normalize,  | ||||||
| 	parseQuery: BaseTagsClassPrototype.parseQuery,  | 	parseQuery: BaseTagsClassPrototype.parseQuery,  | ||||||
| 	 | 	 | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| 	// Tag matching and filtering...
 | 	// Tag matching and filtering...
 | ||||||
| 	//
 | 	//
 | ||||||
| 	// Match tags directly...
 | 	// Match tags directly...
 | ||||||
| @ -470,8 +487,9 @@ var BaseTagsPrototype = { | |||||||
| 		} else { | 		} else { | ||||||
| 			var definitions = this.definitions | 			var definitions = this.definitions | ||||||
| 
 | 
 | ||||||
| 			var root = /^\s*[\\\/]/.test(a) | 			var quoted = this.isQuoted(a) | ||||||
| 			var base = /[\\\/]\s*$/.test(a) | 			var root = /^\s*['"]?[\\\/]/.test(a) | ||||||
|  | 			var base = /[\\\/]['"]?\s*$/.test(a) | ||||||
| 
 | 
 | ||||||
| 			a = this.normalize(a) | 			a = this.normalize(a) | ||||||
| 			// special case: *tag* pattern...
 | 			// special case: *tag* pattern...
 | ||||||
| @ -480,10 +498,24 @@ var BaseTagsPrototype = { | |||||||
| 				: a | 				: a | ||||||
| 			b = this.normalize(b) | 			b = this.normalize(b) | ||||||
| 
 | 
 | ||||||
| 			// the fast case...
 | 			// the fast cases...
 | ||||||
|  | 			// direct match...
 | ||||||
| 			if(a == b){ | 			if(a == b){ | ||||||
| 				return true | 				return true } | ||||||
| 			} | 
 | ||||||
|  | 			// explicit matching...
 | ||||||
|  | 			if(quoted){ | ||||||
|  | 				return b instanceof Array ?  | ||||||
|  | 					b.filter(function(t){  | ||||||
|  | 						return a == t }) | ||||||
|  | 					: b != null ? | ||||||
|  | 						(a == b  | ||||||
|  | 							|| (definitions | ||||||
|  | 							&& (definitions[a] == b | ||||||
|  | 								|| a == definitions[b] | ||||||
|  | 								|| definitions[a] == definitions[b]))) | ||||||
|  | 					: (a in this.__index  | ||||||
|  | 						|| this.persistent.has(a)) } | ||||||
| 
 | 
 | ||||||
| 			// Expand definitions...
 | 			// Expand definitions...
 | ||||||
| 			//
 | 			//
 | ||||||
| @ -603,8 +635,9 @@ var BaseTagsPrototype = { | |||||||
| 		var that = this | 		var that = this | ||||||
| 		var PP = this.PATH_SEPARATOR_PATTERN | 		var PP = this.PATH_SEPARATOR_PATTERN | ||||||
| 
 | 
 | ||||||
| 		var root = /^\s*[\\\/]/.test(a) | 		var quoted = this.isQuoted(a) | ||||||
| 		var base = /[\\\/]\s*$/.test(a) | 		var root = /^\s*['"]?[\\\/]/.test(a) | ||||||
|  | 		var base = /[\\\/]['"]?\s*$/.test(a) | ||||||
| 
 | 
 | ||||||
| 		// get paths with tag...
 | 		// get paths with tag...
 | ||||||
| 		var paths = function(tag){ | 		var paths = function(tag){ | ||||||
| @ -637,7 +670,7 @@ var BaseTagsPrototype = { | |||||||
| 									: search(target, tag, seen.add(tag)) }, false) }, false) } | 									: search(target, tag, seen.add(tag)) }, false) }, false) } | ||||||
| 
 | 
 | ||||||
| 		var seen = new Set() | 		var seen = new Set() | ||||||
| 		var res = (root || base  | 		var res = (quoted || root || base  | ||||||
| 				|| b instanceof Array  | 				|| b instanceof Array  | ||||||
| 				|| typeof(b) == typeof('str')) ? | 				|| typeof(b) == typeof('str')) ? | ||||||
| 			// b is given and a is an edge -> try a direct match...
 | 			// b is given and a is an edge -> try a direct match...
 | ||||||
| @ -650,7 +683,7 @@ var BaseTagsPrototype = { | |||||||
| 					return that.directMatch(a, tag)  | 					return that.directMatch(a, tag)  | ||||||
| 						|| search(a, tag, seen) }) | 						|| search(a, tag, seen) }) | ||||||
| 
 | 
 | ||||||
| 		return (root || base || res !== false) ? | 		return (quoted || root || base || res !== false) ? | ||||||
| 				res | 				res | ||||||
| 			// if a is a path then it must exist and search it's tail...
 | 			// if a is a path then it must exist and search it's tail...
 | ||||||
| 			: this.directMatch(a).length > 0  | 			: this.directMatch(a).length > 0  | ||||||
| @ -935,6 +968,16 @@ var BaseTagsPrototype = { | |||||||
| 	}, | 	}, | ||||||
| 	// NOTE: this supports tag patterns (see: .match(..))
 | 	// NOTE: this supports tag patterns (see: .match(..))
 | ||||||
| 	// NOTE: non-pattern tags are matched explicitly.
 | 	// NOTE: non-pattern tags are matched explicitly.
 | ||||||
|  | 	// XXX BUG?: should this remove tags directly (current) or via matching??
 | ||||||
|  | 	// 			.tag('a:b', 'x')
 | ||||||
|  | 	// 			.untag('a', 'x')		-- this will do nothing.
 | ||||||
|  | 	// 			.untag('*a*', 'x')		-- remove the tag.
 | ||||||
|  | 	// 		...currently I think that matching should be default while 
 | ||||||
|  | 	// 		explicit tag removal should be triggered via something like
 | ||||||
|  | 	// 		putting a tag in quotes:
 | ||||||
|  | 	// 			.untag('"a"', 'x')		-- should remove tagged explicitly 
 | ||||||
|  | 	// 										with "a"...
 | ||||||
|  | 	// 			.untag('a', 'x')		-- like the current '*a*'
 | ||||||
| 	untag: function(tags, value){ | 	untag: function(tags, value){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		var index = this.__index = this.__index || {} | 		var index = this.__index = this.__index || {} | ||||||
| @ -1000,6 +1043,7 @@ var BaseTagsPrototype = { | |||||||
| 	//
 | 	//
 | ||||||
| 	// XXX do we need this???
 | 	// XXX do we need this???
 | ||||||
| 	// 		...seems a bit overcomplicated...
 | 	// 		...seems a bit overcomplicated...
 | ||||||
|  | 	// XXX should this return true/false or 'on'/'off'???
 | ||||||
| 	toggle: function(tag, values, action){ | 	toggle: function(tag, values, action){ | ||||||
| 		var that = this | 		var that = this | ||||||
| 		values = values instanceof Array ? values : [values] | 		values = values instanceof Array ? values : [values] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user