From 6bb3514f6ce9a58577f459d4fc86a32204e1a8b2 Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Fri, 4 Jan 2019 21:59:52 -0500 Subject: [PATCH] Cleanup EJS rendering code --- lib/generate/css.ts | 4 +--- lib/generate/missing.ts | 7 ++----- lib/generate/paginated.ts | 10 ++-------- lib/generate/redirects.ts | 7 ++----- lib/generate/rss.ts | 7 ++----- lib/generate/tutorials.ts | 22 ++++++---------------- lib/layout.ts | 12 +++--------- lib/util.ts | 10 ++++++++++ 8 files changed, 28 insertions(+), 51 deletions(-) diff --git a/lib/generate/css.ts b/lib/generate/css.ts index 6ba7ed7..e1c2501 100644 --- a/lib/generate/css.ts +++ b/lib/generate/css.ts @@ -19,9 +19,7 @@ async function generate(theme: string) { const filename = `site/css/${theme}.scss`; let sass = (await fs.readFile(filename)).toString(); - sass = ejs.render(sass, {}, { - filename: filename - }); + sass = util.render(sass, {}, filename); const result = await renderSass(sass); util.write(`css/${theme}.css`, result.css); diff --git a/lib/generate/missing.ts b/lib/generate/missing.ts index 36b7db2..6e2af90 100644 --- a/lib/generate/missing.ts +++ b/lib/generate/missing.ts @@ -1,4 +1,3 @@ -import ejs from "ejs"; import * as metadata from "../metadata"; import layout from "../layout"; import * as util from "../util"; @@ -6,11 +5,9 @@ import * as util from "../util"; export default async function missing() { const page = await metadata.get("site/404.html.ejs"); - page.text = ejs.render(page.text, { + page.text = util.render(page.text, { metadata: page.metadata - }, { - filename: "site/404.html.ejs" - }); + }, "site/404.html.ejs"); page.text = await layout(page.text, page.metadata, page.metadata.layout!); diff --git a/lib/generate/paginated.ts b/lib/generate/paginated.ts index 3043866..7e3cdcd 100644 --- a/lib/generate/paginated.ts +++ b/lib/generate/paginated.ts @@ -1,6 +1,4 @@ import path from "path"; -import ejs from "ejs"; -import formatDate from "date-fns/format"; import * as util from "../util"; import * as metadata from "../metadata"; import { Page, PostMetadata } from "../metadata"; @@ -29,15 +27,11 @@ export default async function generatePaginted(posts: Page[], basePath: string, total: chunks.length, prevLink: pageNum == 1 ? "" : pageNum == 2 ? basePath : path.join(basePath, (pageNum - 1).toString()), nextLink: pageNum == chunks.length ? "" : path.join(basePath, (pageNum + 1).toString()) - }, - formatDate, - fancyLink: util.fancyLink + } }; if (extraData) data = {...data, ...extraData}; - let renderedTemplate = ejs.render(page.text, data, { - filename: templatePath - }); + let renderedTemplate = util.render(page.text, data, templatePath); renderedTemplate = await layout(renderedTemplate, page.metadata, page.metadata.layout!); diff --git a/lib/generate/redirects.ts b/lib/generate/redirects.ts index f61747e..74c3c75 100644 --- a/lib/generate/redirects.ts +++ b/lib/generate/redirects.ts @@ -1,4 +1,3 @@ -import ejs from "ejs"; import * as metadata from "../metadata"; import { Page } from "../metadata"; import layout from "../layout"; @@ -7,12 +6,10 @@ import * as util from "../util"; async function generateRedirect(oldPermalink: string, newPermalink: string) { const page = await metadata.get("site/redirect.html.ejs"); - page.text = ejs.render(page.text, { + page.text = util.render(page.text, { metadata: page.metadata, newPermalink - }, { - filename: "site/redirect.html.ejs" - }); + }, "site/redirect.html.ejs"); page.text = await layout(page.text, page.metadata, page.metadata.layout!); diff --git a/lib/generate/rss.ts b/lib/generate/rss.ts index 0b3bd18..660483c 100644 --- a/lib/generate/rss.ts +++ b/lib/generate/rss.ts @@ -1,5 +1,4 @@ import { promises as fs } from "fs"; -import ejs from "ejs"; import path from "path"; import { Page, PostMetadata } from "../metadata"; import * as util from "../util"; @@ -15,14 +14,12 @@ async function generateFeed(posts: Page[], permalink: string, category?: string) const dest = path.join(permalink, "feed.xml"); let text = (await fs.readFile("site/feed.xml.ejs")).toString(); - text = ejs.render(text, { + text = util.render(text, { posts, category, permalink, feedPath: dest - }, { - filename: "site/feed.xml.ejs" - }); + }, "site/feed.xml.ejs"); util.write(dest, text); } diff --git a/lib/generate/tutorials.ts b/lib/generate/tutorials.ts index 21f3159..87bd6b7 100644 --- a/lib/generate/tutorials.ts +++ b/lib/generate/tutorials.ts @@ -1,14 +1,12 @@ import { promises as fs } from "fs"; import path from "path"; import dateFns from "date-fns"; -import formatDate from "date-fns/format"; import slugify from "@sindresorhus/slugify"; import { Page, PostMetadata } from "../metadata"; import * as metadata from "../metadata"; import * as markdown from "../markdown"; import layout from "../layout"; import * as util from "../util"; -import ejs from "ejs"; async function generateTutorials(group: string): Promise { const tutorials: Page[] = []; @@ -70,14 +68,10 @@ async function generateTutorialsAndIndex(group: string, title: string): Promise< (page.metadata).group = group; (page.metadata).lastUpdated = (tutorials[tutorials.length - 1].metadata).date - page.text = ejs.render(page.text, { + page.text = util.render(page.text, { tutorials, - metadata: page.metadata, - formatDate, - fancyLink: util.fancyLink - }, { - filename: "site/tutorial-series.html.ejs" - }); + metadata: page.metadata + }, "site/tutorial-series.html.ejs"); page.text = await layout(page.text, page.metadata, page.metadata.layout!); @@ -94,13 +88,9 @@ async function generateTutorialsAndIndex(group: string, title: string): Promise< async function generateIndex(allSeries: TutorialSeries[]) { const page = await metadata.get("site/tutorials.html.ejs"); - page.text = ejs.render(page.text, { - allSeries, - formatDate, - fancyLink: util.fancyLink - }, { - filename: "site/tutorials.html.ejs" - }); + page.text = util.render(page.text, { + allSeries + }, "site/tutorials.html.ejs"); page.text = await layout(page.text, page.metadata, page.metadata.layout!); diff --git a/lib/layout.ts b/lib/layout.ts index 06ed4a0..07fde60 100644 --- a/lib/layout.ts +++ b/lib/layout.ts @@ -1,6 +1,4 @@ import path from "path"; -import ejs from "ejs"; -import formatDate from "date-fns/format"; import * as metadata from "./metadata"; import { Metadata } from "./metadata"; import * as util from "./util"; @@ -8,14 +6,10 @@ import * as util from "./util"; export default async function layout(text: string, pageMetadata: Metadata, layoutPath: string): Promise { const layoutFile = path.join("site/layouts", layoutPath); let layoutPage = await metadata.get(layoutFile); - text = ejs.render(layoutPage.text, { + text = util.render(layoutPage.text, { content: text, - metadata: pageMetadata, - formatDate, - fancyLink: util.fancyLink - }, { - filename: layoutFile, - }); + metadata: pageMetadata + }, layoutFile); if (layoutPage.metadata.layout) { return await layout(text, pageMetadata, layoutPage.metadata.layout); } else { diff --git a/lib/util.ts b/lib/util.ts index a58c21f..1305a9c 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -1,6 +1,8 @@ import { promises as fs } from "fs"; import path from "path"; import hljs from "highlight.js"; +import ejs from "ejs"; +import formatDate from "date-fns/format"; export async function write(filePath: string, data: any) { const dest = path.join("out", filePath); @@ -41,4 +43,12 @@ export function fancyLink(text: string, href: string, meta?: string): string { ${text} `; +} + +export function render(template: string, data: any, filename?: string): string { + data.fancyLink = fancyLink; + data.formatDate = formatDate; + return ejs.render(template, data, { + filename + }); } \ No newline at end of file