Merge develop

This commit is contained in:
Pieter Vander Vennet 2022-02-14 20:10:49 +01:00
commit 29f6716fa9
209 changed files with 8475 additions and 4933 deletions

View file

@ -20,7 +20,6 @@ import Toggle from "../Input/Toggle";
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
import Constants from "../../Models/Constants";
import ContributorCount from "../../Logic/ContributorCount";
import {icon} from "leaflet";
import Img from "../Base/Img";
export class OpenIdEditor extends VariableUiElement {
@ -211,7 +210,11 @@ export default class CopyrightPanel extends Combine {
private static IconAttribution(iconPath: string): BaseUIElement {
if (iconPath.startsWith("http")) {
try{
iconPath = "." + new URL(iconPath).pathname;
}catch(e){
console.error(e)
}
}
const license: SmallLicense = CopyrightPanel.LicenseObject[iconPath]

View file

@ -0,0 +1,81 @@
import {UIElement} from "../UIElement";
import BaseUIElement from "../BaseUIElement";
import {UIEventSource} from "../../Logic/UIEventSource";
import ExtraLinkConfig from "../../Models/ThemeConfig/ExtraLinkConfig";
import MapControlButton from "../MapControlButton";
import Link from "../Base/Link";
import Img from "../Base/Img";
import {SubtleButton} from "../Base/SubtleButton";
import Toggle from "../Input/Toggle";
import Loc from "../../Models/Loc";
import Locale from "../i18n/Locale";
import {Utils} from "../../Utils";
export default class ExtraLinkButton extends UIElement{
private readonly _config: ExtraLinkConfig;
private readonly state: {
layoutToUse: {id: string};
featureSwitchWelcomeMessage: UIEventSource<boolean>, locationControl: UIEventSource<Loc>};
constructor(state: {featureSwitchWelcomeMessage: UIEventSource<boolean>, locationControl: UIEventSource<Loc>, layoutToUse: {id: string}},
config: ExtraLinkConfig) {
super();
this.state = state;
this._config = config;
}
protected InnerRender(): BaseUIElement {
if(this._config === undefined){
return undefined;
}
const c = this._config;
const isIframe = window !== window.top
if(c.requirements.has("iframe") && !isIframe){
return undefined
}
if(c.requirements.has("no-iframe") && isIframe){
return undefined
}
let link : BaseUIElement
const theme = this.state.layoutToUse?.id ?? ""
const href = this.state.locationControl.map(loc => {
const subs = {
...loc,
theme: theme,
language: Locale.language.data
}
return Utils.SubstituteKeys(c.href, subs)
})
if(c.text === undefined){
link = new MapControlButton(
new Link(new Img(c.icon), href, c.newTab).SetClass("block w-full h-full p-1.5")
)
}else {
let img : BaseUIElement = undefined
if(c.icon !== undefined){
img = new Img(c.icon).SetClass("h-6")
}
link = new SubtleButton(img,c.text, {url:
href,
newTab: c.newTab})
}
if(c.requirements.has("no-welcome-message")){
link = new Toggle(undefined, link, this.state.featureSwitchWelcomeMessage)
}
if(c.requirements.has("welcome-message")){
link = new Toggle(link, undefined, this.state.featureSwitchWelcomeMessage)
}
return link;
}
}

View file

@ -9,7 +9,7 @@ import BaseUIElement from "../BaseUIElement";
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
import {UIEventSource} from "../../Logic/UIEventSource";
import Loc from "../../Models/Loc";
import {OsmConnection} from "../../Logic/Osm/OsmConnection";
import UserDetails, {OsmConnection} from "../../Logic/Osm/OsmConnection";
import UserRelatedState from "../../Logic/State/UserRelatedState";
import Toggle from "../Input/Toggle";
import {Utils} from "../../Utils";
@ -52,7 +52,8 @@ export default class MoreScreen extends Combine {
id: string,
icon: string,
title: any,
shortDescription: any
shortDescription: any,
definition?: any
}, isCustom: boolean = false
):
BaseUIElement {
@ -87,6 +88,11 @@ export default class MoreScreen extends Combine {
linkPrefix = `${path}/theme.html?userlayout=${layout.id}&`
}
let hash = ""
if(layout.definition !== undefined){
hash = "#"+btoa(JSON.stringify(layout.definition))
}
const linkText = currentLocation?.map(currentLocation => {
const params = [
["z", currentLocation?.zoom],
@ -95,10 +101,11 @@ export default class MoreScreen extends Combine {
].filter(part => part[1] !== undefined)
.map(part => part[0] + "=" + part[1])
.join("&")
return `${linkPrefix}${params}`;
return `${linkPrefix}${params}${hash}`;
}) ?? new UIEventSource<string>(`${linkPrefix}`)
return new SubtleButton(layout.icon,
new Combine([
`<dt class='text-lg leading-6 font-medium text-gray-900 group-hover:text-blue-800'>`,
@ -134,7 +141,8 @@ export default class MoreScreen extends Combine {
id: string
icon: string,
title: any,
shortDescription: any
shortDescription: any,
definition?: any
} = JSON.parse(str)
return MoreScreen.createLinkButton(state, value, true)