DCSOlympus/manager/javascripts/connections.js

102 lines
3.8 KiB
JavaScript

const ManagerPage = require("./managerpage");
const ejs = require('ejs')
const { logger } = require("./filesystem")
/** Connections page, allows the user to set the ports and address for each Olympus instance
*
*/
class ConnectionsPage extends ManagerPage {
constructor(manager, options) {
super(manager, options);
}
render(str) {
const element = this.getElement();
element.innerHTML = str;
if (this.element.querySelector(".button.auto"))
this.element.querySelector(".button.auto").addEventListener("click", (e) => this.onOptionSelected(true));
if (this.element.querySelector(".button.manual"))
this.element.querySelector(".button.manual").addEventListener("click", (e) => this.onOptionSelected(false));
if (this.element.querySelector(".client-port"))
this.element.querySelector(".client-port").querySelector("input").addEventListener("change", async (e) => { this.setClientPort(Number(e.target.value)); })
if (this.element.querySelector(".backend-port"))
this.element.querySelector(".backend-port").querySelector("input").addEventListener("change", async (e) => { this.setBackendPort(Number(e.target.value)); })
if (this.element.querySelector(".backend-address"))
this.element.querySelector(".backend-address").querySelector("input").addEventListener("change", async (e) => { this.manager.getActiveInstance().setBackendAddress(e.target.value); })
super.render();
}
show(previousPage) {
ejs.renderFile("./ejs/connections.ejs", {...this.options, ...this.manager.options}, {}, (err, str) => {
if (!err) {
this.render(str);
/* Call the port setters to check if the ports are free */
this.setClientPort(this.manager.getActiveInstance().clientPort);
this.setBackendPort(this.manager.getActiveInstance().backendPort);
} else {
logger.error(err);
}
});
super.show(previousPage);
}
onNextClicked() {
this.hide();
this.manager.passwordsPage.show(this);
}
onCancelClicked() {
this.hide();
this.manager.menuPage.show()
}
onOptionSelected(auto) {
this.options.selectAutoOrManual = false;
this.options.auto = auto;
if (auto) {
} else {
this.show();
}
}
/** Asynchronously check if the client port is free and if it is, set the new value
*
*/
async setClientPort(newPort) {
const success = await this.manager.getActiveInstance().setClientPort(newPort);
var successEls = this.element.querySelector(".client-port").querySelectorAll(".success");
for (let i = 0; i < successEls.length; i++) {
successEls[i].classList.toggle("hide", !success);
}
var errorEls = this.element.querySelector(".client-port").querySelectorAll(".error");
for (let i = 0; i < errorEls.length; i++) {
errorEls[i].classList.toggle("hide", success);
}
}
/** Asynchronously check if the backend port is free and if it is, set the new value
*
*/
async setBackendPort(newPort) {
const success = await this.manager.getActiveInstance().setBackendPort(newPort);
var successEls = this.element.querySelector(".backend-port").querySelectorAll(".success");
for (let i = 0; i < successEls.length; i++) {
successEls[i].classList.toggle("hide", !success);
}
var errorEls = this.element.querySelector(".backend-port").querySelectorAll(".error");
for (let i = 0; i < errorEls.length; i++) {
errorEls[i].classList.toggle("hide", success);
}
}
}
module.exports = ConnectionsPage;