Paginate Installed

Provide a helper to paginate results.

Installation

This plugin is installed by default. 🎉

Description

This plugin registers the paginate helper to create pages using an array of results. This is useful when combined with the search helper to create paginated results. For example:

export const layout = "layouts/post-list.njk";

export default function* ({ search, paginate }) {
  const posts = search.pages("posts");
  const options = {
    url: (n) => `posts/page/${n}/`,
    size: 10,
  };

  for (const page of paginate(posts, options)) {
    yield page;
  }
}

As you can see, the paginate helper accepts two arguments: an iterable and an object with the options. The available options are:

NameDefaultDescription
size10Number of elements per page
url(n) => page-${n}The function to generate the URL of each page. It receives the page number as an argument.

This helper returns an array. Each item has the following values:

for (const page of paginate(posts, options)) {
  page.url;        // URL of the page, for example "post/page/1"
  page.results;    // Array with the results of this page

  // Pagination info:
  page.pagination.page;         // The current page
  page.pagination.totalPages;   // Total pages
  page.pagination.totalResults; // Total results
  page.pagination.previous;     // The URL of the previous page
  page.pagination.next;         // The URL of the next page

  yield page;
}

Configuration

If you want to change the default configuration, use the second argument of lume() function in your _config.ts file. See all available options in Deno Doc.

import lume from "lume/mod.ts";

// Paginate plugin configuration
const paginate = {/* your config here */};

// Apply the plugin config
const site = lume({}, { paginate });