import { UIEventSource } from "../Logic/UIEventSource" import { QueryParameters } from "../Logic/Web/QueryParameters" import Hash from "../Logic/Web/Hash" export class DefaultGuiState { static state: DefaultGuiState public readonly welcomeMessageIsOpened: UIEventSource public readonly downloadControlIsOpened: UIEventSource public readonly filterViewIsOpened: UIEventSource public readonly copyrightViewIsOpened: UIEventSource public readonly currentViewControlIsOpened: UIEventSource public readonly welcomeMessageOpenedTab: UIEventSource public readonly allFullScreenStates: UIEventSource[] = [] constructor() { this.welcomeMessageOpenedTab = UIEventSource.asFloat( QueryParameters.GetQueryParameter( "tab", "0", `The tab that is shown in the welcome-message.` ) ) 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" ) 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" ) this.currentViewControlIsOpened = QueryParameters.GetBooleanQueryParameter( "currentview-toggle", false, "Whether or not the current view box is shown" ) const states = { download: this.downloadControlIsOpened, filters: this.filterViewIsOpened, copyright: this.copyrightViewIsOpened, currentview: this.currentViewControlIsOpened, welcome: this.welcomeMessageIsOpened, } Hash.hash.addCallbackAndRunD((hash) => { hash = hash.toLowerCase() states[hash]?.setData(true) }) if (Hash.hash.data === "" || Hash.hash.data === undefined) { this.welcomeMessageIsOpened.setData(true) } this.allFullScreenStates.push( this.downloadControlIsOpened, this.filterViewIsOpened, this.copyrightViewIsOpened, this.welcomeMessageIsOpened, this.currentViewControlIsOpened ) 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) } }) } } } }