diff options
author | metamuffin <metamuffin@yandex.com> | 2021-12-19 20:06:51 +0100 |
---|---|---|
committer | metamuffin <metamuffin@yandex.com> | 2021-12-19 20:06:51 +0100 |
commit | abb4aa6f47e91cffe7775095d8949b65af100480 (patch) | |
tree | 0e0cd2f6241a94d17b2815a22a68398d8c40846d | |
parent | df5b106f9a782f66a036ebc3ce3dc39b82363acf (diff) | |
download | metamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar metamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar.bz2 metamuffin-website-abb4aa6f47e91cffe7775095d8949b65af100480.tar.zst |
moved evil
-rw-r--r-- | source/index.ts | 15 | ||||
-rw-r--r-- | views/disable.js | 41 | ||||
-rw-r--r-- | views/evil.js | 41 | ||||
-rw-r--r-- | views/layout.pug | 5 |
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 |