forked from rstudio/learnr
/
initialize.R
47 lines (38 loc) · 1.37 KB
/
initialize.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#' Initialize Tutorial R Markdown Extensions
#'
#' One time initialization of R Markdown extensions required by the
#' \pkg{tutor} package. This function is typically called automatically
#' as a result of using exercises or questions.
#'
#' @export
initialize_tutorial <- function() {
# helper function for one time initialization
if (isTRUE(getOption("knitr.in.progress")) &&
!isTRUE(knitr::opts_knit$get("tutorial.initialized"))) {
# html dependencies
knitr::knit_meta_add(list(
rmarkdown::html_dependency_jquery(),
rmarkdown::html_dependency_font_awesome(),
bootbox_html_dependency(),
localforage_html_dependency(),
tutorial_html_dependency(),
tutorial_autocompletion_html_dependency(),
tutorial_diagnostics_html_dependency()
))
# session initialization (forward tutorial metadata)
rmarkdown::shiny_prerendered_chunk(
'server',
sprintf('learnr:::register_http_handlers(session, metadata = %s)',
dput_to_string(rmarkdown::metadata$tutorial)),
singleton = TRUE
)
# set initialized flag to ensure single initialization
knitr::opts_knit$set(tutorial.initialized = TRUE)
}
}
dput_to_string <- function(x) {
conn <- textConnection("dput_to_string", "w")
on.exit({close(conn)})
dput(x, file = conn)
paste0(textConnectionValue(conn), collapse = "")
}