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