This crate is used for generating pagination bar on webpages or other UIs.
```rust use paginator::{Paginator, PageItem};
use core::fmt::Write;
let paginator = Paginator::builder(5).currentpage(1).buildpaginator().unwrap();
let mut html = String::new();
for pageitem in paginator.paginate() {
match pageitem {
PageItem::Prev(page) => {
// PageItem::Prev
variant is used when the has_prev
option is not set to YesNoDepends::No
.
html.write_fmt(format_args!("<li><a href=\"/page/{page}\">«</a></li>", page = page)).unwrap();
}
PageItem::Page(page) => {
html.write_fmt(format_args!("<li><a href=\"/page/{page}\">{page}</a></li>", page = page)).unwrap();
}
PageItem::CurrentPage(page) => {
html.write_fmt(format_args!("<li>{page}</li>", page = page)).unwrap();
}
PageItem::Ignore => {
html.push_str("<li>...</li>");
}
PageItem::Next(page) => {
// `PageItem::Next` variant is used when the `has_next` option is not set to `YesNoDepends::No`.
html.write_fmt(format_args!("<li><a href=\"/page/{page}\">»</a></li>", page = page)).unwrap();
}
_ => {
// `PageItem::ReservedPrev` or `PageItem::ReservedNext` variant is used only when the `has_prev` option or the `has_next` option is set to `YesNoDepends::Yes`.
}
}
} ```
```rust use paginator::{Paginator, PageItem};
let mut paginatoriter = Paginator::builder(2).buildpaginator_iter().unwrap();
for pageitem in paginatoriter.next().unwrap().paginate() { // current_page == 1 }
for pageitem in paginatoriter.next().unwrap().paginate() { // current_page == 2 } ```
Before building up a Paginator
, there is an important option, max_item_count
, can be set via PaginatorBuilder
. This option can limit the count of items on the pagination bar. This crate ignores page items far away from the current page item to stick to the count limit of items. The first/last n items can be additionally reserved.
Look at the following code for more details.
```rust use paginator::{Paginator, pageitemsto_string};
let mut p = Paginator::builder(8).maxitemcount(9).startsize(1).endsize(1).buildpaginatoriter().unwrap();
asserteq!("1* 2 3 4 5 6 7 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 2* 3 4 5 ... 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 2 3* 4 5 ... 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 2 3 4* 5 ... 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 ... 4 5* 6 7 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 ... 4 5 6* 7 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 ... 4 5 6 7* 8 >", pageitemstostring(p.next().unwrap().paginate().asslice())); asserteq!("< 1 2 3 4 5 6 7 8*", pageitemstostring(p.next().unwrap().paginate().asslice())); ```
Disable the default features to compile this crate without std.
toml
[dependencies.paginator]
version = "*"
default-features = false
https://crates.io/crates/paginator
https://docs.rs/paginator