R/golem_utils_ui.R

Defines functions includeRMarkdown col_1 col_2 col_3 col_4 col_6 col_8 col_10 col_12 enurl 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
# @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 glue glue
#' @importFrom htmltools tags tagAppendAttributes tagList
named_to_li <- function(list, class = NULL){
  if(is.null(class)){
    res <- mapply(
      function(x, y){
        tags$li(HTML(glue("<b>{y}:</b> {x}")))
      },
      list, names(list), SIMPLIFY = FALSE)
    #res <- lapply(res, HTML)
    tagList(res)
  } else {
    res <- mapply(
      function(x, y){
        tags$li(HTML(glue("<b>{y}:</b> {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
# @export
#
# @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
# @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
#' @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
#
# @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
# @export
#
# @examples
# rep_br(5)
#
#' @importFrom htmltools HTML
rep_br <- function(times = 1) {
  HTML(rep("<br/>", times = times))
}

# Create an url
#
# @param url the URL
# @param text the text to display
#
# @return an a tag
# @export
#
# @examples
# enurl("https://www.thinkr.fr", "ThinkR")
enurl <- function(url, text){
  tags$a(href = url, text)
}

# Columns wrappers
# 
# These are convenient wrappers around 
# `column(12, ...)`, `column(6, ...)`, `column(4, ...)`...
# 
# @export
# @rdname columns
#' @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, ...)
}

#' Include Content From a File
#' 
#' Load rendered RMarkdown from a file and turn into HTML.
#' 
#' @rdname includeRMarkdown
#' @export
#' 
#' @importFrom rmarkdown render
#' @importFrom markdown markdownToHTML
#' @importFrom htmltools HTML
includeRMarkdown <- function(path){
  
  md <- tempfile(fileext = '.md')
  
  on.exit(unlink(md),add = TRUE)
  
  rmarkdown::render(
    path,
    output_format = 'md_document',
    output_dir = tempdir(),
    output_file = md,quiet = TRUE)
  
  html <- markdown::markdownToHTML(md, fragment.only = TRUE)
  
  Encoding(html) <- "UTF-8"
  
  return(HTML(html))
}
kismet303/lopo3000 documentation built on Dec. 5, 2019, 8:40 a.m.