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/xml.ts')
-rw-r--r-- | src/server/template/xml.ts | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/server/template/xml.ts b/src/server/template/xml.ts new file mode 100644 index 0000000..fa6dbb4 --- /dev/null +++ b/src/server/template/xml.ts @@ -0,0 +1,56 @@ +import isDefined from "../utils/isDefined.js" +import tag, { render, prenderdata, node, element, Attribute as Attr } from "./vdom.js" + +type encoding = "UTF-8" | "UTF-16" | "ISO-10646-UCS-2" | "ISO-10646-UCS-4" | "ISO-8859-1" | "ISO-8859-2" | "ISO-8859-3" | "ISO-8859-4" | + "ISO-8859-5" | "ISO-8859-6" | "ISO-8859-7" | "ISO-8859-8" | "ISO-8859-9" | "ISO-2022-JP" | "Shift_JIS" | "EUC-JP" + +interface xmlDeclaration { + version?: "1.0", + encoding?: encoding + standalone?: boolean +} + +export function doctype(options: xmlDeclaration, content: node): string { + const version = `version=${options.version ?? `"1.0"`} ` + const encoding = isDefined(options.encoding) ? `encoding="${options.encoding}" ` : "" + const standalone = isDefined(options.standalone) ? `standalone="${options.standalone ? "yes" : "no"}" ` : "" + return `<?xml ${version}${encoding}${standalone}?>${xmlrender(content).content}` +} + +export const xmlrender = render("xml", function (node: element, content: string) { + var list = Object.entries(node.attr).map(([prop, val]): string => { + if (!isDefined(val)) { + return "" + } + var v: string = Array.isArray(val) ? val.join(" ") : "" + val + return `${prop}="${v}"` + }).join(" ") + if (list) { + list = ` ${list} ` + } + const open = `<${node.name}${list}>` + const close = `</${node.name}>` + if (content || !close) { + return `${open}${content || ""}${close}` + } else { + return `<${node.name}${list}/>` + } +}) + +export const xmldata = prenderdata("xml") + +export interface Attribute extends Attr { + xmlns?: URL +} + +export interface Base extends Attribute { + ["xml:base"]?: string +} + +export interface Lang extends Attribute { + ["xml:lang"]?: string +} + +export default function t<T extends string = string>(name: T, attr?: Attribute, ...content: node[]) { + return tag(name, { ...attr, xmlns: attr?.xmlns?.href }, ...content) +} |