From 73caab6d38b63eddc5d5a63acc0c92b5503cc35c Mon Sep 17 00:00:00 2001 From: Carson Sievert Date: Thu, 1 Jun 2017 17:11:52 -0500 Subject: [PATCH 1/3] return only the htmlwidgets dependency if no config file exists, addresses #179 --- R/utils.R | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/R/utils.R b/R/utils.R index 845c052e..6cbef81a 100644 --- a/R/utils.R +++ b/R/utils.R @@ -41,11 +41,23 @@ toJSON <- function(x) { #' @param name name of the widget. #' @param package name of the package, defaults to the widget name. #' @export -getDependency <- function(name, package = name){ - config = sprintf("htmlwidgets/%s.yaml", name) - jsfile = sprintf("htmlwidgets/%s.js", name) +getDependency <- function(name, package = name) { + htmlWidgetDep <- htmlDependency( + "htmlwidgets", + packageVersion("htmlwidgets"), + src = system.file("www", package = "htmlwidgets"), + script = "htmlwidgets.js" + ) + + config <- sprintf("htmlwidgets/%s.yaml", name) + jsfile <- sprintf("htmlwidgets/%s.js", name) - config = yaml::yaml.load_file( + # do less magic if no yaml file exists + if (!file.exists(config)) { + return(list(htmlWidgetDep)) + } + + config <- yaml::yaml.load_file( system.file(config, package = package) ) widgetDep <- lapply(config$dependencies, function(l){ @@ -70,10 +82,7 @@ getDependency <- function(name, package = name){ ), argsDep)) c( - list(htmlDependency("htmlwidgets", packageVersion("htmlwidgets"), - src = system.file("www", package="htmlwidgets"), - script = "htmlwidgets.js" - )), + list(htmlWidgetDep), widgetDep, list(bindingDep) ) From 0125ff919859353ed8e758677babb7ffc88aef29 Mon Sep 17 00:00:00 2001 From: Carson Sievert Date: Tue, 6 Jun 2017 10:36:30 -0500 Subject: [PATCH 2/3] ensure config/jsfile are system files before checking whether config exists --- R/utils.R | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/R/utils.R b/R/utils.R index 6cbef81a..1ac10de4 100644 --- a/R/utils.R +++ b/R/utils.R @@ -48,18 +48,16 @@ getDependency <- function(name, package = name) { src = system.file("www", package = "htmlwidgets"), script = "htmlwidgets.js" ) - - config <- sprintf("htmlwidgets/%s.yaml", name) - jsfile <- sprintf("htmlwidgets/%s.js", name) + + config <- system.file(sprintf("htmlwidgets/%s.yaml", name), package = package) + jsfile <- system.file(sprintf("htmlwidgets/%s.js", name), package = package) # do less magic if no yaml file exists - if (!file.exists(config)) { + if (identical(config, "")) { return(list(htmlWidgetDep)) } - - config <- yaml::yaml.load_file( - system.file(config, package = package) - ) + + config <- yaml::yaml.load_file(config) widgetDep <- lapply(config$dependencies, function(l){ l$src = system.file(l$src, package = package) do.call(htmlDependency, l) @@ -73,7 +71,7 @@ getDependency <- function(name, package = name) { if (packageVersion('htmltools') < '0.3.3') { bindingDir <- tempfile("widgetbinding") dir.create(bindingDir, mode = "0700") - file.copy(system.file(jsfile, package = package), bindingDir) + file.copy(jsfile, bindingDir) } else argsDep <- list(all_files = FALSE) } bindingDep <- do.call(htmlDependency, c(list( From 1c1ace4b8ca006af99960c4cce859fc80d72d990 Mon Sep 17 00:00:00 2001 From: Carson Sievert Date: Tue, 6 Jun 2017 10:42:36 -0500 Subject: [PATCH 3/3] better comment --- R/utils.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/utils.R b/R/utils.R index 1ac10de4..2ec13648 100644 --- a/R/utils.R +++ b/R/utils.R @@ -52,7 +52,10 @@ getDependency <- function(name, package = name) { config <- system.file(sprintf("htmlwidgets/%s.yaml", name), package = package) jsfile <- system.file(sprintf("htmlwidgets/%s.js", name), package = package) - # do less magic if no yaml file exists + # htmlwidget authors may need to place dependencies *before* the binding + # (i.e., jsfile) at print time. So, if no yaml exists, we just include the + # htmlwidgets.js dependency and leave it to the author to declare their + # binding dependency inside htmlwidget::createWidget() if (identical(config, "")) { return(list(htmlWidgetDep)) }