From 24d81a8e4df0fe34cb7df7ccc7a61cb415481091 Mon Sep 17 00:00:00 2001 From: thiloho <123883702+thiloho@users.noreply.github.com> Date: Sat, 11 Jan 2025 20:59:36 +0100 Subject: [PATCH] Allow removing images and wrap tables with scroll container --- flake.nix | 4 +-- nix/deploy/prod/default.nix | 2 +- nix/module.nix | 1 + web-app/src/lib/utils.ts | 13 ++++++++-- .../website/[websiteId]/+page.server.ts | 26 +++++++++++++++++++ .../website/[websiteId]/+page.svelte | 14 ++++++++++ .../articles/[articleId]/+page.server.ts | 13 ++++++++++ .../articles/[articleId]/+page.svelte | 7 +++++ 8 files changed, 75 insertions(+), 5 deletions(-) diff --git a/flake.nix b/flake.nix index 5936647..303b6e1 100644 --- a/flake.nix +++ b/flake.nix @@ -32,7 +32,7 @@ shellHook = '' alias dbmate="${pkgs.dbmate}/bin/dbmate --no-dump-schema --url ${dbUrl "postgres"}?sslmode=disable" alias formatsql="${pkgs.pgformatter}/bin/pg_format -s 2 -f 2 -U 2 -i db/migrations/*.sql" - alias dbconnect="${pkgs.postgresql_16}/bin/psql ${dbUrl "postgres"}" + alias dbconnect="${pkgs.postgresql}/bin/psql ${dbUrl "postgres"}" ''; }; web = pkgs.mkShell { @@ -76,7 +76,7 @@ jwtSecret = "BMlgCY9fEzmf7jhQpNnxlS6TM8E6xk2vS08C3ukm5LM2aTooaF5PfxT3o2K9uKzq"; in "${pkgs.writeShellScriptBin "api-setup" '' - psql ${dbUrl "postgres"} \ + ${pkgs.postgresql}/bin/psql ${dbUrl "postgres"} \ -c "ALTER DATABASE archtika SET \"app.jwt_secret\" TO '${jwtSecret}'" \ -c "ALTER DATABASE archtika SET \"app.website_max_storage_size\" TO ${toString settings.maxStorage}" \ -c "ALTER DATABASE archtika SET \"app.website_max_number_user\" TO ${toString settings.maxWebsites}" diff --git a/nix/deploy/prod/default.nix b/nix/deploy/prod/default.nix index 69984d4..5e0cfd5 100644 --- a/nix/deploy/prod/default.nix +++ b/nix/deploy/prod/default.nix @@ -9,7 +9,7 @@ in ../../module.nix ]; - networking.hostName = "archtika-qs"; + networking.hostName = "archtika-demo"; services.archtika = { enable = true; diff --git a/nix/module.nix b/nix/module.nix index f5e17d6..9397df2 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -240,6 +240,7 @@ in }; serviceConfig = { ReadWritePaths = [ "/var/www/archtika-websites" ]; + SystemCallFilter = [ "@system-service" ]; }; }; diff --git a/web-app/src/lib/utils.ts b/web-app/src/lib/utils.ts index d8b3f36..f7d0192 100644 --- a/web-app/src/lib/utils.ts +++ b/web-app/src/lib/utils.ts @@ -1,5 +1,5 @@ -import { Marked } from "marked"; -import type { Renderer, Token } from "marked"; +import { Marked, Renderer } from "marked"; +import type { Token } from "marked"; import { markedHighlight } from "marked-highlight"; import hljs from "highlight.js"; import DOMPurify from "isomorphic-dompurify"; @@ -40,6 +40,7 @@ const slugify = (string: string) => { const createMarkdownParser = (showToc = true) => { const marked = new Marked(); + const renderer = new Renderer(); marked.use({ async: false, @@ -58,6 +59,14 @@ const createMarkdownParser = (showToc = true) => { }) ); + marked.use({ + renderer: { + table(...args) { + return `
${renderer.table.apply(this, args)}
`; + } + } + }); + const gfmHeadingId = ({ prefix = "", showToc = true } = {}) => { const headings: { text: string; level: number; id: string }[] = []; const sectionStack: { level: number; id: string }[] = []; diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.server.ts b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.server.ts index a199a04..b34f84d 100644 --- a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.server.ts +++ b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.server.ts @@ -72,6 +72,19 @@ export const actions: Actions = { } ); }, + removeFavicon: async ({ fetch, params }) => { + return await apiRequest( + fetch, + `${API_BASE_PREFIX}/settings?website_id=eq.${params.websiteId}`, + "PATCH", + { + body: { + favicon_image: null + }, + successMessage: "Successfully removed favicon" + } + ); + }, updateHeader: async ({ request, fetch, params }) => { const data = await request.formData(); const logoImage = data.get("logo-image") as File; @@ -110,6 +123,19 @@ export const actions: Actions = { } ); }, + removeLogoImage: async ({ fetch, params }) => { + return await apiRequest( + fetch, + `${API_BASE_PREFIX}/header?website_id=eq.${params.websiteId}`, + "PATCH", + { + body: { + logo_image: null + }, + successMessage: "Successfully removed logo image" + } + ); + }, updateHome: async ({ request, fetch, params }) => { const data = await request.formData(); diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte index efd156d..01e3a1d 100644 --- a/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte +++ b/web-app/src/routes/(authenticated)/website/[websiteId]/+page.svelte @@ -91,6 +91,13 @@ src={`${data.API_BASE_PREFIX}/rpc/retrieve_file?id=${data.globalSettings.favicon_image}`} alt="" /> +
+ +
{/if} @@ -138,6 +145,13 @@ src={`${data.API_BASE_PREFIX}/rpc/retrieve_file?id=${data.header.logo_image}`} alt="" /> +
+ +
{/if} diff --git a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.server.ts b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.server.ts index dc906da..595c32a 100644 --- a/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.server.ts +++ b/web-app/src/routes/(authenticated)/website/[websiteId]/articles/[articleId]/+page.server.ts @@ -72,6 +72,19 @@ export const actions: Actions = { } ); }, + removeCoverImage: async ({ fetch, params }) => { + return await apiRequest( + fetch, + `${API_BASE_PREFIX}/article?id=eq.${params.articleId}`, + "PATCH", + { + body: { + cover_image: null + }, + successMessage: "Successfully removed cover image" + } + ); + }, pasteImage: async ({ request, fetch, params }) => { const data = await request.formData(); const file = data.get("file") as File; 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 0e37219..465744a 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 @@ -107,6 +107,13 @@ src={`${data.API_BASE_PREFIX}/rpc/retrieve_file?id=${data.article.cover_image}`} alt="" /> +
+ +
{/if}