R/bulma-pagination.R

Defines functions bulma_pagination_previous bulma_pagination

Documented in bulma_pagination bulma_pagination_previous

#' @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("&hellip;")
  )) %>%
    add_class("bulma_pagination_ellipsis")

}
tjpalanca/bulma.R documentation built on Dec. 23, 2021, 10:58 a.m.