Write on the margins of the internet. Powered by the AT Protocol.
margin.at
extension
web
atproto
comments
1#!/bin/bash
2
3set -euo pipefail
4
5SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
6PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
7PDFJS_DIR="$PROJECT_DIR/public/pdfjs"
8
9if [ -n "${1:-}" ]; then
10 VERSION="$1"
11else
12 echo "Fetching latest PDF.js version..."
13 VERSION=$(curl -sL "https://api.github.com/repos/mozilla/pdf.js/releases/latest" \
14 | grep '"tag_name"' | head -1 | sed -E 's/.*"v([^"]+)".*/\1/')
15 if [ -z "$VERSION" ]; then
16 echo "Error: Could not determine latest version." >&2
17 exit 1
18 fi
19fi
20
21echo "Updating PDF.js to v${VERSION}..."
22
23DOWNLOAD_URL="https://github.com/mozilla/pdf.js/releases/download/v${VERSION}/pdfjs-${VERSION}-dist.zip"
24TMPFILE=$(mktemp /tmp/pdfjs-XXXXXX.zip)
25echo "Downloading from ${DOWNLOAD_URL}..."
26curl -L -o "$TMPFILE" "$DOWNLOAD_URL"
27
28INIT_SCRIPT=""
29if [ -f "$PDFJS_DIR/margin-pdfjs-init.js" ]; then
30 INIT_SCRIPT=$(cat "$PDFJS_DIR/margin-pdfjs-init.js")
31fi
32
33rm -rf "$PDFJS_DIR"
34mkdir -p "$PDFJS_DIR"
35
36echo "Extracting..."
37unzip -q -o "$TMPFILE" -d "$PDFJS_DIR"
38rm -f "$TMPFILE"
39
40if [ -n "$INIT_SCRIPT" ]; then
41 echo "$INIT_SCRIPT" > "$PDFJS_DIR/margin-pdfjs-init.js"
42fi
43
44echo "Cleaning up..."
45rm -f "$PDFJS_DIR/web/compressed.tracemonkey-pldi-09.pdf"
46rm -f "$PDFJS_DIR/web/debugger.css" "$PDFJS_DIR/web/debugger.mjs"
47rm -rf "$PDFJS_DIR/web/wasm"
48find "$PDFJS_DIR" -name '*.map' -delete
49
50KEEP_LOCALES="ar bg ca cs da de el en-GB en-US es-AR es-CL es-ES es-MX et fi fr he hi-IN hr hu id it ja ko lt lv ms nb-NO nl pl pt-BR pt-PT ro ru sk sl sr sv-SE th tr uk vi zh-CN zh-TW"
51LOCALE_DIR="$PDFJS_DIR/web/locale"
52if [ -d "$LOCALE_DIR" ]; then
53 for dir in "$LOCALE_DIR"/*/; do
54 locale=$(basename "$dir")
55 if ! echo " $KEEP_LOCALES " | grep -q " $locale "; then
56 rm -rf "$dir"
57 fi
58 done
59 if command -v python3 &>/dev/null && [ -f "$LOCALE_DIR/locale.json" ]; then
60 python3 -c "
61import json, sys
62keep = set('$KEEP_LOCALES'.split())
63d = json.load(open('$LOCALE_DIR/locale.json'))
64filtered = {k:v for k,v in d.items() if k in keep}
65json.dump(filtered, open('$LOCALE_DIR/locale.json','w'), ensure_ascii=False, separators=(',',':'))
66print(f' Kept {len(filtered)} of {len(d)} locales')
67"
68 fi
69fi
70
71echo "Patching viewer.mjs (origin check bypass)..."
72sed -i '' 's/if (HOSTED_VIEWER_ORIGINS.has(viewerOrigin)) {/if (true) {/' \
73 "$PDFJS_DIR/web/viewer.mjs"
74
75echo "Patching viewer.html (script injection)..."
76sed -i '' 's|<script src="viewer.mjs" type="module"></script>|<script src="viewer.mjs" type="module"></script>\
77 <script src="/pdfjs/margin-pdfjs-init.js"></script>\
78 <script src="/pdf-viewer.js" type="module"></script>|' \
79 "$PDFJS_DIR/web/viewer.html"
80
81FINAL_SIZE=$(du -sh "$PDFJS_DIR" | cut -f1)
82echo ""
83echo "PDF.js v${VERSION} installed successfully (${FINAL_SIZE})"
84echo "Location: $PDFJS_DIR"