forked from MapComplete/MapComplete
Merge develop
This commit is contained in:
commit
220fc82dba
365 changed files with 19806 additions and 22212 deletions
|
|
@ -386,9 +386,11 @@ export class GenerateDocs extends Script {
|
|||
|
||||
allLayers.forEach((layer) => {
|
||||
const element = layer.generateDocumentation(
|
||||
themesPerLayer.get(layer.id),
|
||||
layerIsNeededBy,
|
||||
DependencyCalculator.getLayerDependencies(layer)
|
||||
{
|
||||
usedInThemes: themesPerLayer.get(layer.id),
|
||||
layerIsNeededBy: layerIsNeededBy,
|
||||
dependencies: DependencyCalculator.getLayerDependencies(layer),
|
||||
},
|
||||
)
|
||||
const inlineSource = inlineLayers.get(layer.id)
|
||||
ScriptUtils.erasableLog("Exporting layer documentation for", layer.id)
|
||||
|
|
@ -481,15 +483,17 @@ export class GenerateDocs extends Script {
|
|||
"questions.json",
|
||||
true
|
||||
)
|
||||
const reusedTagRenderings = DependencyCalculator.tagRenderingImportedBy(qLayer, Array.from(AllSharedLayers.sharedLayers.values()))
|
||||
const docs = qLayer.generateDocumentation({ reusedTagRenderings })
|
||||
this.WriteMarkdownFile(
|
||||
"./Docs/BuiltinQuestions.md",
|
||||
qLayer.generateDocumentation([], new Map(), []),
|
||||
docs,
|
||||
["assets/layers/questions/questions.json"]
|
||||
)
|
||||
}
|
||||
|
||||
private generateForTheme(theme: ThemeConfig): void {
|
||||
const allLayers = AllSharedLayers.getSharedLayersConfigs()
|
||||
const allLayers = AllSharedLayers.sharedLayers
|
||||
const layersToShow = theme.layers.filter(
|
||||
(l) => l.id !== "favourite" && Constants.added_by_default.indexOf(<any>l.id) < 0
|
||||
)
|
||||
|
|
@ -520,7 +524,7 @@ export class GenerateDocs extends Script {
|
|||
MarkdownUtils.list(theme.language.filter((ln) => ln !== "_context")),
|
||||
"# Layers defined in this theme configuration file",
|
||||
"These layers can not be reused in different themes.",
|
||||
...layersToInline.map((l) => l.generateDocumentation(null)),
|
||||
...layersToInline.map((l) => l.generateDocumentation({ usedInThemes: null })),
|
||||
].join("\n")
|
||||
this.WriteMarkdownFile(
|
||||
"./Docs/Themes/" + theme.id + ".md",
|
||||
|
|
@ -587,11 +591,13 @@ export class GenerateDocs extends Script {
|
|||
Constants.priviliged_layers.map((id) => AllSharedLayers.sharedLayers.get(id))
|
||||
).map((l) =>
|
||||
l.generateDocumentation(
|
||||
themesPerLayer.get(l.id),
|
||||
layerIsNeededBy,
|
||||
DependencyCalculator.getLayerDependencies(l),
|
||||
Constants.added_by_default.indexOf(<any>l.id) >= 0,
|
||||
Constants.no_include.indexOf(<any>l.id) < 0
|
||||
{
|
||||
usedInThemes: themesPerLayer.get(l.id),
|
||||
layerIsNeededBy: layerIsNeededBy,
|
||||
dependencies: DependencyCalculator.getLayerDependencies(l),
|
||||
addedByDefault: Constants.added_by_default.indexOf(<any>l.id) >= 0,
|
||||
canBeIncluded: Constants.no_include.indexOf(<any>l.id) < 0,
|
||||
},
|
||||
)
|
||||
),
|
||||
"# Normal layers",
|
||||
|
|
|
|||
|
|
@ -14,11 +14,7 @@ import {
|
|||
import { Translation } from "../src/UI/i18n/Translation"
|
||||
import { PrepareLayer } from "../src/Models/ThemeConfig/Conversion/PrepareLayer"
|
||||
import { PrepareTheme } from "../src/Models/ThemeConfig/Conversion/PrepareTheme"
|
||||
import {
|
||||
Conversion,
|
||||
DesugaringContext,
|
||||
DesugaringStep,
|
||||
} from "../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import { Conversion, DesugaringContext, DesugaringStep } from "../src/Models/ThemeConfig/Conversion/Conversion"
|
||||
import { Utils } from "../src/Utils"
|
||||
import Script from "./Script"
|
||||
import { AllSharedLayers } from "../src/Customizations/AllSharedLayers"
|
||||
|
|
@ -35,10 +31,7 @@ import { Translatable } from "../src/Models/ThemeConfig/Json/Translatable"
|
|||
import { ValidateThemeAndLayers } from "../src/Models/ThemeConfig/Conversion/ValidateThemeAndLayers"
|
||||
import { ExtractImages } from "../src/Models/ThemeConfig/Conversion/FixImages"
|
||||
import { TagRenderingConfigJson } from "../src/Models/ThemeConfig/Json/TagRenderingConfigJson"
|
||||
import {
|
||||
LayerConfigDependencyGraph,
|
||||
LevelInfo,
|
||||
} from "../src/Models/ThemeConfig/LayerConfigDependencyGraph"
|
||||
import { LayerConfigDependencyGraph, LevelInfo } from "../src/Models/ThemeConfig/LayerConfigDependencyGraph"
|
||||
|
||||
// This scripts scans 'src/assets/layers/*.json' for layer definition files and 'src/assets/themes/*.json' for theme definition files.
|
||||
// It spits out an overview of those to be used to load them
|
||||
|
|
@ -54,7 +47,7 @@ class ParseLayer extends Conversion<
|
|||
private readonly _doesImageExist: DoesImageExist
|
||||
|
||||
constructor(prepareLayer: PrepareLayer, doesImageExist: DoesImageExist) {
|
||||
super("ParseLayer", "Parsed a layer from file, validates it", [])
|
||||
super("ParseLayer", "Parsed a layer from file, validates it")
|
||||
this._prepareLayer = prepareLayer
|
||||
this._doesImageExist = doesImageExist
|
||||
}
|
||||
|
|
@ -113,7 +106,7 @@ class AddIconSummary extends DesugaringStep<{ raw: LayerConfigJson; parsed: Laye
|
|||
static singleton = new AddIconSummary()
|
||||
|
||||
constructor() {
|
||||
super("Adds an icon summary for quick reference", ["_layerIcon"], "AddIconSummary")
|
||||
super("AddIconSummary","Adds an icon summary for quick reference")
|
||||
}
|
||||
|
||||
convert(json: { raw: LayerConfigJson; parsed: LayerConfig }) {
|
||||
|
|
@ -158,7 +151,7 @@ class LayerBuilder extends Conversion<object, Map<string, LayerConfigJson>> {
|
|||
states: Map<string, "clean" | "dirty" | "changed">,
|
||||
sharedTagRenderings: QuestionableTagRenderingConfigJson[]
|
||||
) {
|
||||
super("LayerBuilder", "Builds all the layers, writes them to file", [])
|
||||
super("LayerBuilder", "Builds all the layers, writes them to file")
|
||||
this._levels = levels
|
||||
this._dependencies = dependencies
|
||||
this._states = states
|
||||
|
|
@ -667,7 +660,7 @@ class LayerOverviewUtils extends Script {
|
|||
priviliged.delete("last_click")
|
||||
priviliged.delete("search")
|
||||
|
||||
const isBoostrapping = AllSharedLayers.getSharedLayersConfigs().size == 0
|
||||
const isBoostrapping = AllSharedLayers.sharedLayers.size == 0
|
||||
if (!isBoostrapping && priviliged.size > 0) {
|
||||
throw (
|
||||
"Priviliged layer " +
|
||||
|
|
|
|||
|
|
@ -166,6 +166,7 @@ class GenerateLayouts extends Script {
|
|||
manifest: any
|
||||
whiteIcons: string[]
|
||||
}> {
|
||||
const id = layout.id
|
||||
Translation.forcedLanguage = "en"
|
||||
const icons = []
|
||||
|
||||
|
|
@ -226,7 +227,7 @@ class GenerateLayouts extends Script {
|
|||
const manifest = {
|
||||
name: ogTitle,
|
||||
short_name: ogTitle,
|
||||
start_url: `${layout.id.toLowerCase()}.html`,
|
||||
start_url: `${id.toLowerCase()}.html`,
|
||||
lang: "en",
|
||||
display: "standalone",
|
||||
background_color: "#fff",
|
||||
|
|
@ -234,6 +235,12 @@ class GenerateLayouts extends Script {
|
|||
orientation: "portrait-primary, landscape-primary",
|
||||
icons: icons,
|
||||
categories: ["map", "navigation"],
|
||||
"protocol_handlers": [
|
||||
{
|
||||
"protocol": "geo",
|
||||
"url": `/${id.toLowerCase()}.html?geouri=%s`
|
||||
}
|
||||
]
|
||||
}
|
||||
return {
|
||||
manifest,
|
||||
|
|
@ -286,13 +293,16 @@ class GenerateLayouts extends Script {
|
|||
if (f.properties.type === "vector") {
|
||||
// We also need to whitelist eventual sources
|
||||
let url = f.properties.url
|
||||
urls.push(...(f.properties["connect-src"] ?? []))
|
||||
if (url.startsWith("pmtiles://")) {
|
||||
url = url.substring("pmtiles://".length)
|
||||
}
|
||||
if (url.endsWith(".pmtiles")) {
|
||||
continue
|
||||
}
|
||||
const styleSpec = await Utils.downloadJsonCached(url, 1000 * 120, {
|
||||
Origin: "https://mapcomplete.org",
|
||||
})
|
||||
urls.push(...(f.properties["connect-src"] ?? []))
|
||||
for (const key of Object.keys(styleSpec?.["sources"] ?? {})) {
|
||||
const url = styleSpec["sources"][key].url
|
||||
if (!url) {
|
||||
|
|
|
|||
|
|
@ -16,8 +16,21 @@ export class GenerateSunnyUnlabeled extends Script {
|
|||
writeFileSync("public/assets/sunny-unlabeled.json", JSON.stringify(unlabeled, null, " "))
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a variation hosted by api.protomaps
|
||||
*/
|
||||
generateHosted() {
|
||||
const tilesource = "https://api.protomaps.com/tiles/v4/{z}/{x}/{y}.mvt?key=2af8b969a9e8b692"
|
||||
const hosted = { "#": "AUTOMATICALLY GENERATED! Do not edit.", ...sunny }
|
||||
delete hosted.sources.protomaps.url
|
||||
hosted.sources.protomaps["tiles"] = [tilesource]
|
||||
writeFileSync("public/assets/sunny-hosted.json", JSON.stringify(hosted, null, " "))
|
||||
|
||||
}
|
||||
|
||||
async main(args: string[]): Promise<void> {
|
||||
this.generateUnlabeled()
|
||||
this.generateHosted()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue