forked from MapComplete/MapComplete
Fix opening of various views when set by url-parameters, small styling tweaks in the popups
This commit is contained in:
parent
d40bf15bc7
commit
933c0f0073
14 changed files with 237 additions and 248 deletions
|
@ -26,44 +26,71 @@ import StrayClickHandler from "../Logic/Actors/StrayClickHandler";
|
|||
import Lazy from "./Base/Lazy";
|
||||
|
||||
export class DefaultGuiState {
|
||||
public readonly welcomeMessageIsOpened;
|
||||
public readonly welcomeMessageIsOpened : UIEventSource<boolean>;
|
||||
public readonly downloadControlIsOpened: UIEventSource<boolean>;
|
||||
public readonly filterViewIsOpened: UIEventSource<boolean>;
|
||||
public readonly welcomeMessageOpenedTab
|
||||
public readonly copyrightViewIsOpened: UIEventSource<boolean>;
|
||||
public readonly welcomeMessageOpenedTab: UIEventSource<number>
|
||||
public readonly allFullScreenStates: UIEventSource<boolean>[] = []
|
||||
|
||||
constructor() {
|
||||
this.filterViewIsOpened = QueryParameters.GetQueryParameter(
|
||||
"filter-toggle",
|
||||
"false",
|
||||
"Whether or not the filter view is shown"
|
||||
).map<boolean>(
|
||||
(str) => str !== "false",
|
||||
[],
|
||||
(b) => "" + b
|
||||
);
|
||||
this.welcomeMessageIsOpened = new UIEventSource<boolean>(Hash.hash.data === undefined ||
|
||||
Hash.hash.data === "" ||
|
||||
Hash.hash.data == "welcome");
|
||||
|
||||
this.welcomeMessageOpenedTab = QueryParameters.GetQueryParameter(
|
||||
|
||||
|
||||
this.welcomeMessageOpenedTab = UIEventSource.asFloat(QueryParameters.GetQueryParameter(
|
||||
"tab",
|
||||
"0",
|
||||
`The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >${Constants.userJourney.mapCompleteHelpUnlock} changesets)`
|
||||
).map<number>(
|
||||
(str) => (isNaN(Number(str)) ? 0 : Number(str)),
|
||||
[],
|
||||
(n) => "" + n
|
||||
);
|
||||
this.downloadControlIsOpened =
|
||||
QueryParameters.GetQueryParameter(
|
||||
));
|
||||
this.welcomeMessageIsOpened = QueryParameters.GetBooleanQueryParameter(
|
||||
"welcome-control-toggle",
|
||||
"false",
|
||||
"Whether or not the welcome panel is shown"
|
||||
)
|
||||
this.downloadControlIsOpened = QueryParameters.GetBooleanQueryParameter(
|
||||
"download-control-toggle",
|
||||
"false",
|
||||
"Whether or not the download panel is shown"
|
||||
).map<boolean>(
|
||||
(str) => str !== "false",
|
||||
[],
|
||||
(b) => "" + b
|
||||
);
|
||||
)
|
||||
this.filterViewIsOpened = QueryParameters.GetBooleanQueryParameter(
|
||||
"filter-toggle",
|
||||
"false",
|
||||
"Whether or not the filter view is shown"
|
||||
)
|
||||
this.copyrightViewIsOpened = QueryParameters.GetBooleanQueryParameter(
|
||||
"copyright-toggle",
|
||||
"false",
|
||||
"Whether or not the copyright view is shown"
|
||||
)
|
||||
if(Hash.hash.data === "download"){
|
||||
this.downloadControlIsOpened.setData(true)
|
||||
}
|
||||
if(Hash.hash.data === "filter"){
|
||||
this.filterViewIsOpened.setData(true)
|
||||
}
|
||||
if(Hash.hash.data === "copyright"){
|
||||
this.copyrightViewIsOpened.setData(true)
|
||||
}
|
||||
if(Hash.hash.data === "" || Hash.hash.data === undefined || Hash.hash.data === "welcome"){
|
||||
this.welcomeMessageIsOpened.setData(true)
|
||||
}
|
||||
|
||||
this.allFullScreenStates.push(this.downloadControlIsOpened, this.filterViewIsOpened, this.copyrightViewIsOpened, this.welcomeMessageIsOpened)
|
||||
|
||||
for (let i = 0; i < this.allFullScreenStates.length; i++){
|
||||
const fullScreenState = this.allFullScreenStates[i];
|
||||
for (let j = 0; j < this.allFullScreenStates.length; j++){
|
||||
if(i == j){
|
||||
continue
|
||||
}
|
||||
const otherState = this.allFullScreenStates[j];
|
||||
fullScreenState.addCallbackAndRunD(isOpened => {
|
||||
if(isOpened){
|
||||
otherState.setData(false)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -154,6 +181,7 @@ export default class DefaultGUI {
|
|||
Toggle.If(state.featureSwitchIframePopoutEnabled, iframePopout),
|
||||
state.featureSwitchWelcomeMessage
|
||||
).AttachTo("messagesbox");
|
||||
|
||||
|
||||
new LeftControls(state, guiState).AttachTo("bottom-left");
|
||||
new RightControls(state).AttachTo("bottom-right");
|
||||
|
@ -162,6 +190,21 @@ export default class DefaultGUI {
|
|||
document
|
||||
.getElementById("centermessage")
|
||||
.classList.add("pointer-events-none");
|
||||
|
||||
// We have to ping the welcomeMessageIsOpened and other isOpened-stuff to activate the FullScreenMessage if needed
|
||||
for (const state of guiState.allFullScreenStates) {
|
||||
if(state.data){
|
||||
state.ping()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* At last, if the map moves or an element is selected, we close all the panels just as well
|
||||
*/
|
||||
|
||||
state.selectedElement.addCallbackAndRunD((_) => {
|
||||
guiState.allFullScreenStates.forEach(s => s.setData(false))
|
||||
});
|
||||
}
|
||||
|
||||
private InitWelcomeMessage() : BaseUIElement{
|
||||
|
@ -211,7 +254,6 @@ export default class DefaultGUI {
|
|||
const addNewPoint = new ScrollableFullScreen(
|
||||
() => Translations.t.general.add.title.Clone(),
|
||||
() => new SimpleAddUI(newPointDialogIsShown, filterViewIsOpened, state),
|
||||
"new",
|
||||
newPointDialogIsShown
|
||||
);
|
||||
addNewPoint.isShown.addCallback((isShown) => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue