You can also drop a saved game file on this page to add it to your roster.
+
+
Home ·
diff --git a/roster.js b/roster.js
index ea6ae16..698da48 100644
--- a/roster.js
+++ b/roster.js
@@ -1,143 +1,160 @@
function b64_decode(value) {
- return JSON.parse(decodeURIComponent(escape(atob(value))));
+ return JSON.parse(decodeURIComponent(escape(atob(value))));
}
function b64_stringify(value) {
- return btoa(unescape(encodeURIComponent(JSON.stringify(value))));
+ return btoa(unescape(encodeURIComponent(JSON.stringify(value))));
+}
+
+
+
+
+function dropGuy(sheet) {
+ try {
+ sheet = sheet.replace(/\s/g, "");
+ sheet = b64_decode(sheet);
+ storage.loadRoster(games => {
+ if (!games[sheet.Traits.Name] ||
+ confirm(`A character named ${sheet.Traits.Name} already exists. Overwrite it?`)) {
+ storage.addToRoster(sheet, () => storage.loadRoster(loadGames));
+ }
+ });
+ } catch(err) {
+ console.log(err);
+ setTimeout(() => alert("Invalid character data", 1));
+ }
}
function load() {
- if (!window.localStorage) {
- roster.html("
Hrumph: This browser does not support local storage. You can still play fast and loose: your character will live only as long as the game stays running in your browser.");
- return;
- }
+ if (!window.localStorage) {
+ roster.html("
Hrumph: This browser does not support local storage. You can still play fast and loose: your character will live only as long as the game stays running in your browser.");
+ return;
+ }
- storage.loadRoster(loadGames);
+ storage.loadRoster(loadGames);
- window.addEventListener("dragover", e => {
- e.preventDefault();
- e.dataTransfer.dropEffect = "copy";
- });
- window.addEventListener("drop", e => {
- e.preventDefault();
- e.stopImmediatePropagation();
- let files = e.dataTransfer.files;
- for (let i = 0; i < files.length; i++) {
- files[i].text().then(sheet => {
- try {
- sheet = sheet.replace(/\s/g, "");
- sheet = b64_decode(sheet);
- storage.loadRoster(games => {
- if (!games[sheet.Traits.Name] ||
- confirm(`A character named ${sheet.Traits.Name} already exists. Overwrite it?`)) {
- storage.addToRoster(sheet, () => storage.loadRoster(loadGames));
- }
- });
- } catch(err) {
- console.log(err);
- setTimeout(() => alert("Invalid character data", 1));
- }
-
- });
- }
-
- });
+ window.addEventListener("dragover", e => {
+ e.preventDefault();
+ e.dataTransfer.dropEffect = "copy";
+ });
+ window.addEventListener("drop", e => {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ let files = e.dataTransfer.files;
+ for (let i = 0; i < files.length; i++) {
+ files[i].text().then(dropGuy);
+ }
+ });
+ document.getElementById('pickup').addEventListener('change', e => {
+ for (const file of e.target.files) {
+ console.log(file);
+ var reader = new FileReader();
+ reader.readAsText(file, "UTF-8");
+ reader.onload = function (evt) {
+ dropGuy(evt.target.result);
+ }
+ reader.onerror = function (evt) {
+ console.log("error reading file");
+ }
+ }
+ e.target.value = '';
+ });
}
function loadGames(games) {
- var roster = $("#roster");
- roster.empty();
+ var roster = $("#roster");
+ roster.empty();
- var newone = window.location.href.split('#')[1];
+ var newone = window.location.href.split('#')[1];
- var count = 0;
+ var count = 0;
- $.each(games, function (key, c) {
- var name = c.Traits.Name;
+ $.each(games, function (key, c) {
+ var name = c.Traits.Name;
- var br = brag(c);
- roster.append(br);
- br.find("a.go").attr("href", "main.html#" + escape(name));
+ var br = brag(c);
+ roster.append(br);
+ br.find("a.go").attr("href", "main.html#" + escape(name));
- br.find("a.x").click(function () {
- if (confirm("Terminate " + Pick(["faithful","noble","loyal","brave"])+
- " " + name + "?")) {
- delete games[name];
- storage.storeRoster(games);
- load();
- }
- });
+ br.find("a.x").click(function () {
+ if (confirm("Terminate " + Pick(["faithful","noble","loyal","brave"])+
+ " " + name + "?")) {
+ delete games[name];
+ storage.storeRoster(games);
+ load();
+ }
+ });
- br.find("a.sheet").click(function () {
- alert(template($("#sheet").html(), games[name]));
- // TODO: put in a window or whatev
- });
+ br.find("a.sheet").click(function () {
+ alert(template($("#sheet").html(), games[name]));
+ // TODO: put in a window or whatev
+ });
- br.find("a.save").attr("href",
- `data:text/plain;name=${name}.pqw,${b64_stringify(c)}`);
- br.find("a.save").attr("download", `${name}.pqw`);
+ br.find("a.save").attr("href",
+ `data:text/plain;name=${name}.pqw,${b64_stringify(c)}`);
+ br.find("a.save").attr("download", `${name}.pqw`);
- if (name === newone)
- br.addClass("lit");
+ if (name === newone)
+ br.addClass("lit");
- br.click(e => {
- if (e.altKey) {
- let text = b64_stringify(c);
- text = text.match(/.{1,80}/g).join('\n');
- $("dialog#copy pre").text(text);
- $("dialog#copy span").text(name);
- sel = window.getSelection();
- window.setTimeout(() => {
- let range = document.createRange();
- range.selectNodeContents($("dialog#copy pre")[0]);
- sel.removeAllRanges();
- sel.addRange(range);
- }, 1);
- $("dialog#copy")[0].showModal();
- // window.prompt("Copy to clipboard", text);
- }
- });
- br.find("a.go").attr("data-downloadurl", `text/plain:${name}.pqw:data:text/plain,${b64_stringify(c)}`);
+ br.click(e => {
+ if (e.altKey) {
+ let text = b64_stringify(c);
+ text = text.match(/.{1,80}/g).join('\n');
+ $("dialog#copy pre").text(text);
+ $("dialog#copy span").text(name);
+ sel = window.getSelection();
+ window.setTimeout(() => {
+ let range = document.createRange();
+ range.selectNodeContents($("dialog#copy pre")[0]);
+ sel.removeAllRanges();
+ sel.addRange(range);
+ }, 1);
+ $("dialog#copy")[0].showModal();
+ // window.prompt("Copy to clipboard", text);
+ }
+ });
+ br.find("a.go").attr("data-downloadurl", `text/plain:${name}.pqw:data:text/plain,${b64_stringify(c)}`);
- ++count;
- });
- if (!count)
- roster.html("
Games you start can be loaded from this page, but no saved games were found. Roll up a new character to get started.");
+ ++count;
+ });
+ if (!count)
+ roster.html("
Games you start can be loaded from this page, but no saved games were found. Roll up a new character to get started.");
}
function brag(sheet) {
- var brag = $(template($("#badge").html(), sheet));
- if (sheet.motto) {
- brag.find(".bs").text('"' + sheet.motto + '"');
- }
- if (sheet.online) {
- brag.addClass("online");
- brag.find(".bs").text("Realm of " + sheet.online.realm);
- brag.find(".icon.go").html("✿");
- }
- return brag;
+ var brag = $(template($("#badge").html(), sheet));
+ if (sheet.motto) {
+ brag.find(".bs").text('"' + sheet.motto + '"');
+ }
+ if (sheet.online) {
+ brag.addClass("online");
+ brag.find(".bs").text("Realm of " + sheet.online.realm);
+ brag.find(".icon.go").html("✿");
+ }
+ return brag;
}
function clearRoster() {
- storage.storeRoster({}, load);
+ storage.storeRoster({}, load);
}
$(document).ready(function () {
- load();
+ load();
- $("#roll").click(function () {
- window.location = "newguy.html";
- });
+ $("#roll").click(function () {
+ window.location = "newguy.html";
+ });
- $("#test").click(function () {
- window.location = "newguy.html?sold";
- });
+ $("#test").click(function () {
+ window.location = "newguy.html?sold";
+ });
- $("#clear").click(clearRoster);
+ $("#clear").click(clearRoster);
});