diff --git a/main.css b/main.css index 0e0fde2..c60dbf4 100644 --- a/main.css +++ b/main.css @@ -6,10 +6,19 @@ --middle-accent: rgba(128,128,128,0.1); --middle-shade: rgba(128,128,128,0.5); --shadows-color: rgba(138,138,138,1); + &.darkmode { + --foreground-high: rgba(250,250,250,0.5); + --foreground-low: rgba(200,200,200,1); + --background-high: rgba(40,40,40,0.5); + --background-low: rgba(10,10,10,1); + --shadows-color: rgba(138,138,138,1); + } } body { margin:0; + background: var(--background-low); + color: var(--foreground-high); } #root { @@ -38,6 +47,50 @@ body { padding: 5%; } +.options_body > div { + display: flex; + justify-content: center; + align-items: center; + border-bottom: solid 1px var(--foreground-low); + padding: 0 20px 0 20px; + height: 40px; + label { + flex:1; + } + input[type="number"] { + width: 100px; + } +} + +.dm-indicator { + display: inline-block; + height: 30px; + width: 30px; + background: yellow; + border-radius: 15px; + box-shadow: inset 0 0 5px 5px rgba(240,140,0,0.8); + appearance: unset; +} +.dm-indicator:checked { + background: lightgrey; + box-shadow: inset 10px 10px 5px -5px black; +} + +.toggle-switch { + appearance: unset; + display: inline-block; + height: 30px; + width: 70px; + border-radius: 15px; + background: var(--background-low); + box-shadow: inset -40px 0px 2px -2px var(--foreground-high); + transition: box-shadow 300ms; +} + +.toggle-switch:checked { + box-shadow: inset 40px 0px 2px -2px var(--foreground-high); +} + .board_tab { display: inline-block; height: 24px; @@ -122,13 +175,19 @@ body { transition: left 500ms, backdrop-filter 500ms; } -.dialog_body { +.library_body { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; grid-gap: 5%; padding: 5%; } +.options_body { + display: flex; + flex-direction: column; + align-items: stretch; +} + .pec { text-align: center; height: 100%; diff --git a/main.js b/main.js index a9cd9a1..8489b4e 100644 --- a/main.js +++ b/main.js @@ -51,6 +51,15 @@ function systemMsg (message,level=0) { // abstraction? // but later we will also have it push an error toast in the ui. } +function toggleDarkmode () { + var html = document.documentElement; + if (html.classList.contains("darkmode")) { + html.classList.remove("darkmode"); + } else { + html.classList.add("darkmode"); + } +} + function inRange(target,min,max) { if (isNaN(target) || isNaN(min) || isNaN(max)) { return false; } return (min <= target && target <= max); @@ -180,11 +189,11 @@ app.gui.view.id = "view"; app.gui.main.appendChild(app.gui.view); // Library popup app.gui.library = new auxillery_dialog("Library"); -app.gui.library.body.classList.add("dialog_body"); +app.gui.library.body.classList.add("library_body"); app.gui.main.append(app.gui.library.root); // Options popup app.gui.options = new auxillery_dialog("Options"); -app.gui.options.body.classList.add("dialog_body"); +app.gui.options.body.classList.add("options_body"); app.gui.main.append(app.gui.options.root); app.gui.optionsButton.addEventListener("click", ()=>{ app.gui.options.root.classList.add("focused") }); // pre-populate grid with emptys @@ -222,15 +231,23 @@ app.options = {}; app.options.darkmode = false; // should always be an option app.options.audioFeedback = false; // read word aloude app.options.feedbackFloodLimit = 3; -app.options.feedbackTimeout = 60000; // 60 seconds +app.options.feedbackTimeout = 60; // 60 seconds // overload defaults with options stored in localstorage // build Options UI app.gui.options_darkmode = document.createElement("div"); app.gui.options.body.appendChild(app.gui.options_darkmode); +app.gui.options_darkmode.innerHTML = ' '; +app.gui.options_darkmode.addEventListener("change", toggleDarkmode); + app.gui.options_audioFeedback = document.createElement("div"); app.gui.options.body.appendChild(app.gui.options_audioFeedback); +app.gui.options_audioFeedback.innerHTML = ' '; + app.gui.options_feedbackFloodLimit = document.createElement("div"); app.gui.options.body.appendChild(app.gui.options_feedbackFloodLimit); +app.gui.options_feedbackFloodLimit.innerHTML = ' '; + app.gui.options_feedbackTimeout = document.createElement("div"); app.gui.options.body.appendChild(app.gui.options_feedbackTimeout); +app.gui.options_feedbackTimeout.innerHTML = ' ';