Gentelella Shiny

This is an R Shiny HTML Template version of the gentelella bootstrap theme.

Download .zip Download .tar.gz View on GitHub

gentelellaShiny

Travis-CI Build Status

This is an R Shiny HTML Template version of the gentelella bootstrap theme.

Features

  • A unique looking Shiny dashboard
  • Login authentication page (requires googleAuthR)
  • Profile name and picture pulled from G+ (requires googleID)
  • Dynamic headline tiles
  • Dynamic progress bar visualisation
  • Custom box for plots including date picker in header
  • Custom collapsible box for dashboard elements

A demo app for viewing GoogleAnalytics data is available by running runExample()

Screenshot after logging in

The demo uses googleAnalyticsR to download data, so won't look like much if you login with an account with no GA :) Replace with your own data source and everything else will work though.

Install

devtools::install_github("MarkEdmondson1234/gentelellaShiny")

For logins you also need GoogleID

devtools::install_github("MarkEdmondson1234/googleID")

For the demo to work it uses googleAnalyticsR

install.packages("googleAnalyticsR")

Elements

Top tiles

A tile to show headline metrics

Plot Box

A box with datepicker for plots

Collapsible box

A box to display other dashboard content

Progress bars

For showing things like performance against target

Other Shiny elements

Any other Shiny UI elements can also be used, including htmlwidgets. A couple of examples are shown below:

Google Analytics dropdown

From googleAnalyticsR, a UI to selet GA view:

Gauge

From flexdashboards:

To use

A special function gentelellaPage() has been created that you pass normal ui.R elements to, that will then render each parameter in order to each row of content on the page.

If you want more items to appear in one row, then pass them in a shiny::tagList

Example:

In ui.R

## to appear in one row
boxRow <- tagList(
  dashboard_box(uiOutput("progress_bar2"), box_title = "Targets"),
  dashboard_box(gaugeOutput("gauge1"), box_title = "Flexdashboard Gauge", menuItems = NULL),
  dashboard_box(p("More interesting stuff"))
)

## each parameter holds UI elements that are rendered per row in order down the content page
gentelellaPage(
  column(width = 12, googleAnalyticsR::authDropdownUI("auth_dropdown")),
  tileCountRow(tileCountUI("e1"), tileCountUI("e2"), tileCountUI("e3"),
               tileCountUI("e4"), tileCountUI("e5"), tileCountUI("e6")),
  graph_box(dygraphOutput("trend_plot"),
            datepicker = dateRangeInput("datepicker_id", NULL, start = Sys.Date() - 300)),
  boxRow
)

gentelellaPage() also includes some named parameters to set options such as sidebar menu items, title tag and footer images.

## create menu items for sidebar using sidebarElement
menuItems <- list(
  sideBarElement(" Home ",
                 icon = icon("home"),
                 list(a(href="index.html", "Dashboard"),
                      a(href="index2.html", "Dashboard2"),
                      a(href="index3.html", "Dashboard3"))                        
  ),
  sideBarElement(" Contact ",
                 icon = icon("envelope"),
                 list(a(href="http://twitter.com/HoloMarkeD", 
                        HTML(paste(icon("twitter"), "@HoloMarkeD"))),
                      a(href="http://code.markedmondson.me", 
                        HTML(paste(icon("rss"), " Blog"))),
                      a(href="https://github.com/MarkEdmondson1234/gentelellaShiny", 
                        HTML(paste(icon("github"), " Github"))))                        
  ),
  sideBarElement(column(width = 12, googleAuthR::googleAuthUI("auth"),
                        icon = NULL)
  ))

gentelellaPage(
  tileCountRow(tileCountUI("e1"), tileCountUI("e2"), tileCountUI("e3"),
               tileCountUI("e4"), tileCountUI("e5"), tileCountUI("e6")),

  ## start named parameters:
  menuItems = menuItems,
  title_tag = "Shiny HTML Template",
  site_title = a(class="site_title", icon("eye"), span("Shiny HTML")),
  footer = "Made in Denmark"
)

There is no support for different layouts other than the defaults in gentelellaPage(), in that case use shiny::htmlTemplate directly and edit index.html to include your R code blocks in {{ brackets }}

Example files

A demo app for viewing GoogleAnalytics data is available by running runExample().

It will start up a login page and a (logged out) Shiny dashboard. Use the login page or the login button on the Shiny app to start.

In production the Shiny app would be running on a server and user's start at the login page.

Login page

googleAuthUI creates a login URL that includes a security code.

Set the security code to be static (default it changes each launch of googleAuthR) via options, e.g. options(googleAuthR.securitycode = "gentelellXXXXXXX") in the top of server.R

Generate the login URL with the security code, and use as the login link in the login.html file.

The login.html file can then be used for logins, with the Shiny app holding logic to not show content without logging in (e.g. req(auth()))