diff --git a/404/index.page.tsx b/404/index.page.tsx new file mode 100644 index 000000000..f75958d87 --- /dev/null +++ b/404/index.page.tsx @@ -0,0 +1,50 @@ +export const layout = "raw.tsx"; +export const url = "/404"; +import { sidebar } from "../runtime/_data.ts"; + +const styles = /*css*/ ` +#content nav { + padding-inline: 0; +} +#content nav > ul { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); + gap: 1.5rem; +} + +#content nav h2 { + width: 100%; + margin-inline: 0; + margin-block-start: 0; +} + +#content nav :where(li, a, h2, button) { + padding-inline-start: 0; + text-wrap: balance; +}`; + +export default function Page(props: Lume.Data, helpers: Lume.Helpers) { + return ( +
+ +
+

+ Sorry, couldn't find that page +

+

+ Maybe one of these links is what you're looking for? +

+
+ + +
+ ); +} diff --git a/_config.ts b/_config.ts index 4a39553c1..9f7f34a50 100644 --- a/_config.ts +++ b/_config.ts @@ -1,24 +1,24 @@ import "@std/dotenv/load"; import lume from "lume/mod.ts"; +import checkUrls from "lume/plugins/check_urls.ts"; import esbuild from "lume/plugins/esbuild.ts"; import jsx from "lume/plugins/jsx_preact.ts"; +import postcss from "lume/plugins/postcss.ts"; import prism from "lume/plugins/prism.ts"; import redirects from "lume/plugins/redirects.ts"; import search from "lume/plugins/search.ts"; import sitemap from "lume/plugins/sitemap.ts"; -import postcss from "lume/plugins/postcss.ts"; -import checkUrls from "lume/plugins/check_urls.ts"; import tw from "tailwindcss"; import tailwindConfig from "./tailwind.config.js"; import Prism from "npm:prismjs@1.29.0"; -import "npm:prismjs@1.29.0/components/prism-typescript.js"; +import "npm:prismjs@1.29.0/components/prism-bash.js"; import "npm:prismjs@1.29.0/components/prism-diff.js"; import "npm:prismjs@1.29.0/components/prism-json.js"; -import "npm:prismjs@1.29.0/components/prism-bash.js"; import "npm:prismjs@1.29.0/components/prism-json5.js"; +import "npm:prismjs@1.29.0/components/prism-typescript.js"; Prism.languages.jsonc = Prism.languages.json5; @@ -43,11 +43,11 @@ import { } from "./orama.ts"; import apiDocumentContentTypeMiddleware from "./middleware/apiDocContentType.ts"; +import createRoutingMiddleware from "./middleware/functionRoutes.ts"; +import createGAMiddleware from "./middleware/googleAnalytics.ts"; import redirectsMiddleware, { toFileAndInMemory, } from "./middleware/redirects.ts"; -import createRoutingMiddleware from "./middleware/functionRoutes.ts"; -import createGAMiddleware from "./middleware/googleAnalytics.ts"; const site = lume( { @@ -62,6 +62,7 @@ const site = lume( }), apiDocumentContentTypeMiddleware, ], + page404: "/404", }, }, { @@ -280,13 +281,13 @@ site.ignore( ); site.scopedUpdates((path) => path == "/overrides.css"); -site.use(checkUrls({ - external: false, // Set to true to check external links - output: "_broken_links.json", - ignore: [ - "https://www.googletagmanager.com", - ], -})); +site.use( + checkUrls({ + external: false, // Set to true to check external links + output: "_broken_links.json", + ignore: ["https://www.googletagmanager.com"], + }), +); site.remoteFile( "orama.css", diff --git a/middleware/redirects.ts b/middleware/redirects.ts index 926469a42..1f582dd05 100644 --- a/middleware/redirects.ts +++ b/middleware/redirects.ts @@ -1,9 +1,9 @@ +import { existsSync } from "@std/fs"; +import { Page } from "lume/core/file.ts"; import type { RequestHandler } from "lume/core/server.ts"; +import type Site from "lume/core/site.ts"; import GO_LINKS from "../go.json" with { type: "json" }; import REDIRECT_LINKS from "../oldurls.json" with { type: "json" }; -import { existsSync } from "@std/fs"; -import type Site from "lume/core/site.ts"; -import { Page } from "lume/core/file.ts"; type Status = 301 | 302 | 307 | 308; type Redirect = [string, string, Status]; @@ -45,6 +45,7 @@ export default async function redirectsMiddleware( } else { res = await next(req); } + return res; } catch (e) { res = new Response("Internal Server Error", { diff --git a/tailwind.config.js b/tailwind.config.js index e65ce6e11..d4ac659af 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -2,7 +2,7 @@ /** @type {import('npm:tailwindcss').Config} */ export default { content: [ - "{by-example,deploy,_components,_includes,runtime,static,subhosting}/**/*.{md,ts,tsx}", + "{by-example,deploy,_components,_includes,runtime,static,subhosting,404}/**/*.{md,ts,tsx}", "*.{ts,tsx}", ], corePlugins: {