# Given the name of a license, return the appropriate link HTML for the # license, which may just be the name of the license if the name is # unrecognized. # # Recognizes the 'standard' set of licenses used for R packages # (see http://cran.r-project.org/doc/manuals/R-exts.html) licenseLink <- function(licenseName) { licenses <- list( "GPL-2" = "https://gnu.org/licenses/gpl-2.0.txt", "GPL-3" = "https://gnu.org/licenses/gpl-3.0.txt", "LGPL-3" = "https://www.gnu.org/licenses/lgpl-3.0.txt", "LGPL-2" = "http://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt", "LGPL-2.1" = "http://www.gnu.org/licenses/lgpl-2.1.txt", "AGPL-3" = "http://www.gnu.org/licenses/agpl-3.0.txt", "Artistic-2.0" = "http://www.r-project.org/Licenses/Artistic-2.0", "BSD_2_clause" = "http://www.r-project.org/Licenses/BSD_2_clause", "BSD_3_clause" = "http://www.r-project.org/Licenses/BSD_3_clause", "MIT" = "http://www.r-project.org/Licenses/MIT") if (exists(licenseName, where = licenses)) { tags$a(href=licenses[[licenseName]], licenseName) } else { licenseName } } # Returns tags containing showcase directives intended for the of the # document. showcaseHead <- function() { mdfile <- file.path.ci(getwd(), 'Readme.md') with(tags, tagList( script(src="shared/highlight/highlight.pack.js"), script(src="shared/showdown/compressed/showdown.js"), script(src="shared/jquery-ui/jquery-ui-min.js"), script(src="shared/shiny-showcase.js"), link(rel="stylesheet", type="text/css", href="shared/highlight/rstudio.css"), link(rel="stylesheet", type="text/css", href="shared/shiny-showcase.css"), link(rel="stylesheet", type="text/css", href="shared/font-awesome/css/font-awesome.min.css"), if (file.exists(mdfile)) script(type="text/markdown", id="showcase-markdown-content", paste(readLines(mdfile), collapse="\n")) else "" )) } # Returns tags containing the application metadata (title and author) in # showcase mode. appMetadata <- function(desc) { cols <- colnames(desc) if ("Title" %in% cols) with(tags, h4(class="muted shiny-showcase-apptitle", desc[1,"Title"], if ("Author" %in% cols) small( br(), "by", if ("AuthorUrl" %in% cols) a(href=desc[1,"AuthorUrl"], class="shiny-showcase-appauthor", desc[1,"Author"]) else desc[1,"Author"], if ("AuthorEmail" %in% cols) a(href=paste("mailto:", desc[1,"AuthorEmail"], sep = ''), class="shiny-showcase-appauthoreemail", desc[1,"AuthorEmail"]) else "") else "")) else "" } # Returns tags containing the application's code in Bootstrap-style tabs in # showcase mode. showcaseCodeTabs <- function(codeLicense) { rFiles <- list.files(pattern = "\\.R$") with(tags, div(id="showcase-code-tabs", button(id="showcase-code-position-toggle", class="btn btn-default btn-small", onclick="toggleCodePosition()", i(class="fa fa-level-up", "show with app")), ul(class="nav nav-tabs", lapply(rFiles, function(rFile) { li(class=if (rFile == "server.R") "active" else "", a(href=paste("#", gsub(".", "_", rFile, fixed=TRUE), "_code", sep=""), "data-toggle"="tab", rFile)) })), div(class="tab-content", id="showcase-code-content", lapply(rFiles, function(rFile) { div(class=paste("tab-pane", if (rFile == "server.R") " active" else "", sep=""), id=paste(gsub(".", "_", rFile, fixed=TRUE), "_code", sep=""), pre(class="shiny-code", # We can't use tag$code here since we need to prevent # whitespace from being emitted between ... HTML(paste('', paste(readLines(file.path.ci(getwd(), rFile)), collapse="\n"), '', sep="")))) })), codeLicense)) } # Returns tags containing the showcase application information (readme and # code). showcaseAppInfo <- function() { descfile <- file.path.ci(getwd(), "DESCRIPTION") hasDesc <- file.exists(descfile) readmemd <- file.path.ci(getwd(), "Readme.md") hasReadme <- file.exists(readmemd) if (hasDesc) { desc <- read.dcf(descfile) } with(tags, div(class="container-fluid shiny-code-container well", id="showcase-well", div(class="row-fluid", if (hasDesc || hasReadme) { div(id="showcase-app-metadata", class="span4", if (hasDesc) appMetadata(desc) else "", if (hasReadme) div(id="readme-md")) } else "", div(id="showcase-code-inline", class=if (hasReadme || hasDesc) "span8" else "span10 offset1", showcaseCodeTabs( if (hasDesc && "License" %in% colnames(desc)) { small(class="showcase-code-license muted", "Code license: ", licenseLink(desc[1,"License"])) } else ""))))) } # Returns the body of the showcase document, given the HTML it should wrap. showcaseBody <- function(htmlBody) { with(tags, tagList( table(id="showcase-app-code", tr(td(id="showcase-app-container", class="showcase-app-container-expanded", HTML(htmlBody), td(id="showcase-sxs-code", class="showcase-sxs-code-collapsed")))), showcaseAppInfo())) } # Sets the defaults for showcase mode (for app boot). setShowcaseDefault <- function(showcaseDefault) { .globals$showcaseDefault <- showcaseDefault .globals$showcaseOverride <- as.logical(showcaseDefault) }