From 7f4857b4fd94908df25520fe468d3ee1a223b461 Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Tue, 28 Jul 2026 23:09:09 -0400 Subject: [PATCH] feat: add favicon and og image --- public/favicon.svg | 5 +++-- public/og.png | Bin 0 -> 17309 bytes src/editor.ts | 25 +++++++++++++++++++++++-- src/index.ts | 12 ++++++++++-- wrangler.toml | 5 ++++- 5 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 public/og.png diff --git a/public/favicon.svg b/public/favicon.svg index 86ab0cd..2bc9330 100644 --- a/public/favicon.svg +++ b/public/favicon.svg @@ -1,3 +1,4 @@ - - + + + diff --git a/public/og.png b/public/og.png new file mode 100644 index 0000000000000000000000000000000000000000..a8ad5177e08a8d7ac4d8eb943b9647a87ab1ee31 GIT binary patch literal 17309 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 ZXDa8&*!3{yh&HG|_H^}gS?83{1OS1;y~6+i literal 0 HcmV?d00001 diff --git a/src/editor.ts b/src/editor.ts index ba87832..fa95ee1 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -37,6 +37,9 @@ const CSS = ` input[type="text"]:focus, input[type="date"]:focus, textarea:focus{ outline:none; border-color:var(--ink); } + input::placeholder, textarea::placeholder{ + color:color-mix(in srgb, var(--muted) 50%, transparent); + } textarea{ min-height:180px; resize:vertical; font-family:"JetBrains Mono",ui-monospace,monospace; font-size:.85rem; line-height:1.5; } .section-title{ font-family:"Newsreader",Georgia,serif; font-weight:500; font-size:1.4rem; @@ -143,6 +146,20 @@ const DOC = ${docJson}; let pages = DOC ? DOC.pages.map(p => ({ markdown: p.markdown, image_key: p.image_key })) : []; let draggedIndex = null; +const titleEl = document.getElementById("title"); +titleEl.addEventListener("input", () => { + document.title = titleEl.value ? "~ " + titleEl.value : "~ " + (DOC ? "Edit Document" : "New Document"); +}); + +const PLACEHOLDERS = [ + "Your greatest literary work...", + "What will you put here?", + "A descriptive title? or a fanciful title?", + "This is a really awesome placeholder title!", + "A book not yet written but with a sick title", +]; +titleEl.placeholder = PLACEHOLDERS[Math.floor(Math.random() * PLACEHOLDERS.length)]; + function toast(msg){ const t = document.getElementById("toast"); t.textContent = msg; t.classList.add("show"); @@ -394,7 +411,11 @@ export function editorHtml(publicUrl: string, doc?: DocumentData): string { -${doc ? "Edit" : "New"} — Sharepoint +${doc ? "~ Edit Document" : "~ New Document"} + + + + @@ -423,7 +444,7 @@ export function editorHtml(publicUrl: string, doc?: DocumentData): string {
- +
diff --git a/src/index.ts b/src/index.ts index d2c49f8..ba9d437 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,13 +13,21 @@ const KATEX_CSS = "https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css const FONTS_URL = "https://fonts.googleapis.com/css2?family=Newsreader:opsz,wght@6..72,400;6..72,500;6..72,600&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500&display=swap"; -function htmlShell(title: string, brand: string, content: string): string { +function htmlShell(title: string, brand: string, content: string, url: string, description?: string): string { return ` ${escapeHtml(title)} + + + + + + + + @@ -169,7 +177,7 @@ export default { if (!doc) return new Response("Document not found", { status: 404 }); const content = renderDocument(doc); - return new Response(htmlShell(doc.title, doc.brand, content), { + return new Response(htmlShell(doc.title, doc.brand, content, `${env.PUBLIC_URL}/d/${id}`, doc.date), { headers: { "Content-Type": "text/html;charset=utf-8" }, }); } diff --git a/wrangler.toml b/wrangler.toml index bd0c36a..631212b 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -3,6 +3,9 @@ main = "src/index.ts" compatibility_date = "2025-01-01" account_id = "fdbe5b542ede643d34962c1f07a34565" +[assets] +directory = "./public" + [[d1_databases]] binding = "DB" database_name = "sharepoint" @@ -13,4 +16,4 @@ binding = "SCANS" bucket_name = "sharepoint-scans" [vars] -PUBLIC_URL = "http://localhost:8787" +PUBLIC_URL = "https://share.dunkirk.sh" -- 2.51.2