Scripts: create script to import layers from studio into official mapcomplete

This commit is contained in:
Pieter Vander Vennet 2025-07-05 04:39:30 +02:00
parent c7b905d1fb
commit db685dc05f
5 changed files with 186 additions and 81 deletions

View file

@ -43,6 +43,7 @@ export class WikimediaImageProvider extends ImageProvider {
if (filename.startsWith("File:")) {
filename = filename.substring(5)
}
return filename.trim().replace(/\s+/g, "_")
}
@ -51,10 +52,14 @@ export class WikimediaImageProvider extends ImageProvider {
* WikimediaImageProvider.extractFileName("https://commons.wikimedia.org/wiki/File:Somefile.jpg") // => "Somefile.jpg"
* WikimediaImageProvider.extractFileName("https://commons.wikimedia.org/wiki/File:S%C3%A8vres%20-%20square_madame_de_Pompadour_-_bo%C3%AEte_%C3%A0_livres.jpg?uselang=en") // => "Sèvres_-_square_madame_de_Pompadour_-_boîte_à_livres.jpg"
*/
private static extractFileName(url: string) {
public static extractFileName(url: string) {
if (!url.startsWith("http")) {
return url
}
const thumbMatch = url.match(this.thumbUrlRegex)
if (thumbMatch) {
return thumbMatch[1]
}
const path = decodeURIComponent(new URL(url).pathname)
return WikimediaImageProvider.makeCanonical(path.substring(path.lastIndexOf("/") + 1))
}
@ -76,16 +81,17 @@ export class WikimediaImageProvider extends ImageProvider {
return WikimediaImageProvider.commonsPrefixes.some((prefix) => value.startsWith(prefix))
}
private static readonly thumbUrlRegex = /^https:\/\/upload.wikimedia.org\/.*\/([^/]+)\/.*-\1/
private static removeCommonsPrefix(value: string): string {
if (value.startsWith("https://upload.wikimedia.org/")) {
value = value.substring(value.lastIndexOf("/") + 1)
value = decodeURIComponent(value)
if (!value.startsWith("File:")) {
value = "File:" + value
}
return value
}
if (value.startsWith("File:")) {
return value
}
for (const prefix of WikimediaImageProvider.commonsPrefixes) {
if (value.startsWith(prefix)) {
let part = value.substr(prefix.length)
@ -139,6 +145,9 @@ export class WikimediaImageProvider extends ImageProvider {
*
* const result = await WikimediaImageProvider.singleton.ExtractUrls("wikimedia_commons", "File:Sèvres_-_square_madame_de_Pompadour_-_boîte_à_livres.jpg")
* result[0].url_hd // => "https://commons.wikimedia.org/wiki/Special:FilePath/File%3AS%C3%A8vres_-_square_madame_de_Pompadour_-_bo%C3%AEte_%C3%A0_livres.jpg"
*
* const result = await WikimediaImageProvider.singleton.ExtractUrls("image", "https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Edinburgh_City_police_box_001.jpg/576px-Edinburgh_City_police_box_001.jpg")
* result[0].url_hd // => "https://commons.wikimedia.org/wiki/File:Edinburgh_City_police_box_001.jpg"
*/
public async ExtractUrls(key: string, value: string): undefined | Promise<ProvidedImage[]> {
const hasCommonsPrefix = WikimediaImageProvider.startsWithCommonsPrefix(value)