A bit of code cleanup
This commit is contained in:
parent
185b2888ed
commit
3d57dc956f
@ -1,31 +0,0 @@
|
|||||||
module.exports = {
|
|
||||||
// Draft posts:
|
|
||||||
eleventyComputed: {
|
|
||||||
permalink: data => {
|
|
||||||
if(data.draft) {
|
|
||||||
// BUILD_DRAFTS is set in eleventy.config.js
|
|
||||||
if(process.env.BUILD_DRAFTS) {
|
|
||||||
return data.permalink;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always skip during non-watch/serve builds
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data.permalink;
|
|
||||||
},
|
|
||||||
eleventyExcludeFromCollections: data => {
|
|
||||||
if(data.draft) {
|
|
||||||
// BUILD_DRAFTS is set in eleventy.config.js
|
|
||||||
if(process.env.BUILD_DRAFTS) {
|
|
||||||
return data.eleventyExcludeFromCollections;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always exclude from non-watch/serve builds
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return data.eleventyExcludeFromCollections;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
};
|
|
60
eleventy.config.drafts.js
Normal file
60
eleventy.config.drafts.js
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
function eleventyComputedPermalink() {
|
||||||
|
// When using `addGlobalData` and you *want* to return a function, you must nest functions like this.
|
||||||
|
// `addGlobalData` acts like a global data file and runs the top level function it receives.
|
||||||
|
return (data) => {
|
||||||
|
if(data.draft) {
|
||||||
|
// BUILD_DRAFTS is set in eleventy.config.js
|
||||||
|
if(process.env.BUILD_DRAFTS) {
|
||||||
|
return data.permalink;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always skip during non-watch/serve builds
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.permalink;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
function eleventyComputedExcludeFromCollections() {
|
||||||
|
// When using `addGlobalData` and you *want* to return a function, you must nest functions like this.
|
||||||
|
// `addGlobalData` acts like a global data file and runs the top level function it receives.
|
||||||
|
return (data) => {
|
||||||
|
if(data.draft) {
|
||||||
|
// BUILD_DRAFTS is set in eleventy.config.js
|
||||||
|
if(process.env.BUILD_DRAFTS) {
|
||||||
|
return data.eleventyExcludeFromCollections;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Always exclude from non-watch/serve builds
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.eleventyExcludeFromCollections;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.eleventyComputedPermalink = eleventyComputedPermalink;
|
||||||
|
module.exports.eleventyComputedExcludeFromCollections = eleventyComputedExcludeFromCollections;
|
||||||
|
|
||||||
|
module.exports = eleventyConfig => {
|
||||||
|
eleventyConfig.addGlobalData("eleventyComputed.permalink", eleventyComputedPermalink);
|
||||||
|
eleventyConfig.addGlobalData("eleventyComputed.eleventyExcludeFromCollections", eleventyComputedExcludeFromCollections);
|
||||||
|
|
||||||
|
let logged = false;
|
||||||
|
eleventyConfig.on("eleventy.before", ({runMode}) => {
|
||||||
|
let text = "Excluding";
|
||||||
|
// Only show drafts in serve/watch modes
|
||||||
|
if(runMode === "serve" || runMode === "watch") {
|
||||||
|
process.env.BUILD_DRAFTS = true;
|
||||||
|
text = "Including";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only log once.
|
||||||
|
if(!logged) {
|
||||||
|
console.log( `[11ty/eleventy-base-blog] ${text} drafts.` );
|
||||||
|
}
|
||||||
|
|
||||||
|
logged = true;
|
||||||
|
});
|
||||||
|
}
|
30
eleventy.config.images.js
Normal file
30
eleventy.config.images.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
const path = require("path");
|
||||||
|
const eleventyImage = require("@11ty/eleventy-img");
|
||||||
|
|
||||||
|
module.exports = eleventyConfig => {
|
||||||
|
function relativeToInputPath(inputPath, relativeFilePath) {
|
||||||
|
let split = inputPath.split("/");
|
||||||
|
split.pop();
|
||||||
|
|
||||||
|
return path.resolve(split.join(path.sep), relativeFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eleventy Image shortcode
|
||||||
|
// https://www.11ty.dev/docs/plugins/image/
|
||||||
|
eleventyConfig.addAsyncShortcode("image", async function imageShortcode(src, alt, sizes) {
|
||||||
|
let file = relativeToInputPath(this.page.inputPath, src);
|
||||||
|
let metadata = await eleventyImage(file, {
|
||||||
|
widths: ["auto"],
|
||||||
|
// You can add "avif" or "jpeg" here if you’d like!
|
||||||
|
formats: ["webp", "png"],
|
||||||
|
outputDir: path.join(eleventyConfig.dir.output, "img"), // Advanced usage note: `eleventyConfig.dir` works here because we’re using addPlugin.
|
||||||
|
});
|
||||||
|
let imageAttributes = {
|
||||||
|
alt,
|
||||||
|
sizes,
|
||||||
|
loading: "lazy",
|
||||||
|
decoding: "async",
|
||||||
|
};
|
||||||
|
return eleventyImage.generateHTML(metadata, imageAttributes);
|
||||||
|
});
|
||||||
|
};
|
@ -1,11 +1,9 @@
|
|||||||
const path = require("path");
|
|
||||||
const { DateTime } = require("luxon");
|
const { DateTime } = require("luxon");
|
||||||
const markdownItAnchor = require("markdown-it-anchor");
|
const markdownItAnchor = require("markdown-it-anchor");
|
||||||
|
|
||||||
const pluginRss = require("@11ty/eleventy-plugin-rss");
|
const pluginRss = require("@11ty/eleventy-plugin-rss");
|
||||||
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
|
const pluginSyntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
|
||||||
const pluginNavigation = require("@11ty/eleventy-navigation");
|
const pluginNavigation = require("@11ty/eleventy-navigation");
|
||||||
const eleventyImage = require("@11ty/eleventy-img");
|
|
||||||
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy");
|
const { EleventyHtmlBasePlugin } = require("@11ty/eleventy");
|
||||||
|
|
||||||
module.exports = function(eleventyConfig) {
|
module.exports = function(eleventyConfig) {
|
||||||
@ -22,61 +20,16 @@ module.exports = function(eleventyConfig) {
|
|||||||
// Process content images to the image pipeline.
|
// Process content images to the image pipeline.
|
||||||
eleventyConfig.addWatchTarget("content/**/*.{png,jpeg}");
|
eleventyConfig.addWatchTarget("content/**/*.{png,jpeg}");
|
||||||
|
|
||||||
|
// App plugins
|
||||||
|
eleventyConfig.addPlugin(require("./eleventy.config.drafts.js"));
|
||||||
|
eleventyConfig.addPlugin(require("./eleventy.config.images.js"));
|
||||||
|
|
||||||
// Plugins
|
// Official plugins
|
||||||
eleventyConfig.addPlugin(pluginRss);
|
eleventyConfig.addPlugin(pluginRss);
|
||||||
eleventyConfig.addPlugin(pluginSyntaxHighlight);
|
eleventyConfig.addPlugin(pluginSyntaxHighlight);
|
||||||
eleventyConfig.addPlugin(pluginNavigation);
|
eleventyConfig.addPlugin(pluginNavigation);
|
||||||
eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
|
eleventyConfig.addPlugin(EleventyHtmlBasePlugin);
|
||||||
|
|
||||||
// Eleventy Image shortcode
|
|
||||||
// https://www.11ty.dev/docs/plugins/image/
|
|
||||||
eleventyConfig.addPlugin(eleventyConfig => {
|
|
||||||
function relativeToInputPath(inputPath, relativeFilePath) {
|
|
||||||
let split = inputPath.split("/");
|
|
||||||
split.pop();
|
|
||||||
|
|
||||||
return path.resolve(split.join(path.sep), relativeFilePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
eleventyConfig.addAsyncShortcode("image", async function imageShortcode(src, alt, sizes) {
|
|
||||||
let file = relativeToInputPath(this.page.inputPath, src);
|
|
||||||
let metadata = await eleventyImage(file, {
|
|
||||||
widths: ["auto"],
|
|
||||||
// You can add "avif" or "jpeg" here if you’d like!
|
|
||||||
formats: ["webp", "png"],
|
|
||||||
outputDir: path.join(eleventyConfig.dir.output, "img"), // Advanced usage note: `eleventyConfig.dir` works here because we’re using addPlugin.
|
|
||||||
});
|
|
||||||
let imageAttributes = {
|
|
||||||
alt,
|
|
||||||
sizes,
|
|
||||||
loading: "lazy",
|
|
||||||
decoding: "async",
|
|
||||||
};
|
|
||||||
return eleventyImage.generateHTML(metadata, imageAttributes);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Drafts implementation, see `content/content.11tydata.js` for additional code.
|
|
||||||
// This section *could* be simplified to an environment variable in an npm script,
|
|
||||||
// but this way an ENV is not required and this code works cross-platform.
|
|
||||||
eleventyConfig.addPlugin(function enableDrafts(eleventyConfig) {
|
|
||||||
let logged = false;
|
|
||||||
eleventyConfig.on("eleventy.before", ({runMode}) => {
|
|
||||||
// Only show drafts in serve/watch modes
|
|
||||||
if(runMode === "serve" || runMode === "watch") {
|
|
||||||
process.env.BUILD_DRAFTS = true;
|
|
||||||
|
|
||||||
// Only log once.
|
|
||||||
if(!logged) {
|
|
||||||
console.log( "[11ty/eleventy-base-blog] including `draft: true` posts" );
|
|
||||||
}
|
|
||||||
|
|
||||||
logged = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
})
|
|
||||||
|
|
||||||
// Filters
|
// Filters
|
||||||
eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => {
|
eleventyConfig.addFilter("readableDate", (dateObj, format, zone) => {
|
||||||
// Formatting tokens for Luxon: https://moment.github.io/luxon/#/formatting?id=table-of-tokens
|
// Formatting tokens for Luxon: https://moment.github.io/luxon/#/formatting?id=table-of-tokens
|
||||||
|
Loading…
Reference in New Issue
Block a user