From 0aa9ef160fe3362a85a6e9b678d1b65756c8e3a0 Mon Sep 17 00:00:00 2001 From: Joris Date: Wed, 8 Feb 2023 10:33:51 +0100 Subject: Filter on read status --- .gitignore | 2 +- Makefile | 9 ++ bin/dev-server | 19 ++- bin/get-books | 23 ++++ bin/get-data | 23 ---- bin/view | 2 +- flake.nix | 5 +- public/index.html | 2 +- public/main.css | 11 +- public/main.js | 19 --- src/lib/rx.ts | 398 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.ts | 48 +++++++ tsconfig.json | 13 ++ 13 files changed, 519 insertions(+), 55 deletions(-) create mode 100644 Makefile create mode 100755 bin/get-books delete mode 100755 bin/get-data delete mode 100644 public/main.js create mode 100644 src/lib/rx.ts create mode 100644 src/main.ts create mode 100644 tsconfig.json diff --git a/.gitignore b/.gitignore index e34fb35..6bb7df2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -public/data.js +public/*.js diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..593752d --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +build: + @esbuild \ + --bundle src/main.ts \ + --minify \ + --target=es2017 \ + --outdir=public + +clean: + @rm -f public/main.js diff --git a/bin/dev-server b/bin/dev-server index 4136091..82a407c 100755 --- a/bin/dev-server +++ b/bin/dev-server @@ -9,13 +9,18 @@ else exit 1 fi -# Watch +# Watch books -clear -echo "Open your browser at file://$PWD/public/index.html" -echo - -BUILD_CMD="./bin/get-data $BOOK_DIR > public/data.js && echo public/data.js updated." +BUILD_BOOKS_CMD="./bin/get-books $BOOK_DIR > public/books.js && echo public/books.js updated." watchexec \ --watch "$BOOK_DIR" \ - -- "$BUILD_CMD" + -- "$BUILD_BOOKS_CMD" & + +# Watch TypeScript + +CHECK="echo Checking TypeScript… && tsc --checkJs" +BUILD="esbuild --bundle src/main.ts --target=es2017 --outdir=public" +watchexec \ + --clear \ + --watch src \ + -- "$CHECK && $BUILD" diff --git a/bin/get-books b/bin/get-books new file mode 100755 index 0000000..0fbbd2f --- /dev/null +++ b/bin/get-books @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -euo pipefail +cd $(dirname "$0")/.. + +if [ "$#" == 1 ]; then + BOOK_DIR="$1" +else + echo "usage: $0 path-to-book-directory" + exit 1 +fi + +echo "const books = [" + +for METADATA in $(find "$BOOK_DIR" -name 'metadata.json'); do + DIR=$(dirname "$METADATA") + COVER=$(ls $DIR/cover.*) + + cat "$METADATA" | head -n -1 + echo ", \"cover\": \"$COVER\"" + echo "}," +done + +echo "]" diff --git a/bin/get-data b/bin/get-data deleted file mode 100755 index 0fbbd2f..0000000 --- a/bin/get-data +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -cd $(dirname "$0")/.. - -if [ "$#" == 1 ]; then - BOOK_DIR="$1" -else - echo "usage: $0 path-to-book-directory" - exit 1 -fi - -echo "const books = [" - -for METADATA in $(find "$BOOK_DIR" -name 'metadata.json'); do - DIR=$(dirname "$METADATA") - COVER=$(ls $DIR/cover.*) - - cat "$METADATA" | head -n -1 - echo ", \"cover\": \"$COVER\"" - echo "}," -done - -echo "]" diff --git a/bin/view b/bin/view index 21541c1..4fd4efc 100755 --- a/bin/view +++ b/bin/view @@ -12,5 +12,5 @@ fi TMP_DIR=$(mktemp --directory) cp public/* "$TMP_DIR" -bin/get-data "$BOOK_DIR" > "$TMP_DIR/data.js" +bin/get-books "$BOOK_DIR" > "$TMP_DIR/books.js" eval "$BROWSER $TMP_DIR/index.html" diff --git a/flake.nix b/flake.nix index d2e3a07..48ae045 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,10 @@ in with pkgs; { devShell = mkShell { buildInputs = [ - psmisc + esbuild + nodePackages.typescript + psmisc # fuser + python3 watchexec ]; }; diff --git a/public/index.html b/public/index.html index 13136da..bbef5ae 100644 --- a/public/index.html +++ b/public/index.html @@ -2,5 +2,5 @@
- + diff --git a/public/main.css b/public/main.css index 711aaf2..7e7f297 100644 --- a/public/main.css +++ b/public/main.css @@ -1,8 +1,15 @@ body { - margin: 2rem; + margin: 0; + display: flex; } -.g-Books { +.g-Aside { + padding: 1rem; + background-color: #333; +} + +.g-Main { + padding: 1rem; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); grid-gap: 1rem; diff --git a/public/main.js b/public/main.js deleted file mode 100644 index 29de235..0000000 --- a/public/main.js +++ /dev/null @@ -1,19 +0,0 @@ -const sortedBooks = books.sort((a, b) => - a.authorsSort == b.authorsSort - ? a.date > b.date - : a.authorsSort > b.authorsSort) - -const view = h('div', - { className: 'g-Books' }, - ...sortedBooks.map(book => h('img', { className: 'g-Book', src: book.cover }))) - -document.body.appendChild(view) - -// Helpers - -function h(tagName, attrs, ...children) { - let elem = document.createElement(tagName) - elem = Object.assign(elem, attrs) - for (const child of children) elem.append(child) - return elem -} diff --git a/src/lib/rx.ts b/src/lib/rx.ts new file mode 100644 index 0000000..dbdd3ad --- /dev/null +++ b/src/lib/rx.ts @@ -0,0 +1,398 @@ +// Html + +export interface Html { + type: 'Tag' | 'WithVar' +} + +export interface Tag extends Html { + type: 'Tag' + tagName: string + attributes: Attributes + children?: Array