shithub: puzzles

Download patch

ref: c90d64f2439cf4fc5ac07f0ace27100aad2b69be
parent: 1bab1d1d2ab472bb8fc7cddfce1d3c37e63a2ed5
author: Ben Harris <[email protected]>
date: Mon Oct 17 18:04:16 EDT 2022

js: Move most style settings from JavaScript to CSS

Some elements (generally those created by JavaScript) had their style
parameters set directly by JavaScript.  Putting styles in CSS generally
makes them easier to understand (and fiddle with), so I've done that.
The only styles left in JavaScript are those that are calculated by
JavaScript (like the status-bar size) and the random-seed permalink
visibility because I wasn't quite sure how to handle it.

--- a/emcclib.js
+++ b/emcclib.js
@@ -72,9 +72,8 @@
         var item = document.createElement("li");
         item.setAttribute("data-index", value);
         var tick = document.createElement("span");
+        tick.className = "tick";
         tick.appendChild(document.createTextNode("\u2713"));
-        tick.style.color = "transparent";
-        tick.style.paddingRight = "0.5em";
         item.appendChild(tick);
         item.appendChild(document.createTextNode(name));
         gametypesubmenus[menuid].appendChild(item);
@@ -103,8 +102,7 @@
         // nicely with their neighbours.
         var tick = document.createElement("span");
         tick.appendChild(document.createTextNode("\u2713"));
-        tick.style.color = "transparent";
-        tick.style.paddingRight = "0.5em";
+        tick.className = "tick";
         item.appendChild(tick);
         item.appendChild(document.createTextNode(name));
         var submenu = document.createElement("ul");
@@ -138,9 +136,9 @@
             var item = gametypeitems[i];
             var tick = item.firstChild;
             if (item.getAttribute("data-index") == n) {
-                tick.style.color = "inherit";
+                tick.classList.add("selected");
             } else {
-                tick.style.color = "transparent";
+                tick.classList.remove("selected");
             }
         }
     },
@@ -522,16 +520,9 @@
     js_canvas_make_statusbar: function() {
         var statusholder = document.getElementById("statusbarholder");
         statusbar = document.createElement("div");
-        statusbar.style.overflow = "hidden";
+        statusbar.id = "statusbar";
         statusbar.style.width = (onscreen_canvas.width - 4) + "px";
         statusholder.style.width = onscreen_canvas.width + "px";
-        statusbar.style.height = "1.2em";
-        statusbar.style.textAlign = "left";
-        statusbar.style.background = "#d8d8d8";
-        statusbar.style.borderLeft = '2px solid #c8c8c8';
-        statusbar.style.borderTop = '2px solid #c8c8c8';
-        statusbar.style.borderRight = '2px solid #e8e8e8';
-        statusbar.style.borderBottom = '2px solid #e8e8e8';
         statusbar.appendChild(document.createTextNode(" "));
         statusholder.appendChild(statusbar);
     },
--- a/emccpre.js
+++ b/emccpre.js
@@ -179,29 +179,17 @@
     // Create an overlay on the page which darkens everything
     // beneath it.
     dlg_dimmer = document.createElement("div");
-    dlg_dimmer.style.width = "100%";
-    dlg_dimmer.style.height = "100%";
-    dlg_dimmer.style.background = '#000000';
-    dlg_dimmer.style.position = 'fixed';
-    dlg_dimmer.style.opacity = 0.3;
-    dlg_dimmer.style.top = dlg_dimmer.style.left = 0;
-    dlg_dimmer.style["z-index"] = 99;
+    dlg_dimmer.id = "dlgdimmer";
 
     // Now create a form which sits on top of that in turn.
     dlg_form = document.createElement("form");
+    dlg_form.id = "dlgform";
     dlg_form.style.width = (window.innerWidth * 2 / 3) + "px";
-    dlg_form.style.opacity = 1;
-    dlg_form.style.background = '#ffffff';
-    dlg_form.style.color = '#000000';
-    dlg_form.style.position = 'absolute';
-    dlg_form.style.border = "2px solid black";
-    dlg_form.style.padding = "20px";
     dlg_form.style.top = (window.innerHeight / 10) + "px";
     dlg_form.style.left = (window.innerWidth / 6) + "px";
-    dlg_form.style["z-index"] = 100;
 
     var title = document.createElement("p");
-    title.style.marginTop = "0px";
+    title.className = "title";
     title.appendChild(document.createTextNode(titletext));
     dlg_form.appendChild(title);
 
@@ -471,11 +459,7 @@
     }
     resizable_div = document.getElementById("resizable");
     resizable_div.appendChild(resize_handle);
-    resize_handle.style.position = 'absolute';
-    resize_handle.style.zIndex = 98;
-    resize_handle.style.bottom = "0";
-    resize_handle.style.right = "0";
-    resize_handle.style.cursor = "se-resize";
+    resize_handle.id = "resizehandle";
     resize_handle.title = "Drag to resize the puzzle. Right-click to restore the default size.";
     var resize_xbase = null, resize_ybase = null, restore_pending = false;
     var resize_xoffset = null, resize_yoffset = null;
--- a/html/jspage.pl
+++ b/html/jspage.pl
@@ -191,6 +191,61 @@
     display: flex;
 }
 
+#gamemenu .tick {
+    /* The tick next to a menu item, or its unselected equivalent. */
+    padding-right: 0.5em;
+    color: transparent;
+}
+
+#gamemenu .tick.selected {
+    /* Tick for a selected menu entry. */
+    color: inherit;
+}
+
+#statusbar {
+    overflow: hidden;
+    height: 1.2em;
+    text-align: left;
+    background: #d8d8d8;
+    border-left: 2px solid #c8c8c8;
+    border-top: 2px solid #c8c8c8;
+    border-right: 2px solid #e8e8e8;
+    border-bottom: 2px solid #e8e8e8;
+}
+
+#dlgdimmer {
+    width: 100%;
+    height: 100%;
+    background: #000000;
+    position: fixed;
+    opacity: 0.3;
+    left: 0;
+    top: 0;
+    z-index: 99;
+}
+
+#dlgform {
+    opacity: 1;
+    background: #ffffff;
+    color: #000000;
+    position: absolute;
+    border: 2px solid black;
+    padding: 20px;
+    z-index: 100;
+}
+
+#dlgform .title {
+    margin-top: 0px;
+}
+
+#resizehandle {
+    position: absolute;
+    z-index: 98;
+    bottom: 0;
+    right: 0;
+    cursor: se-resize;
+}
+
 #apology {
     padding: 0 1em 0 1em;
     margin: 1em;