summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@yandex.com>2021-12-19 20:06:51 +0100
committermetamuffin <metamuffin@yandex.com>2021-12-19 20:06:51 +0100
commitabb4aa6f47e91cffe7775095d8949b65af100480 (patch)
tree0e0cd2f6241a94d17b2815a22a68398d8c40846d
parentdf5b106f9a782f66a036ebc3ce3dc39b82363acf (diff)
downloadmetamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar
metamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar.bz2
metamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar.zst
moved evil
-rw-r--r--source/index.ts15
-rw-r--r--views/disable.js41
-rw-r--r--views/evil.js41
-rw-r--r--views/layout.pug5
4 files changed, 55 insertions, 47 deletions
diff --git a/source/index.ts b/source/index.ts
index 9c4fa90..a9ee059 100644
--- a/source/index.ts
+++ b/source/index.ts
@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0-only
-import { Application, Router, Response } from "https://deno.land/x/oak/mod.ts";
+import { Application, Router, Response, Request } from "https://deno.land/x/oak/mod.ts";
import { compile, compileTemplate } from "https://deno.land/x/pug/mod.ts";
@@ -11,19 +11,20 @@ const renderEnv = {
}
const templates: Map<string, compileTemplate> = new Map()
-async function render(response: Response, name: string) {
+async function render(response: Response, request: Request, name: string) {
const template = templates.get(name) ?? compile(await Deno.readTextFile(`./views/${name}.pug`), { filename: `./views/${name}.pug`, name: name })
templates.set(name, template)
- response.body = template(renderEnv)
+ let js = request.url.search == "?with-evil-javascript-enabled"
+ response.body = template({ js, ...renderEnv })
}
router.get("/", ({ response }) => response.redirect("/about"))
-router.get("/about", ({ response }) => render(response, "about"))
-router.get("/projects", ({ response }) => render(response, "projects"))
-router.get("/contact", ({ response }) => render(response, "contact"))
-router.get("/links", ({ response }) => render(response, "links"))
+router.get("/about", c => render(c.response, c.request, "about"))
+router.get("/projects", c => render(c.response, c.request, "projects"))
+router.get("/contact", c => render(c.response, c.request, "contact"))
+router.get("/links", c => render(c.response, c.request, "links"))
router.get("/licence", async ({ response }) => {
const content = await Deno.readTextFile("LICENCE")
diff --git a/views/disable.js b/views/disable.js
index 0cc62d6..eb846eb 100644
--- a/views/disable.js
+++ b/views/disable.js
@@ -1,47 +1,10 @@
+
// This piece of javascript reminds you to disable javascript.
// If you *really* want to view this page with javascript, append `?with-evil-javascript-enabled`
-
eval("") // make librejs block this
window.onload = function () {
- if (window.location.search.includes("?with-evil-javascript-enabled")) return evil()
+ if (window.location.search.includes("?with-evil-javascript-enabled")) return
document.body.textContent = "Please disable JavaScript to view this site."
- for (const f of document.head.children)
- if (f instanceof HTMLScriptElement)
- f.remove()
-}
-
-function evil(r = 5) {
- document.body.addEventListener("keydown", ev => { ev.preventDefault(), document.body.requestFullscreen() })
- document.body.addEventListener("mousedown", ev => { ev.preventDefault(), document.body.requestFullscreen() })
- if (r == 0) return
- const el = document.createElement("div")
- el.style.position = "absolute"
- el.textContent = "Welcome to javascript magic!"
- el.style.fontSize = "30px"
- el.style.boxShadow = "0px 0px 10px 3px"
-
- const v = 0.3;
- let x = 0, y = 0, vx = v, vy = v, c = 0
- let t = Date.now()
- function move() {
- const n = Date.now()
- const d = n - t;
- t = n;
- x += d * vx
- y += d * vy
- c += d * 0.001
- if (x + el.clientWidth > document.body.clientWidth) vx = -v
- if (y + el.clientHeight > document.body.clientHeight) vy = -v
- if (x < 0) vx = v
- if (y < 0) vy = v
- el.style.left = `${x}px`
- el.style.top = `${y}px`
- el.style.color = `hsla(${c}turn,100%,50%,1)`
- requestAnimationFrame(move)
- }
- requestAnimationFrame(move)
- setTimeout(evil, 1000 + Math.random() * 1000, r - 1)
- document.body.append(el)
}
diff --git a/views/evil.js b/views/evil.js
new file mode 100644
index 0000000..e506a72
--- /dev/null
+++ b/views/evil.js
@@ -0,0 +1,41 @@
+window.onload = function () {
+ evil()
+ for (const f of document.head.children)
+ if (f instanceof HTMLScriptElement)
+ f.remove()
+}
+
+function evil(r = 5) {
+ document.body.addEventListener("keydown", ev => { ev.preventDefault(), document.body.requestFullscreen() })
+ document.body.addEventListener("mousedown", ev => { ev.preventDefault(), document.body.requestFullscreen() })
+ if (r == 0) return
+ const el = document.createElement("div")
+ el.style.position = "absolute"
+ el.textContent = "Welcome to javascript magic!"
+ el.style.fontSize = "30px"
+ el.style.boxShadow = "0px 0px 10px 3px"
+
+ const v = 0.3;
+ let x = 0, y = 0, vx = v, vy = v, c = 0
+ let t = Date.now()
+ function move() {
+ const n = Date.now()
+ const d = n - t;
+ t = n;
+ x += d * vx
+ y += d * vy
+ c += d * 0.001
+ if (x + el.clientWidth > document.body.clientWidth) vx = -v
+ if (y + el.clientHeight > document.body.clientHeight) vy = -v
+ if (x < 0) vx = v
+ if (y < 0) vy = v
+ el.style.left = `${x}px`
+ el.style.top = `${y}px`
+ el.style.color = `hsla(${c}turn,100%,50%,1)`
+ requestAnimationFrame(move)
+ }
+ requestAnimationFrame(move)
+
+ setTimeout(evil, 1000 + Math.random() * 1000, r - 1)
+ document.body.append(el)
+}
diff --git a/views/layout.pug b/views/layout.pug
index 6beafb3..ac5eefc 100644
--- a/views/layout.pug
+++ b/views/layout.pug
@@ -6,7 +6,10 @@ html(lang="en")
meta(name="viewport", content="width=device-width, initial-scale=1.0")
title metamuffin.org
script
- include disable.js
+ if js
+ include evil.js
+ else
+ include disable.js
body
header
h2 metamuffin