From 60b66ef57c1d6bef3788938b07d6b9b1993c2dc5 Mon Sep 17 00:00:00 2001 From: rattatwinko Date: Thu, 19 Jun 2025 13:40:31 +0200 Subject: [PATCH] cecks --- package-lock.json | 10 ++++++++ package.json | 15 ++++++------ posts/mdtest.md | 8 +++++++ src/app/admin/page.tsx | 39 +++++++++++++++++++++++++------ src/app/api/posts/[slug]/route.ts | 23 +++++++++++++----- src/app/api/posts/route.ts | 21 +++++++++++++---- src/app/globals.css | 17 ++++++++++++++ src/app/highlight-github.css | 12 ++++++++++ src/lib/markdown.ts | 21 +++++++++++++---- 9 files changed, 138 insertions(+), 28 deletions(-) create mode 100644 src/app/highlight-github.css diff --git a/package-lock.json b/package-lock.json index e4dae28..6a1e3e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "dompurify": "^3.0.9", "electron": "^29.1.0", "gray-matter": "^4.0.3", + "highlight.js": "^11.11.1", "jsdom": "^24.0.0", "marked": "^12.0.0", "next": "14.1.0", @@ -3897,6 +3898,15 @@ "node": ">= 0.4" } }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/html-encoding-sniffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", diff --git a/package.json b/package.json index f49b889..98272e1 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,19 @@ "electron-dev": "concurrently \"npm run dev\" \"npm run electron\"" }, "dependencies": { + "@tailwindcss/typography": "^0.5.16", "@types/node": "^20.11.24", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "autoprefixer": "^10.4.17", + "bcrypt": "^5.0.2", + "bcryptjs": "^2.4.3", "chokidar": "^3.6.0", + "date-fns": "^3.6.0", "dompurify": "^3.0.9", "electron": "^29.1.0", "gray-matter": "^4.0.3", + "highlight.js": "^11.11.1", "jsdom": "^24.0.0", "marked": "^12.0.0", "next": "14.1.0", @@ -26,19 +31,15 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.4.1", - "typescript": "^5.3.3", - "date-fns": "^3.6.0", - "@tailwindcss/typography": "^0.5.16", - "bcryptjs": "^2.4.3", - "bcrypt": "^5.0.2" + "typescript": "^5.3.3" }, "devDependencies": { + "@types/bcryptjs": "^2.4.6", "@types/dompurify": "^3.0.5", "@types/jsdom": "^21.1.6", "@types/marked": "^5.0.2", "concurrently": "^8.2.2", "eslint": "^8.57.0", - "eslint-config-next": "14.1.0", - "@types/bcryptjs": "^2.4.6" + "eslint-config-next": "14.1.0" } } diff --git a/posts/mdtest.md b/posts/mdtest.md index 230eb95..294b23c 100644 --- a/posts/mdtest.md +++ b/posts/mdtest.md @@ -94,6 +94,14 @@ print("Hello, world!") ``` +### Code Blog (test) + +```Python +def hello(): + return true; +``` + + ### Code Block (indented) ```Python def indented_example(): diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index e2eac5a..034d828 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -3,6 +3,8 @@ import { useState, useEffect, useCallback, useRef } from 'react'; import { useRouter } from 'next/navigation'; import Link from 'next/link'; +import { marked } from 'marked'; +import hljs from 'highlight.js'; interface Post { slug: string; @@ -67,6 +69,7 @@ export default function AdminPage() { const [changePwNew, setChangePwNew] = useState(''); const [changePwConfirm, setChangePwConfirm] = useState(''); const [changePwFeedback, setChangePwFeedback] = useState(null); + const [previewHtml, setPreviewHtml] = useState(''); const router = useRouter(); const usernameRef = useRef(null); const passwordRef = useRef(null); @@ -85,6 +88,20 @@ export default function AdminPage() { useEffect(() => { localStorage.setItem('pinnedPosts', JSON.stringify(pinned)); }, [pinned]); + useEffect(() => { + marked.setOptions({ + gfm: true, + breaks: true, + highlight: function(code: string, lang: string) { + if (lang && hljs.getLanguage(lang)) { + return hljs.highlight(code, { language: lang }).value; + } else { + return hljs.highlightAuto(code).value; + } + } + } as any); + setPreviewHtml(marked.parse(newPost.content || '') as string); + }, [newPost.content]); const loadContent = async () => { try { @@ -659,13 +676,21 @@ export default function AdminPage() {
-