49 lines
No EOL
1.8 KiB
TypeScript
49 lines
No EOL
1.8 KiB
TypeScript
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<LayoutConfigJson>,
|
|
chronic: UIEventSource<Date>) {
|
|
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, "<br/>")
|
|
.replace(/ /g, " ");
|
|
}))
|
|
.SetClass("literal-code");
|
|
}
|
|
|
|
InnerRender(): string {
|
|
return new Combine([
|
|
"<h3>Saving</h3>",
|
|
this.lastSaveEl,
|
|
"<h3>JSON configuration</h3>",
|
|
"The url hash is actually no more then a BASE64-encoding of the below JSON. This json contains the full configuration of the theme.<br/>" +
|
|
"This configuration is mainly useful for debugging",
|
|
this.json
|
|
]).SetClass("scrollable")
|
|
.Render();
|
|
}
|
|
|
|
} |