summaryrefslogtreecommitdiff
path: root/src/renderer/gameserver
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer/gameserver')
-rw-r--r--src/renderer/gameserver/TOSCheck.ts87
-rw-r--r--src/renderer/gameserver/data.ts116
-rw-r--r--src/renderer/gameserver/news.ts71
-rw-r--r--src/renderer/gameserver/onlineCount.ts114
-rw-r--r--src/renderer/gameserver/profile.ts10
-rw-r--r--src/renderer/gameserver/server.ts88
-rw-r--r--src/renderer/gameserver/serverView/controller.ts50
-rw-r--r--src/renderer/gameserver/serverView/info.ts78
-rw-r--r--src/renderer/gameserver/serverView/preferences.ts95
-rw-r--r--src/renderer/gameserver/serverView/screenshots.ts80
-rw-r--r--src/renderer/gameserver/serverView/serverPage.ts19
-rw-r--r--src/renderer/gameserver/socialLink.ts46
12 files changed, 435 insertions, 419 deletions
diff --git a/src/renderer/gameserver/TOSCheck.ts b/src/renderer/gameserver/TOSCheck.ts
index e2e4bfc..4744dcd 100644
--- a/src/renderer/gameserver/TOSCheck.ts
+++ b/src/renderer/gameserver/TOSCheck.ts
@@ -1,69 +1,68 @@
-import GameServer from './server';
-import { ipcRenderer } from 'electron';
+import GameServer from "./server";
+import { ipcRenderer } from "electron";
let LAST_TOS = "";
-export default async function CheckNAcceptTOS(server:GameServer):Promise<boolean>{
- try{
+export default async function CheckNAcceptTOS(
+ server: GameServer
+): Promise<boolean> {
+ try {
let thisVersion = await getTOSVersion(server.TOSLink);
- console.log(server.TOSLink,thisVersion);
- LAST_TOS=thisVersion;
- return (localStorage.getItem(server.TOSLink) == thisVersion);
-
+ console.log(server.TOSLink, thisVersion);
+ LAST_TOS = thisVersion;
+ return localStorage.getItem(server.TOSLink) == thisVersion;
} catch (err) {
- console.log("TOS check Error",err);
- return true
+ console.log("TOS check Error", err);
+ return true;
}
-
}
-async function getTOSVersion(address:string):Promise<string>{
+async function getTOSVersion(address: string): Promise<string> {
// Returns date or if not found the hash of the whole page
const PageContent = await request(address);
const date = PageContent.match(/Last Update: \d\d\d\d-\d\d-\d\d/g);
- let hash:string;
- if(!date || date.length > 1){
- hash = HashString(PageContent.replace(/ |\t|\n/g,"").replace(/<.+?>/g, "r")).toString(16);
+ let hash: string;
+ if (!date || date.length > 1) {
+ hash = HashString(
+ PageContent.replace(/ |\t|\n/g, "").replace(/<.+?>/g, "r")
+ ).toString(16);
} else {
- hash = date[0].replace(/ /g,"");
+ hash = date[0].replace(/ /g, "");
}
return hash;
}
-function request(url:string):Promise<string>{
- return new Promise((res, rej)=>{
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url);
- xhr.addEventListener("error", (ev)=>{
- rej(ev);
- });
- xhr.onload = function() {
- if (xhr.status === 200) {
- res(xhr.responseText);
- }
- else {
- rej(new Error(`xhr.status: ${xhr.status} != 200`));
- }
- };
- xhr.send();
+function request(url: string): Promise<string> {
+ return new Promise((res, rej) => {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.addEventListener("error", (ev) => {
+ rej(ev);
+ });
+ xhr.onload = function () {
+ if (xhr.status === 200) {
+ res(xhr.responseText);
+ } else {
+ rej(new Error(`xhr.status: ${xhr.status} != 200`));
+ }
+ };
+ xhr.send();
});
}
-
-
// Hash function from http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/
-function HashString (s:string){
- let hash = 0;
- if (s.length == 0) return hash;
- for (let i = 0; i < s.length; i++) {
- let char = s.charCodeAt(i);
- hash = ((hash<<5)-hash)+char;
- hash = hash & hash; // Convert to 32bit integer
- }
- return hash;
+function HashString(s: string) {
+ let hash = 0;
+ if (s.length == 0) return hash;
+ for (let i = 0; i < s.length; i++) {
+ let char = s.charCodeAt(i);
+ hash = (hash << 5) - hash + char;
+ hash = hash & hash; // Convert to 32bit integer
+ }
+ return hash;
}
-export function acceptLastTOS(server:GameServer){
+export function acceptLastTOS(server: GameServer) {
localStorage.setItem(server.TOSLink, LAST_TOS);
}
diff --git a/src/renderer/gameserver/data.ts b/src/renderer/gameserver/data.ts
index 421bdff..4ca72d6 100644
--- a/src/renderer/gameserver/data.ts
+++ b/src/renderer/gameserver/data.ts
@@ -1,105 +1,107 @@
// This class returns Data over the gameservers until we find a better solution
-import GameServer from './server';
-import GameServerProfile from './profile';
-import { NewsType } from './news';
-import { OnlineListParser } from './onlineCount';
-import { socialLink } from './socialLink';
-
+import GameServer from "./server";
+import GameServerProfile from "./profile";
+import { NewsType } from "./news";
+import { OnlineListParser } from "./onlineCount";
+import { socialLink } from "./socialLink";
const TMW2 = new GameServer(
- new GameServerProfile(
- "server.tmw2.org",
- 6901,
- "evol2",
- "TMW2"
- ),
+ new GameServerProfile("server.tmw2.org", 6901, "evol2", "TMW2"),
"TMW2",
"TMW2: Moubootaur Legends",
"What happens if you mix TMW with Evol and add many new Ideas",
"https://tmw2.org/news",
- {url:"http://updates.tmw2.org/news.txt",type:NewsType.ManaPlus},
- [{isVideo:false,file:"tmw2/background1.png"}],
+ { url: "http://updates.tmw2.org/news.txt", type: NewsType.ManaPlus },
+ [{ isVideo: false, file: "tmw2/background1.png" }],
"tmw2/icon.png",
[
- new socialLink("fas fa-home","Website","https://moubootaurlegends.org"),
- new socialLink("fab fa-discord","Discord","https://discord.gg/J4gcaqM"),
- new socialLink("fab fa-patreon","Patreon","https://www.patreon.com/TMW2/"),
- new socialLink("fas fa-comments","IRC Chat","http://webchat.freenode.net/?channels=#tmw2"),
- new socialLink("fab fa-youtube","Youtube","https://www.youtube.com/channel/UCiwW5dTmi2xMV_vJfj5Mq5Q"),
- new socialLink("fab fa-steam","Steam Group","http://steamcommunity.com/groups/TheManaWorld2"),
- new socialLink("fab fa-twitter","Twitter","https://twitter.com/TheManaWorld2"),
- new socialLink("fab fa-gitlab","Gitlab","https://gitlab.com/TMW2"),
+ new socialLink("fas fa-home", "Website", "https://moubootaurlegends.org"),
+ new socialLink("fab fa-discord", "Discord", "https://discord.gg/J4gcaqM"),
+ new socialLink(
+ "fab fa-patreon",
+ "Patreon",
+ "https://www.patreon.com/TMW2/"
+ ),
+ new socialLink(
+ "fas fa-comments",
+ "IRC Chat",
+ "http://webchat.freenode.net/?channels=#tmw2"
+ ),
+ new socialLink(
+ "fab fa-youtube",
+ "Youtube",
+ "https://www.youtube.com/channel/UCiwW5dTmi2xMV_vJfj5Mq5Q"
+ ),
+ new socialLink(
+ "fab fa-steam",
+ "Steam Group",
+ "http://steamcommunity.com/groups/TheManaWorld2"
+ ),
+ new socialLink(
+ "fab fa-twitter",
+ "Twitter",
+ "https://twitter.com/TheManaWorld2"
+ ),
+ new socialLink("fab fa-gitlab", "Gitlab", "https://gitlab.com/TMW2"),
],
"https://tmw2.org/legal",
- {parser:OnlineListParser.JSON_ARRAY,url:"https://tmw2.org/online.json"}
+ { parser: OnlineListParser.JSON_ARRAY, url: "https://tmw2.org/online.json" }
);
const Evol = new GameServer(
- new GameServerProfile(
- "world.evolonline.org",
- 6901,
- "evol2"
- ),
+ new GameServerProfile("world.evolonline.org", 6901, "evol2"),
"Evol Online",
"Evol Online",
"[EvolDescription]",
"https://evolonline.org/",
undefined,
- [{isVideo:false,file:"evol/background1.png"}],
+ [{ isVideo: false, file: "evol/background1.png" }],
"evol/icon.png",
- [
- new socialLink("fas fa-home","Website","https://evolonline.org/"),
- ],
+ [new socialLink("fas fa-home", "Website", "https://evolonline.org/")],
"http://wiki.evolonline.org/rules/gamerules",
null
);
const TMW = new GameServer(
- new GameServerProfile(
- "server.themanaworld.org",
- 6901,
- "tmwAthena"
- ),
+ new GameServerProfile("server.themanaworld.org", 6901, "tmwAthena"),
"The Mana World",
"The Mana World",
"The clasic TMW experience. Join adventures with people from all over the world.",
"https://www.themanaworld.org/news",
- {url:"http://themanaworld.github.io/tmwa-server-data/news.txt",type:NewsType.ManaPlus},
- [{isVideo:false,file:"tmw/background1.png"}],
+ {
+ url: "http://themanaworld.github.io/tmwa-server-data/news.txt",
+ type: NewsType.ManaPlus,
+ },
+ [{ isVideo: false, file: "tmw/background1.png" }],
"tmw/icon.png",
[
- new socialLink("fas fa-home","Website","https://www.themanaworld.org/"),
- new socialLink("fas fa-users","Forum","https://forums.themanaworld.org/"),
+ new socialLink("fas fa-home", "Website", "https://www.themanaworld.org/"),
+ new socialLink("fas fa-users", "Forum", "https://forums.themanaworld.org/"),
],
"https://wiki.themanaworld.org/index.php/The_Mana_World:Terms_and_Conditions",
- {parser:OnlineListParser.TMW, url:"https://server.themanaworld.org/"}
+ { parser: OnlineListParser.TMW, url: "https://server.themanaworld.org/" }
);
// https://policies.themanaworld.org/tos is still offline
const noServer = new GameServer(
- new GameServerProfile(
- 'noServer',
- 6901,
- "tmwAthena"
- ),
+ new GameServerProfile("noServer", 6901, "tmwAthena"),
"Mana Plus",
"Open Mana Plus",
"Opens the ManaPlus client",
- 'http://manaplus.org/changelog',
+ "http://manaplus.org/changelog",
undefined,
- [{isVideo:false,file:"noServer/background1.png"}],
+ [{ isVideo: false, file: "noServer/background1.png" }],
"noServer/icon.svg",
[
- new socialLink("fas fa-home","Website","http://manaplus.org/"),
- new socialLink("fab fa-gitlab","Gitlab","https://gitlab.com/manaplus/manaplus/"),
+ new socialLink("fas fa-home", "Website", "http://manaplus.org/"),
+ new socialLink(
+ "fab fa-gitlab",
+ "Gitlab",
+ "https://gitlab.com/manaplus/manaplus/"
+ ),
],
undefined,
null
);
-export const GameServers = [
- TMW2,
- Evol,
- TMW,
- noServer,
-]
+export const GameServers = [TMW2, Evol, TMW, noServer];
diff --git a/src/renderer/gameserver/news.ts b/src/renderer/gameserver/news.ts
index 656238c..34f6995 100644
--- a/src/renderer/gameserver/news.ts
+++ b/src/renderer/gameserver/news.ts
@@ -1,64 +1,67 @@
export enum NewsType {
Markdown, // Without html + yaml
- ManaPlus //update news txt
+ ManaPlus, //update news txt
}
-export namespace News { // Fetches only the most recent entry
- export async function get(url:string,parser:NewsType):Promise<string>{
+export namespace News {
+ // Fetches only the most recent entry
+ export async function get(url: string, parser: NewsType): Promise<string> {
try {
//1. load
const unsafe_content = await request(`${url}?${Math.random()}`);
//2. sanitize
- const content = killHTML( unsafe_content );
+ const content = killHTML(unsafe_content);
//3. parse
- if(parser == NewsType.ManaPlus){
+ if (parser == NewsType.ManaPlus) {
return manaTextParser(content);
- } else if (parser == NewsType.Markdown){
+ } else if (parser == NewsType.Markdown) {
return "Parsing Failed: Markdown Parser is not implemented yet";
}
- } catch (e){
+ } catch (e) {
console.log(e);
return `Failed to get the news, please select the news category on the right to view all news`;
}
}
}
-function request(url:string):Promise<string>{
- return new Promise((res, rej)=>{
- var xhr = new XMLHttpRequest();
- xhr.addEventListener("error", (ev)=>{
- rej(ev);
- });
- xhr.open('GET', url);
- xhr.onload = function() {
- if (xhr.status === 200) {
- res(xhr.responseText);
- }
- else {
- rej(new Error(`xhr.status: ${xhr.status} != 200`));
- }
- };
- xhr.send();
+function request(url: string): Promise<string> {
+ return new Promise((res, rej) => {
+ var xhr = new XMLHttpRequest();
+ xhr.addEventListener("error", (ev) => {
+ rej(ev);
+ });
+ xhr.open("GET", url);
+ xhr.onload = function () {
+ if (xhr.status === 200) {
+ res(xhr.responseText);
+ } else {
+ rej(new Error(`xhr.status: ${xhr.status} != 200`));
+ }
+ };
+ xhr.send();
});
}
-function killHTML(raw:string):string{
- return raw.replace(/<|>/,"⚠️");
+function killHTML(raw: string): string {
+ return raw.replace(/<|>/, "⚠️");
}
-function manaTextParser(input:string){
+function manaTextParser(input: string) {
const tmwLegacy = "##7Legacy Server##0";
let result = input;
- if(result.indexOf(tmwLegacy) !== -1){
+ if (result.indexOf(tmwLegacy) !== -1) {
const i = result.indexOf(tmwLegacy) + tmwLegacy.length;
result = result.slice(0, result.indexOf(tmwLegacy, i));
result = result.replace(/\n \n /, "");
}
- result = result.replace(/\[@@(.+?)\|(.+?)@@\]/g,'<a href="$1">$2</a>')
- .replace(/##B(.+?)##b/g,'<b>$1</b>')
- .replace(/##0 Actual Release: ##1 *(.+)/,'<h2>$1</h2>')
- .replace(/\n/g,"<br>");
- if(result.indexOf(tmwLegacy) === -1)
- result = result.replace(/br>([^]+?)<br></g,'br><p>$1</p><br><').replace(/<br>/g,"");
- return result.replace(/##\d/g,"");
+ result = result
+ .replace(/\[@@(.+?)\|(.+?)@@\]/g, '<a href="$1">$2</a>')
+ .replace(/##B(.+?)##b/g, "<b>$1</b>")
+ .replace(/##0 Actual Release: ##1 *(.+)/, "<h2>$1</h2>")
+ .replace(/\n/g, "<br>");
+ if (result.indexOf(tmwLegacy) === -1)
+ result = result
+ .replace(/br>([^]+?)<br></g, "br><p>$1</p><br><")
+ .replace(/<br>/g, "");
+ return result.replace(/##\d/g, "");
}
diff --git a/src/renderer/gameserver/onlineCount.ts b/src/renderer/gameserver/onlineCount.ts
index cfde7e5..b1c8271 100644
--- a/src/renderer/gameserver/onlineCount.ts
+++ b/src/renderer/gameserver/onlineCount.ts
@@ -1,48 +1,52 @@
-import GameServer from './server';
+import GameServer from "./server";
const MAX_SHOWN_NAMES = 5;
-export async function makeOnlineCounterList(server:GameServer):Promise<HTMLElement>{
-
+export async function makeOnlineCounterList(
+ server: GameServer
+): Promise<HTMLElement> {
try {
const playerList = await fetchOnlineList(server);
return generateHTML(playerList);
} catch (err) {
console.log(err);
- const OnlineCounterContainer = document.createElement('span');
+ const OnlineCounterContainer = document.createElement("span");
OnlineCounterContainer.classList.add("onlineCounter");
OnlineCounterContainer.innerHTML = `<i class="fas fa-times fa-xs"></i>Error:<br>${err}`;
return OnlineCounterContainer;
}
}
-
-function generateHTML(onlinePlayers:string[]):HTMLElement{
- const OnlineCounterContainer = document.createElement('span');
+function generateHTML(onlinePlayers: string[]): HTMLElement {
+ const OnlineCounterContainer = document.createElement("span");
OnlineCounterContainer.classList.add("onlineCounter");
OnlineCounterContainer.innerHTML = `<i class="fas fa-users fa-xs"></i>${onlinePlayers.length} Players online<br>`;
- const PlayerList = document.createElement('span');
+ const PlayerList = document.createElement("span");
PlayerList.classList.add("playerList");
let displayed_players =
- MAX_SHOWN_NAMES < onlinePlayers.length ?
- onlinePlayers.slice(0, MAX_SHOWN_NAMES):onlinePlayers;
-
- displayed_players.forEach(playername => {
- const PlayerItem = document.createElement('span');
- PlayerItem.classList.add("playerItem");
- PlayerItem.innerHTML=`<i class="fas fa-circle fa-xs" data-fa-transform="shrink-8 left-2"></i>${playername}`;
- PlayerList.appendChild(PlayerItem);
- });
-
+ MAX_SHOWN_NAMES < onlinePlayers.length
+ ? onlinePlayers.slice(0, MAX_SHOWN_NAMES)
+ : onlinePlayers;
+
+ displayed_players.forEach((playername) => {
+ const PlayerItem = document.createElement("span");
+ PlayerItem.classList.add("playerItem");
+ PlayerItem.innerHTML = `<i class="fas fa-circle fa-xs" data-fa-transform="shrink-8 left-2"></i>${playername}`;
+ PlayerList.appendChild(PlayerItem);
+ });
- if(MAX_SHOWN_NAMES < onlinePlayers.length){
- const hiddenPlayers = onlinePlayers.filter(playername => displayed_players.indexOf(playername) == -1);
- const MorePlayers = document.createElement('span');
+ if (MAX_SHOWN_NAMES < onlinePlayers.length) {
+ const hiddenPlayers = onlinePlayers.filter(
+ (playername) => displayed_players.indexOf(playername) == -1
+ );
+ const MorePlayers = document.createElement("span");
MorePlayers.classList.add("morePlayers");
- MorePlayers.innerText = ` and ${onlinePlayers.length-MAX_SHOWN_NAMES} more..`;
- MorePlayers.title = hiddenPlayers.join('\n');
+ MorePlayers.innerText = ` and ${
+ onlinePlayers.length - MAX_SHOWN_NAMES
+ } more..`;
+ MorePlayers.title = hiddenPlayers.join("\n");
PlayerList.appendChild(MorePlayers);
}
@@ -56,23 +60,17 @@ export enum OnlineListParser {
TMW,
TMW2API,
EXAMPLE_DATA,
- JSON_ARRAY
-};
-
-async function fetchOnlineList(server:GameServer):Promise<string[]>{
+ JSON_ARRAY,
+}
- if(!server.OnlineList)throw new Error("No Online list was\n specified for this Server");
+async function fetchOnlineList(server: GameServer): Promise<string[]> {
+ if (!server.OnlineList)
+ throw new Error("No Online list was\n specified for this Server");
- if(server.OnlineList.parser && server.OnlineList.url){
- switch(server.OnlineList.parser){
+ if (server.OnlineList.parser && server.OnlineList.url) {
+ switch (server.OnlineList.parser) {
case OnlineListParser.EXAMPLE_DATA:
- return [
- 'LawnCable',
- 'Saulc GM',
- 'Crazyfefe',
- 'Jesus Saves',
- 'DUSTMAN'
- ];
+ return ["LawnCable", "Saulc GM", "Crazyfefe", "Jesus Saves", "DUSTMAN"];
case OnlineListParser.TMW:
return tmwParser(await request(server.OnlineList.url));
case OnlineListParser.JSON_ARRAY:
@@ -85,37 +83,35 @@ async function fetchOnlineList(server:GameServer):Promise<string[]>{
}
}
-
-function tmwParser(rawData:string):string[]{
- let stringArray:string[]=[];
- rawData.replace(/<td>(.+?)<\/td>/g, (x:string, content:string) =>{
+function tmwParser(rawData: string): string[] {
+ let stringArray: string[] = [];
+ rawData.replace(/<td>(.+?)<\/td>/g, (x: string, content: string) => {
stringArray.push(content.replace(/<\/{0,1}.+?>/g, ""));
return "";
});
return stringArray;
}
-function jsonArrayParser(rawData:string):string[]{
+function jsonArrayParser(rawData: string): string[] {
return JSON.parse(rawData);
}
-function request(url:string):Promise<string>{
- return new Promise((res, rej)=>{
- var xhr = new XMLHttpRequest();
- xhr.open('GET', url);
- xhr.addEventListener("error", (ev)=>{
- console.log("Probably a network error:", ev);
+function request(url: string): Promise<string> {
+ return new Promise((res, rej) => {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", url);
+ xhr.addEventListener("error", (ev) => {
+ console.log("Probably a network error:", ev);
+ rej(new Error("Probably a network error"));
+ });
+ xhr.onload = function () {
+ if (xhr.status === 200) {
+ res(xhr.responseText);
+ } else {
+ console.log(`xhr.status: ${xhr.status} != 200`);
rej(new Error("Probably a network error"));
- });
- xhr.onload = function() {
- if (xhr.status === 200) {
- res(xhr.responseText);
- }
- else {
- console.log(`xhr.status: ${xhr.status} != 200`);
- rej(new Error("Probably a network error"));
- }
- };
- xhr.send();
+ }
+ };
+ xhr.send();
});
}
diff --git a/src/renderer/gameserver/profile.ts b/src/renderer/gameserver/profile.ts
index 4c99184..c4a6268 100644
--- a/src/renderer/gameserver/profile.ts
+++ b/src/renderer/gameserver/profile.ts
@@ -1,8 +1,8 @@
export default class GameServerProfile {
constructor(
- public address:string,
- public port:number,
- public engine:"tmwAthena"|"hercules"|"evol2",
- public serverID:string = "DEFAULT", // To enable some server specific features
- ){}
+ public address: string,
+ public port: number,
+ public engine: "tmwAthena" | "hercules" | "evol2",
+ public serverID: string = "DEFAULT" // To enable some server specific features
+ ) {}
}
diff --git a/src/renderer/gameserver/server.ts b/src/renderer/gameserver/server.ts
index 9bdfccd..edc7d01 100644
--- a/src/renderer/gameserver/server.ts
+++ b/src/renderer/gameserver/server.ts
@@ -1,58 +1,55 @@
-import GameServerProfile from './profile';
-import { shell, ipcRenderer } from 'electron';
-import { switchPage } from '../customEvents';
-import { NewsType } from './news';
-import { makeOnlineCounterList, OnlineListParser } from './onlineCount';
-import { socialLink } from './socialLink';
-import { PageController } from './serverView/controller';
+import GameServerProfile from "./profile";
+import { shell, ipcRenderer } from "electron";
+import { switchPage } from "../customEvents";
+import { NewsType } from "./news";
+import { makeOnlineCounterList, OnlineListParser } from "./onlineCount";
+import { socialLink } from "./socialLink";
+import { PageController } from "./serverView/controller";
export default class GameServer {
-
- public pageController:PageController;
+ public pageController: PageController;
constructor(
public profile: GameServerProfile,
public menuName: string,
public name: string,
- public shortDescription: string,// the server in 1-2 sentences
+ public shortDescription: string, // the server in 1-2 sentences
public newsPageUrl: string,
- public newsLatestPage: { url: string, type: NewsType },
- public backgrounds: { isVideo: boolean, file: string }[],
+ public newsLatestPage: { url: string; type: NewsType },
+ public backgrounds: { isVideo: boolean; file: string }[],
public icon: string,
public socialLinks: socialLink[],
public TOSLink: string,
- public OnlineList: { parser: OnlineListParser, url: string },
+ public OnlineList: { parser: OnlineListParser; url: string }
) {
this.pageController = new PageController(this);
}
getMenuEntry(): HTMLElement {
- const sidebarItem = document.createElement('div');
+ const sidebarItem = document.createElement("div");
sidebarItem.classList.add("sidebarItem");
//Online counter
- const OnlineCounterContainer = document.createElement('div');
+ const OnlineCounterContainer = document.createElement("div");
//OnlineCounterContainer.appendChild(makeOnlineCounterList(this));
sidebarItem.appendChild(OnlineCounterContainer);
//Title
- const title = document.createElement('div');
+ const title = document.createElement("div");
title.classList.add("title");
- const titleIMG = document.createElement('img');
+ const titleIMG = document.createElement("img");
titleIMG.src = `./media/server/${this.icon}`;
- const titleText = document.createElement('div');
+ const titleText = document.createElement("div");
titleText.innerText = this.menuName;
-
title.appendChild(titleIMG);
title.appendChild(titleText);
-
- title.addEventListener('click', () => {
- switchPage("SERVER", this.name, 'INFO');
+ title.addEventListener("click", () => {
+ switchPage("SERVER", this.name, "INFO");
});
- if (this.profile.address != 'noServer') {
+ if (this.profile.address != "noServer") {
let onlineBoxActive: boolean = false;
let onlineBoxSchouldBeActive: boolean = false;
let updateOnlineContainer = async () => {
@@ -65,11 +62,13 @@ export default class GameServer {
OnlineCounterContainer.appendChild(await makeOnlineCounterList(this));
}
console.log(onlineBoxSchouldBeActive);
- }
+ };
let SetUpdate = (state: boolean) => {
onlineBoxSchouldBeActive = state;
- setTimeout(() => { updateOnlineContainer(); }, 160);
+ setTimeout(() => {
+ updateOnlineContainer();
+ }, 160);
};
title.addEventListener("mouseover", () => {
@@ -92,21 +91,22 @@ export default class GameServer {
sidebarItem.appendChild(title);
//Collapsable
- const container = document.createElement('div');
+ const container = document.createElement("div");
container.classList.add("colapse");
- const info = document.createElement('div');
+ const info = document.createElement("div");
info.innerHTML = '<i class="fas fa-info fa-fw"></i>Information';
container.appendChild(info);
- info.addEventListener('click', () => {
+ info.addEventListener("click", () => {
switchPage("SERVER", this.name, "INFO");
});
- const news = document.createElement('div');
- news.innerHTML = '<i class="far fa-newspaper fa-fw"></i>News <i class="fas fa-external-link-alt" data-fa-transform="shrink-2"></i>';
+ const news = document.createElement("div");
+ news.innerHTML =
+ '<i class="far fa-newspaper fa-fw"></i>News <i class="fas fa-external-link-alt" data-fa-transform="shrink-2"></i>';
if (this.newsPageUrl && this.newsPageUrl !== null) {
- news.addEventListener('click', () => {
+ news.addEventListener("click", () => {
shell.openExternal(this.newsPageUrl);
});
} else {
@@ -115,24 +115,25 @@ export default class GameServer {
container.appendChild(news);
- const screenshots = document.createElement('div');
+ const screenshots = document.createElement("div");
screenshots.innerHTML = '<i class="fas fa-camera fa-fw"></i>Screenshots';
container.appendChild(screenshots);
- screenshots.addEventListener('click', () => {
+ screenshots.addEventListener("click", () => {
switchPage("SERVER", this.name, "SCREENSHOTS");
- })
- const preferences = document.createElement('div');
- if(this.profile.address != 'noServer'){
- preferences.innerHTML = '<i class="fas fa-sliders-h fa-fw"></i>Preferences';
- preferences.addEventListener('click', () => {
+ });
+ const preferences = document.createElement("div");
+ if (this.profile.address != "noServer") {
+ preferences.innerHTML =
+ '<i class="fas fa-sliders-h fa-fw"></i>Preferences';
+ preferences.addEventListener("click", () => {
switchPage("SERVER", this.name, "PREF");
});
container.appendChild(preferences);
}
sidebarItem.appendChild(container);
//event Target / interactivity
- const events = document.createElement('span');
+ const events = document.createElement("span");
events.classList.add("switch-page-event");
events.addEventListener("site-changed", (event: CustomEvent) => {
sidebarItem.classList.remove("selected");
@@ -140,7 +141,10 @@ export default class GameServer {
//news.classList.remove("selected");
screenshots.classList.remove("selected");
preferences.classList.remove("selected");
- if (event.detail.sitetype === "SERVER" && event.detail.page === this.name) {
+ if (
+ event.detail.sitetype === "SERVER" &&
+ event.detail.page === this.name
+ ) {
sidebarItem.classList.add("selected");
// if(event.detail.subPage === "NEWS") {
// news.classList.add("selected");
@@ -163,6 +167,6 @@ export default class GameServer {
const args: any = JSON.parse(JSON.stringify(this.profile));
args.username = localStorage.getItem("2_username_" + this.profile.address);
args.password = localStorage.getItem("2_pin_" + this.profile.address);
- ipcRenderer.send('play', args);
+ ipcRenderer.send("play", args);
}
-} \ No newline at end of file
+}
diff --git a/src/renderer/gameserver/serverView/controller.ts b/src/renderer/gameserver/serverView/controller.ts
index 412033c..5e181ca 100644
--- a/src/renderer/gameserver/serverView/controller.ts
+++ b/src/renderer/gameserver/serverView/controller.ts
@@ -4,33 +4,33 @@ import { ServerInfoPage } from "./info";
import { GameServerPage } from "./serverPage";
import { ServerScreenshotPage } from "./screenshots";
-export type ServerSubPages = 'INFO' | 'SCREENSHOTS' | 'PREF' | 'UNKNOWN';
+export type ServerSubPages = "INFO" | "SCREENSHOTS" | "PREF" | "UNKNOWN";
export class PageController {
- unknownPage: GameServerPage;
- infoPage: ServerInfoPage;
- scrnshtPage: ServerScreenshotPage;
- prefPage: ServerPreferencesPage;
+ unknownPage: GameServerPage;
+ infoPage: ServerInfoPage;
+ scrnshtPage: ServerScreenshotPage;
+ prefPage: ServerPreferencesPage;
- constructor(private server: GameServer) {
- this.unknownPage = new GameServerPage(server);
- this.infoPage = new ServerInfoPage(server);
- this.scrnshtPage = new ServerScreenshotPage(server);
- this.prefPage = new ServerPreferencesPage(server);
- }
+ constructor(private server: GameServer) {
+ this.unknownPage = new GameServerPage(server);
+ this.infoPage = new ServerInfoPage(server);
+ this.scrnshtPage = new ServerScreenshotPage(server);
+ this.prefPage = new ServerPreferencesPage(server);
+ }
- getPage(type: ServerSubPages): HTMLElement {
- let page: GameServerPage = this.unknownPage;
- if (type == "INFO") {
- page = this.infoPage;
- } else if (type == "SCREENSHOTS") {
- page = this.scrnshtPage;
- } else if (type == "PREF") {
- page = this.prefPage;
- }
- const htmlElement = document.createElement('div');
- htmlElement.appendChild(page.getPage());
- updateLoginTextElement(this.server.profile.address);
- return htmlElement;
+ getPage(type: ServerSubPages): HTMLElement {
+ let page: GameServerPage = this.unknownPage;
+ if (type == "INFO") {
+ page = this.infoPage;
+ } else if (type == "SCREENSHOTS") {
+ page = this.scrnshtPage;
+ } else if (type == "PREF") {
+ page = this.prefPage;
}
-} \ No newline at end of file
+ const htmlElement = document.createElement("div");
+ htmlElement.appendChild(page.getPage());
+ updateLoginTextElement(this.server.profile.address);
+ return htmlElement;
+ }
+}
diff --git a/src/renderer/gameserver/serverView/info.ts b/src/renderer/gameserver/serverView/info.ts
index c72286e..40c7e03 100644
--- a/src/renderer/gameserver/serverView/info.ts
+++ b/src/renderer/gameserver/serverView/info.ts
@@ -3,46 +3,48 @@ import { shell } from "electron";
import { GameServerPage } from "./serverPage";
export class ServerInfoPage extends GameServerPage {
+ public getPage(): HTMLElement {
+ const content = document.createElement("div");
+ content.classList.add("infoServerPage");
- public getPage(): HTMLElement {
- const content = document.createElement('div');
- content.classList.add("infoServerPage");
+ const title = document.createElement("div");
+ title.classList.add("title");
+ title.innerText = this.server.name;
+ content.appendChild(title);
- const title = document.createElement('div');
- title.classList.add("title");
- title.innerText = this.server.name;
- content.appendChild(title);
+ const socialContainer = document.createElement("div");
+ socialContainer.classList.add("socialContainer");
+ setTimeout(() => {
+ this.server.socialLinks.forEach((link) => {
+ socialContainer.appendChild(link.getHTML());
+ });
+ }, 5);
+ content.appendChild(socialContainer);
- const socialContainer = document.createElement('div');
- socialContainer.classList.add("socialContainer");
- setTimeout(() => {
- this.server.socialLinks.forEach((link) => {
- socialContainer.appendChild(link.getHTML());
- });
- }, 5);
- content.appendChild(socialContainer);
-
- const shrtDsrption = document.createElement('div');
- shrtDsrption.classList.add("shortDescription");
- shrtDsrption.innerText = this.server.shortDescription;
- content.appendChild(shrtDsrption);
- if (this.server.newsLatestPage && this.server.newsLatestPage != null) {
- const latestNews = document.createElement('div');
- latestNews.classList.add("news");
- content.appendChild(latestNews);
- News.get(this.server.newsLatestPage.url, this.server.newsLatestPage.type).then((result: string) => {
- latestNews.innerHTML = result;
- const aTags = latestNews.getElementsByTagName("a");
- for (var i = 0; i < aTags.length; i++) {
- const href = aTags[i].href.toString();
- aTags[i].addEventListener('click', () => {
- shell.openExternal(href);
- });
- aTags[i].href = "#";
- }
- });
+ const shrtDsrption = document.createElement("div");
+ shrtDsrption.classList.add("shortDescription");
+ shrtDsrption.innerText = this.server.shortDescription;
+ content.appendChild(shrtDsrption);
+ if (this.server.newsLatestPage && this.server.newsLatestPage != null) {
+ const latestNews = document.createElement("div");
+ latestNews.classList.add("news");
+ content.appendChild(latestNews);
+ News.get(
+ this.server.newsLatestPage.url,
+ this.server.newsLatestPage.type
+ ).then((result: string) => {
+ latestNews.innerHTML = result;
+ const aTags = latestNews.getElementsByTagName("a");
+ for (var i = 0; i < aTags.length; i++) {
+ const href = aTags[i].href.toString();
+ aTags[i].addEventListener("click", () => {
+ shell.openExternal(href);
+ });
+ aTags[i].href = "#";
}
-
- return content;
+ });
}
-} \ No newline at end of file
+
+ return content;
+ }
+}
diff --git a/src/renderer/gameserver/serverView/preferences.ts b/src/renderer/gameserver/serverView/preferences.ts
index 4697efe..b7a5255 100644
--- a/src/renderer/gameserver/serverView/preferences.ts
+++ b/src/renderer/gameserver/serverView/preferences.ts
@@ -2,58 +2,65 @@ import GameServerProfile from "../profile";
import { GameServerPage } from "./serverPage";
export class ServerPreferencesPage extends GameServerPage {
+ getPage(): HTMLElement {
+ const content = document.createElement("div");
+ content.classList.add("preferencesServerPage");
- getPage(): HTMLElement {
- const content = document.createElement('div');
- content.classList.add("preferencesServerPage");
+ const title = document.createElement("h2");
+ title.innerText = `Preferences for ${this.server.name}`;
+ content.appendChild(title);
- const title = document.createElement('h2');
- title.innerText = `Preferences for ${this.server.name}`;
- content.appendChild(title);
+ const loginSection = document.createElement("div");
+ loginSection.classList.add("loginSection");
+ content.appendChild(loginSection);
- const loginSection = document.createElement('div');
- loginSection.classList.add("loginSection");
- content.appendChild(loginSection);
+ const loginUsernameLabel = document.createElement("label");
+ loginUsernameLabel.innerText = "Username";
+ const loginUsername = document.createElement("input") as HTMLInputElement;
+ loginUsername.value = localStorage.getItem(
+ "2_username_" + this.server.profile.address
+ );
+ loginUsernameLabel.appendChild(loginUsername);
- const loginUsernameLabel = document.createElement('label');
- loginUsernameLabel.innerText = "Username";
- const loginUsername = document.createElement('input') as HTMLInputElement;
- loginUsername.value = localStorage.getItem("2_username_" + this.server.profile.address);
- loginUsernameLabel.appendChild(loginUsername);
+ const loginPinLabel = document.createElement("label");
+ loginPinLabel.innerText = "Password";
+ const loginPin = document.createElement("input") as HTMLInputElement;
+ loginPin.type = "password";
+ loginPin.value = localStorage.getItem(
+ "2_pin_" + this.server.profile.address
+ );
+ loginPinLabel.appendChild(loginPin);
- const loginPinLabel = document.createElement('label');
- loginPinLabel.innerText = "Password";
- const loginPin = document.createElement('input') as HTMLInputElement;
- loginPin.type = "password";
- loginPin.value = localStorage.getItem("2_pin_" + this.server.profile.address);
- loginPinLabel.appendChild(loginPin);
+ const saveBtn = document.createElement("button") as HTMLButtonElement;
+ saveBtn.innerText = "save";
- const saveBtn = document.createElement('button') as HTMLButtonElement;
- saveBtn.innerText = "save";
+ saveBtn.addEventListener("click", () => {
+ localStorage.setItem(
+ "2_username_" + this.server.profile.address,
+ loginUsername.value
+ );
+ localStorage.setItem(
+ "2_pin_" + this.server.profile.address,
+ loginPin.value
+ );
+ updateLoginTextElement(this.server.profile.address);
+ });
- saveBtn.addEventListener('click', () => {
- localStorage.setItem("2_username_" + this.server.profile.address, loginUsername.value);
- localStorage.setItem("2_pin_" + this.server.profile.address, loginPin.value);
- updateLoginTextElement(this.server.profile.address);
- });
-
-
- loginSection.appendChild(loginUsernameLabel);
- loginSection.appendChild(loginPinLabel);
- loginSection.appendChild(saveBtn);
-
- return content;
- }
+ loginSection.appendChild(loginUsernameLabel);
+ loginSection.appendChild(loginPinLabel);
+ loginSection.appendChild(saveBtn);
+ return content;
+ }
}
export function updateLoginTextElement(serverAddress: string): void {
- const account = localStorage.getItem("2_username_" + serverAddress);
- const pin = localStorage.getItem("2_pin_" + serverAddress);
- const element = document.getElementById('LoginText');
- if (account && pin) {
- element.innerHTML = `Logged in as <b>${account}</b>`;
- } else {
- element.innerHTML = "Automatic login not set up";
- }
-} \ No newline at end of file
+ const account = localStorage.getItem("2_username_" + serverAddress);
+ const pin = localStorage.getItem("2_pin_" + serverAddress);
+ const element = document.getElementById("LoginText");
+ if (account && pin) {
+ element.innerHTML = `Logged in as <b>${account}</b>`;
+ } else {
+ element.innerHTML = "Automatic login not set up";
+ }
+}
diff --git a/src/renderer/gameserver/serverView/screenshots.ts b/src/renderer/gameserver/serverView/screenshots.ts
index 2d6fc62..5af8391 100644
--- a/src/renderer/gameserver/serverView/screenshots.ts
+++ b/src/renderer/gameserver/serverView/screenshots.ts
@@ -2,54 +2,56 @@ import { ipcRenderer, shell } from "electron";
import { GameServerPage } from "./serverPage";
export class ServerScreenshotPage extends GameServerPage {
-
getPage(): HTMLElement {
- const screenshotContainer = document.createElement('div');
+ const screenshotContainer = document.createElement("div");
screenshotContainer.classList.add("screenshotsContainer");
screenshotContainer.id = "screenshots";
- ipcRenderer.send('getScreenshots', this.server.profile.address);
+ ipcRenderer.send("getScreenshots", this.server.profile.address);
return screenshotContainer;
}
}
-ipcRenderer.on('getScreenshots', (event: any, data: { dir: string, screenshots: string[] }) => {
- console.log(data)
- const screenshots = document.getElementById('screenshots');
- if (screenshots) {
- // Display screenshots if that tab is open
- if (data.screenshots.length !== 0) {
- data.screenshots.forEach((fileName: string) => {
- const screenshot = document.createElement("div");
- screenshot.classList.add("screenshot");
- screenshots.appendChild(screenshot);
- const img = document.createElement("img");
- img.src = data.dir + fileName;
- screenshot.appendChild(img);
-
- // const text = document.createElement("span");
- // text.innerText = fileName;
- // screenshot.appendChild(text);
- screenshot.addEventListener('dragstart', (event) => {
- event.preventDefault()
- ipcRenderer.send('dragFileOut', data.dir + fileName)
- })
-
+ipcRenderer.on(
+ "getScreenshots",
+ (event: any, data: { dir: string; screenshots: string[] }) => {
+ console.log(data);
+ const screenshots = document.getElementById("screenshots");
+ if (screenshots) {
+ // Display screenshots if that tab is open
+ if (data.screenshots.length !== 0) {
+ data.screenshots.forEach((fileName: string) => {
+ const screenshot = document.createElement("div");
+ screenshot.classList.add("screenshot");
+ screenshots.appendChild(screenshot);
+ const img = document.createElement("img");
+ img.src = data.dir + fileName;
+ screenshot.appendChild(img);
+
+ // const text = document.createElement("span");
+ // text.innerText = fileName;
+ // screenshot.appendChild(text);
+ screenshot.addEventListener("dragstart", (event) => {
+ event.preventDefault();
+ ipcRenderer.send("dragFileOut", data.dir + fileName);
+ });
+ });
+ } else {
+ const nothingHere = document.createElement("p");
+ nothingHere.classList.add("nothingHere");
+ nothingHere.innerText =
+ "There is nothing here, yet. Make some screenshots in Game and come back here. The default key for snaping screenshots is 'P'.";
+
+ screenshots.appendChild(nothingHere);
+ }
+
+ const openFolderButton = document.createElement("button");
+ openFolderButton.innerText = "Open folder to see all";
+ openFolderButton.addEventListener("click", () => {
+ shell.openItem(data.dir);
});
- } else {
- const nothingHere = document.createElement("p");
- nothingHere.classList.add("nothingHere");
- nothingHere.innerText = "There is nothing here, yet. Make some screenshots in Game and come back here. The default key for snaping screenshots is 'P'."
-
- screenshots.appendChild(nothingHere);
+ screenshots.appendChild(openFolderButton);
}
-
- const openFolderButton = document.createElement('button');
- openFolderButton.innerText = "Open folder to see all";
- openFolderButton.addEventListener('click', () => {
- shell.openItem(data.dir);
- });
- screenshots.appendChild(openFolderButton);
}
-})
+);
diff --git a/src/renderer/gameserver/serverView/serverPage.ts b/src/renderer/gameserver/serverView/serverPage.ts
index 91556b0..622f633 100644
--- a/src/renderer/gameserver/serverView/serverPage.ts
+++ b/src/renderer/gameserver/serverView/serverPage.ts
@@ -1,14 +1,11 @@
import GameServer from "../server";
export class GameServerPage {
-
- constructor(protected server: GameServer) {
-
- }
- getPage(): HTMLElement {
- const content = document.createElement('div');
- content.classList.add("unknownServerPage");
- content.innerText = `Unknown page for${this.server.name}`;
- return content;
- };
-} \ No newline at end of file
+ constructor(protected server: GameServer) {}
+ getPage(): HTMLElement {
+ const content = document.createElement("div");
+ content.classList.add("unknownServerPage");
+ content.innerText = `Unknown page for${this.server.name}`;
+ return content;
+ }
+}
diff --git a/src/renderer/gameserver/socialLink.ts b/src/renderer/gameserver/socialLink.ts
index b56fab0..9c7e353 100644
--- a/src/renderer/gameserver/socialLink.ts
+++ b/src/renderer/gameserver/socialLink.ts
@@ -1,24 +1,28 @@
import { shell } from "electron";
export class socialLink {
- constructor(
- public icon: string,// has to be one from font awesome -https://fontawesome.com/icons
- public tooltip: string,
- public url: string
- ) { }
-
- getHTML(): HTMLElement {
- //<button onclick="sv.openSocialLink(this)" socialLink="abc"><i class="fa fa-user"></i></button><br>
- const element = document.createElement('button');
- element.onclick = () => { this.open() };
- element.innerHTML = `<i class="${this.icon}"></i>`;
- element.title = this.tooltip;
- return element;
- }
-
- open() {
- console.log("A link was clicked!", this.url);
- if (this.url)
- shell.openExternal(this.url.indexOf("://") !== -1 ? this.url : `https://${this.url}`);
- }
- } \ No newline at end of file
+ constructor(
+ public icon: string, // has to be one from font awesome -https://fontawesome.com/icons
+ public tooltip: string,
+ public url: string
+ ) {}
+
+ getHTML(): HTMLElement {
+ //<button onclick="sv.openSocialLink(this)" socialLink="abc"><i class="fa fa-user"></i></button><br>
+ const element = document.createElement("button");
+ element.onclick = () => {
+ this.open();
+ };
+ element.innerHTML = `<i class="${this.icon}"></i>`;
+ element.title = this.tooltip;
+ return element;
+ }
+
+ open() {
+ console.log("A link was clicked!", this.url);
+ if (this.url)
+ shell.openExternal(
+ this.url.indexOf("://") !== -1 ? this.url : `https://${this.url}`
+ );
+ }
+}