Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pagination: add pageOnEmptyData option #1698

Merged
merged 5 commits into from
May 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/Plugins/Pagination.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,10 @@ class Pagination {
// TODO future improvement dea: use a light Template wrapper for paged template clones (PagedTemplate?)
// so that we don’t have the memory cost of the full template (and can reuse the parent
// template for some things)

for (
let pageNumber = 0, pageNumberStop = items.length;
pageNumber < pageNumberStop;
let pageNumber = 0;
pageNumber < items.length;
pageNumber++
) {
let cloned = this.template.clone();
Expand Down
40 changes: 40 additions & 0 deletions test/PaginationTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,46 @@ test("No pagination", async (t) => {
t.is((await paging.getPageTemplates()).length, 0);
});

test("Empty paged data", async (t) => {
let eleventyConfig = new TemplateConfig();
let tmpl = getNewTemplate(
"./test/stubs/paged/paged-empty.njk",
"./test/stubs/",
"./dist",
null,
null,
eleventyConfig
);

let data = await tmpl.getData();
let paging = new Pagination(data, tmpl.config);
paging.setTemplate(tmpl);

t.is(paging.getPageCount(), 0);
t.is(paging.pagedItems.length, 0);
t.is((await paging.getPageTemplates()).length, 0);
});

test("Empty paged data with pageOnEmptyData enabled", async (t) => {
let eleventyConfig = new TemplateConfig();
let tmpl = getNewTemplate(
"./test/stubs/paged/paged-empty-pageonemptydata.njk",
"./test/stubs/",
"./dist",
null,
null,
eleventyConfig
);

let data = await tmpl.getData();
let paging = new Pagination(data, tmpl.config);
paging.setTemplate(tmpl);

t.is(paging.getPageCount(), 0);
t.is(paging.pagedItems.length, 0);
t.is((await paging.getPageTemplates()).length, 1);
});

test("Pagination enabled in frontmatter", async (t) => {
let eleventyConfig = new TemplateConfig();
let tmpl = getNewTemplate(
Expand Down
8 changes: 8 additions & 0 deletions test/stubs/paged/paged-empty-pageonemptydata.njk
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
pagination:
data: items
size: 1
pageOnEmptyData: true
items: []
---
<ol>{% for item in pagination.items %}<li>{{ item }}</li>{% endfor %}</ol>
7 changes: 7 additions & 0 deletions test/stubs/paged/paged-empty.njk
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
pagination:
data: items
size: 1
items: []
---
<ol>{% for item in pagination.items %}<li>{{ item }}</li>{% endfor %}</ol>