summaryrefslogtreecommitdiffstats
path: root/braille.js
diff options
context:
space:
mode:
authorDante Catalfamo2020-07-03 14:43:05 -0400
committerDante Catalfamo2020-07-03 14:43:05 -0400
commit472e81a2b713e6149af4e56e4046c1aa6a9c1812 (patch)
tree1c3c2e94ffaa289732f320329546c01f4aa84fe1 /braille.js
parentb7373ab119bf73ead274d34b2696ddedb1deb416 (diff)
downloadhomepage-472e81a2b713e6149af4e56e4046c1aa6a9c1812.tar.gz
homepage-472e81a2b713e6149af4e56e4046c1aa6a9c1812.tar.bz2
homepage-472e81a2b713e6149af4e56e4046c1aa6a9c1812.zip
Add braille
Diffstat (limited to 'braille.js')
-rw-r--r--braille.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/braille.js b/braille.js
new file mode 100644
index 0000000..8d94db7
--- /dev/null
+++ b/braille.js
@@ -0,0 +1,67 @@
+"use strict";
+
+const OUTHEIGHT = 20;
+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);