forked from MapComplete/MapComplete
		
	Refactoring of conversion, fix rewriting of maprenderings and tagrenderings
This commit is contained in:
		
							parent
							
								
									c3859d56c6
								
							
						
					
					
						commit
						54d7a3a52b
					
				
					 8 changed files with 215 additions and 269 deletions
				
			
		
							
								
								
									
										71
									
								
								Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										71
									
								
								Utils.ts
									
										
									
									
									
								
							|  | @ -183,11 +183,11 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|         } | ||||
|         return str.substr(0, l - 3) + "..."; | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     public static FixedLength(str: string, l: number) { | ||||
|         str = Utils.EllipsesAfter(str, l) | ||||
|         while(str.length < l){ | ||||
|             str = " "+str | ||||
|         while (str.length < l) { | ||||
|             str = " " + str | ||||
|         } | ||||
|         return str; | ||||
|     } | ||||
|  | @ -220,6 +220,23 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|         return newArr; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * In the given list, all values which are lists will be merged with the values, e.g. | ||||
|      * | ||||
|      * Utils.Flatten([ [1,2], 2, [4, [5 ,6]] ]) // => [1, 2, 3, 4, [5, 6]]
 | ||||
|      */ | ||||
|     public static Flatten<T>(list: (T | T[])[]): T[] { | ||||
|         const result = [] | ||||
|         for (const value of list) { | ||||
|             if (Array.isArray(value)) { | ||||
|                 result.push(...value) | ||||
|             } else { | ||||
|                 result.push(value) | ||||
|             } | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
| 
 | ||||
|     public static Identical<T>(t1: T[], t2: T[], eq?: (t: T, t0: T) => boolean): boolean { | ||||
|         if (t1.length !== t2.length) { | ||||
|             return false | ||||
|  | @ -533,21 +550,21 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|             if (jtp !== "object") { | ||||
|                 return | ||||
|             } | ||||
|              | ||||
| 
 | ||||
|             if (isLeaf(json)) { | ||||
|                 return collect(json, path) | ||||
|             } | ||||
|         } else if (jtp === "boolean" || jtp === "string" || jtp === "number") { | ||||
|             return collect(json,path) | ||||
|             return collect(json, path) | ||||
|         } | ||||
|         if (Array.isArray(json)) { | ||||
|             return json.map((sub,i) => { | ||||
|                 return Utils.WalkObject(sub, collect, isLeaf,[...path, i]); | ||||
|             return json.map((sub, i) => { | ||||
|                 return Utils.WalkObject(sub, collect, isLeaf, [...path, i]); | ||||
|             }) | ||||
|         } | ||||
| 
 | ||||
|         for (const key in json) { | ||||
|            Utils.WalkObject(json[key], collect, isLeaf, [...path,key]) | ||||
|             Utils.WalkObject(json[key], collect, isLeaf, [...path, key]) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -832,9 +849,9 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|         } | ||||
|         return new Date(str) | ||||
|     } | ||||
|      | ||||
|     public static sortedByLevenshteinDistance<T>(reference: string, ts: T[], getName: (t:T) => string): T[]{ | ||||
|         const withDistance: [T, number][] = ts.map(t => [t,  Utils.levenshteinDistance(getName(t), reference)]) | ||||
| 
 | ||||
|     public static sortedByLevenshteinDistance<T>(reference: string, ts: T[], getName: (t: T) => string): T[] { | ||||
|         const withDistance: [T, number][] = ts.map(t => [t, Utils.levenshteinDistance(getName(t), reference)]) | ||||
|         withDistance.sort(([_, a], [__, b]) => a - b) | ||||
|         return withDistance.map(n => n[0]) | ||||
|     } | ||||
|  | @ -872,43 +889,41 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|         return o | ||||
|     } | ||||
| 
 | ||||
|     private static colorDiff(c0: { r: number, g: number, b: number }, c1: { r: number, g: number, b: number }) { | ||||
|         return Math.abs(c0.r - c1.r) + Math.abs(c0.g - c1.g) + Math.abs(c0.b - c1.b); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Utils.colorAsHex({r: 255, g: 128, b: 0}) // => "#ff8000"
 | ||||
|      * Utils.colorAsHex(undefined) // => undefined
 | ||||
|      */ | ||||
|     public static colorAsHex(c:{ r: number, g: number, b: number } ){ | ||||
|         if(c === undefined){ | ||||
|     public static colorAsHex(c: { r: number, g: number, b: number }) { | ||||
|         if (c === undefined) { | ||||
|             return undefined | ||||
|         } | ||||
| 
 | ||||
|         function componentToHex(n) { | ||||
|             let hex = n.toString(16); | ||||
|             return hex.length == 1 ? "0" + hex : hex; | ||||
|         } | ||||
| 
 | ||||
|         return "#" + componentToHex(c.r) + componentToHex(c.g) + componentToHex(c.b); | ||||
|     } | ||||
|      | ||||
| 
 | ||||
|     /** | ||||
|      *  | ||||
|      * | ||||
|      * Utils.color("#ff8000") // => {r: 255, g:128, b: 0}
 | ||||
|      * Utils.color(" rgba  (12,34,56) ") // => {r: 12, g:34, b: 56}
 | ||||
|      * Utils.color(" rgba  (12,34,56,0.5) ") // => {r: 12, g:34, b: 56}
 | ||||
|      * Utils.color(undefined) // => undefined
 | ||||
|      */ | ||||
|     public static color(hex: string): { r: number, g: number, b: number } { | ||||
|         if(hex === undefined){ | ||||
|         if (hex === undefined) { | ||||
|             return undefined | ||||
|         } | ||||
|         hex = hex.replace(/[ \t]/g, "") | ||||
|         if (hex.startsWith("rgba(")) { | ||||
|                const match = hex.match(/rgba\(([0-9.]+),([0-9.]+),([0-9.]+)(,[0-9.]*)?\)/) | ||||
|             if(match == undefined){ | ||||
|             const match = hex.match(/rgba\(([0-9.]+),([0-9.]+),([0-9.]+)(,[0-9.]*)?\)/) | ||||
|             if (match == undefined) { | ||||
|                 return undefined | ||||
|             } | ||||
|             return {r: Number(match[1]), g: Number(match[2]), b:Number( match[3])} | ||||
|             return {r: Number(match[1]), g: Number(match[2]), b: Number(match[3])} | ||||
|         } | ||||
| 
 | ||||
|         if (!hex.startsWith("#")) { | ||||
|  | @ -928,9 +943,9 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
|             b: parseInt(hex.substr(5, 2), 16), | ||||
|         } | ||||
|     } | ||||
|      | ||||
|     public static asDict(tags: {key: string, value: string | number}[]) : Map<string, string | number>{ | ||||
|         const d= new Map<string, string | number>() | ||||
| 
 | ||||
|     public static asDict(tags: { key: string, value: string | number }[]): Map<string, string | number> { | ||||
|         const d = new Map<string, string | number>() | ||||
| 
 | ||||
|         for (const tag of tags) { | ||||
|             d.set(tag.key, tag.value) | ||||
|  | @ -938,5 +953,9 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be | |||
| 
 | ||||
|         return d | ||||
|     } | ||||
| 
 | ||||
|     private static colorDiff(c0: { r: number, g: number, b: number }, c1: { r: number, g: number, b: number }) { | ||||
|         return Math.abs(c0.r - c1.r) + Math.abs(c0.g - c1.g) + Math.abs(c0.b - c1.b); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue