forked from MapComplete/MapComplete
		
	Styling tweak
Add mapillary link to nearby_images Fix licenses Add missing assets First version of nearby-images
This commit is contained in:
		
							parent
							
								
									a4f2fa63a5
								
							
						
					
					
						commit
						7559f9259b
					
				
					 52 changed files with 674 additions and 207 deletions
				
			
		|  | @ -167,6 +167,7 @@ export default class DetermineLayout { | |||
|         const raw = json; | ||||
| 
 | ||||
|         json = new FixImages(DetermineLayout._knownImages).convertStrict(json, "While fixing the images") | ||||
|         json.enableNoteImports = json.enableNoteImports ?? false; | ||||
|         json = new PrepareTheme(converState).convertStrict(json, "While preparing a dynamic theme") | ||||
|         console.log("The layoutconfig is ", json) | ||||
|          | ||||
|  |  | |||
|  | @ -19,9 +19,19 @@ export default class AllImageProviders { | |||
|         new GenericImageProvider( | ||||
|             [].concat(...Imgur.defaultValuePrefix, ...WikimediaImageProvider.commonsPrefixes, ...Mapillary.valuePrefixes) | ||||
|         ) | ||||
| 
 | ||||
|     ] | ||||
| 
 | ||||
|     private static providersByName= { | ||||
|         "imgur": Imgur.singleton, | ||||
| "mapillary":        Mapillary.singleton, | ||||
|      "wikidata":  WikidataImageProvider.singleton, | ||||
|        "wikimedia": WikimediaImageProvider.singleton | ||||
|     } | ||||
|      | ||||
|     public static byName(name: string){ | ||||
|         return AllImageProviders.providersByName[name.toLowerCase()] | ||||
|     } | ||||
| 
 | ||||
|     public static defaultKeys = [].concat(AllImageProviders.ImageAttributionSource.map(provider => provider.defaultKeyPrefixes)) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,6 +4,7 @@ import Svg from "../../Svg"; | |||
| import {Utils} from "../../Utils"; | ||||
| import {LicenseInfo} from "./LicenseInfo"; | ||||
| import Constants from "../../Models/Constants"; | ||||
| import * as Console from "console"; | ||||
| 
 | ||||
| export class Mapillary extends ImageProvider { | ||||
| 
 | ||||
|  | @ -12,11 +13,49 @@ export class Mapillary extends ImageProvider { | |||
|     public static readonly valuePrefixes = [Mapillary.valuePrefix, "http://mapillary.com", "https://mapillary.com", "http://www.mapillary.com", "https://www.mapillary.com"] | ||||
|     defaultKeyPrefixes = ["mapillary", "image"] | ||||
| 
 | ||||
|     /** | ||||
|      * Indicates that this is the same URL | ||||
|      * Ignores 'stp' parameter | ||||
|      *  | ||||
|      * const a = "https://scontent-bru2-1.xx.fbcdn.net/m1/v/t6/An8xm5SGLt20ETziNqzhhBd8b8S5GHLiIu8N6BbyqHFohFAQoaJJPG8i5yQiSwjYmEqXSfVeoCmpiyBJICEkQK98JOB21kkJoBS8VdhYa-Ty93lBnznQyesJBtKcb32foGut2Hgt10hEMWJbE3dDgA?stp=s1024x768&ccb=10-5&oh=00_AT-ZGTXHzihoaQYBILmEiAEKR64z_IWiTlcAYq_D7Ka0-Q&oe=6278C456&_nc_sid=122ab1" | ||||
|      * const b = "https://scontent-bru2-1.xx.fbcdn.net/m1/v/t6/An8xm5SGLt20ETziNqzhhBd8b8S5GHLiIu8N6BbyqHFohFAQoaJJPG8i5yQiSwjYmEqXSfVeoCmpiyBJICEkQK98JOB21kkJoBS8VdhYa-Ty93lBnznQyesJBtKcb32foGut2Hgt10hEMWJbE3dDgA?stp=s256x192&ccb=10-5&oh=00_AT9BZ1Rpc9zbY_uNu92A_4gj1joiy1b6VtgtLIu_7wh9Bg&oe=6278C456&_nc_sid=122ab1" | ||||
|      * Mapillary.sameUrl(a, b) => true | ||||
|      */ | ||||
|     static sameUrl(a: string, b: string): boolean { | ||||
|         if (a === b) { | ||||
|             return true | ||||
|         } | ||||
|         try { | ||||
| console.log("COmparing",a,b) | ||||
|             const aUrl = new URL(a) | ||||
|             const bUrl = new URL(b) | ||||
|             if (aUrl.host !== bUrl.host || aUrl.pathname !== bUrl.pathname) { | ||||
|                 return false; | ||||
|             } | ||||
|             let allSame = true; | ||||
|             aUrl.searchParams.forEach((value, key) => { | ||||
|                 if (key === "stp") { | ||||
|                     // This is the key indicating the image size on mapillary; we ignore it
 | ||||
|                     return | ||||
|                 } | ||||
|                 if (value !== bUrl.searchParams.get(key)) { | ||||
|                     allSame = false | ||||
|                     return | ||||
|                 } | ||||
|             }) | ||||
|             return allSame; | ||||
| 
 | ||||
|         } catch (e) { | ||||
|             Console.debug("Could not compare ", a, "and", b, "due to", e) | ||||
|         } | ||||
|         return false; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Returns the correct key for API v4.0 | ||||
|      */ | ||||
|     private static ExtractKeyFromURL(value: string): number { | ||||
| 
 | ||||
|         let key: string; | ||||
| 
 | ||||
|         const newApiFormat = value.match(/https?:\/\/www.mapillary.com\/app\/\?pKey=([0-9]*)/) | ||||
|  | @ -24,6 +63,8 @@ export class Mapillary extends ImageProvider { | |||
|             key = newApiFormat[1] | ||||
|         } else if (value.startsWith(Mapillary.valuePrefix)) { | ||||
|             key = value.substring(0, value.lastIndexOf("?")).substring(value.lastIndexOf("/") + 1) | ||||
|         } else if (value.match("[0-9]*")) { | ||||
|             key = value; | ||||
|         } | ||||
| 
 | ||||
|         const keyAsNumber = Number(key) | ||||
|  |  | |||
|  | @ -9,7 +9,8 @@ export default class ChangeTagAction extends OsmChangeAction { | |||
|     private readonly _currentTags: any; | ||||
|     private readonly _meta: { theme: string, changeType: string }; | ||||
| 
 | ||||
|     constructor(elementId: string, tagsFilter: TagsFilter, currentTags: any, meta: { | ||||
|     constructor(elementId: string,  | ||||
|                 tagsFilter: TagsFilter, currentTags: any, meta: { | ||||
|         theme: string, | ||||
|         changeType: "answer" | "soft-delete" | "add-image" | string | ||||
|     }) { | ||||
|  |  | |||
|  | @ -53,6 +53,10 @@ export default class UserRelatedState extends ElementsState { | |||
|             osmConfiguration: <'osm' | 'osm-test'>this.featureSwitchApiURL.data, | ||||
|             attemptLogin: options?.attemptLogin | ||||
|         }) | ||||
|         const translationMode  = this.osmConnection.GetPreference("translation-mode").map(str => str === undefined ? undefined : str === "true", [], b => b === undefined ? undefined : b+"") | ||||
|              | ||||
|         translationMode.syncWith(Locale.showLinkToWeblate) | ||||
|          | ||||
|         this.isTranslator = this.osmConnection.userDetails.map(ud => { | ||||
|             if(!ud.loggedIn){ | ||||
|                 return false; | ||||
|  | @ -60,6 +64,7 @@ export default class UserRelatedState extends ElementsState { | |||
|             const name= ud.name.toLowerCase().replace(/\s+/g, '') | ||||
|             return translators.contributors.some(c => c.contributor.toLowerCase().replace(/\s+/g, '') === name) | ||||
|         }) | ||||
|          | ||||
|         this.isTranslator.addCallbackAndRunD(ud => { | ||||
|             if(ud){ | ||||
|                 Locale.showLinkToWeblate.setData(true) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue