Add pagination support for home page, sections and taxonomies
authorbep <bjorn.erik.pedersen@gmail.com>
Sat, 27 Dec 2014 13:11:19 +0000 (14:11 +0100)
committerbep <bjorn.erik.pedersen@gmail.com>
Mon, 26 Jan 2015 11:59:37 +0000 (12:59 +0100)
commit37445bc6aa6273a819724eb25f24f08265d21d4b
treeed96a311dd12c5fd7ab6195071a3c12b57da77b0
parent407e80a9abbb3b22397d1ed6c62ce7cefcdd312a
Add pagination support for home page, sections and taxonomies

Two new configuration properties, `Paginate` (default `0`) and `PaginatePath` (default `page`) are added.

Setting `paginate` to a positive value will split the list pages for the home page, sections and taxonomies into chunks of size of the `paginate` property.

A `.Paginator` is provided to help building a pager menu.

There are two ways to configure a `.Paginator`:

1. The simplest way is just to call `.Paginator.Pages` from a template. It will contain the pages for "that page" (`.Data.Pages` will (like today) contain all the pages).
2. Select a sub-set of the pages with the available template functions and pass the slice to `.Paginate` : `{{ range (.Paginate (where .Data.Pages "Type" "post")).Pages }}`

**NOTE:** For a given Node, it's one of the options above. It's perfectly legitimate to iterate over the same pager more than once, but it's static and cannot change.

The `.Paginator` contains enough information to build a full-blown paginator interface.

The pages are built on the form (note: BLANK means no value, i.e. home page):

```
[SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/1/index.html => redirect to  [SECTION/TAXONOMY/BLANK]/index.html
[SECTION/TAXONOMY/BLANK]/page/2/index.html
....
```

Fixes #96
commands/hugo.go
helpers/url.go
hugolib/node.go
hugolib/pagination.go [new file with mode: 0644]
hugolib/pagination_test.go [new file with mode: 0644]
hugolib/site.go
hugolib/site_url_test.go