diff --git a/sheet.js b/sheet.js
index 208ea05..eaa6052 100644
--- a/sheet.js
+++ b/sheet.js
@@ -1,3 +1,5 @@
+import {serializeFormData, deserializeFormData, storeData, getData} from "./utils.js";
+
window.addEventListener("DOMContentLoaded", init);
let combatModifiers = [
@@ -279,11 +281,25 @@ let features = [
function init () {
buildModifiers("#combat-modifiers", combatModifiers);
- window.setInterval(() => { calculateModifiers(combatModifiers) }, 250);
buildModifiers("#rp-modifiers", rpModifiers);
- calculateModifiers(rpModifiers);
- window.setInterval(() => { calculateModifiers(rpModifiers) }, 250);
buildFeatures("#features", features);
+
+ let data = getData();
+ deserializeFormData("#character-data", data);
+
+ calculateModifiers(combatModifiers)
+ calculateModifiers(rpModifiers)
+
+ data = serializeFormData("#character-data");
+ storeData(data);
+
+ window.setInterval(() => {
+ calculateModifiers(combatModifiers)
+ calculateModifiers(rpModifiers)
+
+ data = serializeFormData("#character-data");
+ storeData(data);
+ }, 250);
}
function buildModifiers(container, data) {
@@ -328,7 +344,7 @@ function buildFeatures (container) {
${feature.name}
${feature.level}
-
+
`;
}
diff --git a/songs.html b/songs.html
index 9ed0aee..13777bf 100644
--- a/songs.html
+++ b/songs.html
@@ -6,6 +6,7 @@
+
diff --git a/utils.js b/utils.js
new file mode 100644
index 0000000..86795fa
--- /dev/null
+++ b/utils.js
@@ -0,0 +1,45 @@
+export function serializeFormData (formID) {
+ let out = {};
+ let form = document.querySelector(formID);
+ for (let i in form.elements) {
+ let element = form.elements[i];
+ if (!(element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement)) {
+ continue;
+ }
+ if (element.type === "checkbox") {
+ out[element.name] = {
+ type: element.type,
+ value: element.checked
+ };
+ }
+ else {
+ out[element.name] = {
+ type: element.type,
+ value: element.value
+ };
+ }
+ }
+ return out;
+}
+
+export function deserializeFormData (form, data) {
+ let area = document.querySelector(form);
+ for (let key in data) {
+ let element = data[key];
+ if (element.type === "checkbox") {
+ document.querySelector(`#${key}`).checked = element.value;
+ }
+ else {
+ document.querySelector(`#${key}`).value = element.value;
+ }
+ }
+}
+
+export function storeData (data) {
+ localStorage.setItem("character-data", JSON.stringify(data));
+}
+
+export function getData () {
+ let data = JSON.parse(localStorage.getItem("character-data"));
+ return data ? data : {};
+}
\ No newline at end of file