forked from MapComplete/MapComplete
		
	refactoring
This commit is contained in:
		
							parent
							
								
									b94a8f5745
								
							
						
					
					
						commit
						5d0fe31c41
					
				
					 114 changed files with 2412 additions and 2958 deletions
				
			
		|  | @ -15,6 +15,13 @@ import { OsmTags } from "../Models/OsmFeature" | |||
| import { UIEventSource } from "./UIEventSource" | ||||
| import LayoutConfig from "../Models/ThemeConfig/LayoutConfig" | ||||
| 
 | ||||
| /** | ||||
|  * All elements that are needed to perform metatagging | ||||
|  */ | ||||
| export interface MetataggingState { | ||||
|     layout: LayoutConfig | ||||
| } | ||||
| 
 | ||||
| export abstract class SimpleMetaTagger { | ||||
|     public readonly keys: string[] | ||||
|     public readonly doc: string | ||||
|  | @ -60,7 +67,7 @@ export abstract class SimpleMetaTagger { | |||
|         feature: any, | ||||
|         layer: LayerConfig, | ||||
|         tagsStore: UIEventSource<Record<string, string>>, | ||||
|         state: { layout: LayoutConfig } | ||||
|         state: MetataggingState | ||||
|     ): boolean | ||||
| } | ||||
| 
 | ||||
|  | @ -119,7 +126,7 @@ export class CountryTagger extends SimpleMetaTagger { | |||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     applyMetaTagsOnFeature(feature, _, state) { | ||||
|     applyMetaTagsOnFeature(feature, _, tagsSource) { | ||||
|         let centerPoint: any = GeoOperations.centerpoint(feature) | ||||
|         const runningTasks = this.runningTasks | ||||
|         const lat = centerPoint.geometry.coordinates[1] | ||||
|  | @ -128,28 +135,29 @@ export class CountryTagger extends SimpleMetaTagger { | |||
|         CountryTagger.coder | ||||
|             .GetCountryCodeAsync(lon, lat) | ||||
|             .then((countries) => { | ||||
|                 runningTasks.delete(feature) | ||||
|                 try { | ||||
|                     const oldCountry = feature.properties["_country"] | ||||
|                     feature.properties["_country"] = countries[0].trim().toLowerCase() | ||||
|                     if (oldCountry !== feature.properties["_country"]) { | ||||
|                         const tagsSource = state?.allElements?.getEventSourceById( | ||||
|                             feature.properties.id | ||||
|                         ) | ||||
|                         tagsSource?.ping() | ||||
|                     } | ||||
|                 } catch (e) { | ||||
|                     console.warn(e) | ||||
|                 const oldCountry = feature.properties["_country"] | ||||
|                 const newCountry = countries[0].trim().toLowerCase() | ||||
|                 if (oldCountry !== newCountry) { | ||||
|                     tagsSource.data["_country"] = newCountry | ||||
|                     tagsSource?.ping() | ||||
|                 } | ||||
|             }) | ||||
|             .catch((_) => { | ||||
|                 runningTasks.delete(feature) | ||||
|             .catch((e) => { | ||||
|                 console.warn(e) | ||||
|             }) | ||||
|             .finally(() => runningTasks.delete(feature)) | ||||
|         return false | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| class InlineMetaTagger extends SimpleMetaTagger { | ||||
|     public readonly applyMetaTagsOnFeature: ( | ||||
|         feature: any, | ||||
|         layer: LayerConfig, | ||||
|         tagsStore: UIEventSource<OsmTags>, | ||||
|         state: MetataggingState | ||||
|     ) => boolean | ||||
| 
 | ||||
|     constructor( | ||||
|         docs: { | ||||
|             keys: string[] | ||||
|  | @ -166,23 +174,17 @@ class InlineMetaTagger extends SimpleMetaTagger { | |||
|             feature: any, | ||||
|             layer: LayerConfig, | ||||
|             tagsStore: UIEventSource<OsmTags>, | ||||
|             state: { layout: LayoutConfig } | ||||
|             state: MetataggingState | ||||
|         ) => boolean | ||||
|     ) { | ||||
|         super(docs) | ||||
|         this.applyMetaTagsOnFeature = f | ||||
|     } | ||||
| 
 | ||||
|     public readonly applyMetaTagsOnFeature: ( | ||||
|         feature: any, | ||||
|         layer: LayerConfig, | ||||
|         tagsStore: UIEventSource<OsmTags>, | ||||
|         state: { layout: LayoutConfig } | ||||
|     ) => boolean | ||||
| } | ||||
| export default class SimpleMetaTaggers { | ||||
|     public static readonly objectMetaInfo = new InlineMetaTagger( | ||||
|         { | ||||
| 
 | ||||
| export class RewriteMetaInfoTags extends SimpleMetaTagger { | ||||
|     constructor() { | ||||
|         super({ | ||||
|             keys: [ | ||||
|                 "_last_edit:contributor", | ||||
|                 "_last_edit:contributor:uid", | ||||
|  | @ -192,30 +194,37 @@ export default class SimpleMetaTaggers { | |||
|                 "_backend", | ||||
|             ], | ||||
|             doc: "Information about the last edit of this object.", | ||||
|         }, | ||||
|         (feature) => { | ||||
|             /*Note: also called by 'UpdateTagsFromOsmAPI'*/ | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|             const tgs = feature.properties | ||||
|             let movedSomething = false | ||||
|     applyMetaTagsOnFeature(feature: Feature): boolean { | ||||
|         /*Note: also called by 'UpdateTagsFromOsmAPI'*/ | ||||
| 
 | ||||
|             function move(src: string, target: string) { | ||||
|                 if (tgs[src] === undefined) { | ||||
|                     return | ||||
|                 } | ||||
|                 tgs[target] = tgs[src] | ||||
|                 delete tgs[src] | ||||
|                 movedSomething = true | ||||
|         const tgs = feature.properties | ||||
|         let movedSomething = false | ||||
| 
 | ||||
|         function move(src: string, target: string) { | ||||
|             if (tgs[src] === undefined) { | ||||
|                 return | ||||
|             } | ||||
| 
 | ||||
|             move("user", "_last_edit:contributor") | ||||
|             move("uid", "_last_edit:contributor:uid") | ||||
|             move("changeset", "_last_edit:changeset") | ||||
|             move("timestamp", "_last_edit:timestamp") | ||||
|             move("version", "_version_number") | ||||
|             return movedSomething | ||||
|             tgs[target] = tgs[src] | ||||
|             delete tgs[src] | ||||
|             movedSomething = true | ||||
|         } | ||||
|     ) | ||||
| 
 | ||||
|         move("user", "_last_edit:contributor") | ||||
|         move("uid", "_last_edit:contributor:uid") | ||||
|         move("changeset", "_last_edit:changeset") | ||||
|         move("timestamp", "_last_edit:timestamp") | ||||
|         move("version", "_version_number") | ||||
|         return movedSomething | ||||
|     } | ||||
| } | ||||
| export default class SimpleMetaTaggers { | ||||
|     /** | ||||
|      * A simple metatagger which rewrites various metatags as needed | ||||
|      */ | ||||
|     public static readonly objectMetaInfo = new RewriteMetaInfoTags() | ||||
|     public static country = new CountryTagger() | ||||
|     public static geometryType = new InlineMetaTagger( | ||||
|         { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue