Files
5etools-mirror-2.github.io/js/dmscreen/dmscreen-panels.js
TheGiddyLimit 8117ebddc5 v1.198.1
2024-01-01 19:34:49 +00:00

166 lines
4.1 KiB
JavaScript

import {
PANEL_TYP_INITIATIVE_TRACKER, PANEL_TYP_INITIATIVE_TRACKER_CREATURE_VIEWER,
PANEL_TYP_INITIATIVE_TRACKER_PLAYER_V0,
PANEL_TYP_INITIATIVE_TRACKER_PLAYER_V1,
} from "./dmscreen-consts.js";
import {InitiativeTracker} from "./initiativetracker/dmscreen-initiativetracker.js";
import {InitiativeTrackerPlayerV0, InitiativeTrackerPlayerV1} from "./dmscreen-playerinitiativetracker.js";
import {InitiativeTrackerCreatureViewer} from "./dmscreen-initiativetrackercreatureviewer.js";
export class PanelContentManagerFactory {
static _PANEL_TYPES = {};
static registerPanelType ({panelType, Cls}) {
this._PANEL_TYPES[panelType] = Cls;
}
/* -------------------------------------------- */
static async pFromSavedState ({board, saved, ixTab, panel}) {
if (!this._PANEL_TYPES[saved.t]) return undefined;
const ContentManager = new this._PANEL_TYPES[saved.t]({board, panel});
await ContentManager.pLoadState({ixTab, saved});
return true;
}
/* -------------------------------------------- */
static getSaveableContent (
{
type,
toSaveTitle,
$content,
},
) {
if (!this._PANEL_TYPES[type]) return undefined;
return this._PANEL_TYPES[type]
.getSaveableContent({
type,
toSaveTitle,
$content,
});
}
}
/* -------------------------------------------- */
class _PanelContentManager {
static _PANEL_TYPE = null;
static _TITLE = null;
static _IS_STATELESS = false;
static _register () {
PanelContentManagerFactory.registerPanelType({panelType: this._PANEL_TYPE, Cls: this});
return null;
}
static getSaveableContent (
{
type,
toSaveTitle,
$content,
},
) {
return {
t: type,
r: toSaveTitle,
s: this._IS_STATELESS
? {}
: $($content.children()[0]).data("getState")(),
};
}
/* -------------------------------------------- */
constructor (
{
board,
panel,
},
) {
this._board = board;
this._panel = panel;
}
/* -------------------------------------------- */
/**
* @abstract
* @return {jQuery}
*/
_$getPanelElement ({state}) {
throw new Error("Unimplemented!");
}
async pDoPopulate ({state = {}, title = null} = {}) {
this._panel.set$ContentTab(
this.constructor._PANEL_TYPE,
state,
$(`<div class="panel-content-wrapper-inner"></div>`).append(this._$getPanelElement({state})),
title || this.constructor._TITLE,
true,
);
this._board.fireBoardEvent({type: "panelPopulate", payload: {type: this.constructor._PANEL_TYPE}});
}
_doHandleTabRenamed ({ixTab, saved}) {
if (saved.r != null) this._panel.tabDatas[ixTab].tabRenamed = true;
}
async pLoadState ({ixTab, saved}) {
await this.pDoPopulate({state: saved.s, title: saved.r});
this._doHandleTabRenamed({ixTab, saved});
}
}
export class PanelContentManager_InitiativeTracker extends _PanelContentManager {
static _PANEL_TYPE = PANEL_TYP_INITIATIVE_TRACKER;
static _TITLE = "Initiative Tracker";
static _ = this._register();
_$getPanelElement ({state}) {
return InitiativeTracker.$getPanelElement(this._board, state);
}
}
export class PanelContentManager_InitiativeTrackerCreatureViewer extends _PanelContentManager {
static _PANEL_TYPE = PANEL_TYP_INITIATIVE_TRACKER_CREATURE_VIEWER;
static _TITLE = "Creature Viewer";
static _IS_STATELESS = true;
static _ = this._register();
_$getPanelElement ({state}) {
return InitiativeTrackerCreatureViewer.$getPanelElement(this._board, state);
}
}
export class PanelContentManager_InitiativeTrackerPlayerViewV1 extends _PanelContentManager {
static _PANEL_TYPE = PANEL_TYP_INITIATIVE_TRACKER_PLAYER_V1;
static _TITLE = "Initiative Tracker";
static _IS_STATELESS = true;
static _ = this._register();
_$getPanelElement ({state}) {
return InitiativeTrackerPlayerV1.$getPanelElement(this._board, state);
}
}
export class PanelContentManager_InitiativeTrackerPlayerViewV0 extends _PanelContentManager {
static _PANEL_TYPE = PANEL_TYP_INITIATIVE_TRACKER_PLAYER_V0;
static _TITLE = "Initiative Tracker";
static _IS_STATELESS = true;
static _ = this._register();
_$getPanelElement ({state}) {
return InitiativeTrackerPlayerV0.$getPanelElement(this._board, state);
}
}