forked from MapComplete/MapComplete
Scripts: create script to import layers from studio into official mapcomplete
This commit is contained in:
parent
c7b905d1fb
commit
db685dc05f
5 changed files with 186 additions and 81 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue