Skip to content
Snippets Groups Projects
Commit 582d653b authored by jens.preussner's avatar jens.preussner :ghost:
Browse files

Implemented size restriction for pages

parent c29de5b8
No related branches found
No related tags found
No related merge requests found
......@@ -10,6 +10,17 @@ setGeneric("add_component", function(object, ...) standardGeneric("add_component
#' @rdname idashboard-class
#' @export
setMethod("add_component", "i2dashboard", function(object, page = "default", component, ...) {
name <- .create_page_name(page)
if (!(name %in% names(object@pages))) {
warning(sprintf("i2dashboard object does not contain a page named '%s'", name))
return(object)
}
if(length(object@pages[[name]]$components) + 1 > object@pages[[name]]$max_components) {
warning(sprintf("Not enough space left on page '%s'", name))
return(object)
}
pn <- strsplit(component, "::")[[1]]
eval_function <- if(length(pn) == 1) {
get(paste0("render_", pn[[1]]), envir = asNamespace("i2dash"), mode = "function")
......@@ -18,12 +29,7 @@ setMethod("add_component", "i2dashboard", function(object, page = "default", com
}
component <- do.call(eval_function, args = list(object, ...))
object@pages[[name]]$components <- append(object@pages[[name]]$components, component)
name <- .create_page_name(page)
if (name %in% names(object@pages)){
object@pages[[name]]$components <- append(object@pages[[name]]$components, component)
} else {
warning(sprintf("i2dashboard object does not contain a page named '%s'", name))
}
return(object)
})
......@@ -22,7 +22,7 @@ setClass("i2dashboard",
interactive = FALSE,
theme = "yeti",
workdir = getwd(),
pages = list(default = list(title = "Default page", layout = NULL, menu = NULL, components = list()))
pages = list(default = list(title = "Default page", layout = "default", menu = NULL, components = list(), max_components = Inf))
)
)
......
......@@ -24,41 +24,25 @@ setGeneric("add_page", function(object, ...) standardGeneric("add_page"))
setMethod("add_page", "i2dashboard", function(object, page, title, layout = "storyboard", menu = NULL, ...) {
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())
max_components <- switch(layout,
"default" = Inf,
"storyboard" = Inf,
"focal_left" = 3,
"2x2_grid" = 4
)
if(name %in% names(object@pages)) {
warning(paste("The page", name, "already exists and will be overidden."))
if(base::interactive()) {
override_page <- menu(c("Yes, overwrite page", "Cancel"), title = "Do you want to overwrite this page?")
skip <- switch(override_page,
"1" = FALSE,
"2" = TRUE)
if (skip) stop("Aborted.")
}
} else {
warning("A page with this 'page'-argument already exists. The existing page will be overwritten.")
object@pages[[name]] <- list(title = title, layout = layout, menu = menu, components = list())
}
object@pages[[name]] <- list(title = title, layout = layout, menu = menu, components = list(), max_components = max_components)
return(object)
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment