summaryrefslogtreecommitdiffstats
path: root/src/server/template/atom.ts
diff options
context:
space:
mode:
author2023-02-16 22:57:52 +0530
committer2023-02-16 22:57:52 +0530
commit93e75949e9a2861f651e2a3602e08e9b25cf47c4 (patch)
tree9da44bdc8885c94355ee3dc7a1ae029bc2627356 /src/server/template/atom.ts
parent0.4.3 (diff)
downloadsudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar.gz
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar.bz2
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar.lz
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar.xz
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.tar.zst
sudomsg-93e75949e9a2861f651e2a3602e08e9b25cf47c4.zip
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.ts114
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 });
+}