Add various bug fixes and improvements
This commit is contained in:
parent
15a9441b1d
commit
6c4b15e33d
18 changed files with 99 additions and 123 deletions
|
@ -147,6 +147,8 @@ export class InitUiElements {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Creating the featureInfobox");
|
||||||
|
let start = new Date()
|
||||||
// This layer is the layer that gives the questions
|
// This layer is the layer that gives the questions
|
||||||
const featureBox = new FeatureInfoBox(
|
const featureBox = new FeatureInfoBox(
|
||||||
State.state.allElements.getEventSourceById(data.id),
|
State.state.allElements.getEventSourceById(data.id),
|
||||||
|
@ -158,6 +160,8 @@ export class InitUiElements {
|
||||||
hashText: feature.properties.id.replace("/", "_"),
|
hashText: feature.properties.id.replace("/", "_"),
|
||||||
titleText: featureBox.title
|
titleText: featureBox.title
|
||||||
});
|
});
|
||||||
|
let end = new Date();
|
||||||
|
console.log("Creating featureInfoBox took", (end.getTime() - start.getTime()) , "ms")
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -290,14 +294,15 @@ export class InitUiElements {
|
||||||
|
|
||||||
|
|
||||||
const fullOptions2 = new FullWelcomePaneWithTabs();
|
const fullOptions2 = new FullWelcomePaneWithTabs();
|
||||||
if (Hash.hash.data === undefined) {
|
if (Hash.Current() === "") {
|
||||||
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ?-Button on Mobile, opens full screen layer with close-button at the bottom
|
// ?-Button on Mobile, opens full screen layer with close-button at the bottom
|
||||||
Svg.help_svg()
|
Svg.help_svg()
|
||||||
.SetClass("open-welcome-button block rounded-3xl overflow-hidden shadow ml-3" )
|
.SetClass("open-welcome-button block rounded-3xl overflow-hidden shadow ml-3")
|
||||||
.onClick(() => {
|
.onClick(() => {
|
||||||
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
State.state.fullScreenMessage.setData({content: fullOptions2, hashText: "welcome"})
|
||||||
}).AttachTo("help-button-mobile");
|
}).AttachTo("help-button-mobile");
|
||||||
|
@ -407,12 +412,17 @@ export class InitUiElements {
|
||||||
|
|
||||||
|
|
||||||
source.features.addCallbackAndRun((featuresFreshness: { feature: any, freshness: Date }[]) => {
|
source.features.addCallbackAndRun((featuresFreshness: { feature: any, freshness: Date }[]) => {
|
||||||
if(featuresFreshness === undefined){
|
if (featuresFreshness === undefined) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let features = featuresFreshness.map(ff => ff.feature);
|
let features = featuresFreshness.map(ff => ff.feature);
|
||||||
features.forEach(feature => {
|
features.forEach(feature => {
|
||||||
State.state.allElements.addElement(feature);
|
State.state.allElements.addElement(feature);
|
||||||
|
|
||||||
|
if(Hash.hash.data === feature.properties.id.replace("/","_")){
|
||||||
|
State.state.selectedElement.setData(feature);
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
MetaTagging.addMetatags(features);
|
MetaTagging.addMetatags(features);
|
||||||
})
|
})
|
||||||
|
|
3
State.ts
3
State.ts
|
@ -81,6 +81,7 @@ export default class State {
|
||||||
The latest element that was selected - used to generate the right UI at the right place
|
The latest element that was selected - used to generate the right UI at the right place
|
||||||
*/
|
*/
|
||||||
public readonly selectedElement = new UIEventSource<any>(undefined)
|
public readonly selectedElement = new UIEventSource<any>(undefined)
|
||||||
|
publ
|
||||||
|
|
||||||
public readonly featureSwitchUserbadge: UIEventSource<boolean>;
|
public readonly featureSwitchUserbadge: UIEventSource<boolean>;
|
||||||
public readonly featureSwitchSearch: UIEventSource<boolean>;
|
public readonly featureSwitchSearch: UIEventSource<boolean>;
|
||||||
|
@ -209,7 +210,7 @@ export default class State {
|
||||||
if (selected === undefined) {
|
if (selected === undefined) {
|
||||||
h.setData("");
|
h.setData("");
|
||||||
} else {
|
} else {
|
||||||
h.setData(selected.id)
|
h.setData(selected.id.replace("/","_"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -25,7 +25,11 @@ export default class Combine extends UIElement {
|
||||||
console.error("Not a UI-element", ui);
|
console.error("Not a UI-element", ui);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
return ui.Render();
|
let rendered = ui.Render();
|
||||||
|
if(ui.IsEmpty()){
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return rendered;
|
||||||
}).join("");
|
}).join("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class Img {
|
||||||
return `data:image/svg+xml;base64,${(btoa(source))}`;
|
return `data:image/svg+xml;base64,${(btoa(source))}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
static AsImageElement(source: string, css_class: string): string{
|
static AsImageElement(source: string, css_class: string = ""): string{
|
||||||
return `<img class="${css_class}" alt="" src="${Img.AsData(source)}">`;
|
return `<img class="${css_class}" alt="" src="${Img.AsData(source)}">`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,25 +8,27 @@ import Ornament from "./Ornament";
|
||||||
* Wraps some contents into a panel that scrolls the content _under_ the title
|
* Wraps some contents into a panel that scrolls the content _under_ the title
|
||||||
*/
|
*/
|
||||||
export default class ScrollableFullScreen extends UIElement {
|
export default class ScrollableFullScreen extends UIElement {
|
||||||
private _component: Combine;
|
private _component: UIElement;
|
||||||
|
|
||||||
|
|
||||||
constructor(title: UIElement, content: UIElement) {
|
constructor(title: UIElement, content: UIElement) {
|
||||||
super();
|
super();
|
||||||
const returnToTheMap = Svg.back_svg().onClick(() => {
|
const returnToTheMap = Svg.back_ui().onClick(() => {
|
||||||
State.state.fullScreenMessage.setData(undefined);
|
State.state.fullScreenMessage.setData(undefined);
|
||||||
State.state.selectedElement.setData(undefined);
|
State.state.selectedElement.setData(undefined);
|
||||||
}).SetClass("featureinfobox-back-to-the-map only-on-mobile mb-2")
|
}).SetClass("block sm:hidden mb-2 bg-blue-50 rounded-full w-12 h-12 p-1.5")
|
||||||
|
|
||||||
title.SetClass("block w-full")
|
title.SetClass("block w-full")
|
||||||
const ornament = new Combine([new Ornament().SetStyle("height:5em;")]).SetClass("only-on-mobile")
|
|
||||||
|
const ornament = new Combine([new Ornament().SetStyle("height:5em;")]).SetClass("sm:hidden")
|
||||||
|
|
||||||
this._component = new Combine([
|
this._component = new Combine([
|
||||||
new Combine([returnToTheMap, title]).SetClass("border-b-2 border-black shadow sm:shadow-none fixed sm:relative top-0 left-0 right-0 z-50 bg-white p-2 pb-0 sm:p-0 flex overflow-hidden"),
|
new Combine([returnToTheMap, title])
|
||||||
|
.AddClass("border-b-2 border-black shadow sm:shadow-none z-50 bg-white p-2 pb-0 sm:p-0 flex overflow-x-hidden flex-shrink-0 max-h-20vh"),
|
||||||
new Combine(["<span>", content, "</span>", ornament])
|
new Combine(["<span>", content, "</span>", ornament])
|
||||||
.SetClass("block relative pt-16 sm:pt-4 w-full max-h-screen sm:max-h-65vh landscape:max-h-screen overflow-y-auto overflow-x-hidden"),
|
.SetClass("block p-2 sm:pt-4 w-full max-h-screen landscape:max-h-screen overflow-y-auto overflow-x-hidden"),
|
||||||
// We add an ornament which takes around 5em. This is in order to make sure the Web UI doesn't hide
|
// We add an ornament which takes around 5em. This is in order to make sure the Web UI doesn't hide
|
||||||
])
|
]).SetClass("block flex flex-col fixed max-h-screen sm:max-h-65vh sm:relative top-0 left-0 right-0");
|
||||||
this.SetClass("block flex flex-col");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ export default class SearchAndGo extends UIElement {
|
||||||
);
|
);
|
||||||
|
|
||||||
private _foundEntries = new UIEventSource([]);
|
private _foundEntries = new UIEventSource([]);
|
||||||
private _goButton = Svg.search_ui().SetClass('search-go');
|
private _goButton = Svg.search_ui().AddClass('w-8 h-8 full-rounded border-black float-right');
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super(undefined);
|
super(undefined);
|
||||||
|
|
|
@ -50,7 +50,7 @@ export default class UserBadge extends UIElement {
|
||||||
this._homeButton = new VariableUiElement(
|
this._homeButton = new VariableUiElement(
|
||||||
this._userDetails.map((userinfo) => {
|
this._userDetails.map((userinfo) => {
|
||||||
if (userinfo.home) {
|
if (userinfo.home) {
|
||||||
return Svg.home;
|
return Svg.home_svg().Render();
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
})
|
})
|
||||||
|
|
|
@ -20,7 +20,8 @@ export default class FullScreenMessageBox extends UIElement {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
this._content = State.state.fullScreenMessage.data.content;
|
this._content = State.state.fullScreenMessage.data.content;
|
||||||
return new Combine([this._content]).SetClass("block max-h-screen h-screen overflow-x-hidden overflow-y-auto bg-white p-2").Render();
|
return new Combine([this._content])
|
||||||
|
.SetClass("block max-h-screen h-screen overflow-x-hidden overflow-y-auto bg-white p-0").Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InnerUpdate(htmlElement: HTMLElement) {
|
protected InnerUpdate(htmlElement: HTMLElement) {
|
||||||
|
|
|
@ -25,11 +25,12 @@ export default class FeatureInfoBox extends UIElement {
|
||||||
|
|
||||||
|
|
||||||
const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI", undefined))
|
const title = new TagRenderingAnswer(tags, layerConfig.title ?? new TagRenderingConfig("POI", undefined))
|
||||||
.SetClass("text-2xl break-words font-bold p-2");
|
.AddClass("text-2xl break-words font-bold p-2");
|
||||||
this.title = title;
|
this.title = title;
|
||||||
const titleIcons = new Combine(
|
const titleIcons = new Combine(
|
||||||
layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon)))
|
layerConfig.titleIcons.map(icon => new TagRenderingAnswer(tags, icon)
|
||||||
.SetClass("h-8 w-8 pt-2 box-content");
|
.AddClass("block w-8 h-8 align-baseline box-content p-0.5")))
|
||||||
|
.AddClass("flex flex-row flex-wrap pt-1 items-center mr-2");
|
||||||
|
|
||||||
let questionBox: UIElement = undefined;
|
let questionBox: UIElement = undefined;
|
||||||
if (State.state.featureSwitchUserbadge.data) {
|
if (State.state.featureSwitchUserbadge.data) {
|
||||||
|
|
|
@ -21,6 +21,7 @@ export default class TagRenderingAnswer extends UIElement {
|
||||||
if (configuration === undefined) {
|
if (configuration === undefined) {
|
||||||
throw "Trying to generate a tagRenderingAnswer without configuration..."
|
throw "Trying to generate a tagRenderingAnswer without configuration..."
|
||||||
}
|
}
|
||||||
|
this.AddClass("flex items-center flex-row text-lg")
|
||||||
}
|
}
|
||||||
|
|
||||||
InnerRender(): string {
|
InnerRender(): string {
|
||||||
|
@ -34,11 +35,6 @@ export default class TagRenderingAnswer extends UIElement {
|
||||||
if (tags === undefined) {
|
if (tags === undefined) {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
const tr = this._configuration.GetRenderValue(tags);
|
|
||||||
if (tr !== undefined) {
|
|
||||||
this._content = new SubstitutedTranslation(tr, this._tags);
|
|
||||||
return this._content.Render();
|
|
||||||
}
|
|
||||||
|
|
||||||
// The render value doesn't work well with multi-answers (checkboxes), so we have to check for them manually
|
// The render value doesn't work well with multi-answers (checkboxes), so we have to check for them manually
|
||||||
if (this._configuration.multiAnswer) {
|
if (this._configuration.multiAnswer) {
|
||||||
|
@ -65,6 +61,14 @@ export default class TagRenderingAnswer extends UIElement {
|
||||||
return this._content.Render();
|
return this._content.Render();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tr = this._configuration.GetRenderValue(tags);
|
||||||
|
if (tr !== undefined) {
|
||||||
|
this._content = new SubstitutedTranslation(tr, this._tags);
|
||||||
|
return this._content.Render();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ export default class ShowDataLayer {
|
||||||
action();
|
action();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Hash.hash.addCallback(id => {
|
Hash.hash.addCallbackAndRun(id => {
|
||||||
// This is a bit of an edge case: if the hash becomes an id to search, we have to show the corresponding popup
|
// This is a bit of an edge case: if the hash becomes an id to search, we have to show the corresponding popup
|
||||||
if(State.state.selectedElement !== undefined){
|
if(State.state.selectedElement !== undefined){
|
||||||
return; // Something is already selected, we don't have to apply this fix
|
return; // Something is already selected, we don't have to apply this fix
|
||||||
|
@ -130,6 +130,9 @@ export default class ShowDataLayer {
|
||||||
"<div style='height: 90vh'>Rendering</div>");
|
"<div style='height: 90vh'>Rendering</div>");
|
||||||
popup.setContent(uiElement.Render());
|
popup.setContent(uiElement.Render());
|
||||||
popup.on('remove', () => {
|
popup.on('remove', () => {
|
||||||
|
if(!popup.isOpen()){
|
||||||
|
return;
|
||||||
|
}
|
||||||
State.state.selectedElement.setData(undefined);
|
State.state.selectedElement.setData(undefined);
|
||||||
});
|
});
|
||||||
leafletLayer.bindPopup(popup);
|
leafletLayer.bindPopup(popup);
|
||||||
|
|
|
@ -109,7 +109,7 @@ export abstract class UIElement extends UIEventSource<string> {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HideOnEmpty(hide: boolean) {
|
HideOnEmpty(hide: boolean): UIElement {
|
||||||
this._hideIfEmpty = hide;
|
this._hideIfEmpty = hide;
|
||||||
this.Update();
|
this.Update();
|
||||||
return this;
|
return this;
|
||||||
|
|
|
@ -73,68 +73,68 @@
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=stands",
|
"if": "bicycle_parking=stands",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Staple racks <img width='150px' src='./assets/layers/bike_parking/staple.svg'>",
|
"en": "Staple racks <img style='width: 25%' src='./assets/layers/bike_parking/staple.svg'>",
|
||||||
"nl": "Nietjes <img width='150px' src='./assets/layers/bike_parking/staple.svg'>",
|
"nl": "Nietjes <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
|
||||||
"fr": "Arceaux <img width='150px' src='./assets/layers/bike_parking/staple.svg'>",
|
"fr": "Arceaux <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
|
||||||
"gl": "De roda (Stands) <img width='150px' src='./assets/layers/bike_parking/staple.svg'>",
|
"gl": "De roda (Stands) <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>",
|
||||||
"de": "Fahrradbügel <img width='150px' src='./assets/layers/bike_parking/staple.svg'>"
|
"de": "Fahrradbügel <img style='width: 25%'' src='./assets/layers/bike_parking/staple.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=wall_loops",
|
"if": "bicycle_parking=wall_loops",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Wheel rack/loops <img width='150px' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
"en": "Wheel rack/loops <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
||||||
"nl": "Wielrek/lussen <img width='150px' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
"nl": "Wielrek/lussen <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
||||||
"fr": "Pinces-roues <img width='150px' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
"fr": "Pinces-roues <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
||||||
"gl": "Aros <img width='150px' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
"gl": "Aros <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>",
|
||||||
"de": "Metallgestänge <img width='150px' src='./assets/layers/bike_parking/wall_loops.svg'>"
|
"de": "Metallgestänge <img style='width: 25%'' src='./assets/layers/bike_parking/wall_loops.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=handlebar_holder",
|
"if": "bicycle_parking=handlebar_holder",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Handlebar holder <img width='150px' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
"en": "Handlebar holder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
||||||
"nl": "Stuurhouder <img width='150px' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
"nl": "Stuurhouder <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
||||||
"fr": "Support guidon <img width='150px' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
"fr": "Support guidon <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
||||||
"gl": "Cadeado para guiador <img width='150px' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
"gl": "Cadeado para guiador <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>",
|
||||||
"de": "Halter für Fahrradlenker <img width='150px' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
|
"de": "Halter für Fahrradlenker <img style='width: 25%'' src='./assets/layers/bike_parking/handlebar_holder.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=rack",
|
"if": "bicycle_parking=rack",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Rack <img width='150px' src='./assets/layers/bike_parking/rack.svg'>",
|
"en": "Rack <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
|
||||||
"nl": "Rek <img width='150px' src='./assets/layers/bike_parking/rack.svg'>",
|
"nl": "Rek <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
|
||||||
"fr": "Râtelier <img width='150px' src='./assets/layers/bike_parking/rack.svg'>",
|
"fr": "Râtelier <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
|
||||||
"gl": "Cremalleira <img width='150px' src='./assets/layers/bike_parking/rack.svg'>",
|
"gl": "Cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>",
|
||||||
"de": "Gestell <img width='150px' src='./assets/layers/bike_parking/rack.svg'>"
|
"de": "Gestell <img style='width: 25%'' src='./assets/layers/bike_parking/rack.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=two_tier",
|
"if": "bicycle_parking=two_tier",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Two-tiered <img width='150px' src='./assets/layers/bike_parking/two_tier.svg'>",
|
"en": "Two-tiered <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
|
||||||
"nl": "Dubbel (twee verdiepingen) <img width='150px' src='./assets/layers/bike_parking/two_tier.svg'>",
|
"nl": "Dubbel (twee verdiepingen) <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
|
||||||
"fr": "Superposé <img width='150px' src='./assets/layers/bike_parking/two_tier.svg'>",
|
"fr": "Superposé <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
|
||||||
"gl": "Dobre cremalleira <img width='150px' src='./assets/layers/bike_parking/two_tier.svg'>",
|
"gl": "Dobre cremalleira <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>",
|
||||||
"de": "Zweistufig <img width='150px' src='./assets/layers/bike_parking/two_tier.svg'>"
|
"de": "Zweistufig <img style='width: 25%'' src='./assets/layers/bike_parking/two_tier.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=shed",
|
"if": "bicycle_parking=shed",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Shed <img width='150px' src='./assets/layers/bike_parking/shed.svg'>",
|
"en": "Shed <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
|
||||||
"nl": "Schuur <img width='150px' src='./assets/layers/bike_parking/shed.svg'>",
|
"nl": "Schuur <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
|
||||||
"fr": "Abri <img width='150px' src='./assets/layers/bike_parking/shed.svg'>",
|
"fr": "Abri <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
|
||||||
"gl": "Abeiro <img width='150px' src='./assets/layers/bike_parking/shed.svg'>",
|
"gl": "Abeiro <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>",
|
||||||
"de": "Schuppen <img width='150px' src='./assets/layers/bike_parking/shed.svg'>"
|
"de": "Schuppen <img style='width: 25%'' src='./assets/layers/bike_parking/shed.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"if": "bicycle_parking=bollard",
|
"if": "bicycle_parking=bollard",
|
||||||
"then": {
|
"then": {
|
||||||
"en": "Bollard <img width='150px' src='./assets/layers/bike_parking/bollard.svg'>",
|
"en": "Bollard <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>",
|
||||||
"nl": "Paal met ring <img width='150px' src='./assets/layers/bike_parking/bollard.svg'>"
|
"nl": "Paal met ring <img style='width: 25%'' src='./assets/layers/bike_parking/bollard.svg'>"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
"startZoom": 1,
|
"startZoom": 1,
|
||||||
"widenFactor": 0.05,
|
"widenFactor": 0.05,
|
||||||
"socialImage": "",
|
"socialImage": "",
|
||||||
"customCss": "./assets/themes/surveillance_cameras/custom_theme.css",
|
|
||||||
"defaultBackgroundId": "Stadia.AlidadeSmoothDark",
|
"defaultBackgroundId": "Stadia.AlidadeSmoothDark",
|
||||||
"layers": [
|
"layers": [
|
||||||
"direction",
|
"direction",
|
||||||
|
|
|
@ -1,24 +1,6 @@
|
||||||
|
|
||||||
.featureinfobox-back-to-the-map {
|
|
||||||
padding: 0.5em;
|
|
||||||
border-radius: 999em;
|
|
||||||
margin-right: 0.4em;
|
|
||||||
width: min-content;
|
|
||||||
height: min-content;
|
|
||||||
background: var(--subtle-detail-color);
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.featureinfobox-back-to-the-map svg {
|
|
||||||
width: 1.75em;
|
|
||||||
height: 1.75em;
|
|
||||||
margin-left: 0.15em;
|
|
||||||
margin-top: 0.15em
|
|
||||||
}
|
|
||||||
|
|
||||||
.featureinfobox-back-to-the-map svg path{
|
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-height: 600px) and (min-width: 600px) {
|
@media only screen and (max-height: 600px) and (min-width: 600px) {
|
||||||
/* landscape mode: the first tagrendering of the infobox gets a special treatment and is placed on the right*/
|
/* landscape mode: the first tagrendering of the infobox gets a special treatment and is placed on the right*/
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
width: 100%;
|
width: 100%;
|
||||||
min-width: 20em;
|
min-width: 20em;
|
||||||
pointer-events: all;
|
pointer-events: all;
|
||||||
|
border-radius: 999em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#userbadge a {
|
#userbadge a {
|
||||||
|
@ -60,6 +61,7 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
transition: opacity 500ms linear;
|
transition: opacity 500ms linear;
|
||||||
|
border-radius: 999em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.usertext {
|
.usertext {
|
||||||
|
|
53
index.css
53
index.css
|
@ -7,6 +7,10 @@
|
||||||
.max-h-65vh {
|
.max-h-65vh {
|
||||||
max-height: 65vh;
|
max-height: 65vh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.max-h-20vh {
|
||||||
|
max-height: 20vh;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,12 +44,18 @@ html, body {
|
||||||
|
|
||||||
svg, img {
|
svg, img {
|
||||||
box-sizing: content-box;
|
box-sizing: content-box;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: var(--foreground-color)
|
color: var(--foreground-color)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#topleft-tools svg {
|
#topleft-tools svg {
|
||||||
fill: var(--foreground-color) !important;
|
fill: var(--foreground-color) !important;
|
||||||
stroke: var(--foreground-color) !important;
|
stroke: var(--foreground-color) !important;
|
||||||
|
@ -280,16 +290,6 @@ a {
|
||||||
color: var(--foreground-color);
|
color: var(--foreground-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-go img {
|
|
||||||
position: relative;
|
|
||||||
float: right;
|
|
||||||
height: 1.2em;
|
|
||||||
border: 2px solid black;
|
|
||||||
padding: 0.4em;
|
|
||||||
margin-left: 0.5em;
|
|
||||||
margin-right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.add-popup-all-buttons {
|
.add-popup-all-buttons {
|
||||||
max-height: 50vh;
|
max-height: 50vh;
|
||||||
|
@ -481,39 +481,6 @@ a {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.share-button {
|
|
||||||
background-color: var(--subtle-detail-color);
|
|
||||||
border: none;
|
|
||||||
color: var(--subtle-detail-color-contrast);
|
|
||||||
text-decoration: none;
|
|
||||||
display: inline-block;
|
|
||||||
border-radius: 3em;
|
|
||||||
height: 2.5em;
|
|
||||||
width: 2.5em;
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.share-button svg {
|
|
||||||
height: 1.5em;
|
|
||||||
width: 1.5em;
|
|
||||||
padding: 0.5em;
|
|
||||||
padding-left: 0.4em;
|
|
||||||
fill: var(--subtle-detail-color-contrast) !important;
|
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.share-button svg path {
|
|
||||||
fill: var(--subtle-detail-color-contrast) !important;
|
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.share-button svg circle {
|
|
||||||
fill: var(--subtle-detail-color-contrast) !important;
|
|
||||||
stroke: var(--subtle-detail-color-contrast) !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.ornament {
|
.ornament {
|
||||||
padding-top: 1em;
|
padding-top: 1em;
|
||||||
padding-bottom: 1em;
|
padding-bottom: 1em;
|
||||||
|
|
Loading…
Reference in a new issue