import {UIElement} from "../UIElement"; import {VariableUiElement} from "../Base/VariableUIElement"; import {UIEventSource} from "../../Logic/UIEventSource"; import {LayoutConfigJson} from "../../Customizations/JSON/LayoutConfigJson"; import Combine from "../Base/Combine"; import {OsmConnection} from "../../Logic/Osm/OsmConnection"; import {FixedUiElement} from "../Base/FixedUiElement"; export default class SavePanel extends UIElement { private json: UIElement; private lastSaveEl: UIElement; constructor( connection: OsmConnection, config: UIEventSource, chronic: UIEventSource) { super(); this.lastSaveEl = new VariableUiElement(chronic .map(date => { if (date === undefined) { return new FixedUiElement("Your theme will be saved automatically within two minutes... Click here to force saving").SetClass("alert").Render() } return "Your theme was last saved at " + date.toISOString() })).onClick(() => chronic.setData(new Date())); this.json = new VariableUiElement(config.map(config => { return JSON.stringify(config, null, 2) .replace(/\n/g, "
") .replace(/ /g, " "); })) .SetClass("literal-code"); } InnerRender(): string { return new Combine([ "

Saving

", this.lastSaveEl, "

JSON configuration

", "The url hash is actually no more then a BASE64-encoding of the below JSON. This json contains the full configuration of the theme.
" + "This configuration is mainly useful for debugging", this.json ]).SetClass("scrollable") .Render(); } }