feat(listings): hide unlisted posts from blog and notes

This commit is contained in:
svemagie
2026-03-08 16:52:54 +01:00
parent b0c68dc375
commit 182d0fd26e
6 changed files with 65 additions and 31 deletions

View File

@@ -876,20 +876,23 @@ export default function (eleventyConfig) {
};
});
// Helper: exclude drafts from collections
const isPublished = (item) => !item.data.draft;
// Helper: exclude unlisted visibility from public listing surfaces
const isListed = (item) => {
const data = item?.data || {};
const rawVisibility = data.visibility ?? data.properties?.visibility;
const visibility = Array.isArray(rawVisibility) ? rawVisibility[0] : rawVisibility;
return String(visibility ?? "").toLowerCase() !== "unlisted";
};
// Exclude unlisted posts from UI slices like homepage/sidebar recent-post lists.
eleventyConfig.addFilter("excludeUnlistedPosts", (posts) => {
if (!Array.isArray(posts)) return [];
return posts.filter((post) => {
const data = post?.data || {};
const rawVisibility = data.visibility ?? data.properties?.visibility;
const visibility = Array.isArray(rawVisibility) ? rawVisibility[0] : rawVisibility;
return String(visibility ?? "").toLowerCase() !== "unlisted";
});
return posts.filter(isListed);
});
// Helper: exclude drafts from collections
const isPublished = (item) => !item.data.draft;
// Collections for different post types
// Note: content path is content/ due to symlink structure
// "posts" shows ALL content types combined
@@ -900,6 +903,13 @@ export default function (eleventyConfig) {
.sort((a, b) => b.date - a.date);
});
eleventyConfig.addCollection("listedPosts", function (collectionApi) {
return collectionApi
.getFilteredByGlob("content/**/*.md")
.filter((item) => isPublished(item) && isListed(item))
.sort((a, b) => b.date - a.date);
});
eleventyConfig.addCollection("notes", function (collectionApi) {
return collectionApi
.getFilteredByGlob("content/notes/**/*.md")
@@ -907,6 +917,13 @@ export default function (eleventyConfig) {
.sort((a, b) => b.date - a.date);
});
eleventyConfig.addCollection("listedNotes", function (collectionApi) {
return collectionApi
.getFilteredByGlob("content/notes/**/*.md")
.filter((item) => isPublished(item) && isListed(item))
.sort((a, b) => b.date - a.date);
});
eleventyConfig.addCollection("articles", function (collectionApi) {
return collectionApi
.getFilteredByGlob("content/articles/**/*.md")