forked from MapComplete/MapComplete
Added builtin for multiple layers
This commit is contained in:
parent
fe747dbfb4
commit
caacb6a3ef
2 changed files with 72 additions and 34 deletions
|
@ -94,39 +94,7 @@ export default class LayoutConfig {
|
|||
}
|
||||
);
|
||||
this.defaultBackgroundId = json.defaultBackgroundId;
|
||||
this.layers = json.layers.map((layer, i) => {
|
||||
if (typeof layer === "string") {
|
||||
if (AllKnownLayers.sharedLayersJson[layer] !== undefined) {
|
||||
if (json.overrideAll !== undefined) {
|
||||
let lyr = JSON.parse(JSON.stringify(AllKnownLayers.sharedLayersJson[layer]));
|
||||
return new LayerConfig(Utils.Merge(json.overrideAll, lyr), this.units, `${this.id}+overrideAll.layers[${i}]`, official);
|
||||
} else {
|
||||
return AllKnownLayers.sharedLayers[layer]
|
||||
}
|
||||
} else {
|
||||
throw "Unkown fixed layer " + layer;
|
||||
}
|
||||
}
|
||||
// @ts-ignore
|
||||
if (layer.builtin !== undefined) {
|
||||
// @ts-ignore
|
||||
const name = layer.builtin;
|
||||
const shared = AllKnownLayers.sharedLayersJson[name];
|
||||
if (shared === undefined) {
|
||||
throw "Unkown fixed layer " + name;
|
||||
}
|
||||
// @ts-ignore
|
||||
layer = Utils.Merge(layer.override, JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes
|
||||
|
||||
|
||||
}
|
||||
if (json.overrideAll !== undefined) {
|
||||
layer = Utils.Merge(json.overrideAll, layer);
|
||||
}
|
||||
|
||||
// @ts-ignore
|
||||
return new LayerConfig(layer, this.units, `${this.id}.layers[${i}]`, official)
|
||||
});
|
||||
this.layers = LayoutConfig.ExtractLayers(json, context, this.units, official);
|
||||
|
||||
// ALl the layers are constructed, let them share tags in now!
|
||||
const roaming: { r, source: LayerConfig }[] = []
|
||||
|
@ -190,6 +158,61 @@ export default class LayoutConfig {
|
|||
|
||||
}
|
||||
|
||||
private static ExtractLayers(json: LayoutConfigJson, context: string, units: Unit[], official: boolean): LayerConfig[] {
|
||||
const result: LayerConfig[] = []
|
||||
|
||||
json.layers.forEach((layer, i) => {
|
||||
if (typeof layer === "string") {
|
||||
if (AllKnownLayers.sharedLayersJson[layer] !== undefined) {
|
||||
if (json.overrideAll !== undefined) {
|
||||
let lyr = JSON.parse(JSON.stringify(AllKnownLayers.sharedLayersJson[layer]));
|
||||
const newLayer = new LayerConfig(Utils.Merge(json.overrideAll, lyr), units, `${json.id}+overrideAll.layers[${i}]`, official)
|
||||
result.push(newLayer)
|
||||
return
|
||||
} else {
|
||||
result.push(AllKnownLayers.sharedLayers[layer])
|
||||
return
|
||||
}
|
||||
} else {
|
||||
throw "Unknown fixed layer " + layer;
|
||||
}
|
||||
}
|
||||
|
||||
if (layer["builtin"] === undefined) {
|
||||
if (json.overrideAll !== undefined) {
|
||||
layer = Utils.Merge(json.overrideAll, layer);
|
||||
}
|
||||
// @ts-ignore
|
||||
const newLayer = new LayerConfig(layer, units, `${json.id}.layers[${i}]`, official)
|
||||
result.push(newLayer)
|
||||
return
|
||||
}
|
||||
// @ts-ignore
|
||||
let names = layer.builtin;
|
||||
if (typeof names === "string") {
|
||||
names = [names]
|
||||
}
|
||||
names.forEach(name => {
|
||||
const shared = AllKnownLayers.sharedLayersJson[name];
|
||||
if (shared === undefined) {
|
||||
throw "Unknown fixed layer " + name;
|
||||
}
|
||||
// @ts-ignore
|
||||
let newLayer: LayerConfigJson = Utils.Merge(layer.override, JSON.parse(JSON.stringify(shared))); // We make a deep copy of the shared layer, in order to protect it from changes
|
||||
if (json.overrideAll !== undefined) {
|
||||
newLayer = Utils.Merge(json.overrideAll, newLayer);
|
||||
}
|
||||
// @ts-ignore
|
||||
const layerConfig = new LayerConfig(newLayer, units, `${json.id}.layers[${i}]`, official)
|
||||
result.push(layerConfig)
|
||||
return
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
private static ExtractUnits(json: LayoutConfigJson, context: string): Unit[] {
|
||||
const result: Unit[] = []
|
||||
if ((json.units ?? []).length !== 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue