import {PANEL_TYP_INITIATIVE_TRACKER} from "./dmscreen-consts.js"; import { InitiativeTrackerPlayerMessageHandlerV0, InitiativeTrackerPlayerMessageHandlerV1, InitiativeTrackerPlayerUiV0, InitiativeTrackerPlayerUiV1, } from "../initiativetracker/initiativetracker-player.js"; import {DmScreenUtil} from "./dmscreen-util.js"; // region v1 export class InitiativeTrackerPlayerV1 { static $getPanelElement (board, state) { const $meta = $(`
`).hide(); const $head = $(`
`).hide(); const $rows = $(`
`).hide(); const $wrpTracker = $$`
${$meta} ${$head} ${$rows}
`; const view = new InitiativeTrackerPlayerMessageHandlerScreenV1(); view.setElements($meta, $head, $rows); let ui; const $btnConnectRemote = $(``) .click(async () => { $btnConnectRemote.detach(); $btnConnectLocal.detach(); const $iptPlayerName = $(``) .change(() => $iptPlayerName.removeClass("form-control--error")) .disableSpellcheck(); const $iptServerToken = $(``) .change(() => $iptServerToken.removeClass("form-control--error")) .disableSpellcheck(); const $btnGenConnect = $(``); const $btnCancel = $(``) .click(() => { // restore original state $wrpClient.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); }); const $wrpClient = $$`
Player Name ${$iptPlayerName}
Server Token ${$iptServerToken}
${$btnGenConnect}${$btnCancel}
`.appendTo(view.$wrpInitial); $btnGenConnect.click(async () => { if (!$iptPlayerName.val().trim()) return $iptPlayerName.addClass("form-control--error"); if (!$iptServerToken.val().trim()) return $iptServerToken.addClass("form-control--error"); try { $btnGenConnect.attr("disabled", true); ui = new InitiativeTrackerPlayerUiV1(view, $iptPlayerName.val(), $iptServerToken.val()); await ui.pInit(); InitiativeTrackerPlayerMessageHandlerScreenV1.initUnloadMessage(); } catch (e) { $btnGenConnect.attr("disabled", false); JqueryUtil.doToast({content: `Failed to connect. ${VeCt.STR_SEE_CONSOLE}`, type: "danger"}); setTimeout(() => { throw e; }); } }); }); const $btnConnectLocal = $(``) .click(async () => { const $elesData = DmScreenUtil.$getPanelDataElements({board, type: PANEL_TYP_INITIATIVE_TRACKER}); if (!$elesData.length) return JqueryUtil.doToast({content: "No local trackers detected!", type: "warning"}); if ($elesData.length === 1) { try { const token = await $elesData[0].data("pDoConnectLocalV1")(view); ui = new InitiativeTrackerPlayerUiV1(view, "Local", token); await ui.pInit(); InitiativeTrackerPlayerMessageHandlerScreenV1.initUnloadMessage(); } catch (e) { JqueryUtil.doToast({content: `Failed to connect. ${VeCt.STR_SEE_CONSOLE}`, type: "danger"}); setTimeout(() => { throw e; }); } } else { $btnConnectRemote.detach(); $btnConnectLocal.detach(); const $selTracker = $(``).change(() => $selTracker.removeClass("form-control--error")); $elesData.forEach(($e, i) => $selTracker.append(``)); $selTracker.val("-1"); const $btnOk = $(``) .click(async () => { // jQuery reads the disabled value as null if ($selTracker.val() == null) return $selTracker.addClass("form-control--error"); $btnOk.prop("disabled", true); try { const token = await $elesData[Number($selTracker.val())].data("pDoConnectLocalV1")(view); ui = new InitiativeTrackerPlayerUiV1(view, "Local", token); await ui.pInit(); InitiativeTrackerPlayerMessageHandlerScreenV1.initUnloadMessage(); } catch (e) { JqueryUtil.doToast({content: `Failed to connect. ${VeCt.STR_SEE_CONSOLE}`, type: "danger"}); // restore original state $btnCancel.remove(); $wrpSel.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); setTimeout(() => { throw e; }); } }); const $wrpSel = $$`
${$selTracker} ${$btnOk}
`.appendTo(view.$wrpInitial); const $btnCancel = $(``) .click(() => { // restore original state $btnCancel.remove(); $wrpSel.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); }) .appendTo(view.$wrpInitial); } }); view.$wrpInitial = $$`
${$btnConnectRemote} ${$btnConnectLocal}
`.appendTo($wrpTracker); return $wrpTracker; } } class InitiativeTrackerPlayerMessageHandlerScreenV1 extends InitiativeTrackerPlayerMessageHandlerV1 { constructor () { super(true); this._$wrpInitial = null; } initUi () { if (this._isUiInit) return; this._isUiInit = true; this._$meta.show(); this._$head.show(); this._$rows.show(); this._$wrpInitial.addClass("hidden"); } set $wrpInitial ($wrpInitial) { this._$wrpInitial = $wrpInitial; } get $wrpInitial () { return this._$wrpInitial; } static initUnloadMessage () { $(window).on("beforeunload", evt => { const message = `The connection will be closed`; (evt || window.event).message = message; return message; }); } } // endregion /// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // region v0 export class InitiativeTrackerPlayerV0 { static $getPanelElement (board, state) { const $meta = $(`
`).hide(); const $head = $(`
`).hide(); const $rows = $(`
`).hide(); const $wrpTracker = $$`
${$meta} ${$head} ${$rows}
`; const view = new InitiativeTrackerPlayerMessageHandlerScreenV0(); view.setElements($meta, $head, $rows); const $btnConnectRemote = $(``) .click(() => { $btnConnectRemote.detach(); $btnConnectLocal.detach(); const $iptServerToken = $(``).disableSpellcheck(); const $btnGenClientToken = $(``); const $iptClientToken = $(``).disableSpellcheck(); const $btnCancel = $(``) .click(() => { // restore original state $wrpClient.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); }); const $wrpClient = $$`
Server Token ${$iptServerToken}
${$btnGenClientToken}
Client Token ${$iptClientToken}
${$btnCancel}
`.appendTo(view.$wrpInitial); const ui = new InitiativeTrackerPlayerUiV0(view, $iptServerToken, $btnGenClientToken, $iptClientToken); ui.init(); }); const $btnConnectLocal = $(``) .click(async () => { const $elesData = DmScreenUtil.$getPanelDataElements({board, type: PANEL_TYP_INITIATIVE_TRACKER}); if ($elesData.length) { if ($elesData.length === 1) { await $elesData[0].data("pDoConnectLocalV0")(view); } else { $btnConnectRemote.detach(); $btnConnectLocal.detach(); const $selTracker = $(``).change(() => $selTracker.removeClass("error-background")); $elesData.forEach(($e, i) => $selTracker.append(``)); $selTracker.val("-1"); const $btnOk = $(``) .click(async () => { if ($selTracker.val() === "-1") return $selTracker.addClass("error-background"); await $elesData[Number($selTracker.val())].data("pDoConnectLocalV0")(view); // restore original state $btnCancel.remove(); $wrpSel.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); }); const $wrpSel = $$`
${$selTracker} ${$btnOk}
`.appendTo(view.$wrpInitial); const $btnCancel = $(``) .click(() => { // restore original state $btnCancel.remove(); $wrpSel.remove(); view.$wrpInitial.append($btnConnectRemote).append($btnConnectLocal); }) .appendTo(view.$wrpInitial); } } else { JqueryUtil.doToast({content: "No local trackers detected!", type: "warning"}); } }); view.$wrpInitial = $$`
${$btnConnectRemote} ${$btnConnectLocal}
`.appendTo($wrpTracker); return $wrpTracker; } } class InitiativeTrackerPlayerMessageHandlerScreenV0 extends InitiativeTrackerPlayerMessageHandlerV0 { constructor () { super(true); this._$wrpInitial = null; } initUi () { if (this._isUiInit) return; this._isUiInit = true; this._$meta.show(); this._$head.show(); this._$rows.show(); this._$wrpInitial.addClass("hidden"); $(window).on("beforeunload", evt => { if (this._clientData.client.isActive) { const message = `The connection will be closed`; (evt || window.event).message = message; return message; } }); } set $wrpInitial ($wrpInitial) { this._$wrpInitial = $wrpInitial; } get $wrpInitial () { return this._$wrpInitial; } } // endregion