planet-wars/frontend/www/games.ts

105 lines
2.8 KiB
TypeScript
Raw Normal View History

2019-09-21 18:56:46 +02:00
2019-09-24 15:38:04 +02:00
import { set_game_name, set_loading, LOCATION, set_instance } from './index'
2019-09-21 18:56:46 +02:00
import { ConfigIniParser } from 'config-ini-parser'
const OPTIONS = document.getElementById("options");
const game_location = LOCATION + "static/games/mod.ini";
2020-04-11 08:17:27 +02:00
var game_name, game_file;
document.getElementById("addbutton").onclick = function() {
const loc = window.location;
const query = `?game=${game_file}&name=${game_name}`;
navigator.clipboard.writeText(loc.origin+loc.pathname+encodeURI(query)).then(() => {
console.log("Success");
}, () => {
console.log("Failed");
});
}
async function on_load() {
2020-04-11 08:17:27 +02:00
console.log("ON LOAD");
if (OPTIONS) {
const r = await fetch(game_location);
const response = await r.text();
parse_ini(response);
} else {
const options = document.getElementsByClassName("options");
const urlVars = new URLSearchParams(window.location.search);
if (urlVars.get("game") && urlVars.get("name")) {
2020-04-11 08:17:27 +02:00
console.log(urlVars.get("game")+' '+urlVars.get("name"))
handle(urlVars.get("game"),urlVars.get("name"))
} else if (options[0]) {
const options_div = <HTMLDivElement> options[0];
if (options_div.children[0]) {
options_div.children[0].dispatchEvent(new Event('click'));
}
2020-03-27 18:35:56 +01:00
}
2020-04-07 14:13:38 +02:00
}
}
2020-04-11 08:17:27 +02:00
window.addEventListener("load", on_load, false);
2019-09-24 15:38:04 +02:00
export function handle(location, name: string) {
2020-04-11 08:17:27 +02:00
game_file = location;
game_name = name;
2019-09-21 20:13:57 +02:00
set_loading(true);
2019-09-21 18:56:46 +02:00
fetch(location)
.then((r) => r.text())
.then((response) => {
set_instance(response);
2019-09-24 15:38:04 +02:00
set_game_name(name);
2019-09-21 18:56:46 +02:00
}).catch(console.error);
}
function create_option(location: string, name: string, turns: string, players: string): HTMLElement {
const div = document.createElement("div");
div.className = "option";
2019-09-24 15:38:04 +02:00
div.onclick = (_) => handle(location, name);
2020-03-27 18:35:56 +01:00
console.log("hello there");
console.log(`"${location}, "${name}"`);
2019-09-21 18:56:46 +02:00
let ps = "";
if (players) {
ps += "<p>Players</p>";
2019-09-24 14:29:13 +02:00
for (let [index, player] of players.split('"').entries()) {
if (index % 2 == 0) {
continue;
}
ps += `<p>${player}</p>`;
2019-09-21 18:56:46 +02:00
}
}
const html = `
<p>${name}</p>
<p>Turns: ${turns}</p>
` + ps;
div.innerHTML = html;
return div;
}
function parse_ini(inifile: string) {
const parser = new ConfigIniParser();
parser.parse(inifile);
const loc = parser.get(undefined, "path");
OPTIONS.innerHTML = '';
for (let name of parser.sections()) {
const game = parser.get(name, "name");
const turns = parser.get(name, "turns");
const players = parser.get(name, "players")
OPTIONS.appendChild(
create_option(loc+name, game , turns, players)
);
}
}