///
///
import { App } from "../app";
import { debugSettings } from "../debugsettings";
declare var app: App;
export class UIManager {
public static getTabBarItemForPage(pageName: string): string {
if (UIManager.pageMappings[pageName]) {
return UIManager.pageMappings[pageName];
}
return pageName;
}
public static addTabBarItemMapping(tabBarItem: string, pageName: string) {
UIManager.pageMappings[pageName] = tabBarItem;
}
private static pageMappings: string[] = [];
public currentPageContainer: string;
public effectivePageContainer: string;
public currentPage: string;
public currentPageBlock: string;
public subPageHiding = new signals.Signal();
public subPageShowing = new signals.Signal();
public pageBlockHiding = new signals.Signal();
public pageBlockHidden = new signals.Signal();
public pageBlockShowing = new signals.Signal();
public pageBlockShown = new signals.Signal();
public popupClosed = new signals.Signal();
constructor() {
this.currentPageContainer = null;
this.effectivePageContainer = null;
this.currentPage = null;
this.currentPageBlock = null;
}
public showPageBlock(pageBlockName: string) {
if (pageBlockName === this.currentPageBlock) {
this.pageBlockHiding.dispatch(this.currentPageBlock);
this.pageBlockHidden.dispatch(this.currentPageBlock);
this.pageBlockShowing.dispatch(this.currentPageBlock);
this.pageBlockShown.dispatch(this.currentPageBlock);
return;
}
const nextPageBlockObject = this.getPageBlock(pageBlockName);
if (this.currentPageBlock !== null) {
this.pageBlockHiding.dispatch(this.currentPageBlock);
const currentPageBlockObject = this.getPageBlock(this.currentPageBlock);
if (currentPageBlockObject !== null) {
currentPageBlockObject.hideBlock();
} else {
$(".page .page-block." + this.currentPageBlock).css("display", "none");
}
}
this.pageBlockHidden.dispatch(this.currentPageBlock);
this.currentPage = null;
this.currentPageBlock = pageBlockName;
this.pageBlockShowing.dispatch(this.currentPageBlock);
if (nextPageBlockObject !== null) {
nextPageBlockObject.showBlock();
} else {
$(".page .page-block." + pageBlockName).css("display", "block");
}
this.pageBlockShown.dispatch(this.currentPageBlock);
}
public showPage(pageName: string) {
this.logPage("Showing page '" + pageName + "'");
if (typeof window !== "undefined") {
if (this.currentPageContainer !== null) {
$(".page." + this.currentPageContainer).css("display", "none");
}
}
this.currentPageContainer = pageName;
if (pageName !== "initialization") {
this.effectivePageContainer = pageName;
}
if (typeof window !== "undefined") {
$(".page." + pageName).css("display", "block");
$(".page .sub-page.selector").css("display", "none");
}
}
public showSubPage(pageName: string) {
const nextPageObject = this.getSubPage(pageName);
if (nextPageObject !== null) {
if (nextPageObject.canActivate !== undefined) {
if (!nextPageObject.canActivate()) {
return;
}
}
}
if (this.currentPage != null) {
this.deactivateSubPage(this.currentPage);
}
this.currentPage = pageName;
this.activateSubPage(pageName);
if (typeof window !== "undefined") {
$(".page .sub-page.selector").css("display", "none");
}
}
public deactivateSubPage(pageName: string) {
const pageObject = this.getSubPage(pageName);
if (pageObject != null) {
pageObject.deactivate();
}
this.subPageHiding.dispatch(pageName);
$(".page .sub-page." + pageName).css("display", "none");
}
public activateSubPage(pageName: string) {
const nextPageObject = this.getSubPage(pageName);
if (nextPageObject != null) {
nextPageObject.activate();
}
this.subPageShowing.dispatch(pageName);
$(".page .sub-page." + pageName).css("display", "block");
}
/**
* Gets page block by it's name
* @param pageBlockName String Name of the page block to get.
*/
public getPageBlock(pageBlockName: string) {
if (!app.hasOwnProperty(pageBlockName + "PageBlock")) {
return null;
}
return app[pageBlockName + "PageBlock"] as PageBlock;
}
/**
* Gets page by it's name
* @param subPageName String Name of the sub page to get.
*/
public getSubPage(subPageName: string) {
if (!app.hasOwnProperty(subPageName + "Page")) {
return null;
}
return app[subPageName + "Page"] as Page;
}
private logPage(message: string, ...params: any[]) {
if (debugSettings.ui.tracePages) {
// tslint:disable-next-line:no-console
console.log(message, params);
}
}
}
export const uiManager = new UIManager();