diff options
Diffstat (limited to 'src/gen')
-rw-r--r-- | src/gen/atom.11ty.js | 30 | ||||
-rw-r--r-- | src/gen/error.11ty.js | 21 | ||||
-rw-r--r-- | src/gen/gen.11tydata.js | 8 | ||||
-rw-r--r-- | src/gen/json.11ty.js | 28 | ||||
-rw-r--r-- | src/gen/manifest.11ty.js | 28 | ||||
-rw-r--r-- | src/gen/metadata.11ty.js | 15 | ||||
-rw-r--r-- | src/gen/robot.11ty.js | 13 | ||||
-rw-r--r-- | src/gen/sitemap.11ty.js | 17 |
8 files changed, 160 insertions, 0 deletions
diff --git a/src/gen/atom.11ty.js b/src/gen/atom.11ty.js new file mode 100644 index 0000000..0184018 --- /dev/null +++ b/src/gen/atom.11ty.js @@ -0,0 +1,30 @@ +module.exports = class { + async data() { + return { + permalink: "/feed.xml" + }; + } + + async render(data) { + return `<?xml version="1.0" encoding="utf-8"?> + <feed xmlns="http://www.w3.org/2005/Atom"> + <title>${data.metadata.title}</title> + <subtitle>${data.metadata.description}</subtitle> + <link href="${new URL(data.url, data.metadata.url)}" rel="self"/> + <link href="${data.metadata.url}"/> + <updated>${this.getNewestCollectionItemDate((data.collections.posts) || []).toISOString()}</updated> + <id>${data.metadata.url}</id> + <author> + <name>${data.metadata.author.name}</name> + <email>${data.metadata.author.email}</email> + </author> + ${(await Promise.all((data.collections.posts || []).map(async post => `<entry> + <title>${post.data.title}</title> + <link href="${new URL(post.url, data.metadata.url)}"/> + <updated>${post.date.toISOString()}</updated> + <id>${new URL(post.url, data.metadata.url)}</id> + <content type="html"><![CDATA[${await this.convertHtmlToAbsoluteUrls(post.templateContent, new URL(post.url, data.metadata.url)) || ""}]]></content> + </entry>`))).join()} + </feed>`; + } +}; diff --git a/src/gen/error.11ty.js b/src/gen/error.11ty.js new file mode 100644 index 0000000..6c7105e --- /dev/null +++ b/src/gen/error.11ty.js @@ -0,0 +1,21 @@ +module.exports = class { + data() { + return { + layout: "base", + pagination: { + data: "err", + size: 1, + }, + err: { + offline: "The Page is offline", + 404: "Not Found" + }, + permalink: data => `/${data.pagination.items}.html` + }; + } + + render(data) { + return `<h1 style="color: rgb(139 0 0)">ERROR: ${data.pagination.items}</h1> + <p>${data.err[data.pagination.items]}</p>`; + } +}; diff --git a/src/gen/gen.11tydata.js b/src/gen/gen.11tydata.js new file mode 100644 index 0000000..52b6ced --- /dev/null +++ b/src/gen/gen.11tydata.js @@ -0,0 +1,8 @@ +const path = require("path"); + +module.exports = { + eleventyExcludeFromCollections: true, + eleventyComputed: { + permalink: data => data.permalink || `/${path.relative("/gen", data.page.filePathStem)}.${data.page.outputFileExtension}` + } +};
\ No newline at end of file diff --git a/src/gen/json.11ty.js b/src/gen/json.11ty.js new file mode 100644 index 0000000..017b69c --- /dev/null +++ b/src/gen/json.11ty.js @@ -0,0 +1,28 @@ +module.exports = class { + async data() { + return { + permalink: "/feed.json" + }; + } + + async render(data) { + return JSON.stringify({ + version: "https://jsonfeed.org/version/1.1", + title: data.metadata.title, + language: data.metadata.language, + home_page_url: data.metadata.url, + feed_url: new URL(data.page.url, data.metadata.url), + description: data.metadata.description, + author: { + name: data.metadata.author.name + }, + items: await Promise.all((data.collections.posts || []).map(async post => ({ + id: new URL(post.url, data.metadata.url), + url: new URL(post.url, data.metadata.url), + title: new URL(post.url, data.metadata.url), + content_html: await this.convertHtmlToAbsoluteUrls(post.templateContent, new URL(post.url, data.metadata.url)), + date_published: post.date.toISOString() + })).reverse()) + }); + } +};
\ No newline at end of file diff --git a/src/gen/manifest.11ty.js b/src/gen/manifest.11ty.js new file mode 100644 index 0000000..e41df83 --- /dev/null +++ b/src/gen/manifest.11ty.js @@ -0,0 +1,28 @@ +module.exports = class { + data() { + return { + permalink: "/app.webmanifest" + }; + } + + render(data) { + return JSON.stringify({ + $schema: "https://json.schemastore.org/web-manifest-combined.json", + name: data.metadata.title, + lang: data.metadata.language, + start_url: "/", + id: "/", + scope: "/", + display: "minimal-ui", + background_color: data.metadata.theme, + theme_color: data.metadata.theme, + description: data.metadata.description, + icons: [192, 512, 1024].map(size => ({ + src: `/favicon/${size}.png`, + type: "image/png", + sizes: `${size}x${size}`, + purpose: "maskable" + })) + }); + } +};
\ No newline at end of file diff --git a/src/gen/metadata.11ty.js b/src/gen/metadata.11ty.js new file mode 100644 index 0000000..87d7997 --- /dev/null +++ b/src/gen/metadata.11ty.js @@ -0,0 +1,15 @@ +module.exports = class { + data() { + return { + permalink: "/assets/metadata.js" + }; + } + + render() { + const obj = JSON.stringify({ + version: new Date().toISOString() + }); + return `const obj = '${obj}' + export default () => JSON.parse(obj);`; + } +};
\ No newline at end of file diff --git a/src/gen/robot.11ty.js b/src/gen/robot.11ty.js new file mode 100644 index 0000000..289d3b6 --- /dev/null +++ b/src/gen/robot.11ty.js @@ -0,0 +1,13 @@ +module.exports = class { + data() { + return { + permalink: "/robot.txt" + }; + } + + render(data) { + return `User-agent: * + Disallow: + Sitemap: ${new URL("/sitemap.xml",data.metadata.url)}`; + } +};
\ No newline at end of file diff --git a/src/gen/sitemap.11ty.js b/src/gen/sitemap.11ty.js new file mode 100644 index 0000000..02b285f --- /dev/null +++ b/src/gen/sitemap.11ty.js @@ -0,0 +1,17 @@ +module.exports = class { + data() { + return { + permalink: "/sitemap.xml" + }; + } + + render(data) { + return `<?xml version="1.0" encoding="utf-8"?> + <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + ${(data.collections.all || []).map(page => `<url> + <loc>${new URL(page.url, data.metadata.url)}</loc> + <lastmod>${page.date.toISOString()}</lastmod> + </url>`).join()} + </urlset>`; + } +}; |