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