From 0b2a9f2383d629a6b73b1996132c1ea15a189483 Mon Sep 17 00:00:00 2001
From: Thilo Hohlt <123883702+thiloho@users.noreply.github.com>
Date: Sat, 3 Aug 2024 13:49:41 +0200
Subject: [PATCH] Render HTML out of markdown content
---
web-app/README.md | 2 +-
web-app/package-lock.json | 104 ++++++++++++++++++
web-app/package.json | 7 +-
web-app/src/app.css | 4 +
web-app/src/app.html | 16 +++
.../src/lib/components/WebsiteEditor.svelte | 28 +++--
.../src/routes/(authenticated)/+page.svelte | 2 +-
.../(authenticated)/account/+page.svelte | 18 +--
.../website/[websiteId]/+page.svelte | 4 +-
.../website/[websiteId]/articles/+page.svelte | 2 +-
.../articles/[articleId]/+page.svelte | 4 +-
web-app/src/routes/+layout.svelte | 5 +-
12 files changed, 171 insertions(+), 25 deletions(-)
diff --git a/web-app/README.md b/web-app/README.md
index 5bef35f..756f04c 100644
--- a/web-app/README.md
+++ b/web-app/README.md
@@ -1 +1 @@
-# web-app
\ No newline at end of file
+# web-app
diff --git a/web-app/package-lock.json b/web-app/package-lock.json
index dd45dd8..3f011a7 100644
--- a/web-app/package-lock.json
+++ b/web-app/package-lock.json
@@ -7,11 +7,16 @@
"": {
"name": "web-app",
"version": "0.0.1",
+ "dependencies": {
+ "highlight.js": "^11.10.0",
+ "markdown-it": "^14.1.0"
+ },
"devDependencies": {
"@sveltejs/adapter-auto": "^3.0.0",
"@sveltejs/adapter-node": "^5.2.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "@types/markdown-it": "^14.1.2",
"@types/node": "^22.0.0",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
@@ -1022,6 +1027,31 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/@types/node": {
"version": "22.0.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.0.0.tgz",
@@ -1109,6 +1139,12 @@
"node": ">= 8"
}
},
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "license": "Python-2.0"
+ },
"node_modules/aria-query": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
@@ -1349,6 +1385,18 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/es6-promise": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz",
@@ -1551,6 +1599,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/highlight.js": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz",
+ "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/import-meta-resolve": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
@@ -1719,6 +1776,15 @@
"node": ">=6"
}
},
+ "node_modules/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
+ "license": "MIT",
+ "dependencies": {
+ "uc.micro": "^2.0.0"
+ }
+ },
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
@@ -1743,6 +1809,29 @@
"@jridgewell/sourcemap-codec": "^1.5.0"
}
},
+ "node_modules/markdown-it": {
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1",
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
+ },
+ "bin": {
+ "markdown-it": "bin/markdown-it.mjs"
+ }
+ },
+ "node_modules/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
+ "license": "MIT"
+ },
"node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -1992,6 +2081,15 @@
"svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
}
},
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/readdirp": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
@@ -2470,6 +2568,12 @@
"node": ">=14.17"
}
},
+ "node_modules/uc.micro": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
+ "license": "MIT"
+ },
"node_modules/undici-types": {
"version": "6.11.1",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.11.1.tgz",
diff --git a/web-app/package.json b/web-app/package.json
index 7b88ed7..9d981ed 100644
--- a/web-app/package.json
+++ b/web-app/package.json
@@ -16,6 +16,7 @@
"@sveltejs/adapter-node": "^5.2.0",
"@sveltejs/kit": "^2.0.0",
"@sveltejs/vite-plugin-svelte": "^3.0.0",
+ "@types/markdown-it": "^14.1.2",
"@types/node": "^22.0.0",
"prettier": "^3.1.1",
"prettier-plugin-svelte": "^3.1.2",
@@ -24,5 +25,9 @@
"typescript": "^5.0.0",
"vite": "^5.0.3"
},
- "type": "module"
+ "type": "module",
+ "dependencies": {
+ "highlight.js": "^11.10.0",
+ "markdown-it": "^14.1.0"
+ }
}
diff --git a/web-app/src/app.css b/web-app/src/app.css
index 78287ea..ebfe5c9 100644
--- a/web-app/src/app.css
+++ b/web-app/src/app.css
@@ -86,6 +86,10 @@ select {
background-color: var(--bg-primary);
}
+textarea {
+ resize: vertical;
+}
+
a {
color: var(--color-accent);
}
diff --git a/web-app/src/app.html b/web-app/src/app.html
index 84ffad1..16a0cf7 100644
--- a/web-app/src/app.html
+++ b/web-app/src/app.html
@@ -4,6 +4,22 @@
+
+
%sveltekit.head%
diff --git a/web-app/src/lib/components/WebsiteEditor.svelte b/web-app/src/lib/components/WebsiteEditor.svelte
index 4b6b593..f5fd048 100644
--- a/web-app/src/lib/components/WebsiteEditor.svelte
+++ b/web-app/src/lib/components/WebsiteEditor.svelte
@@ -1,5 +1,7 @@
@@ -21,22 +37,18 @@
- {@html previewContent}
+ {@html md.render(previewContent)}
diff --git a/web-app/src/routes/(authenticated)/+page.svelte b/web-app/src/routes/(authenticated)/+page.svelte
index 3cb29a0..416fff8 100644
--- a/web-app/src/routes/(authenticated)/+page.svelte
+++ b/web-app/src/routes/(authenticated)/+page.svelte
@@ -79,7 +79,7 @@
- {#each data.websites as { id, content_type, title, created_at }}
+ {#each data.websites as { id, content_type, title, created_at } (id)}
{title}
diff --git a/web-app/src/routes/(authenticated)/account/+page.svelte b/web-app/src/routes/(authenticated)/account/+page.svelte
index 8c5fb3f..0c6e47b 100644
--- a/web-app/src/routes/(authenticated)/account/+page.svelte
+++ b/web-app/src/routes/(authenticated)/account/+page.svelte
@@ -11,14 +11,16 @@
Overview
-
- Username:
- {data.user.username}
-
-
- ID:
- {data.user.id}
-
+
+ -
+ Id:
+ {data.user.id}
+
+ -
+ Username:
+ {data.user.username}
+
+
diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte
index 8fde115..29972d5 100644
--- a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte
+++ b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte
@@ -98,7 +98,7 @@
>
@@ -119,7 +119,7 @@
>
diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/+page.svelte b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/+page.svelte
index 95b63c2..89522fa 100644
--- a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/+page.svelte
+++ b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/+page.svelte
@@ -68,7 +68,7 @@
- {#each data.articles as { id, title }}
+ {#each data.articles as { id, title } (id)}
{title}
diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.svelte b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.svelte
index 713eb8e..aea77df 100644
--- a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.svelte
+++ b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.svelte
@@ -32,7 +32,7 @@
diff --git a/web-app/src/routes/+layout.svelte b/web-app/src/routes/+layout.svelte
index 59d551f..3c404cc 100644
--- a/web-app/src/routes/+layout.svelte
+++ b/web-app/src/routes/+layout.svelte
@@ -67,8 +67,9 @@
.editor {
inline-size: min(100% - 2rem, 1536px);
block-size: calc(100vh - 7rem);
- border: var(--border-primary);
- display: flex;
+ border-block-start: var(--border-primary);
+ display: grid;
+ grid-template-columns: 1fr 1fr;
padding-block: 0;
}