]> gitweb.michael.orlitzky.com - charm-bypass.git/blobdiff - index.html.in
index.html.in: support random and user-specified security codes
[charm-bypass.git] / index.html.in
index 9d666dedb0c5d6b9ea27df5bfcce6176db61dd9a..0bec5e720a4efcf39df02f38e87054e7866d37c1 100644 (file)
     @SVGDATA@
 
     <script>
-      /******************************************/
-      /* First, set up the ticket date and time */
-      /******************************************/
+
+      /***********************************************/
+      /* First, center the ticket within the browser */
+      /***********************************************/
+
+      function center_ticket() {
+       /* We're relying on the SVG being the full height of the
+        * viewport already, and on the aspect ratio being
+        * preserved. First, find the center of the ticket. */
+       const r = document.getElementById("ticket").getBoundingClientRect();
+       const c = r.left + (r.width / 2);
+
+       /* That's the center-line of the ticket. We want to move it to
+        * the center-line of the viewport. */
+       const vc = document.documentElement.clientWidth / 2;
+
+       /* This is how much we need to translate the SVG */
+       const delta = vc - c;
+
+       /* But before we can set the absolute left-coordinate of the
+        * SVG, we need to know where it is now. Note: without the
+        * "px" this doesn't default to pixels like CSS does. */
+       const svg = document.querySelector("svg");
+       svg.style.left = (svg.getBoundingClientRect().left + delta) + "px";
+      }
+
+      /* Re-center it when the window is resized */
+      window.addEventListener("resize", center_ticket);
+
+      /* Center it once when the page has loaded, too */
+      window.addEventListener("load", center_ticket);
+
+
+      /*************************/
+      /* Set the security code */
+      /*************************/
+
+      /* All <text> elements produced by inkscape contain a single <tspan>
+       * that itself contains the actual text. */
+      const ct = document.getElementById("codetext");
+
+      /* Get the "code" from the querystring if it's there */
+      let params = new URLSearchParams(document.location.search);
+      if (params.get("code")) {
+        ct.firstChild.textContent = params.get("code");
+      }
+      else {
+        /* Otherwise, use a random code */
+        const bucket = ["0","1","2","3","4","5","6","7","8","9",
+                        "A","B","C","D","E","F","G","H","I","J",
+                        "K","L","M","N","O","P","Q","R","S","T",
+                        "U","V","W","X","Y","Z"];
+
+        /* Two random ints between 0 and 35 */
+        const i1 = Math.floor(Math.random() * 36);
+        const i2 = Math.floor(Math.random() * 36);
+        const d1 = bucket[i1];
+        const d2 = bucket[i2];
+        ct.firstChild.textContent = d1 + d2;
+      }
+
+      /*****************************************/
+      /* Next, set up the ticket date and time */
+      /*****************************************/
 
       /* There are two parameters, time and date, that we store in one
        * underlying "date" variable. Default both to an hour and a
       td.firstChild.textContent = date.toLocaleDateString("en-US", dateopts);
 
 
-      /************************************************************/
-      /* Second, add the onclick handler for the night/day switch */
-      /************************************************************/
+      /*************************************************************/
+      /* Finally, add the onclick handler for the night/day switch */
+      /*************************************************************/
 
       /* We always start in "day" mode */
       is_day = true;
 
       document.body.addEventListener("click", swap_colors);
 
-
-      /*************************************************/
-      /* Finally, center the ticket within the browser */
-      /*************************************************/
-      function center_ticket() {
-       /* We're relying on the SVG being the full height of the
-        * viewport already, and on the aspect ratio being
-        * preserved. First, find the center of the ticket. */
-       const r = document.getElementById("ticket").getBoundingClientRect();
-       const c = r.left + (r.width / 2);
-
-       /* That's the center-line of the ticket. We want to move it to
-        * the center-line of the viewport. */
-       const vc = document.documentElement.clientWidth / 2;
-
-       /* This is how much we need to translate the SVG */
-       const delta = vc - c;
-
-       /* But before we can set the absolute left-coordinate of the
-        * SVG, we need to know where it is now. Note: without the
-        * "px" this doesn't default to pixels like CSS does. */
-       const svg = document.querySelector("svg");
-       svg.style.left = (svg.getBoundingClientRect().left + delta) + "px";
-      }
-
-      /* Re-center it when the window is resized */
-      window.addEventListener("resize", center_ticket);
-
-      /* Center it once when the page has loaded, too */
-      window.addEventListener("load", center_ticket);
     </script>
   </body>
 </html>