Modularize dependency handling in R

This commit is contained in:
Winston Chang
2016-03-23 15:46:03 -05:00
parent 09c93bfb39
commit 2fcb4dbe50
3 changed files with 23 additions and 14 deletions

View File

@@ -27,3 +27,21 @@ createWebDependency <- function(dependency) {
return(dependency)
}
# Given a Shiny tag object, process singletons and dependencies. Returns a list
# with rendered HTML and dependency objects.
processDeps <- function(tags, session) {
ui <- takeSingletons(tags, session$singletons, desingleton=FALSE)$ui
ui <- surroundSingletons(ui)
dependencies <- lapply(
resolveDependencies(findDependencies(ui)),
createWebDependency
)
names(dependencies) <- NULL
list(
html = doRenderTags(ui),
deps = dependencies
)
}

View File

@@ -69,9 +69,12 @@ showNotification <- function(ui, duration = 5, closeButton = TRUE,
if (is.null(id))
id <- randomID()
res <- processDeps(ui, session)
session$sendNotification("show",
list(
html = as.character(htmltools::as.tags(ui)),
html = res$html,
deps = res$deps,
duration = if (!is.null(duration)) duration * 1000,
closeButton = closeButton,
id = id,

View File

@@ -276,19 +276,7 @@ renderUI <- function(expr, env=parent.frame(), quoted=FALSE, func=NULL) {
if (is.null(result) || length(result) == 0)
return(NULL)
result <- takeSingletons(result, shinysession$singletons, desingleton=FALSE)$ui
result <- surroundSingletons(result)
dependencies <- lapply(resolveDependencies(findDependencies(result)),
createWebDependency)
names(dependencies) <- NULL
# renderTags returns a list with head, singletons, and html
output <- list(
html = doRenderTags(result),
deps = dependencies
)
return(output)
processDeps(result, shinysession)
})
}