Skip to content
Snippets Groups Projects
pages.R 2.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • jens.preussner's avatar
    jens.preussner committed
    #' Sanitize component names
    #'
    #' This function takes a character string, replaces spaces by underscores and runs make.names.
    #'
    #' @param x A character string.
    #'
    #' @return A sanitized string.
    .create_page_name <- function(x) {
      x %>% tolower %>% gsub(x = ., pattern = " ", replacement = "_") %>% make.names %>% return
    }
    
    setGeneric("add_page", function(object, ...) standardGeneric("add_page"))
    
    #' Method to add a page to an i2dashboard object
    #'
    #' @param object A \linkS4class{i2dash::i2dashboard} object.
    #' @param page The name of the page to be added.
    #' @param title The title of the page to be added.
    #' @param layout The page layout (see below).
    #' @param menu The name of the menu, under which the page should appear.
    #'
    #' @rdname idashboard-class
    #' @export
    
    Ustjanzew's avatar
    Ustjanzew committed
    setMethod("add_page", "i2dashboard", function(object, page, title, layout = "storyboard", menu = NULL, ...) {
    
    jens.preussner's avatar
    jens.preussner committed
      name <- .create_page_name(page)
    
    
      if (base::interactive()){
        if (name %in% names(object@pages)){
          print("A page with this 'page'-argument already exists.")
          answer1 <- menu(c("Yes", "No"), title="Do you want to overwrite this page? If 'No' you can input another 'page'-argument or cancel.")
          switch (answer1,
                  "1"={
                    print("The page was overwritten.")
                    object@pages[[name]] <- list(title = title, layout = layout, menu = menu, components = list())
                  },
                  "2"={
                    answer2 <- menu(c("Yes", "Cancel"), title="Do you want to provide another 'page'-argument?")
                    switch (answer2,
                            "1"={
                              new_name <- readline("Please input a new 'page'-argument: ")
                              if (is.character(new_name)){
                                new_name <- .create_page_name(new_name)
                                print("Page with new 'page'-argument created.")
                                object@pages[[new_name]] <- list(title = title, layout = layout, menu = menu, components = list())
                              }
                            },
                            "2"={
                              print("Function 'add_page' canceled")
                            }
                    )
                  }
    
        } else {
          object@pages[[name]] <- list(title = title, layout = layout, menu = menu, components = list())
    
    Ustjanzew's avatar
    Ustjanzew committed
        }
      } else {
    
        warning("A page with this 'page'-argument already exists. The existing page will be overwritten.")
    
    Ustjanzew's avatar
    Ustjanzew committed
        object@pages[[name]] <- list(title = title, layout = layout, menu = menu, components = list())
      }
    
    jens.preussner's avatar
    jens.preussner committed
      return(object)
    })
    
    setGeneric("remove_page", function(object, ...) standardGeneric("remove_page"))
    
    Ustjanzew's avatar
    Ustjanzew committed
    
    #' Method to remove a page to an i2dashboard object
    #'
    #' @param object A \linkS4class{i2dash::i2dashboard} object.
    #' @param page The name of the page to be removed.
    #'
    #' @rdname idashboard-class
    #' @export
    
    jens.preussner's avatar
    jens.preussner committed
    setMethod("remove_page", "i2dashboard", function(object, page) {
      name <- .create_page_name(page)
      object@pages[[name]] <- NULL
      return(object)
    })