From ac5c7edb44d496aa589c0bb630153cab83948cf8 Mon Sep 17 00:00:00 2001 From: Zach Leatherman Date: Sun, 28 Jan 2018 21:27:41 -0600 Subject: [PATCH] Move all src JS into external plugins installed through NPM: @11ty/eleventy-plugin-rss @11ty/eleventy-plugin-syntaxhighlight --- .eleventy.js | 43 ++-------- _src/AbsoluteUrl.js | 5 -- _src/HighlightLines.js | 33 -------- _src/HtmlToAbsoluteUrls.js | 22 ----- _src/LiquidHighlight.js | 83 ------------------- _src/eleventy-liquidjs-tag-highlight-plain.js | 16 ---- ...eleventy-liquidjs-tag-highlight-prismjs.js | 12 --- _src/test/HtmlToAbsoluteUrlsTest.js | 9 -- package.json | 17 +--- posts/firstpost.md | 4 +- posts/secondpost.md | 5 +- 11 files changed, 14 insertions(+), 235 deletions(-) delete mode 100644 _src/AbsoluteUrl.js delete mode 100644 _src/HighlightLines.js delete mode 100644 _src/HtmlToAbsoluteUrls.js delete mode 100644 _src/LiquidHighlight.js delete mode 100644 _src/eleventy-liquidjs-tag-highlight-plain.js delete mode 100644 _src/eleventy-liquidjs-tag-highlight-prismjs.js delete mode 100644 _src/test/HtmlToAbsoluteUrlsTest.js diff --git a/.eleventy.js b/.eleventy.js index 302b1ba27e..88efed7e88 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,50 +1,17 @@ const { DateTime } = require("luxon"); -const metadata = require("./_data/metadata.json"); -const absoluteUrl = require("./_src/AbsoluteUrl"); -const HtmlToAbsoluteUrls = require("./_src/HtmlToAbsoluteUrls"); -const syntaxHighlighter = require("./_src/eleventy-liquidjs-tag-highlight-prismjs"); - -function dateToISO(dateObj) { - return DateTime.fromJSDate(dateObj).toISO({ includeOffset: true, suppressMilliseconds: true }); -} +const pluginRss = require("@11ty/eleventy-plugin-rss"); +const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight"); module.exports = function(eleventyConfig) { + eleventyConfig.addPlugin(pluginRss); + eleventyConfig.addPlugin(pluginSyntaxHighlight); + eleventyConfig.addLayoutAlias("post", "layouts/post.njk"); - eleventyConfig.addFilter("rssLastUpdatedDate", collection => { - if( !collection.length ) { - throw new Error( "Collection is empty in lastUpdatedDate filter." ); - } - // Newest date in the collection - return dateToISO(collection[ collection.length - 1 ].date); - }); - - eleventyConfig.addFilter("rssDate", dateObj => { - return dateToISO(dateObj); - }); - eleventyConfig.addFilter("readableDate", dateObj => { return DateTime.fromJSDate(dateObj).toFormat("dd LLL yyyy"); }); - eleventyConfig.addNunjucksFilter("absoluteUrl", function(href, base) { - return absoluteUrl(href, base); - }); - - eleventyConfig.addNunjucksFilter("htmlToAbsoluteUrls", function(htmlContent, base, callback) { - if(!htmlContent) { - callback(null, ""); - return; - } - - HtmlToAbsoluteUrls(htmlContent, base).then(result => { - callback(null, result.html); - }); - }, true); - - // compatibility with existing {% highlight js %} and others - eleventyConfig.addLiquidTag("highlight", syntaxHighlighter); - // only content in the `posts/` directory eleventyConfig.addCollection("posts", function(collection) { return collection.getAllSorted().filter(function(item) { diff --git a/_src/AbsoluteUrl.js b/_src/AbsoluteUrl.js deleted file mode 100644 index f85fcc0a63..0000000000 --- a/_src/AbsoluteUrl.js +++ /dev/null @@ -1,5 +0,0 @@ -const { URL } = require("url"); - -module.exports = function(url, base) { - return (new URL(url, base)).toString() -}; \ No newline at end of file diff --git a/_src/HighlightLines.js b/_src/HighlightLines.js deleted file mode 100644 index f3e0d50dce..0000000000 --- a/_src/HighlightLines.js +++ /dev/null @@ -1,33 +0,0 @@ -class HighlightLines { - constructor(rangeStr) { - this.highlights = this.convertRangeToHash(rangeStr); - } - - convertRangeToHash(rangeStr) { - let hash = {}; - if( !rangeStr ) { - return hash; - } - - let ranges = rangeStr.split(",").map(function(range) { - return range.trim(); - }); - - for(let range of ranges) { - let startFinish = range.split('-'); - let start = parseInt(startFinish[0], 10); - let end = parseInt(startFinish[1] || start, 10); - - for( let j = start, k = end; j<=k; j++ ) { - hash[j] = true; - } - } - return hash; - } - - isHighlighted(lineNumber) { - return !!this.highlights[lineNumber] - } -} - -module.exports = HighlightLines; \ No newline at end of file diff --git a/_src/HtmlToAbsoluteUrls.js b/_src/HtmlToAbsoluteUrls.js deleted file mode 100644 index 2b219e0db8..0000000000 --- a/_src/HtmlToAbsoluteUrls.js +++ /dev/null @@ -1,22 +0,0 @@ -const posthtml = require('posthtml'); -const urls = require('posthtml-urls') -const absoluteUrl = require("./AbsoluteUrl"); - -module.exports = function(htmlContent, base) { - let options = { - eachURL: function(url, attr, element) { - url = url.trim(); - - // #anchor in-page - if( url.indexOf("#") === 0 ) { - return url; - } - - return absoluteUrl(url, base); - } - }; - - let modifier = posthtml().use(urls(options)); - - return modifier.process(htmlContent); -}; diff --git a/_src/LiquidHighlight.js b/_src/LiquidHighlight.js deleted file mode 100644 index ebaa79c13a..0000000000 --- a/_src/LiquidHighlight.js +++ /dev/null @@ -1,83 +0,0 @@ -const HighlightLines = require('./HighlightLines'); - -class LiquidHighlight { - constructor(liquidEngine) { - this.liquidEngine = liquidEngine; - this.hooks = []; - this.classHooks = []; - } - - addHook(hookFunction) { - this.hooks.push(hookFunction); - } - - addClassHook(hookFunction) { - this.classHooks.push(hookFunction); - } - - getObject() { - let ret = function(highlighter) { - return { - parse: function(tagToken, remainTokens) { - let split = tagToken.args.split(" "); - - this.language = split[0]; - this.highlights = new HighlightLines(split.length === 2 ? split[1] : ""); - this.highlightsAdd = new HighlightLines(split.length === 3 ? split[1] : ""); - this.highlightsRemove = new HighlightLines(split.length === 3 ? split[2] : ""); - - this.tokens = []; - - var stream = highlighter.liquidEngine.parser.parseStream(remainTokens); - - stream - .on('token', token => { - if (token.name === 'endhighlight') { - stream.stop(); - } else { - this.tokens.push(token); - } - }) - .on('end', x => { - throw new Error("tag highlight not closed"); - }); - - stream.start(); - }, - render: function(scope, hash) { - let tokens = this.tokens.map(token => token.raw); - let tokenStr = tokens.join('').trim(); - - for( let hook of highlighter.hooks ) { - tokenStr = hook.call(this, this.language, tokenStr); - } - - let lines = tokenStr.split("\n").map(function(line, j) { - let classHookClasses = []; - for( let classHook of highlighter.classHooks ) { - let ret = classHook(this.language, line, j); - if( ret ) { - classHookClasses.push(ret); - } - } - - return '
' + - line + - '
'; - }.bind(this)); - - return Promise.resolve(`
` + lines.join("") + "
"); - } - }; - }; - - return ret(this); - } -} - -module.exports = LiquidHighlight; \ No newline at end of file diff --git a/_src/eleventy-liquidjs-tag-highlight-plain.js b/_src/eleventy-liquidjs-tag-highlight-plain.js deleted file mode 100644 index bd153c3a72..0000000000 --- a/_src/eleventy-liquidjs-tag-highlight-plain.js +++ /dev/null @@ -1,16 +0,0 @@ -const LiquidHighlight = require( "./LiquidHighlight" ); - -module.exports = function(liquidEngine) { - let highlight = new LiquidHighlight(liquidEngine); - - highlight.addClassHook(function(language, line) { - if( language === "dir" ) { - // has trailing slash - if( line.match(/\/$/) !== null ) { - return "highlight-line-isdir"; - } - } - }); - - return highlight.getObject(); -}; \ No newline at end of file diff --git a/_src/eleventy-liquidjs-tag-highlight-prismjs.js b/_src/eleventy-liquidjs-tag-highlight-prismjs.js deleted file mode 100644 index c0a128ce3c..0000000000 --- a/_src/eleventy-liquidjs-tag-highlight-prismjs.js +++ /dev/null @@ -1,12 +0,0 @@ -const Prism = require('prismjs'); -const LiquidHighlight = require( "./LiquidHighlight" ); - -module.exports = function(liquidEngine) { - let highlight = new LiquidHighlight(liquidEngine); - - highlight.addHook(function(language, htmlStr, lines) { - return Prism.highlight(htmlStr, Prism.languages[ language ]); - }); - - return highlight.getObject(); -}; \ No newline at end of file diff --git a/_src/test/HtmlToAbsoluteUrlsTest.js b/_src/test/HtmlToAbsoluteUrlsTest.js deleted file mode 100644 index e039e4e3ec..0000000000 --- a/_src/test/HtmlToAbsoluteUrlsTest.js +++ /dev/null @@ -1,9 +0,0 @@ -import test from "ava"; -import htmlToAbsUrls from "../HtmlToAbsoluteUrls.js"; - -test("Changes a link href", async t => { - t.is((await htmlToAbsUrls(`Hello`, "http://example.com/")).html, `Hello`); - t.is((await htmlToAbsUrls(`Hello`, "http://example.com/")).html, `Hello`); - t.is((await htmlToAbsUrls(``, "http://example.com/")).html, ``); - t.is((await htmlToAbsUrls(`Hello`, "http://example.com/")).html, `Hello`); -}); diff --git a/package.json b/package.json index 3f55c3587f..ecb8ac21df 100644 --- a/package.json +++ b/package.json @@ -22,21 +22,10 @@ }, "homepage": "https://github.com/11ty/eleventy-base-blog#readme", "dependencies": { - "@11ty/eleventy": "0.2.12", + "@11ty/eleventy": "0.2.13", + "@11ty/eleventy-plugin-rss": "^1.0.1", + "@11ty/eleventy-plugin-syntaxhighlight": "^1.0.0", "luxon": "^0.3.1", - "posthtml": "^0.11.2", - "posthtml-urls": "^1.0.0", "prismjs": "^1.10.0" - }, - "devDependencies": { - "ava": "^0.25.0" - }, - "ava": { - "files": [ - "_src/test/*.js" - ], - "source": [ - "_src/**/*.{js,jsx}" - ] } } diff --git a/posts/firstpost.md b/posts/firstpost.md index 9e67b31b81..c6d5e6756f 100644 --- a/posts/firstpost.md +++ b/posts/firstpost.md @@ -11,10 +11,10 @@ Bring to the table win-win survival strategies to ensure proactive domination. A Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line. -{% highlight js 2-3 %} +{% highlight-plain js 2-3 %} // this is a command function myCommand() { let counter = 0; counter++; } -{% endhighlight %} \ No newline at end of file +{% endhighlight %} diff --git a/posts/secondpost.md b/posts/secondpost.md index e6019f9961..45797ee90f 100644 --- a/posts/secondpost.md +++ b/posts/secondpost.md @@ -7,6 +7,9 @@ layout: layouts/post.njk --- Leverage agile frameworks to provide a robust synopsis for high level overviews. Iterative approaches to corporate strategy foster collaborative thinking to further the overall value proposition. Organically grow the holistic world view of disruptive innovation via workplace diversity and empowerment. +First post +Third post + Bring to the table win-win survival strategies to ensure proactive domination. At the end of the day, going forward, a new normal that has evolved from generation X is on the runway heading towards a streamlined cloud solution. User generated content in real-time will have multiple touchpoints for offshoring. -Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line. \ No newline at end of file +Capitalize on low hanging fruit to identify a ballpark value added activity to beta test. Override the digital divide with additional clickthroughs from DevOps. Nanotechnology immersion along the information highway will close the loop on focusing solely on the bottom line.