R/golem_utils_ui.R

Defines functions col_1 col_2 col_3 col_4 col_6 col_8 col_10 col_12 rep_br with_red_star jq_hide display undisplay tagRemoveAttributes named_to_li list_to_p list_to_li

#' Turn an R list into an HTML list
#'
#' @param list An R list
#' @param class a class for the list
#' 
#' @return an HTML list
#' @noRd
#' 
#' @examples
#' list_to_li(c("a","b"))
#'
#' @importFrom htmltools tags tagAppendAttributes tagList
list_to_li <- function(list, class = NULL)
{
    if (is.null(class)){
        tagList(
            lapply(
                list, 
                tags$li
          )
        )
    } else {
        res <- lapply(
            list, 
            tags$li
        )
        res <- lapply(
            res, 
            function(x) {
                tagAppendAttributes(
                  x, 
                  class = class
              )
            }
        )
        tagList(res)
    }
}

#' @importFrom htmltools tags tagAppendAttributes tagList
list_to_p <- function(list, class = NULL){
    if (is.null(class)){
        tagList(
            lapply(
                list, 
                tags$p
            )
        )
    } else {
        res <- lapply(
            list, 
            tags$p
        )
        res <- lapply(
            res, 
            function(x) { 
                tagAppendAttributes(
                    x, 
                    class = class
                )
            }
        )
        tagList(res)
    }
}

#' @importFrom htmltools tags tagAppendAttributes tagList
named_to_li <- function(list, class = NULL)
{
    if(is.null(class)){
        res <- mapply(
            function(x, y){
                tags$li(
                    HTML(
                        sprintf("<b>%s:</b> %s", y, x)
                    )
                )
              },
            list, 
            names(list), 
            SIMPLIFY = FALSE
        )
        tagList(res)
    } else {
        res <- mapply(
          function(x, y){
            tags$li(
              HTML(
                sprintf("<b>%s:</b> %s", y, x)
              )
            )
          },
          list,
          names(list), 
          SIMPLIFY = FALSE
        )
        res <- lapply(
          res, 
          function(x) {
            tagAppendAttributes(
              x, 
              class = class
            )
          }
        )
        tagList(res)
    }
}

#' Remove a tag attribute
#'
#' @param tag the tag
#' @param ... the attributes to remove
#'
#' @return a new tag
#' @noRd
#' 
#' @examples
#' a <- shiny::tags$p(src = "plop", "pouet")
#' tagRemoveAttributes(a, "src")
tagRemoveAttributes <- function(tag, ...) {
  attrs <- as.character(list(...))
  for (i in seq_along(attrs)) {
    tag$attribs[[ attrs[i] ]] <- NULL
  }
  tag
}

#' Hide or display a tag
#' 
#' @param tag the tag
#' 
#' @return a tag
#' @noRd
#' 
#' @examples
#' ## Hide
#' a <- shiny::tags$p(src = "plop", "pouet")
#' undisplay(a)
#' b <- shiny::actionButton("go_filter", "go")
#' undisplay(b)
#' 
#' @importFrom htmltools tagList
undisplay <- function(tag) {
  # if not already hidden
  if (
    !is.null(tag$attribs$style) && 
    !grepl("display:\\s+none", tag$attribs$style)
  ) {
    tag$attribs$style <- paste(
      "display: none;", 
      tag$attribs$style
    )
  } else {
    tag$attribs$style <- "display: none;"
  }
  tag
}

#' @importFrom htmltools tagList
display <- function(tag) {
  if (
    !is.null(tag$attribs$style) && 
    grepl("display:\\s+none", tag$attribs$style)
  ) {
    tag$attribs$style <- gsub(
      "(\\s)*display:(\\s)*none(\\s)*(;)*(\\s)*", 
      "", 
      tag$attribs$style
    )
  }
  tag
}

#' Hide an elements by calling jquery hide on it
#' 
#' @param id the id of the element to hide
#' 
#' @noRd
#' 
#' @importFrom htmltools tags
jq_hide <- function(id) {
  tags$script(sprintf("$('#%s').hide()", id))
}

#' Add a red star at the end of the text
#'
#' Adds a red star at the end of the text
#' (for example for indicating mandatory fields).
#'
#' @param text the HTLM text to put before the red star
#'
#' @return an html element
#' @noRd
#' 
#' @examples
#' with_red_star("Enter your name here")
#' 
#' @importFrom htmltools tags HTML
with_red_star <- function(text) {
  htmltools::tags$span(
    HTML(
      paste0(
        text,
        htmltools::tags$span(
          style = "color:red", "*"
        )
      )
    )
  )
}



#' Repeat tags$br
#'
#' @param times the number of br to return
#'
#' @return the number of br specified in times
#' @noRd
#' 
#' @examples
#' rep_br(5)
#' 
#' @importFrom htmltools HTML
rep_br <- function(times = 1) {
    HTML(rep("<br/>", times = times))
}

#' Columns wrappers
#' 
#' These are convenient wrappers around 
#' `column(12, ...)`, `column(6, ...)`, `column(4, ...)`...
#' 
#' @noRd
#' 
#' @importFrom shiny column
col_12 <- function(...){
    column(12, ...)
}

#' @importFrom shiny column
col_10 <- function(...){
    column(10, ...)
}

#' @importFrom shiny column
col_8 <- function(...){
    column(8, ...)
}

#' @importFrom shiny column
col_6 <- function(...){
    column(6, ...)
}


#' @importFrom shiny column
col_4 <- function(...){
    column(4, ...)
}


#' @importFrom shiny column
col_3 <- function(...){
    column(3, ...)
}


#' @importFrom shiny column
col_2 <- function(...){
  column(2, ...)
}


#' @importFrom shiny column
col_1 <- function(...){
    column(1, ...)
}
Fjeanneret/multiSight documentation built on April 6, 2022, 7:59 a.m.