---
title: "tableHTML"
author: "Theo Boutaris"
date: "`r Sys.Date()`"
output: 
  html_document
vignette: >
  %\VignetteIndexEntry{tableHTML Themes}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

Here we are exploring the different themes that can be used with `tableHTML`

```{r load_package}
library(tableHTML)
```

### Specifying a theme

Although the package has been designed so that it gives the utmost freedom to the user to style the
HTML table as they please, some themes have been included for those who need something quick and nice.
The package offers three themes for now: scientific, rshiny-blue, and colorize. To use them, you need to use the
`add_theme` function. 
     
**Notice**: When working with themes you can still add extra css (using the add\_css\_* family from
below) but you will not be able to overwrite the styling that is there e.g. to change the width of
the lines.

## scientific

This is the scientifc theme where the table design resembles scientific tables for publishing.

```{r theme-scientific}
tableHTML(mtcars, widths = c(140, rep(50, 11))) %>%
 add_theme('scientific')
```

\

```{r scientific_2}
tableHTML(mtcars,
          rownames = FALSE,
          widths = c(140, rep(50, 11)),
          row_groups = list(c(10, 10, 12), c('Group 1', 'Group 2', 'Group 3')),
          second_headers = list(c(3, 4, 5), c('col1', 'col2', 'col3'))) %>%
  add_theme('scientific')
```

## rshiny-blue     

This theme matches the color of the standard shiny apps.

```{r theme-rshiny-blue}
tableHTML(mtcars, widths = c(140, rep(50, 11))) %>%
 add_theme('rshiny-blue')
```

\

```{r theme_rshiny_blue_2}
tableHTML(mtcars,
          rownames = FALSE,
          widths = c(140, rep(50, 11)),
          row_groups = list(c(10, 10, 12), c('Group 1', 'Group 2', 'Group 3')),
          second_headers = list(c(3, 4, 5), c('col1', 'col2', 'col3'))) %>%
  add_theme('rshiny-blue')
```

## colorize

This theme is used to create MS Excel-like tables (with any color you like). You can also use it to highlight 
specific rows (usually corresponding to some aggregation function, for example totals or averages). The arguments that can be 
used with the colorize theme are `color`, `total_rows`, and `id_column`. The default color is 
steelblue and by default no rows are chosen to be highlighted. You can also highlight the first column 
with the `id_column` argument. The documentation can be found at `?add_theme_colorize`.

```{r totals_1}
df <- mtcars[, 1:6]
df %>%
  tableHTML(widths = c(150, rep(70, ncol(df))), rownames = TRUE) %>%
  add_theme('colorize')
```

\

```{r totals_2}
df <- mtcars[, 1:6]
df %>%
  tableHTML(widths = c(150, rep(70, ncol(df))), rownames = TRUE) %>%
  add_theme('colorize', color = 'darkgreen')
```

\

```{r totals_3}
df <- mtcars[, 1:6]
df['Mean', ] <- (df %>% apply(2, mean))
df %>%
  tableHTML(widths = c(150, rep(70, ncol(df))), rownames = TRUE) %>%
  add_theme('colorize', color = c('steelblue', 'red'))
```

\

#### Here we are hightlighting the last row which contains the average of the columns.

```{r totals_4}
df <- mtcars[, 1:6]
df['Mean', ] <- (df %>% apply(2, mean))
df %>%
  tableHTML(widths = c(150, rep(70, ncol(df))), rownames = TRUE) %>%
  add_theme('colorize', color = c('steelblue', 'red'), total_rows = nrow(df))
```

## Totals with add_theme_colorize

Instead of using the umbrella function `add_theme`, you could also explicitly use `add_theme_colorize`. The two functions are identical in
terms of the output. To see the documentation visit `?add_theme_colorize`.

```{r total_theme_1}
# one total row
x1 <- sample(1:100, 12)
x2 <- sample(1:100, 12)
x3 <- sample(1:100, 12)

df <- data.frame(Month = month.abb, x1, x2, x3,
                 stringsAsFactors = FALSE)

df[nrow(df) + 1, ] <- c('Total', sum(x1), sum(x2), sum(x3))

df %>%
  tableHTML(widths = rep(50, 4), rownames = FALSE) %>%
  add_theme_colorize(color = 'darkred', total_rows = nrow(df))
```

\

```{r total_theme_2}
df_q <- rbind(
  df[1:3, ],
  c('Sum1', sum(x1[1:3]), sum(x2[1:3]), sum(x3[1:3])),
  df[4:6, ],
  c('Sum2', sum(x1[4:6]), sum(x2[4:6]), sum(x3[4:6])),
  df[7:9, ],
  c('Sum3', sum(x1[7:9]), sum(x2[7:9]), sum(x3[7:9])),
  df[10:12, ],
  c('Sum4', sum(x1[10:12]), sum(x2[10:12]), sum(x3[10:12])))

# Two colors and an id_column
df_q %>%
  tableHTML(widths = rep(50, 5),
            rownames = FALSE,
            row_groups = list(c(4, 4, 4, 4),
                              c('Q1', 'Q2', 'Q3', 'Q4'))) %>%
  add_theme_colorize(color = c('pink3', 'yellow2'),
                     total_rows = c(4, 8, 12, 16), id_column = TRUE)

```




