From 2ed60ce856f3f4021f13a46cb8bf53d219d55872 Mon Sep 17 00:00:00 2001 From: Brandon Chang Date: Wed, 27 Jul 2022 22:58:50 -0400 Subject: [PATCH 1/5] sponsors --- src/routes/[lang=languageCode]/index.svelte | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/routes/[lang=languageCode]/index.svelte b/src/routes/[lang=languageCode]/index.svelte index 7185d28..a21613a 100644 --- a/src/routes/[lang=languageCode]/index.svelte +++ b/src/routes/[lang=languageCode]/index.svelte @@ -6,7 +6,6 @@ import Column from '$components/layout/Column.svelte'; import Row from '$components/layout/Row.svelte'; import Link from '$components/Link.svelte'; - import WideCard from '$components/WideCard.svelte'; import ArticleCarousel from '$components/ArticleCarousel.svelte'; import Image from '$components/Image.svelte'; import InteractiveEditor from '$components/InteractiveEditor/InteractiveEditor.svelte'; @@ -134,10 +133,10 @@ - - - - - - - +
+ + + + + +
From 4b2060d8c1eee91c5454a2560ac160e10613a807 Mon Sep 17 00:00:00 2001 From: Brandon Chang Date: Sun, 7 Aug 2022 20:01:46 -0700 Subject: [PATCH 2/5] endpoint rename --- package-lock.json | 198 +++++++++++++++++++----- package.json | 1 + src/lib/providers/directusProvider.ts | 80 ++++++++++ src/routes/[lang=languageCode]/index.ts | 12 +- src/routes/[lang=languageCode]/news.ts | 9 +- src/routes/index.ts | 2 +- svelte.config.js | 6 +- 7 files changed, 259 insertions(+), 49 deletions(-) create mode 100644 src/lib/providers/directusProvider.ts diff --git a/package-lock.json b/package-lock.json index 374d0d4..4b8be2e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "hello-sveltekit", "version": "0.0.1", "dependencies": { + "@directus/sdk": "^10.1.1", "accept-language-parser": "^1.5.0", "cookie": "^0.4.1", "rss-parser": "^3.12.0", @@ -425,6 +426,14 @@ "integrity": "sha512-B1/plF62pt+H2IJHvApK8fdOJAVsvojvacuac8x8s+JIyqbropMyqNqHTKLm3YD8ZFLGwYeFTudU+PQ7vGvBdA==", "dev": true }, + "node_modules/@directus/sdk": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@directus/sdk/-/sdk-10.1.1.tgz", + "integrity": "sha512-b3QHLBSyRLp5ji2b2MfFRDveoSqhZyJ0+ZU8t6HYVMLnIYEVw2zsqA1Iwvjc1YV7zH6D0xJ4NifIxwApvxlUvQ==", + "dependencies": { + "axios": "^0.27.2" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -765,12 +774,12 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.0.0-next.372", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.372.tgz", - "integrity": "sha512-pcnDfV8YQwj7d/SCaKWT7yPBrmgkPH9Dc4UIeX8yTLXDu8IPzI5kukEOy4xf6LjyJsuSGPy1Ch91ULugtVIdAQ==", + "version": "1.0.0-next.396", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.396.tgz", + "integrity": "sha512-bKFpuzp9QxPkOIOEIeNeedvxEMORNqBPxUmoJXDP/Se7MrSfcxYiamjBcKrG+bgGNWmV39nD3EvUox+CXno/Ig==", "dev": true, "dependencies": { - "@sveltejs/vite-plugin-svelte": "1.0.0-next.49", + "@sveltejs/vite-plugin-svelte": "^1.0.1", "chokidar": "^3.5.3", "sade": "^1.8.1" }, @@ -782,29 +791,29 @@ }, "peerDependencies": { "svelte": "^3.44.0", - "vite": "^2.9.10" + "vite": "^3.0.0" } }, - "node_modules/@sveltejs/kit/node_modules/@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.49", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz", - "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==", + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz", + "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^4.2.1", "debug": "^4.3.4", "deepmerge": "^4.2.2", - "kleur": "^4.1.4", + "kleur": "^4.1.5", "magic-string": "^0.26.2", "svelte-hmr": "^0.14.12" }, "engines": { - "node": "^14.13.1 || >= 16" + "node": "^14.18.0 || >= 16" }, "peerDependencies": { "diff-match-patch": "^1.0.5", "svelte": "^3.44.0", - "vite": "^2.9.0" + "vite": "^3.0.0" }, "peerDependenciesMeta": { "diff-match-patch": { @@ -1205,6 +1214,20 @@ "node": ">=8" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "node_modules/babel-plugin-precompile-intl": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/babel-plugin-precompile-intl/-/babel-plugin-precompile-intl-0.5.1.tgz", @@ -1412,6 +1435,17 @@ "color-support": "bin.js" } }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1523,6 +1557,14 @@ "node": ">=0.10.0" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -2319,7 +2361,6 @@ "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true, "funding": [ { "type": "individual", @@ -2335,6 +2376,19 @@ } } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/form-urlencoded": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/form-urlencoded/-/form-urlencoded-2.0.9.tgz", @@ -2968,6 +3022,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -4703,6 +4776,14 @@ "integrity": "sha512-B1/plF62pt+H2IJHvApK8fdOJAVsvojvacuac8x8s+JIyqbropMyqNqHTKLm3YD8ZFLGwYeFTudU+PQ7vGvBdA==", "dev": true }, + "@directus/sdk": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@directus/sdk/-/sdk-10.1.1.tgz", + "integrity": "sha512-b3QHLBSyRLp5ji2b2MfFRDveoSqhZyJ0+ZU8t6HYVMLnIYEVw2zsqA1Iwvjc1YV7zH6D0xJ4NifIxwApvxlUvQ==", + "requires": { + "axios": "^0.27.2" + } + }, "@eslint/eslintrc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", @@ -4995,30 +5076,28 @@ } }, "@sveltejs/kit": { - "version": "1.0.0-next.372", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.372.tgz", - "integrity": "sha512-pcnDfV8YQwj7d/SCaKWT7yPBrmgkPH9Dc4UIeX8yTLXDu8IPzI5kukEOy4xf6LjyJsuSGPy1Ch91ULugtVIdAQ==", + "version": "1.0.0-next.396", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.396.tgz", + "integrity": "sha512-bKFpuzp9QxPkOIOEIeNeedvxEMORNqBPxUmoJXDP/Se7MrSfcxYiamjBcKrG+bgGNWmV39nD3EvUox+CXno/Ig==", "dev": true, "requires": { - "@sveltejs/vite-plugin-svelte": "1.0.0-next.49", + "@sveltejs/vite-plugin-svelte": "^1.0.1", "chokidar": "^3.5.3", "sade": "^1.8.1" - }, - "dependencies": { - "@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.49", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.49.tgz", - "integrity": "sha512-AKh0Ka8EDgidnxWUs8Hh2iZLZovkETkefO99XxZ4sW4WGJ7VFeBx5kH/NIIGlaNHLcrIvK3CK0HkZwC3Cici0A==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "deepmerge": "^4.2.2", - "kleur": "^4.1.4", - "magic-string": "^0.26.2", - "svelte-hmr": "^0.14.12" - } - } + } + }, + "@sveltejs/vite-plugin-svelte": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.1.tgz", + "integrity": "sha512-PorCgUounn0VXcpeJu+hOweZODKmGuLHsLomwqSj+p26IwjjGffmYQfVHtiTWq+NqaUuuHWWG7vPge6UFw4Aeg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.1", + "debug": "^4.3.4", + "deepmerge": "^4.2.2", + "kleur": "^4.1.5", + "magic-string": "^0.26.2", + "svelte-hmr": "^0.14.12" } }, "@types/accept-language-parser": { @@ -5289,6 +5368,20 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, "babel-plugin-precompile-intl": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/babel-plugin-precompile-intl/-/babel-plugin-precompile-intl-0.5.1.tgz", @@ -5426,6 +5519,14 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -5513,6 +5614,11 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -6025,8 +6131,17 @@ "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } }, "form-urlencoded": { "version": "2.0.9", @@ -6530,6 +6645,19 @@ "picomatch": "^2.3.1" } }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, "mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", diff --git a/package.json b/package.json index 09b963f..0194522 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ }, "type": "module", "dependencies": { + "@directus/sdk": "^10.1.1", "accept-language-parser": "^1.5.0", "cookie": "^0.4.1", "rss-parser": "^3.12.0", diff --git a/src/lib/providers/directusProvider.ts b/src/lib/providers/directusProvider.ts new file mode 100644 index 0000000..d8c11a5 --- /dev/null +++ b/src/lib/providers/directusProvider.ts @@ -0,0 +1,80 @@ +import { Directus } from '@directus/sdk'; + +type ResponseImage = { + id: string; + storage: string; + filename_disk: string; + filename_download: string; + title: string; + type: string; + folder: string | null; + uploaded_by: string | null; + uploaded_on: string | null; + modified_by: string | null; + modified_on: string | null; + charset: string | null; + filesize: number; + width: number; + height: number; + description: string | null; + metadata: Record | null; +}; + +type ResponseTranslatedFields = Array<{ languages_id: string } & T>; + +type ResponseContributor = { + full_name: string; + id: number; + sort: number | null; +}; + +type ResponsePost = { + id: number; + author: ResponseContributor; + image?: ResponseImage; + publish_date: string; + slug: string; + translations: ResponseTranslatedFields<{ title: string; body?: string }>; +}; + +type Schema = { + Posts: ResponsePost; +}; + +const HOST = 'https://ym36dcoe.directus.app'; + +export default class DirectusProvider { + private client: Directus; + + constructor() { + this.client = new Directus(HOST); + } + + async getPosts( + options: { limit: number; page: number } = { limit: 25, page: 1 } + ): Promise { + const posts = this.client.items('Posts'); + const responsePosts = await posts.readByQuery({ + fields: '*.*', + limit: options.limit, + page: options.page + }); + + console.log(responsePosts.data[0]); + + return responsePosts.data.map((post) => ({ + slug: post.slug, + publishedAt: post.publish_date, + title: 'hi', + image: post.image && `${HOST}/assets/${post.image.id}`, + body: this.getTranslatedFieldLanguage(post.translations, 'en-US') + })); + } + + getTranslatedFieldLanguage>( + languages: T, + language: string + ): T { + return languages.find((fields) => fields.languages_id === language); + } +} diff --git a/src/routes/[lang=languageCode]/index.ts b/src/routes/[lang=languageCode]/index.ts index 83d2148..e2fe50e 100644 --- a/src/routes/[lang=languageCode]/index.ts +++ b/src/routes/[lang=languageCode]/index.ts @@ -1,15 +1,15 @@ -import SanityProvider from '$lib/providers/sanityProvider'; +import DirectusProvider from '$lib/providers/directusProvider'; /** * Fetches RSS content from website and injects the content to the * homepage. This is for demonstration, not be shipped to prod */ -export async function get() { - const sanity = new SanityProvider(); - const posts = await sanity.getPosts(); - const sponsors = await sanity.getSponsors(); +export async function GET() { + const database = new DirectusProvider(); + const posts = await database.getPosts(); + // const sponsors = await sanity.getSponsors(); return { status: 200, - body: { posts, sponsors } + body: { posts } }; } diff --git a/src/routes/[lang=languageCode]/news.ts b/src/routes/[lang=languageCode]/news.ts index 3dc85e6..e2fe50e 100644 --- a/src/routes/[lang=languageCode]/news.ts +++ b/src/routes/[lang=languageCode]/news.ts @@ -1,12 +1,13 @@ -import SanityProvider from '$lib/providers/sanityProvider'; +import DirectusProvider from '$lib/providers/directusProvider'; /** * Fetches RSS content from website and injects the content to the * homepage. This is for demonstration, not be shipped to prod */ -export async function get() { - const sanity = new SanityProvider(); - const posts = await sanity.getPosts(); +export async function GET() { + const database = new DirectusProvider(); + const posts = await database.getPosts(); + // const sponsors = await sanity.getSponsors(); return { status: 200, body: { posts } diff --git a/src/routes/index.ts b/src/routes/index.ts index b2ae908..15d8c5d 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -3,7 +3,7 @@ import { base } from '$app/paths'; import type { RequestEvent, RequestHandlerOutput } from '@sveltejs/kit'; import { DEFAULT_LANGUAGE, SUPPORTED_LANGUAGES } from '$lib/languageConfig.js'; -export function get({ request }: RequestEvent): RequestHandlerOutput { +export function GET({ request }: RequestEvent): RequestHandlerOutput { const languageHeader = request.headers.get('Accept-Language'); // Default to english if no redirect headers provided let redirectLanguage = DEFAULT_LANGUAGE; diff --git a/svelte.config.js b/svelte.config.js index df60eeb..3663298 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -22,9 +22,9 @@ const config = { trailingSlash: 'always' }, - experimental: { - useVitePreprocess: true - } + // experimental: { + // useVitePreprocess: true + // } }; export default config; From d18d5d26f9eef59c2166e82016c163c1340f34ab Mon Sep 17 00:00:00 2001 From: Brandon Chang Date: Sun, 7 Aug 2022 20:22:08 -0700 Subject: [PATCH 3/5] translated fields --- src/index.d.ts | 5 +++++ src/lib/components/ArticleCard.svelte | 1 - src/lib/l18n.ts | 13 +++++++++++++ src/lib/languageConfig.js | 2 +- src/lib/providers/directusProvider.ts | 22 ++++++++++++---------- src/routes/[lang=languageCode]/index.ts | 1 - 6 files changed, 31 insertions(+), 13 deletions(-) create mode 100644 src/lib/l18n.ts diff --git a/src/index.d.ts b/src/index.d.ts index 78ef465..c516d48 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -7,6 +7,11 @@ interface ImportMeta { readonly env: ImportMetaEnv; } +type LocaleData = { + language: string | null; + region: string | null; +}; + type Post = { slug: string; publishedAt: string; diff --git a/src/lib/components/ArticleCard.svelte b/src/lib/components/ArticleCard.svelte index eca9c30..f6b47f5 100644 --- a/src/lib/components/ArticleCard.svelte +++ b/src/lib/components/ArticleCard.svelte @@ -13,7 +13,6 @@ }); -
{#if date} diff --git a/src/lib/l18n.ts b/src/lib/l18n.ts new file mode 100644 index 0000000..f33c8fd --- /dev/null +++ b/src/lib/l18n.ts @@ -0,0 +1,13 @@ +import { SUPPORTED_LANGUAGES } from '$lib/languageConfig'; + +export function parseLocaleData(locale: string): LocaleData { + const [language, region] = locale.split('-'); + if (!SUPPORTED_LANGUAGES.includes(language)) { + console.error(`Language "${language}" is not supported`); + } + + return { + language: language || null, + region: region || null + }; +} diff --git a/src/lib/languageConfig.js b/src/lib/languageConfig.js index 91de5ff..005e48f 100644 --- a/src/lib/languageConfig.js +++ b/src/lib/languageConfig.js @@ -1,3 +1,3 @@ -// This file is intentionally a js file, since it is used in the config file +// This file is intentionally a js file since it is used in the svelte.config.js file export const DEFAULT_LANGUAGE = 'en'; export const SUPPORTED_LANGUAGES = ['en', 'es']; diff --git a/src/lib/providers/directusProvider.ts b/src/lib/providers/directusProvider.ts index d8c11a5..7492571 100644 --- a/src/lib/providers/directusProvider.ts +++ b/src/lib/providers/directusProvider.ts @@ -60,21 +60,23 @@ export default class DirectusProvider { page: options.page }); - console.log(responsePosts.data[0]); - - return responsePosts.data.map((post) => ({ - slug: post.slug, - publishedAt: post.publish_date, - title: 'hi', - image: post.image && `${HOST}/assets/${post.image.id}`, - body: this.getTranslatedFieldLanguage(post.translations, 'en-US') - })); + return responsePosts.data.map((post) => { + // TODO: Return fields of current page's locale + const translations = this.getTranslatedFieldLanguage(post.translations, 'en-US'); + return { + slug: post.slug, + publishedAt: post.publish_date, + title: translations.title, + image: post.image && `${HOST}/assets/${post.image.id}`, + body: translations.body + }; + }); } getTranslatedFieldLanguage>( languages: T, language: string - ): T { + ): T[number] { return languages.find((fields) => fields.languages_id === language); } } diff --git a/src/routes/[lang=languageCode]/index.ts b/src/routes/[lang=languageCode]/index.ts index e2fe50e..ea2c6fe 100644 --- a/src/routes/[lang=languageCode]/index.ts +++ b/src/routes/[lang=languageCode]/index.ts @@ -7,7 +7,6 @@ import DirectusProvider from '$lib/providers/directusProvider'; export async function GET() { const database = new DirectusProvider(); const posts = await database.getPosts(); - // const sponsors = await sanity.getSponsors(); return { status: 200, body: { posts } From ce8ea3becb4638793c9d9b4b16a0210d6e89d275 Mon Sep 17 00:00:00 2001 From: Brandon Chang Date: Tue, 16 Aug 2022 08:07:46 -0700 Subject: [PATCH 4/5] wip --- locales/en.json5 | 2 +- package-lock.json | 202 ++++++++++++++++-- package.json | 2 + src/index.d.ts | 5 - src/lib/components/ArticleCard.svelte | 7 +- src/lib/components/ArticleCarousel.svelte | 6 +- src/lib/components/ScaledGraphic.svelte | 18 ++ src/lib/components/Snippet.svelte | 10 - src/lib/components/SponsorList.svelte | 60 ++++-- src/lib/l18n.ts | 13 -- src/lib/providers/directusProvider.ts | 21 +- src/routes/[lang=languageCode]/index.svelte | 8 +- .../[lang=languageCode]/news/[slug].svelte | 19 ++ 13 files changed, 305 insertions(+), 68 deletions(-) create mode 100644 src/lib/components/ScaledGraphic.svelte delete mode 100644 src/lib/components/Snippet.svelte delete mode 100644 src/lib/l18n.ts create mode 100644 src/routes/[lang=languageCode]/news/[slug].svelte diff --git a/locales/en.json5 b/locales/en.json5 index c043f16..64435e6 100644 --- a/locales/en.json5 +++ b/locales/en.json5 @@ -1,7 +1,7 @@ // The localization file for all text on the site { global: { - download: 'Download for free', + download: 'Download', learn_more: 'Learn more' }, nav: { diff --git a/package-lock.json b/package-lock.json index 4b8be2e..3e9981d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "accept-language-parser": "^1.5.0", "cookie": "^0.4.1", "rss-parser": "^3.12.0", + "sanitize-html": "^2.7.1", "svelte-intl-precompile": "^0.11.1" }, "devDependencies": { @@ -25,6 +26,7 @@ "@types/accept-language-parser": "^1.5.3", "@types/cookie": "^0.5.1", "@types/feedparser": "^2.2.5", + "@types/sanitize-html": "^2.6.2", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.0", "eslint": "^8.16.0", @@ -861,6 +863,15 @@ "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", "dev": true }, + "node_modules/@types/sanitize-html": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.6.2.tgz", + "integrity": "sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==", + "dev": true, + "dependencies": { + "htmlparser2": "^6.0.0" + } + }, "node_modules/@types/sass": { "version": "1.43.1", "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", @@ -1552,7 +1563,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -1613,6 +1623,57 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.189", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.189.tgz", @@ -2005,7 +2066,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "engines": { "node": ">=10" }, @@ -2663,6 +2723,24 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -3150,7 +3228,6 @@ "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3298,6 +3375,11 @@ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3372,7 +3454,6 @@ "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, "funding": [ { "type": "opencollective", @@ -3731,6 +3812,27 @@ "rimraf": "bin.js" } }, + "node_modules/sanitize-html": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.1.tgz", + "integrity": "sha512-oOpe8l4J8CaBk++2haoN5yNI5beekjuHv3JRPKUx/7h40Rdr85pemn4NkvUB3TcBP7yjat574sPlcMAyv4UQig==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sass": { "version": "1.53.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", @@ -3855,7 +3957,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5140,6 +5241,15 @@ "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", "dev": true }, + "@types/sanitize-html": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.6.2.tgz", + "integrity": "sha512-7Lu2zMQnmHHQGKXVvCOhSziQMpa+R2hMHFefzbYoYMHeaXR0uXqNeOc3JeQQQ8/6Xa2Br/P1IQTLzV09xxAiUQ==", + "dev": true, + "requires": { + "htmlparser2": "^6.0.0" + } + }, "@types/sass": { "version": "1.43.1", "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", @@ -5611,8 +5721,7 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" }, "delayed-stream": { "version": "1.0.0", @@ -5655,6 +5764,39 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, "electron-to-chromium": { "version": "1.4.189", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.189.tgz", @@ -5853,8 +5995,7 @@ "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { "version": "8.19.0", @@ -6375,6 +6516,17 @@ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -6739,8 +6891,7 @@ "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" }, "natural-compare": { "version": "1.4.0", @@ -6845,6 +6996,11 @@ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==", "dev": true }, + "parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -6895,7 +7051,6 @@ "version": "8.4.14", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, "requires": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", @@ -7136,6 +7291,26 @@ } } }, + "sanitize-html": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.7.1.tgz", + "integrity": "sha512-oOpe8l4J8CaBk++2haoN5yNI5beekjuHv3JRPKUx/7h40Rdr85pemn4NkvUB3TcBP7yjat574sPlcMAyv4UQig==", + "requires": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^6.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" + } + } + }, "sass": { "version": "1.53.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", @@ -7221,8 +7396,7 @@ "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "sourcemap-codec": { "version": "1.4.8", diff --git a/package.json b/package.json index 0194522..afc0b85 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@types/accept-language-parser": "^1.5.3", "@types/cookie": "^0.5.1", "@types/feedparser": "^2.2.5", + "@types/sanitize-html": "^2.6.2", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.0", "eslint": "^8.16.0", @@ -45,6 +46,7 @@ "accept-language-parser": "^1.5.0", "cookie": "^0.4.1", "rss-parser": "^3.12.0", + "sanitize-html": "^2.7.1", "svelte-intl-precompile": "^0.11.1" } } diff --git a/src/index.d.ts b/src/index.d.ts index c516d48..78ef465 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -7,11 +7,6 @@ interface ImportMeta { readonly env: ImportMetaEnv; } -type LocaleData = { - language: string | null; - region: string | null; -}; - type Post = { slug: string; publishedAt: string; diff --git a/src/lib/components/ArticleCard.svelte b/src/lib/components/ArticleCard.svelte index f6b47f5..fec3f84 100644 --- a/src/lib/components/ArticleCard.svelte +++ b/src/lib/components/ArticleCard.svelte @@ -1,10 +1,9 @@ diff --git a/src/lib/components/ScaledGraphic.svelte b/src/lib/components/ScaledGraphic.svelte new file mode 100644 index 0000000..b205deb --- /dev/null +++ b/src/lib/components/ScaledGraphic.svelte @@ -0,0 +1,18 @@ + + +
+ +
+ + diff --git a/src/lib/components/Snippet.svelte b/src/lib/components/Snippet.svelte deleted file mode 100644 index 17ffff3..0000000 --- a/src/lib/components/Snippet.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - -

- {plainText} -

diff --git a/src/lib/components/SponsorList.svelte b/src/lib/components/SponsorList.svelte index 1ae9795..39a4c7d 100644 --- a/src/lib/components/SponsorList.svelte +++ b/src/lib/components/SponsorList.svelte @@ -1,27 +1,63 @@

Sponsors

- {#each sponsors as sponsor} - - {/each} +