2023-06-16 02:36:11 +02:00
|
|
|
<script lang="ts">
|
|
|
|
|
2023-09-15 01:16:33 +02:00
|
|
|
import EditLayerState, { LayerStateSender } from "./EditLayerState";
|
|
|
|
import layerSchemaRaw from "../../assets/schemas/layerconfigmeta.json";
|
|
|
|
import Region from "./Region.svelte";
|
|
|
|
import TabbedGroup from "../Base/TabbedGroup.svelte";
|
|
|
|
import { Store, UIEventSource } from "../../Logic/UIEventSource";
|
|
|
|
import type { ConfigMeta } from "./configMeta";
|
|
|
|
import { Utils } from "../../Utils";
|
2023-06-16 02:36:11 +02:00
|
|
|
|
2023-09-15 01:16:33 +02:00
|
|
|
const layerSchema: ConfigMeta[] = <any>layerSchemaRaw;
|
|
|
|
let state = new EditLayerState(layerSchema);
|
|
|
|
state.configuration.setData({});
|
|
|
|
const configuration = state.configuration;
|
|
|
|
new LayerStateSender("http://localhost:1235", state);
|
|
|
|
/**
|
|
|
|
* Blacklist of regions for the general area tab
|
|
|
|
* These are regions which are handled by a different tab
|
|
|
|
*/
|
|
|
|
const regionBlacklist = ["hidden", undefined, "infobox", "tagrenderings", "maprendering", "editing", "title"];
|
|
|
|
const allNames = Utils.Dedup(layerSchema.map(meta => meta.hints.group));
|
2023-06-16 02:36:11 +02:00
|
|
|
|
2023-09-15 01:16:33 +02:00
|
|
|
const perRegion: Record<string, ConfigMeta[]> = {};
|
|
|
|
for (const region of allNames) {
|
|
|
|
perRegion[region] = layerSchema.filter(meta => meta.hints.group === region);
|
|
|
|
}
|
2023-06-16 02:36:11 +02:00
|
|
|
|
2023-09-15 01:16:33 +02:00
|
|
|
const baselayerRegions: string[] = ["Basic", "presets", "filters", "advanced", "expert"];
|
|
|
|
for (const baselayerRegion of baselayerRegions) {
|
|
|
|
if (perRegion[baselayerRegion] === undefined) {
|
|
|
|
console.error("BaseLayerRegions in editLayer: no items have group '" + baselayerRegion + "\"");
|
2023-06-16 02:36:11 +02:00
|
|
|
}
|
2023-09-15 01:16:33 +02:00
|
|
|
}
|
|
|
|
const leftoverRegions: string[] = allNames.filter(r => regionBlacklist.indexOf(r) < 0 && baselayerRegions.indexOf(r) < 0);
|
|
|
|
const title: Store<string> = state.getStoreFor(["id"]);
|
2023-06-16 02:36:11 +02:00
|
|
|
</script>
|
|
|
|
|
2023-09-15 01:16:33 +02:00
|
|
|
<h3>Editing layer {$title}</h3>
|
|
|
|
<h4>Leftover regions</h4>
|
|
|
|
{leftoverRegions.join("; ")}
|
2023-06-23 16:14:43 +02:00
|
|
|
<div class="m4">
|
2023-09-15 01:16:33 +02:00
|
|
|
<TabbedGroup tab={new UIEventSource(2)}>
|
2023-06-16 02:36:11 +02:00
|
|
|
<div slot="title0">General properties</div>
|
|
|
|
<div class="flex flex-col" slot="content0">
|
2023-09-15 01:16:33 +02:00
|
|
|
{#each baselayerRegions as region}
|
|
|
|
<Region {state} configs={perRegion[region]} title={region} />
|
|
|
|
{/each}
|
|
|
|
{#each leftoverRegions as region}
|
|
|
|
<Region {state} configs={perRegion[region]} title={region} />
|
|
|
|
{/each}
|
2023-06-16 02:36:11 +02:00
|
|
|
</div>
|
|
|
|
<div slot="title1">Information panel (questions and answers)</div>
|
|
|
|
<div slot="content1">
|
2023-09-15 01:16:33 +02:00
|
|
|
<Region configs={perRegion["title"]} {state} title="Popup title" />
|
|
|
|
<Region configs={perRegion["tagrenderings"]} {state} title="Popup contents"/>
|
|
|
|
<Region configs={perRegion["editing"]} {state} title="Other editing elements" />
|
2023-06-16 02:36:11 +02:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div slot="title2">Rendering on the map</div>
|
|
|
|
<div slot="content2">
|
2023-10-06 23:56:50 +02:00
|
|
|
<Region configs={perRegion["linerendering"]} {state} />
|
|
|
|
<Region configs={perRegion["pointrendering"]} {state} />
|
2023-09-15 01:16:33 +02:00
|
|
|
</div>
|
|
|
|
<div slot="title3">Configuration file</div>
|
|
|
|
<div slot="content3">
|
|
|
|
<div>
|
|
|
|
Below, you'll find the raw configuration file in `.json`-format.
|
|
|
|
This is mostly for debugging purposes
|
|
|
|
</div>
|
|
|
|
<div class="literal-code">
|
|
|
|
{JSON.stringify($configuration, null, " ")}
|
|
|
|
</div>
|
2023-06-16 02:36:11 +02:00
|
|
|
</div>
|
2023-09-15 01:16:33 +02:00
|
|
|
</TabbedGroup>
|
2023-06-23 16:14:43 +02:00
|
|
|
|
|
|
|
</div>
|