60 lines
No EOL
2.8 KiB
TypeScript
60 lines
No EOL
2.8 KiB
TypeScript
import {UIEventSource} from "../../Logic/UIEventSource";
|
|
import Combine from "../Base/Combine";
|
|
import Translations from "../i18n/Translations";
|
|
import {VariableUiElement} from "../Base/VariableUIElement";
|
|
import FilteredLayer from "../../Models/FilteredLayer";
|
|
import {TagUtils} from "../../Logic/Tags/TagUtils";
|
|
import Svg from "../../Svg";
|
|
|
|
export default class AddNewMarker extends Combine {
|
|
|
|
constructor(filteredLayers: UIEventSource<FilteredLayer[]>) {
|
|
const icons = new VariableUiElement(filteredLayers.map(filteredLayers => {
|
|
const icons = []
|
|
let last = undefined;
|
|
for (const filteredLayer of filteredLayers) {
|
|
const layer = filteredLayer.layerDef;
|
|
if(layer.name === undefined && !filteredLayer.isDisplayed.data){
|
|
continue
|
|
}
|
|
for (const preset of filteredLayer.layerDef.presets) {
|
|
const tags = TagUtils.KVtoProperties(preset.tags)
|
|
const icon = layer.mapRendering[0].GenerateLeafletStyle(new UIEventSource<any>(tags), false).html
|
|
.SetClass("block relative")
|
|
.SetStyle("width: 42px; height: 42px;");
|
|
icons.push(icon)
|
|
if (last === undefined) {
|
|
last = layer.mapRendering[0].GenerateLeafletStyle(new UIEventSource<any>(tags), false).html
|
|
.SetClass("block relative")
|
|
.SetStyle("width: 42px; height: 42px;");
|
|
}
|
|
}
|
|
}
|
|
if (icons.length === 0) {
|
|
return undefined
|
|
}
|
|
if (icons.length === 1) {
|
|
return icons[0]
|
|
}
|
|
icons.push(last)
|
|
const elem = new Combine(icons).SetClass("flex")
|
|
elem.SetClass("slide min-w-min").SetStyle("animation: slide " + icons.length + "s linear infinite;")
|
|
return elem;
|
|
}))
|
|
const label = Translations.t.general.add.addNewMapLabel.Clone()
|
|
.SetClass("block center absolute text-sm min-w-min pl-1 pr-1 bg-gray-400 rounded-3xl text-white opacity-65 whitespace-nowrap")
|
|
.SetStyle("top: 65px; transform: translateX(-50%)")
|
|
super([
|
|
new Combine([
|
|
Svg.add_pin_svg().SetClass("absolute").SetStyle("width: 50px; filter: drop-shadow(grey 0 0 10px"),
|
|
new Combine([icons])
|
|
.SetStyle("width: 50px")
|
|
.SetClass("absolute p-1 rounded-full overflow-hidden"),
|
|
Svg.addSmall_svg().SetClass("absolute animate-pulse").SetStyle("width: 30px; left: 30px; top: 35px;")
|
|
]).SetClass("absolute"),
|
|
new Combine([label]).SetStyle("position: absolute; left: 50%")
|
|
])
|
|
this.SetClass("block relative");
|
|
}
|
|
|
|
} |