Generate CSS from R code. Initialise a new CSS environment with new, use rule to define CSS rules.

Attributes

There are hundreds of attributes to pass to the three-dot construct (...), a comprehensive list of them can be found on w3schools.

Note that Linne accepts camelCase for convenience, e.g.: font-size or fontSize.

Methods

Public methods


Method define()

Usage

Linne$define(...)

Arguments

...

Named variables to define.

Details

Define variables.

Returns

Self: the Linne object.

Examples

Linne$new()$define(baseColor = "blue")


Method rule()

Usage

Linne$rule(selector, ...)

Arguments

selector

An object of class selector as returned by the sel_* family of functions.

...

Declarations: properties and their values. This accepts camelcase, e.g.: font-style or fontStyle.

Details

Rule

Define a CSS rule.

Returns

Self: the Linne object.

Examples

Linne$new()$rule(sel_id("myButton"), color = "blue", fontSize = 50)


Method build()

Usage

Linne$build()

Details

Builds CSS

Builds the CSS from definitions and rules.

Examples

Linne$
 new()$
 define(primary_color = 'red')$
 rule(
   sel_id("myButton"), 
   color = primary_color, 
   fontSize = 50
 )$
 rule(
   sel_class("container"),
   backgroundColor = primary_color
 )$
 build()


Method get_css()

Usage

Linne$get_css(build = TRUE)

Arguments

build

Whether to build the CSS with the build method.

Details

Retrieve the CSS

Returns

A string.

Examples

Linne$new()$rule(sel_id("myId"), fontSize = 20)$get_css()


Method show_css()

Usage

Linne$show_css(build = TRUE)

Arguments

build

Whether to build the CSS with the build method.

Details

Prints Generated CSS

Examples

Linne$new()$rule(sel_id("myButton"), color = "blue")$show_css()


Method import()

Usage

Linne$import(url)

Arguments

url

URL to import.

Details

Import

Import from a url or path.

Examples

Linne$new()$import('https://fonts.googleapis.com/css2?family=Roboto')


Method include()

Usage

Linne$include(build = TRUE)

Arguments

build

Whether to build the CSS with the build method.

Details

Include in Shiny

Includes the CSS in shiny, place the call to this method anywhere in the shiny UI.

Returns

htmltools::tags

Examples

# generate CSS
css <- Linne$
  new()$
  define(grey = '#c4c4c4')$
  rule(
    sel_id("myButton"), 
    backgroundColor = 'red', 
    fontSize = 20,
    color = grey
  )$
  rule(
    sel_class("aClass"),
    color = grey
  )

# include in an app
library(shiny)

ui <- fluidPage(
  css$include(),
  h1("Some text", class = "aClass"),
  actionButton("myButton", "Am I red?", class = "aClass")
)

server <- function(input, output){
  output$myPlot <- renderPlot(plot(cars))
}

if(interactive())
 shinyApp(ui, server)


Method write()

Usage

Linne$write(path = "style.css", pretty = FALSE, build = TRUE)

Arguments

path

Path to file.

pretty

Whether to keep tabs and newlines.

build

Whether to build the CSS with the build method.

Details

Save

Write the CSS to file.

Examples

\dontrun{Linne$new()$rule(sel_id("id"), fontStyle = "italic")$write("styles.css")}


Method print()

Usage

Linne$print()

Details

Print

Prints information on the Linne object.


Method inject()

Usage

Linne$inject(build = TRUE, session = shiny::getDefaultReactiveDomain())

Arguments

build

Whether to build the CSS with the build method.

session

A valid shiny session.

Details

Inject CSS

Dynamically inject CSS from the server of a shiny application.

Examples

library(shiny)

ui <- fluidPage(
  useLinne(),
  actionButton("change", "Change me!")
)

server <- function(input, output){

  linne <- Linne$
    new()$
    rule(
      sel_id("change"),
      color = "white",
      backgroundColor = "black"
    )

  observeEvent(input$change, {
    linne$inject()
  })

}

if(interactive())
 shinyApp(ui, server)


Method clone()

The objects of this class are cloneable with this method.

Usage

Linne$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Examples

## ------------------------------------------------ ## Method `Linne$define` ## ------------------------------------------------ Linne$new()$define(baseColor = "blue") ## ------------------------------------------------ ## Method `Linne$rule` ## ------------------------------------------------ Linne$new()$rule(sel_id("myButton"), color = "blue", fontSize = 50) ## ------------------------------------------------ ## Method `Linne$build` ## ------------------------------------------------ Linne$ new()$ define(primary_color = 'red')$ rule( sel_id("myButton"), color = primary_color, fontSize = 50 )$ rule( sel_class("container"), backgroundColor = primary_color )$ build() ## ------------------------------------------------ ## Method `Linne$get_css` ## ------------------------------------------------ Linne$new()$rule(sel_id("myId"), fontSize = 20)$get_css()
#> [1] "#myId{font-size:20px;}"
## ------------------------------------------------ ## Method `Linne$show_css` ## ------------------------------------------------ Linne$new()$rule(sel_id("myButton"), color = "blue")$show_css()
#> #myButton{ #> color:blue; #> }
## ------------------------------------------------ ## Method `Linne$import` ## ------------------------------------------------ Linne$new()$import('https://fonts.googleapis.com/css2?family=Roboto') ## ------------------------------------------------ ## Method `Linne$include` ## ------------------------------------------------ # generate CSS css <- Linne$ new()$ define(grey = '#c4c4c4')$ rule( sel_id("myButton"), backgroundColor = 'red', fontSize = 20, color = grey )$ rule( sel_class("aClass"), color = grey ) # include in an app library(shiny) ui <- fluidPage( css$include(), h1("Some text", class = "aClass"), actionButton("myButton", "Am I red?", class = "aClass") )
#> ! Using `include` in prod is not advised, see `write` method
server <- function(input, output){ output$myPlot <- renderPlot(plot(cars)) } if(interactive()) shinyApp(ui, server) ## ------------------------------------------------ ## Method `Linne$write` ## ------------------------------------------------ if (FALSE) Linne$new()$rule(sel_id("id"), fontStyle = "italic")$write("styles.css") ## ------------------------------------------------ ## Method `Linne$inject` ## ------------------------------------------------ library(shiny) ui <- fluidPage( useLinne(), actionButton("change", "Change me!") ) server <- function(input, output){ linne <- Linne$ new()$ rule( sel_id("change"), color = "white", backgroundColor = "black" ) observeEvent(input$change, { linne$inject() }) } if(interactive()) shinyApp(ui, server)