From 88b914cd8d702271681956e52ebeb2bdfbdce0ee Mon Sep 17 00:00:00 2001 From: Robin Abrahamsson Date: Mon, 8 Feb 2021 22:55:52 +0100 Subject: [PATCH 1/3] feat(pagination): added pagination urls to sitemap --- src/sitemapItems.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/sitemapItems.js b/src/sitemapItems.js index 0dc9497..f0b074b 100644 --- a/src/sitemapItems.js +++ b/src/sitemapItems.js @@ -3,7 +3,28 @@ const sitemapItem = require("./sitemapItem"); const sitemapProperty = require("./sitemapProperty"); +function isPagination(item) { + return ( + item !== undefined && + item.data !== undefined && + item.data.pagination !== undefined && + item.data.pagination.pages !== undefined + ); +} + +function getPaginationUrls(item) { + if (isPagination(item)) { + return item.data.pagination.pages.map((page) => ({ + ...item, + url: page.url, + })); + } + + return [item]; +} + module.exports = (items, options) => items .filter((item) => !sitemapProperty(item, "ignore") && item.url) + .flatMap(getPaginationUrls) .map((item) => sitemapItem(item, options)); From 2b16c84289340976cece50e7b763b40c15c87178 Mon Sep 17 00:00:00 2001 From: Nuno Freitas Date: Wed, 7 Apr 2021 14:12:22 +0100 Subject: [PATCH 2/3] test(pagination): add pagination example --- examples/pagination/.eleventy.js | 11 +++++++++++ examples/pagination/_data/posts.json | 27 +++++++++++++++++++++++++++ examples/pagination/posts.njk | 9 +++++++++ examples/pagination/sitemap.njk | 6 ++++++ 4 files changed, 53 insertions(+) create mode 100644 examples/pagination/.eleventy.js create mode 100644 examples/pagination/_data/posts.json create mode 100644 examples/pagination/posts.njk create mode 100644 examples/pagination/sitemap.njk diff --git a/examples/pagination/.eleventy.js b/examples/pagination/.eleventy.js new file mode 100644 index 0000000..ad186f8 --- /dev/null +++ b/examples/pagination/.eleventy.js @@ -0,0 +1,11 @@ +"use strict"; + +const sitemap = require("../../.eleventy"); + +module.exports = (eleventyConfig) => { + eleventyConfig.addPlugin(sitemap, { + sitemap: { + hostname: "https://example.com", + }, + }); +}; diff --git a/examples/pagination/_data/posts.json b/examples/pagination/_data/posts.json new file mode 100644 index 0000000..1143570 --- /dev/null +++ b/examples/pagination/_data/posts.json @@ -0,0 +1,27 @@ +[ + { + "url": "/post_a", + "name": "Post A" + }, + { + "url": "/post_b", + "name": "Post B" + }, + { + "url": "/post_c", + "name": "Post C" + }, + { + "url": "/post_d", + "name": "Post D" + }, + { + "url": "/post_sitemap_ignore", + "name": "Post sitemap ignore", + "data": { + "sitemap": { + "ignore": true + } + } + } +] diff --git a/examples/pagination/posts.njk b/examples/pagination/posts.njk new file mode 100644 index 0000000..289dd71 --- /dev/null +++ b/examples/pagination/posts.njk @@ -0,0 +1,9 @@ +--- +pagination: + data: posts + size: 1 + alias: post +permalink: "{{ post.url }}/" +--- + +

{{ post.name }}

diff --git a/examples/pagination/sitemap.njk b/examples/pagination/sitemap.njk new file mode 100644 index 0000000..ec892a7 --- /dev/null +++ b/examples/pagination/sitemap.njk @@ -0,0 +1,6 @@ +--- +permalink: /sitemap.xml +layout: null +eleventyExcludeFromCollections: true +--- +{% sitemap collections.all %} From bc3e1313dcc3d4cd6d18f383f86a498e1b6b7fe4 Mon Sep 17 00:00:00 2001 From: Nuno Freitas Date: Wed, 7 Apr 2021 14:13:25 +0100 Subject: [PATCH 3/3] refactor(pagination): one function per file and ignore fix --- package.json | 1 + src/isPagination.js | 4 ++++ src/paginationItems.js | 14 ++++++++++++++ src/sitemapItems.js | 23 ++--------------------- 4 files changed, 21 insertions(+), 21 deletions(-) create mode 100644 src/isPagination.js create mode 100644 src/paginationItems.js diff --git a/package.json b/package.json index 02af931..d71b8e3 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "demo:default": "npx @11ty/eleventy --input=examples/default --output=examples/default/_site --config=examples/default/.eleventy.js", "demo:multilingual": "npx @11ty/eleventy --input=examples/multilingual --output=examples/multilingual/_site --config=examples/multilingual/.eleventy.js", "demo:data-file": "npx @11ty/eleventy --input=examples/data-file --output=examples/data-file/_site --config=examples/data-file/.eleventy.js", + "demo:pagination": "npx @11ty/eleventy --input=examples/pagination --output=examples/pagination/_site --config=examples/pagination/.eleventy.js", "test": "run-p -c test:*", "test:eslint": "eslint \"./**/*.js\" --color", "test:prettier": "prettier --check ./**/*.js", diff --git a/src/isPagination.js b/src/isPagination.js new file mode 100644 index 0000000..c92bebf --- /dev/null +++ b/src/isPagination.js @@ -0,0 +1,4 @@ +"use strict"; + +module.exports = (item) => + item && item.data && item.data.pagination && item.data.pagination.pages; diff --git a/src/paginationItems.js b/src/paginationItems.js new file mode 100644 index 0000000..9ae8cc2 --- /dev/null +++ b/src/paginationItems.js @@ -0,0 +1,14 @@ +"use strict"; + +const isPagination = require("./isPagination"); + +module.exports = (item) => { + if (!isPagination(item)) { + return [item]; + } + + return item.data.pagination.pages.map((page) => ({ + ...item, + ...page, + })); +}; diff --git a/src/sitemapItems.js b/src/sitemapItems.js index f0b074b..c0034b1 100644 --- a/src/sitemapItems.js +++ b/src/sitemapItems.js @@ -1,30 +1,11 @@ "use strict"; +const paginationItems = require("./paginationItems"); const sitemapItem = require("./sitemapItem"); const sitemapProperty = require("./sitemapProperty"); -function isPagination(item) { - return ( - item !== undefined && - item.data !== undefined && - item.data.pagination !== undefined && - item.data.pagination.pages !== undefined - ); -} - -function getPaginationUrls(item) { - if (isPagination(item)) { - return item.data.pagination.pages.map((page) => ({ - ...item, - url: page.url, - })); - } - - return [item]; -} - module.exports = (items, options) => items + .flatMap(paginationItems) .filter((item) => !sitemapProperty(item, "ignore") && item.url) - .flatMap(getPaginationUrls) .map((item) => sitemapItem(item, options));