A test post with longer name and more content

Estimated reading time: 2 minutes

Tom Stevens
Tom Stevens
Systems architect

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?

  1. ORdered

  2. list

Do I align right?

Center

Left

Full width?

Is this some inline code perhaps?