#' @title
#' Bulma Pagination
#'
#' @description
#' A responsive, usable, and flexible pagination.
#'
#' [Pagination](https://bulma.io/documentation/components/pagination/).
#'
#' @family Bulma Components
#' @name bulma_pagination
NULL
#' @describeIn bulma_pagination
#' main container, contains `bulma_pagination_previous()`,
#' `bulma_pagination_next()`, and `bulma_pagination_list()`.
#'
#' @param ... (tags) content
#' @param align,size,rounded styling parameters
#' @param tag (fn) default HTML tag
#'
#' @export
bulma_pagination <- function(...,
align = c("left", "right", "centered"),
size = c("small", "medium", "large"),
rounded = FALSE,
tag = tags$nav) {
walk(tagList(...), assert_multi_class,
c("bulma_pagination_previous", "bulma_pagination_next",
"bulma_pagination_list"))
assert_function(tag)
align <- match_arg(align)
size <- match_arg(size)
tag(
class = "pagination",
...
) %>%
bulma_align(align) %>%
bulma_size(size) %>%
when(rounded, bulma_is(., "rounded")) %>%
add_class("bulma_pagination")
}
#' @describeIn bulma_pagination
#' Previous button
#'
#' @param disabled (flag) button is disabled
#'
#' @export
bulma_pagination_previous <- function(..., disabled = FALSE, tag = tags$a) {
assert_function(tag)
tag(
class = "pagination-previous",
...
) %>%
when(disabled, bulma_disabled(.)) %>%
add_class("bulma_pagination_previous")
}
#' @describeIn bulma_pagination
#' Next button
#'
#' @export
bulma_pagination_next <- function(..., disabled = FALSE, tag = tags$a) {
assert_function(tag)
tag(
class = "pagination-next",
...
) %>%
when(disabled, bulma_disabled(.)) %>%
add_class("bulma_pagination_next")
}
#' @describeIn bulma_pagination
#' list of numbers or pages; contains [`bulma_pagination_link()`] and
#' [`bulma_pagination_ellipsis()`].
#'
#' @export
bulma_pagination_list <- function(..., tag = tags$ul) {
assert_function(tag)
walk(tagList(...),
assert_multi_class,
c("bulma_pagination_link", "bulma_pagination_ellipsis"))
tag(
class = "pagination-list",
...
) %>%
add_class("bulma_pagination_list")
}
#' @describeIn bulma_pagination
#' A certain page number or link in series of numbers or links
#' @param outer_tag,inner_tag (fn) default HTML tag
#' @param current (flg) whether this link is the current page
#' @export
bulma_pagination_link <- function(...,
current = FALSE,
outer_tag = tags$li,
inner_tag = tags$a) {
assert_flag(current)
assert_function(outer_tag)
assert_function(inner_tag)
inner_tag(
class = "pagination-link",
...
) %>%
when(current, bulma_is(., "current")) %>%
outer_tag() %>%
add_class("bulma_pagination_link")
}
#' @describeIn bulma_pagination
#' An ellipsis to show that certain `bulma_pagination_link()`s have been
#' skipped.
#' @export
bulma_pagination_ellipsis <- function(outer_tag = tags$li,
inner_tag = tags$span) {
assert_function(outer_tag)
assert_function(inner_tag)
outer_tag(inner_tag(
class = "pagination-ellipsis",
HTML("…")
)) %>%
add_class("bulma_pagination_ellipsis")
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.