Simplify and fix sharescreen: fix typos in iframe code, use state injection via constructor, remove UI-elements which are broken anyway

This commit is contained in:
Pieter Vander Vennet 2021-10-30 01:05:38 +02:00
parent 5909e89a88
commit 9fb27d3405
3 changed files with 12 additions and 54 deletions

View file

@ -2,7 +2,7 @@ import {Utils} from "../Utils";
export default class Constants { export default class Constants {
public static vNumber = "0.11.2"; public static vNumber = "0.11.3";
public static ImgurApiKey = '7070e7167f0a25a' public static ImgurApiKey = '7070e7167f0a25a'
public static readonly mapillary_client_token_v3 = 'TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2' public static readonly mapillary_client_token_v3 = 'TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2'
public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85" public static readonly mapillary_client_token_v4 = "MLY|4441509239301885|b40ad2d3ea105435bd40c7e76993ae85"

View file

@ -56,7 +56,7 @@ export default class FullWelcomePaneWithTabs extends ScrollableFullScreen {
] ]
if (state.featureSwitchShareScreen.data) { if (state.featureSwitchShareScreen.data) {
tabs.push({header: Svg.share_img, content: new ShareScreen()}); tabs.push({header: Svg.share_img, content: new ShareScreen(state)});
} }
if (state.featureSwitchMoreQuests.data) { if (state.featureSwitchMoreQuests.data) {

View file

@ -2,23 +2,18 @@ import {VariableUiElement} from "../Base/VariableUIElement";
import {Translation} from "../i18n/Translation"; import {Translation} from "../i18n/Translation";
import Svg from "../../Svg"; import Svg from "../../Svg";
import Combine from "../Base/Combine"; import Combine from "../Base/Combine";
import {SubtleButton} from "../Base/SubtleButton";
import {UIEventSource} from "../../Logic/UIEventSource"; import {UIEventSource} from "../../Logic/UIEventSource";
import {Utils} from "../../Utils"; import {Utils} from "../../Utils";
import State from "../../State";
import Toggle from "../Input/Toggle"; import Toggle from "../Input/Toggle";
import {FixedUiElement} from "../Base/FixedUiElement";
import Translations from "../i18n/Translations"; import Translations from "../i18n/Translations";
import Constants from "../../Models/Constants";
import BaseUIElement from "../BaseUIElement"; import BaseUIElement from "../BaseUIElement";
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig";
import LayerConfig from "../../Models/ThemeConfig/LayerConfig"; import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
import MapState from "../../Logic/State/MapState";
export default class ShareScreen extends Combine { export default class ShareScreen extends Combine {
constructor(layout: LayoutConfig = undefined, layoutDefinition: string = undefined) { constructor(state: MapState) {
layout = layout ?? State.state?.layoutToUse; const layout = state?.layoutToUse;
layoutDefinition = layoutDefinition ?? State.state?.layoutDefinition;
const tr = Translations.t.general.sharescreen; const tr = Translations.t.general.sharescreen;
const optionCheckboxes: BaseUIElement[] = [] const optionCheckboxes: BaseUIElement[] = []
@ -39,7 +34,7 @@ export default class ShareScreen extends Combine {
).ToggleOnClick() ).ToggleOnClick()
optionCheckboxes.push(includeLocation); optionCheckboxes.push(includeLocation);
const currentLocation = State.state?.locationControl; const currentLocation = state.locationControl;
optionParts.push(includeLocation.isEnabled.map((includeL) => { optionParts.push(includeLocation.isEnabled.map((includeL) => {
if (currentLocation === undefined) { if (currentLocation === undefined) {
@ -64,9 +59,8 @@ export default class ShareScreen extends Combine {
} }
if (State.state !== undefined) {
const currentLayer: UIEventSource<{ id: string, name: string, layer: any }> = State.state.backgroundLayer; const currentLayer: UIEventSource<{ id: string, name: string, layer: any }> = state.backgroundLayer;
const currentBackground = new VariableUiElement(currentLayer.map(layer => { const currentBackground = new VariableUiElement(currentLayer.map(layer => {
return tr.fsIncludeCurrentBackgroundMap.Subs({name: layer?.name ?? ""}); return tr.fsIncludeCurrentBackgroundMap.Subs({name: layer?.name ?? ""});
})); }));
@ -94,13 +88,12 @@ export default class ShareScreen extends Combine {
optionParts.push(includeLayerChoices.isEnabled.map((includeLayerSelection) => { optionParts.push(includeLayerChoices.isEnabled.map((includeLayerSelection) => {
if (includeLayerSelection) { if (includeLayerSelection) {
return Utils.NoNull(State.state.filteredLayers.data.map(fLayerToParam)).join("&") return Utils.NoNull(state.filteredLayers.data.map(fLayerToParam)).join("&")
} else { } else {
return null return null
} }
}, State.state.filteredLayers.data.map((flayer) => flayer.isDisplayed))); }, state.filteredLayers.data.map((flayer) => flayer.isDisplayed)));
}
const switches = [ const switches = [
{urlName: "fs-userbadge", human: tr.fsUserbadge}, {urlName: "fs-userbadge", human: tr.fsUserbadge},
@ -148,56 +141,22 @@ export default class ShareScreen extends Combine {
let literalText = `https://${host}${path}/${layout.id.toLowerCase()}` let literalText = `https://${host}${path}/${layout.id.toLowerCase()}`
const parts = Utils.NoEmpty(Utils.NoNull(optionParts.map((eventSource) => eventSource.data))); const parts = Utils.NoEmpty(Utils.NoNull(optionParts.map((eventSource) => eventSource.data)));
let hash = "";
if (layoutDefinition !== undefined) {
literalText = `https://${host}${path}/`
if (layout.id.startsWith("http")) {
parts.push("userlayout=" + encodeURIComponent(layout.id))
} else {
hash = ("#" + layoutDefinition)
parts.push("userlayout=true");
}
}
if (parts.length === 0) { if (parts.length === 0) {
return literalText + hash; return literalText;
} }
return literalText + "?" + parts.join("&");
return literalText + "?" + parts.join("&") + hash;
}, optionParts); }, optionParts);
const iframeCode = new VariableUiElement( const iframeCode = new VariableUiElement(
url.map((url) => { url.map((url) => {
return `<span class='literal-code iframe-code-block'> return `<span class='literal-code iframe-code-block'>
&lt;iframe src="${url}" allow="geolocation" width="100%" height="100%" style="min-width: 25Opx; min-height: 250ox" title="${layout.title?.txt ?? "MapComplete"} with MapComplete"&gt;&lt;/iframe&gt &lt;iframe src="${url}" allow="geolocation" width="100%" height="100%" style="min-width: 250px; min-height: 250px" title="${layout.title?.txt ?? "MapComplete"} with MapComplete"&gt;&lt;/iframe&gt
</span>` </span>`
}) })
); );
let editLayout: BaseUIElement = new FixedUiElement("");
if ((layoutDefinition !== undefined && State.state?.osmConnection !== undefined)) {
editLayout =
new VariableUiElement(
State.state.osmConnection.userDetails.map(
userDetails => {
if (userDetails.csCount <= Constants.userJourney.themeGeneratorReadOnlyUnlock) {
return "";
}
return new SubtleButton(Svg.pencil_ui(),
new Combine([tr.editThisTheme.Clone().SetClass("bold"), "<br/>",
tr.editThemeDescription.Clone()]),
{url: `./customGenerator.html#${State.state.layoutDefinition}`, newTab: true});
}
));
}
const linkStatus = new UIEventSource<string | Translation>(""); const linkStatus = new UIEventSource<string | Translation>("");
const link = new VariableUiElement( const link = new VariableUiElement(
url.map((url) => `<input type="text" value=" ${url}" id="code-link--copyable" style="width:90%">`) url.map((url) => `<input type="text" value=" ${url}" id="code-link--copyable" style="width:90%">`)
@ -239,7 +198,6 @@ export default class ShareScreen extends Combine {
super([ super([
editLayout,
tr.intro.Clone(), tr.intro.Clone(),
link, link,
new VariableUiElement(linkStatus), new VariableUiElement(linkStatus),