diff --git a/package-lock.json b/package-lock.json index 2fecd27..3c05d20 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "markdown-it": "^14.0.0", "markdown-it-attrs": "^4.1.6", "memfs": "^4.11.1", + "mime-types": "^2.1.35", "multer": "^1.4.5-lts.1", "ollama": "^0.5.8", "playwright": "*", @@ -49,6 +50,7 @@ "@types/luxon": "^3.4.2", "@types/markdown-it": "^14.1.1", "@types/markdown-it-attrs": "^4.1.3", + "@types/mime-types": "^2.1.4", "@types/multer": "^1.4.11", "@types/node": "^20.0.0", "ts-node": "^10.9.2", @@ -2829,6 +2831,12 @@ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, + "node_modules/@types/mime-types": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz", + "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==", + "dev": true + }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", diff --git a/package.json b/package.json index 27197dd..44d3aed 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "markdown-it": "^14.0.0", "markdown-it-attrs": "^4.1.6", "memfs": "^4.11.1", + "mime-types": "^2.1.35", "multer": "^1.4.5-lts.1", "ollama": "^0.5.8", "playwright": "*", @@ -56,6 +57,7 @@ "@types/luxon": "^3.4.2", "@types/markdown-it": "^14.1.1", "@types/markdown-it-attrs": "^4.1.3", + "@types/mime-types": "^2.1.4", "@types/multer": "^1.4.11", "@types/node": "^20.0.0", "ts-node": "^10.9.2", diff --git a/src/components/Content.astro b/src/components/Content.astro index 8554570..856a8af 100644 --- a/src/components/Content.astro +++ b/src/components/Content.astro @@ -14,7 +14,8 @@ const { editToken, text } = Astro.props; .content { margin-bottom: 2rem; border: 1px solid rgba(var(--accent-light), 25%); - background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%)); + /* background: linear-gradient(rgba(var(--accent-dark), 66%), rgba(var(--accent-dark), 33%)); */ + background-color: #13151a; padding: 0.5rem; border-radius: 8px; font-family: "Urbanist", sans-serif; @@ -23,4 +24,10 @@ const { editToken, text } = Astro.props; } a, a:link, a:visited { text-decoration: none; color: #fff } a:hover { text-decoration: underline; color: #fff } + + + \ No newline at end of file diff --git a/src/config.ts b/src/config.ts index 25231a6..4a78938 100644 --- a/src/config.ts +++ b/src/config.ts @@ -78,8 +78,8 @@ export const getWebhookPort = () => env.WEBHOOK_PORT ? parseInt(env.WEBHOOK_PORT export const getSquidexAppName = () => env.SQUIDEX_APP_NAME || undefined; export const getSquidexClientId = () => env.SQUIDEX_CLIENT_ID || undefined; export const getSquidexClientSecret = () => env.SQUIDEX_CLIENT_SECRET || undefined; -export const getSquidexEnvironment = () => env.SQUIDEX_ENVIRONMENT || undefined; -export const getSquidexPublicUrl = () => env.SQUIDEX_PUBLIC_URL || getSquidexEnvironment(); +export const getSquidexEnvironment = () => trimSlashes(env.SQUIDEX_ENVIRONMENT||'') || undefined; +export const getSquidexPublicUrl = () => trimSlashes(env.SQUIDEX_PUBLIC_URL||'') || getSquidexEnvironment(); export const config: Config = { // AmazonProductAdvertisingAPIAccessKey: getAmazonProductAdvertisingAPIAccessKey(), diff --git a/src/data/models/multis/Redirect.ts b/src/data/models/multis/Redirect.ts index 915be57..7fa6283 100644 --- a/src/data/models/multis/Redirect.ts +++ b/src/data/models/multis/Redirect.ts @@ -3,4 +3,5 @@ import type { NonLocalized } from "../../internals/NonLocalizedT"; export interface Redirect { prevSlug: NonLocalized, newContent: NonLocalized, + newContentSchema: NonLocalized<{ schemaName: string }[]>, } \ No newline at end of file diff --git a/src/lib/rendering.ts b/src/lib/rendering.ts index 804253d..3fa450f 100644 --- a/src/lib/rendering.ts +++ b/src/lib/rendering.ts @@ -1,6 +1,7 @@ import markdownIt from "markdown-it"; import markdownItAttrs from "markdown-it-attrs"; import vm from 'node:vm'; +import { config } from "../config"; export const md = markdownIt().use(markdownItAttrs, { }); @@ -67,9 +68,15 @@ const renderCodeblock = (lang: string, template: string, templateContext?: any) return template; } +const replaceSquidexAssetPathWithOwn = (html: string) => { + let re = new RegExp(`src\\s*=\\s*["']${config.squidexPublicUrl?.replaceAll(`/`, `\\/`).replaceAll(`.`, `\\.`)||''}\\/api\\/assets/${config.squidexAppName||''}/([\\w-\\.\\/]*)["']`, 'g'); + return html.replaceAll(re, `src="${config.siteUrl}/img/$1"`); +} + export const renderMarkdown = (template: string, templateContext?: any) => { // render code blocks inside of the Markdown template = renderCodeblock('markdown', template, templateContext); template = md.render(interpolateString(template, templateContext)); + template = replaceSquidexAssetPathWithOwn(template); return template; } \ No newline at end of file diff --git a/src/pages/[...routeLookup].astro b/src/pages/[...routeLookup].astro index 665d849..1ec9485 100644 --- a/src/pages/[...routeLookup].astro +++ b/src/pages/[...routeLookup].astro @@ -87,27 +87,24 @@ else { const redirectDto = await getRedirectsByPreviousSlug(routeLookup!); console.log("redirectDto:", redirectDto); if (redirectDto && redirectDto.items && redirectDto.items.length > 0) { - console.log("getting redirectReferencesDto for", SCHEMAS.REDIRECTS, redirectDto.items[0].id); + console.log("getting redirectReferencesDto for", SCHEMAS.REDIRECTS, redirectDto.items[0].data?.newContentSchema[locale]); + // let objectId = redirectDto.items[0].data.newContent[locale]; //next line crashes: - let redirectReferencesDto = await client.contents.getReferences({ schema: SCHEMAS.REDIRECTS, id: redirectDto.items[0].id }); - console.log("redirectReferencesDto:", redirectReferencesDto); + // let redirectReferencesDto = await client.contents.getReferences({ schema: SCHEMAS.REDIRECTS, id: redirectDto.items[0].id }); + let schemaName = redirectDto.items[0].data?.newContentSchema[locale][0].schemaName; + let whicheverDto = await client.contents.getContent({schema: schemaName, id: redirectDto.items[0].data?.newContent[locale][0]}); + // console.log("redirectReferencesDto:", redirectReferencesDto); // client.contents.getConten - // switch (redirectDto.items[0].data?.referenceSchema.iv) { - // case SCHEMAS.BRANDS: - // return Astro.rewrite(`/view/brands/${locale}/${objectId}`); - // case SCHEMAS.MARKETPLACES: - // return Astro.rewrite(`/view/marketplaces/${locale}/${objectId}`); - // case SCHEMAS.PAGES: - // return Astro.rewrite(`/view/pages/${locale}/${objectId}`); - // case SCHEMAS.PRODUCT_CATEGORIES: - // return Astro.rewrite(`/view/product-categories/${locale}/${objectId}`); - // case SCHEMAS.PRODUCTS: - // return Astro.rewrite(`/view/products/${locale}/${objectId}`); - // case SCHEMAS.SELLERS: - // return Astro.rewrite(`/view/sellers/${locale}/${objectId}`); - // } - // Astro.response.headers.set('Vary', 'Accept-Language'); - // return Astro.redirect(,303) + switch (schemaName) { + case SCHEMAS.BRANDS: + case SCHEMAS.MARKETPLACES: + case SCHEMAS.PAGES: + case SCHEMAS.PRODUCT_CATEGORIES: + case SCHEMAS.PRODUCTS: + case SCHEMAS.SELLERS: + Astro.response.headers.set('Vary', 'Accept-Language'); + return Astro.redirect(`/${whicheverDto.data.slug[locale]}`, 303); + } } return redirect404NotFound(); }