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/atom.ts')
-rw-r--r-- | src/server/template/atom.ts | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/src/server/template/atom.ts b/src/server/template/atom.ts new file mode 100644 index 0000000..82c9fe4 --- /dev/null +++ b/src/server/template/atom.ts @@ -0,0 +1,114 @@ +import type { element, node } from "./vdom.js"; +import t, { Base, Lang, Attribute as Attr } from "./xml.js"; + +export interface Attribute extends Attr, Base, Lang { } + +export function feed(attr: Attribute, + ...content: element<"id" | "title" | "updated" | "author" | + "link" | "author" | "category" | "contributor" | "generator" + | "icon" | "logo" | "rights" | "subtitle" | "entry">[] +) { + return t("feed", attr, ...content); +} + +export function entry( + attr: Attribute, + ...content: element< + "id" | "title" | "updated" | "author" | "content" | "link" | + "summary" | "category" | "contributor" | "rights" | "published" | "source">[] +) { + return t("entry", attr, ...content); +} + +export function author(attr: Attribute, ...content: [element<"name" | "email">, element<"name" | "email">]) { + return t("author", attr, ...content); +} + +export function contributor(attr: Attribute, ...content: [element<"name" | "email">, element<"name" | "email">]) { + return t("contributor", attr, ...content); +} + +export function id({ id, ...prop }: Attribute & { id: URL }) { + return t("id", prop, id.href); +} + +export function updated({ date, ...prop }: Attribute & { date: Date }) { + return t("updated", prop, date.toISOString()); +} + +export function update({ date, ...prop }: Attribute & { date: Date } ) { + return t("update", prop, date.toISOString()); +} + +export function icon(attr: Attribute, ...content: string[]) { + return t("icon", attr, ...content); +} + +export function logo(attr: Attribute, ...content: string[]) { + return t("logo", attr, ...content); +} + +export function name(attr: Attribute, content: string) { + return t("name", attr, content); +} + +export function email(attr: Attribute, content: string) { + return t("email", attr, content); +} + +interface TextAttribute extends Attribute { + type?: string; +} + +export function title(attr: TextAttribute, ...content: node[]) { + return t("title", attr, ...content); +} + +export function subtitle(attr: TextAttribute, ...content: string[]) { + return t("subtitle", attr, ...content); +} + +export function summary(attr: TextAttribute, ...content: string[]) { + return t("summary", attr, ...content); +} + +export function rights(attr: TextAttribute, ...content: string[]) { + return t("rights", attr, ...content); +} + +export function content(attr: TextAttribute, ...child: node[]) { + return t("content", attr, ...child); +} + + +interface generatorAttribute extends Attribute { + uri?: string; + version?: string +} + +export function generator(attr: generatorAttribute, ...content: string[]) { + return t("generator", attr, ...content); +} + +interface linkAttribute extends Attribute { + href: URL; + rel?: "alternate" | "enclosure" | "self" | "via"; + type?: string; + hreflang?: string; + title?: string; + length?: number; +} + +export function link(attr: linkAttribute) { + return t("link", { ...attr, href: attr.href.href, length: "" + (attr.length ?? "") }); +} + +interface catAttribute extends Attribute { + term: string; + scheme?: URL; + label?: string; +} + +export function category(attr: catAttribute) { + return t("category", { ...attr, href: attr.scheme?.href }); +} |