mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-31 03:10:07 +00:00 
			
		
		
		
	refactoring and cleanup + minor fixes...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									1c390e570a
								
							
						
					
					
						commit
						b5f4a08cdf
					
				| @ -81,22 +81,29 @@ var normalizeSplit = function(args){ | ||||
| // Helpers...
 | ||||
| var makeSplitter = function(separator){ | ||||
| 	return function(...tags){ | ||||
| 		var sp = this[separator] | ||||
| 		var SP = this[separator] | ||||
| 		return normalizeSplit(tags) | ||||
| 			.map(function(tag){ | ||||
| 				return tag.split(sp) }) | ||||
| 				return tag.split(SP) }) | ||||
| 			.flat() | ||||
| 			.unique() } } | ||||
| var makeJoiner = function(separator){ | ||||
| 	return function(...items){ | ||||
| 		return normalizeSplit(items).join(this[separator]) } } | ||||
| 
 | ||||
| 
 | ||||
| var BaseTagsClassPrototype = { | ||||
| 
 | ||||
| 	// NOTE: do not include 'g' flag here, it will make the RE objects
 | ||||
| 	// 		stateful which will yield very unpredictable results from 
 | ||||
| 	// 		general system.
 | ||||
| 	// XXX need separators as attrs too... 
 | ||||
| 	PATH_SEPARATOR: /[\\\/]+/, | ||||
| 	SET_SEPARATOR: /:+/, | ||||
| 	COMBINED_SEPARATOR: /[:\\\/]+/, | ||||
| 	PATH_SEPARATOR: '/', | ||||
| 	PATH_SEPARATOR_PATTERN: /[\\\/]+/, | ||||
| 
 | ||||
| 	SET_SEPARATOR: ':', | ||||
| 	SET_SEPARATOR_PATTERN: /:+/, | ||||
| 
 | ||||
| 	COMBINED_SEPARATOR_PATTERN: /[:\\\/]+/, | ||||
| 
 | ||||
| 	// Utils...
 | ||||
| 	//
 | ||||
| @ -107,9 +114,11 @@ var BaseTagsClassPrototype = { | ||||
| 	// 		-> parts
 | ||||
| 	//
 | ||||
| 	// NOTE: these will combine the parts of all the tags...
 | ||||
| 	splitSet: makeSplitter('SET_SEPARATOR'), | ||||
| 	splitPath: makeSplitter('PATH_SEPARATOR'), | ||||
| 	splitTag: makeSplitter('COMBINED_SEPARATOR'), | ||||
| 	splitSet: makeSplitter('SET_SEPARATOR_PATTERN'), | ||||
| 	splitPath: makeSplitter('PATH_SEPARATOR_PATTERN'), | ||||
| 	splitTag: makeSplitter('COMBINED_SEPARATOR_PATTERN'), | ||||
| 	joinSet: makeJoiner('SET_SEPARATOR'), | ||||
| 	joinPath: makeJoiner('PATH_SEPARATOR'), | ||||
| 
 | ||||
| 	// Normalize tags...
 | ||||
| 	//
 | ||||
| @ -134,7 +143,10 @@ var BaseTagsClassPrototype = { | ||||
| 	// 		as possible.
 | ||||
| 	//
 | ||||
| 	normalize: function(...tags){ | ||||
| 		var that = this | ||||
| 		var SS = this.SET_SEPARATOR | ||||
| 		var PS = this.PATH_SEPARATOR | ||||
| 		var SP = this.SET_SEPARATOR_PATTERN | ||||
| 		var PP = this.PATH_SEPARATOR_PATTERN | ||||
| 		var tagRemovedChars = (this.config || {})['tagRemovedChars'] | ||||
| 		tagRemovedChars = tagRemovedChars instanceof RegExp ?  | ||||
| 				tagRemovedChars | ||||
| @ -148,20 +160,20 @@ var BaseTagsClassPrototype = { | ||||
| 					.toLowerCase() | ||||
| 					.replace(tagRemovedChars, '') | ||||
| 					// sort sets within paths...
 | ||||
| 					.split(that.PATH_SEPARATOR) | ||||
| 					.split(PP) | ||||
| 						.map(function(e){ | ||||
| 							return e | ||||
| 								.split(that.SET_SEPARATOR) | ||||
| 								.split(SP) | ||||
| 								// remove empty set members...
 | ||||
| 								.filter(function(t){  | ||||
| 									return t != '' }) | ||||
| 								.unique() | ||||
| 								.sort() | ||||
| 								.join(':') }) | ||||
| 								.join(SS) }) | ||||
| 						// NOTE: this also kills the leading '/'
 | ||||
| 						.filter(function(t){  | ||||
| 							return t != '' }) | ||||
| 						.join('/') }) | ||||
| 						.join(PS) }) | ||||
| 			.unique() | ||||
| 		return (tags.length == 1 && !(tags[0] instanceof Array)) ?  | ||||
| 			// NOTE: if we got a single tag return it as a single tag...
 | ||||
| @ -272,8 +284,10 @@ var BaseTagsPrototype = { | ||||
| 
 | ||||
| 	// NOTE: for notes on structure see notes on the Utils section below...
 | ||||
| 	PATH_SEPARATOR: BaseTagsClassPrototype.PATH_SEPARATOR, | ||||
| 	PATH_SEPARATOR_PATTERN: BaseTagsClassPrototype.PATH_SEPARATOR_PATTERN, | ||||
| 	SET_SEPARATOR: BaseTagsClassPrototype.SET_SEPARATOR, | ||||
| 	COMBINED_SEPARATOR: BaseTagsClassPrototype.COMBINED_SEPARATOR, | ||||
| 	SET_SEPARATOR_PATTERN: BaseTagsClassPrototype.SET_SEPARATOR_PATTERN, | ||||
| 	COMBINED_SEPARATOR_PATTERN: BaseTagsClassPrototype.COMBINED_SEPARATOR_PATTERN, | ||||
| 
 | ||||
| 
 | ||||
| 	// Tag index...
 | ||||
| @ -558,12 +572,13 @@ var BaseTagsPrototype = { | ||||
| 	//		a root/base tag respectively but this seems a bit less useful.
 | ||||
| 	match: function(a, b, cmp){ | ||||
| 		var that = this | ||||
| 		var PP = this.PATH_SEPARATOR_PATTERN | ||||
| 
 | ||||
| 		// get paths with tag...
 | ||||
| 		var paths = function(tag){ | ||||
| 			return that.directMatch(tag, cmp) | ||||
| 				.filter(function(t){  | ||||
| 					return that.PATH_SEPARATOR.test(t) }) } | ||||
| 					return PP.test(t) }) } | ||||
| 		// search the path tree...
 | ||||
| 		// NOTE: this will stop the search on first hit...
 | ||||
| 		var search = function(target, tag, seen){ | ||||
| @ -688,13 +703,14 @@ var BaseTagsPrototype = { | ||||
| 	//
 | ||||
| 	uniquePaths: function(...list){ | ||||
| 		var that = this | ||||
| 		var PS = this.PATH_SEPARATOR | ||||
| 		return (list.length == 0 ?  | ||||
| 				this.paths()  | ||||
| 				: this.normalize(normalizeSplit(list))) | ||||
| 			// sort by number of path elements (longest first)...
 | ||||
| 			.map(that.splitPath) | ||||
| 			.map(function(tag){ return that.splitPath(tag) }) | ||||
| 				.sort(function(a, b){ return b.length - a.length }) | ||||
| 				.map(function(p){ return p.join('/') }) | ||||
| 				.map(function(p){ return p.join(PS) }) | ||||
| 			// remove all paths in tail that match the current...
 | ||||
| 			.map(function(p, i, list){ | ||||
| 				// skip []...
 | ||||
| @ -793,13 +809,13 @@ var BaseTagsPrototype = { | ||||
| 	singleTags: function(value, ...tags){ | ||||
| 		return this.splitTag(this.tags(...arguments)).unique() }, | ||||
| 	paths: function(value){ | ||||
| 		var sp = that.PATH_SEPARATOR | ||||
| 		var PP = this.PATH_SEPARATOR_PATTERN | ||||
| 		return this.tags(value) | ||||
| 			.filter(function(tag){ return sp.test(tag) }) }, | ||||
| 			.filter(function(tag){ return PP.test(tag) }) }, | ||||
| 	sets: function(value){ | ||||
| 		var sp = this.SET_SEPARATOR | ||||
| 		var SP = this.SET_SEPARATOR_PATTERN | ||||
| 		return this.tags(value) | ||||
| 			.filter(function(tag){ return sp.test(tag) }) }, | ||||
| 			.filter(function(tag){ return SP.test(tag) }) }, | ||||
| 	//
 | ||||
| 	// 	Get all values...
 | ||||
| 	// 	.values()
 | ||||
| @ -842,6 +858,8 @@ var BaseTagsPrototype = { | ||||
| 	// 	.define('tag', 'concept:tag')	// ->	'concept:tag/tag'
 | ||||
| 	//
 | ||||
| 	definitionPaths: function(...tags){ | ||||
| 		var SS = this.SET_SEPARATOR | ||||
| 		var PS = this.PATH_SEPARATOR | ||||
| 		var definitions = this.definitions || {} | ||||
| 		tags = normalizeSplit(tags) | ||||
| 		var res = (tags.length == 0 ?  | ||||
| @ -851,7 +869,7 @@ var BaseTagsPrototype = { | ||||
| 						return [tag, definitions[tag]] })) | ||||
| 			.map(function(e){ | ||||
| 				return e[1] != null ?  | ||||
| 					[e[1].join(':'), e[0]].join('/')  | ||||
| 					[e[1].join(SS), e[0]].join(SP)  | ||||
| 					: e[1] })  | ||||
| 		return arguments.length == 1 && typeof(arguments[0]) == typeof('str') ? | ||||
| 			res[0] | ||||
| @ -1208,6 +1226,8 @@ var BaseTagsPrototype = { | ||||
| 	//
 | ||||
| 	define: function(tag, value){ | ||||
| 		var that = this | ||||
| 		var SS = this.SET_SEPARATOR | ||||
| 		var PS = this.PATH_SEPARATOR | ||||
| 		var definitions = this.definitions | ||||
| 
 | ||||
| 		// batch...
 | ||||
| @ -1228,9 +1248,9 @@ var BaseTagsPrototype = { | ||||
| 		// get/resolve...
 | ||||
| 		if(arguments.length == 1){ | ||||
| 			// NOTE: we expect there to be only one definition...
 | ||||
| 			return this.match(tag +'/', [...Object.keys(definitions) || []]) | ||||
| 			return this.match(tag +PS, [...Object.keys(definitions) || []]) | ||||
| 				.map(function(d){  | ||||
| 					return definitions[d].join(':') })[0] | ||||
| 					return definitions[d].join(SP) })[0] | ||||
| 
 | ||||
| 		// remove...
 | ||||
| 		} else if(value == null){ | ||||
| @ -1873,7 +1893,10 @@ var TagsWithDictPrototype = { | ||||
| 	//		-> [str, ..]
 | ||||
| 	//
 | ||||
| 	translateTag: function(...tags){ | ||||
| 		var that = this | ||||
| 		var SS = this.SET_SEPARATOR | ||||
| 		var PS = this.PATH_SEPARATOR | ||||
| 		var SP = this.SET_SEPARATOR_PATTERN | ||||
| 		var PP = this.PATH_SEPARATOR_PATTERN | ||||
| 		var dict = this.dict | ||||
| 		tags = normalizeSplit(tags) | ||||
| 
 | ||||
| @ -1881,14 +1904,14 @@ var TagsWithDictPrototype = { | ||||
| 			tags | ||||
| 				.map(function(path){ | ||||
| 					return path | ||||
| 						.split(that.PATH_SEPARATOR)  | ||||
| 						.split(PP)  | ||||
| 						.map(function(set){ | ||||
| 							return set | ||||
| 								.split(that.SET_SEPARATOR) | ||||
| 								.split(SP) | ||||
| 								.map(function(tag){ | ||||
| 									return (dict[tag] || [tag])[0] }) | ||||
| 								.join(':') }) | ||||
| 						.join('/') }) | ||||
| 								.join(SS) }) | ||||
| 						.join(PS) }) | ||||
| 			: tags | ||||
| 
 | ||||
| 		return arguments.length == 1 && typeof(arguments[0]) == typeof('str') ? | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user