forked from MapComplete/MapComplete
Merge develop
This commit is contained in:
commit
29f6716fa9
209 changed files with 8475 additions and 4933 deletions
|
@ -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]
|
||||
|
|
81
UI/BigComponents/ExtraLinkButton.ts
Normal file
81
UI/BigComponents/ExtraLinkButton.ts
Normal 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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue