A test post with longer name and more content
Estimated reading time: 2 minutes
Test Article: The purple toaster debated philosophy with a wandering sock while clouds sprinkled confetti. A confused bicycle took notes. Coffee laughed. None of it made sense, but the sandwich applauded anyway. End of test — nonsense verified.

Some text to accompany the image

Some text to accompany the image
Some text inbetween. This has both internal and external links.
import { MainRenderer } from "./src/renderers/main.js";
import { eleventyImageTransformPlugin } from "@11ty/eleventy-img";
import { RenderPlugin } from "@11ty/eleventy";
export default function (eleventyConfig) {
eleventyConfig.addPlugin(eleventyImageTransformPlugin, {
formats: ["avif", "webp", "jpeg"],
defaultAttributes: {
loading: "lazy",
decoding: "async",
},
});
eleventyConfig.addPlugin(RenderPlugin);
eleventyConfig.addFilter("readingTime", (content) => {
const wordsPerMinute = 238; // Average reading speed
if (typeof content !== "string") {
return "0 minutes";
}
const wordCount = content
.split(/\s+/)
.filter((word) => word.length > 0).length;
const readingTimeMinutes = Math.ceil(wordCount / wordsPerMinute);
return `${readingTimeMinutes} minute${readingTimeMinutes > 1 ? "s" : ""}`;
});
eleventyConfig.addShortcode(
"postImage",
async function (src, alt, widths = [320, 1000], sizes = "320w,1000w") {
return `<img src="${src}" alt="${alt}" style="max-width: 100%; height: auto; " sizes="${sizes}" eleventy:widths="${widths.join(",")}"/>`;
},
);
eleventyConfig.addFilter("filterPostsByTag", function (posts, tagId) {
return posts.filter(
(post) => post.content.Tags.filter((t) => t === tagId).length > 0,
);
});
eleventyConfig.addFilter("filterPostsByAuthor", function (posts, authorId) {
return posts.filter((post) => post.content.Author === authorId);
});
eleventyConfig.addShortcode("parseContent", async function (content) {
const renderer = new MainRenderer();
renderer.addContent(content);
return renderer.render();
});
eleventyConfig.addShortcode("renderTags", async (tags) => {
return eleventyConfig.universal.shortcodes.renderFile(
"src/_includes/taglist.njk",
{ tags: tags },
);
});
eleventyConfig.addPassthroughCopy("src/static");
eleventyConfig.addWatchTarget("./src/css/");
return {
dir: {
input: "src",
includes: "_includes",
output: "public",
},
};
}

This is a quote, quite neat, huh?
Unordered
list
ORdered
list
Do I align right?
Center
Left
Full width?
Is this some inline code perhaps?
