diff options
Move to Server Side Render with expressjs
Backend Rewritten in typescript
Signed-off-by: Marc Pervaz Boocha <mboocha@sudomsg.xyz>
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
new file: .editorconfig
modified: .gitignore
new file: Containerfile
renamed: favicon/icon.svg -> assets/favicon.svg
modified: assets/index.css
deleted: assets/index.js
deleted: assets/mandle.png
deleted: assets/sw.js
new file: assets/syntax.css
modified: deploy
deleted: eleventy.config.js
deleted: favicon/192.png
deleted: favicon/512.png
deleted: favicon/icon.ico
deleted: license
modified: package-lock.json
modified: package.json
deleted: src/_data/env.js
deleted: src/_data/metadata.js
deleted: src/_includes/base.njk
deleted: src/_includes/page.njk
deleted: src/_includes/post.njk
deleted: src/about.njk
deleted: src/blog.njk
new file: src/client/index.ts
deleted: src/gen/atom.njk
deleted: src/gen/error.njk
deleted: src/gen/feedjson.11ty.js
deleted: src/gen/gen.11tydata.js
deleted: src/gen/manifest.11ty.js
deleted: src/gen/metadata.11ty.js
deleted: src/gen/robot.njk
deleted: src/gen/sitemap.njk
deleted: src/index.njk
deleted: src/post/post.11tydata.js
new file: src/server/app.ts
new file: src/server/build.ts
new file: src/server/content/about.ts
new file: src/server/content/blog.ts
new file: src/server/content/feed.ts
new file: src/server/content/index.ts
new file: src/server/content/robots.ts
new file: src/server/content/sitemap.ts
new file: src/server/content/webmanifest.ts
new file: src/server/errHanadler.ts
new file: src/server/img.ts
new file: src/server/metadata.ts
new file: src/server/router.ts
new file: src/server/server.ts
new file: src/server/template/Base.ts
new file: src/server/template/Page.ts
new file: src/server/template/Post.ts
new file: src/server/template/atom.ts
new file: src/server/template/header.ts
new file: src/server/template/html.ts
new file: src/server/template/sitemap.ts
new file: src/server/template/syntax.ts
new file: src/server/template/table.ts
new file: src/server/template/vdom.ts
new file: src/server/template/xml.ts
new file: src/server/utils/createUrl.ts
new file: src/server/utils/curl.ts
new file: src/server/utils/isDefined.ts
new file: src/server/utils/isDevel.ts
new file: src/server/utils/relDir.ts
new file: src/server/utils/relUrl.ts
new file: src/server/utils/schema.ts
new file: src/server/utils/setStingRoute.ts
new file: src/server/utils/strHandler.ts
new file: src/worker/sw.ts
new file: src/worker/tsconfig.json
new file: tsconfig.json
Diffstat (limited to 'src/server/template/Post.ts')
-rw-r--r-- | src/server/template/Post.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/server/template/Post.ts b/src/server/template/Post.ts new file mode 100644 index 0000000..c348f8b --- /dev/null +++ b/src/server/template/Post.ts @@ -0,0 +1,48 @@ +import schema from "../utils/schema.js" +import metadata from "../metadata.js" +import Base, { content } from "./Base.js" +import h from "./header.js" +import slugify from "@sindresorhus/slugify" +import { c } from "./vdom.js" +import type { PageI } from "./Page.js" +import { article, small, time, span, a, p, div } from "./html.js" + +export var posts: ReturnType<typeof Post>[] = [] + +interface PostI extends Omit<PageI, "url"> { + title: string, + description: string, + date_pub: Date, + date_mod?: Date +} + +export default function Post<Type extends PostI>(data: Type): ReturnType<typeof Base<Type & {url: string;}>> { + var args = { + ...data, + content() { + var { date_mod, title, date_pub, description } = this + return c(article, { itemscope: true, itemtype: schema("BlogPosting") }, + c(h, { level: 1, itemprop: "headline" }, title), + c(small, {}, + ...(date_mod ? [ + c(time, { datetime: date_mod.toISOString(), itemprop: "dateModified" }, date_mod.toDateString()), + "- Modified " + ] : []), + c(time, { datetime: date_pub.toISOString(), itemprop: "datePublished" }, date_pub.toDateString()) + , " - ", + c(span, { itemprop: "author", itemscope: true, itemtype: schema("Person") }, + c(a, { href: metadata.author.url, rel: "author", itemprop: "url" }, + c(span, { itemprop: "name" }, metadata.author.name)) + ), + c(p, { itemprop: "abstract" }, description) + ), + c(div, { itemprop: "articleBody" }, c(content, { data })) + ) + }, + url: `/posts/${slugify(data.title)}` + } + const post = Base(args) + posts.push(post) + return post +} + |