summaryrefslogtreecommitdiffstats
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/braille.js67
-rw-r--r--public/index.html70
-rw-r--r--public/lambda.js70
3 files changed, 207 insertions, 0 deletions
diff --git a/public/braille.js b/public/braille.js
new file mode 100644
index 0000000..fe81c6e
--- /dev/null
+++ b/public/braille.js
@@ -0,0 +1,67 @@
+"use strict";
+
+const OUTHEIGHT = 30;
+const OUTWIDTH = 2 * OUTHEIGHT;
+const HEIGHT = 3 * OUTHEIGHT;
+const WIDTH = 2 * OUTWIDTH;
+const BRAILLE = [
+ "⠀", "⠁", "⠂", "⠃", "⠄", "⠅", "⠆", "⠇", "⠈", "⠉", "⠊", "⠋", "⠌", "⠍", "⠎", "⠏",
+ "⠐", "⠑", "⠒", "⠓", "⠔", "⠕", "⠖", "⠗", "⠘", "⠙", "⠚", "⠛", "⠜", "⠝", "⠞", "⠟",
+ "⠠", "⠡", "⠢", "⠣", "⠤", "⠥", "⠦", "⠧", "⠨", "⠩", "⠪", "⠫", "⠬", "⠭", "⠮", "⠯",
+ "⠰", "⠱", "⠲", "⠳", "⠴", "⠵", "⠶", "⠷", "⠸", "⠹", "⠺", "⠻", "⠼", "⠽", "⠾", "⠿",
+];
+
+let board = new Array(HEIGHT);
+for (let i = 0; i < HEIGHT; i++) {
+ board[i] = new Array(WIDTH);
+}
+
+function render(board) {
+ const out = new Array(OUTHEIGHT);
+ for (let i = 0; i < OUTHEIGHT; i++) {
+ out[i] = new Array(OUTWIDTH);
+ }
+ for (let y = 0; y < HEIGHT; y += 3) {
+ for (let x = 0; x < WIDTH; x += 2) {
+ let outx = x/2;
+ let outy = y/3;
+ let tl = board[y][x] ? 1 : 0;
+ let ml = board[y+1][x] ? 1 : 0;
+ let bl = board[y+2][x] ? 1 : 0;
+ let tr = board[y][x+1] ? 1 : 0;
+ let mr = board[y+1][x+1] ? 1 : 0;
+ let br = board[y+2][x+1] ? 1 : 0;
+ let idx = tl*1 + ml*2 + bl*4 + tr*8 + mr*16 + br*32;
+ let char = BRAILLE[idx];
+ out[outy][outx] = char;
+ }
+ }
+ return out.reduce((a, r) => a + r.reduce((a2, c) => a2 + c) + "\n", "");
+}
+
+function renderFunction(board, fun, frame) {
+ for (let y = 0; y < HEIGHT; y++) {
+ for (let x = 0; x < WIDTH; x++) {
+ board[y][x] = fun(x, y, frame) ? true : null;
+ }
+ }
+ return render(board);
+}
+
+function fun(x, y, frame) {
+ const l = HEIGHT / 3;
+ const m1 = Math.abs(y+frame) % l;
+ const m2 = Math.abs(y-frame) % l;
+ return x == m1 ||
+ x == m2 ||
+ x/2 == m1 + l/2 ||
+ x/2 == m2 + l/2 ||
+ x == m1 + 3*l ||
+ x == m2 + 3*l;
+}
+
+const br = document.getElementById("braille");
+let frame = HEIGHT;
+const interval = setInterval(() => {
+ br.innerHTML = renderFunction(board, fun, frame++);
+}, 50);
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..ef3909f
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <title>lambda.cx home</title>
+ <style>
+ body {
+ background: black;
+ color: white;
+ font-family: monospace;
+ }
+ #braille {
+ line-height: .92;
+ border: 1px solid white;
+ }
+ .bigguy {
+ display: flex;
+ }
+ .lambda {
+ font-family: Andale Mono, monospace;
+ font-size: 12px;
+ display: inline-block;
+ }
+ .linkbox {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ flex: 1;
+ }
+ .links {
+ font-size: 16px;
+ display: inline-block;
+ position: absolute;
+ background: black;
+ padding: 3px;
+ border: 1px solid white;
+ }
+ .links > span {
+ color: white;
+ }
+ .links a {
+ color: lightgrey;
+ }
+ .links a:visited {
+ color: grey;
+ }
+ @media only screen and (max-width: 440px) {
+ .bigguy {
+ display: block;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ <div class="bigguy">
+ <pre class="lambda"></pre>
+ <div class="linkbox">
+ <pre id="braille"></pre>
+ <div class="links">
+ <span>==&gt; </span><a href="https://blog.lambda.cx">blog</a><br/>
+ <span>==&gt; </span><a href="https://github.com/dantecatalfamo">github</a>
+ </div>
+ </div>
+ </div>
+ <script src="lambda.js"></script>
+ <script src="braille.js"></script>
+ </body>
+</html>
diff --git a/public/lambda.js b/public/lambda.js
new file mode 100644
index 0000000..85037c3
--- /dev/null
+++ b/public/lambda.js
@@ -0,0 +1,70 @@
+function coss(height, width, theta) {
+ let amplitude = height/2;
+ let period = width;
+ let dx = Math.PI/width;
+ let yVal = [];
+ let x = theta;
+
+ for(let i=0;i<width;i++){
+ yVal.push((Math.cos(x)*amplitude)+(height/2));
+ x += dx;
+ }
+ return yVal;
+}
+
+function lamby(height, width, thick) {
+ let out = "";
+ let yvals = coss(height, width, Math.PI);
+ let halfWidth = width/2;
+
+ for(let y=0;y<height;y++){
+ for(let x=0;x<width;x++){
+ let posy = yvals[x];
+ let negy = height-posy;
+ if (Math.abs(posy-y) < thick) {
+ out += "<span style=\"color: hsl("+ (Math.abs(posy-y)/thick*260) +",100%, 50%)\">&lambda;</span>";
+ } else if ((x < halfWidth) && (Math.abs(negy-y) < thick)) {
+ out += "<span style=\"color: hsl("+ (Math.abs(negy-y)/thick*260) +",100%, 50%)\">&lambda;</span>";
+ } else {
+ out += " ";
+ }
+ }
+ out += "\n";
+ }
+ return out;
+}
+
+function putlam(el, height, width, min, max, period) {
+ let amp = max-min;
+ const f = function() {
+ let percent = (Math.sin(((new Date).getTime()/period)) + 1) / 2;
+ let thick = (amp * percent) + min;
+ el.innerHTML = lamby(height, width, thick);
+ };
+ window.setInterval(f, 100);
+}
+
+let lamEl = document.querySelector('.lambda');
+putlam(lamEl, 45, 45, 0.3, 4.5, 450);
+
+
+`
+00
+ 0
+ 0
+ 0 0
+ 0 0
+0 00
+
+0
+ 0
+0 0
+
+_
+ \
+ \
+ /\
+ / \
+ / \
+/ \_
+`;