├── .Rbuildignore
├── .github
└── workflows
│ └── main.yml
├── .gitignore
├── 01-intro.Rmd
├── 02-literature.Rmd
├── 03-method.Rmd
├── 04-application.Rmd
├── 05-summary.Rmd
├── 06-references.Rmd
├── DESCRIPTION
├── README.md
├── _bookdown.yml
├── _bookdown_files
└── bspagedjs_files
│ └── figure-html
│ ├── nice-fig-1.png
│ └── unnamed-chunk-3-1.png
├── _output.yml
├── book.bib
├── bspagedjs.Rproj
├── build.R
├── index.Rmd
├── mathjax.html
├── package-lock.json
├── package.json
├── packages.bib
└── style.css
/.Rbuildignore:
--------------------------------------------------------------------------------
1 | ^.*\.Rproj$
2 | ^\.Rproj\.user$
3 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 |
2 | on:
3 | push:
4 | branches:
5 | - master
6 | - main
7 |
8 | name: book-workflow
9 |
10 | jobs:
11 | bookdown:
12 | name: Render Book
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: actions/checkout@v2
16 |
17 | - uses: r-lib/actions/setup-r@v1
18 |
19 | - uses: r-lib/actions/setup-pandoc@v1
20 |
21 | - name: Cache R packages
22 | uses: actions/cache@v1
23 | with:
24 | path: ${{ env.R_LIBS_USER }}
25 | key: ${{ hashFiles('DESCRIPTION') }}-2
26 |
27 | - name: Install dependencies
28 | run: Rscript -e 'install.packages("remotes")' -e 'options(install.packages.check.source = "both")' -e 'remotes::install_deps(dependencies = TRUE)' -e 'remotes::install_github("rstudio/bslib")'
29 |
30 | - name: Why oh why
31 | run: Rscript -e 'requireNamespace("bslib")'
32 |
33 | - name: Render book html
34 | run: Rscript -e 'bookdown::render_book("index.Rmd")'
35 |
36 | - uses: actions/setup-node@v1
37 |
38 | - name: Install paged-js
39 | run: |
40 | npm install . -g
41 | npm install -g pagedjs-cli pagedjs --unsafe-perm=true
42 |
43 | - name: PDF
44 | run: Rscript -e 'source("build.R")'
45 |
46 | - name: Commit results
47 | run: |
48 | git config --global user.email "maelle.salmon@yahoo.se"
49 | git config --global user.name "Maëlle Salmon"
50 | cd docs
51 | git init
52 | git add .
53 | git commit -m 'new book'
54 | git push https://${{github.actor}}:${{secrets.GITHUB_TOKEN}}@github.com/${{github.repository}}.git HEAD:gh-pages --force
55 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .Rhistory
2 | .RData
3 | .Rproj.user
4 | node_modules
5 | docs
6 |
--------------------------------------------------------------------------------
/01-intro.Rmd:
--------------------------------------------------------------------------------
1 | # Introduction {#intro}
2 |
3 | [Book PDF](result.pdf)
4 |
5 | You can label chapter and section titles using `{#label}` after them, e.g., we can reference Chapter \@ref(intro). If you do not manually label them, there will be automatic labels anyway, e.g., Chapter \@ref(methods).
6 |
7 |
10 |
11 | When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are
12 | $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
13 |
14 | ::: {.alert .alert-dismissible .alert-warning}
15 | BAD IDEA!!
16 | :::
17 |
18 | Info
19 |
20 | Figures and tables with captions will be placed in `figure` and `table` environments, respectively.
21 |
22 | ```{r nice-fig, fig.cap='Here is a nice figure!', out.width='80%', fig.asp=.75, fig.align='center'}
23 | par(mar = c(4, 4, .1, .1))
24 | plot(pressure, type = 'b', pch = 19)
25 | ```
26 |
27 | Reference a figure by its code chunk label with the `fig:` prefix, e.g., see Figure \@ref(fig:nice-fig). Similarly, you can reference tables generated from `knitr::kable()`, e.g., see Table \@ref(tab:nice-tab).
28 |
29 | ## More!
30 |
31 | blabla
32 |
33 | ## Table
34 |
35 | ```{r nice-tab, tidy=FALSE}
36 | knitr::kable(
37 | head(iris, 20), caption = 'Here is a nice table!',
38 | booktabs = TRUE
39 | )
40 | ```
41 |
42 | You can write citations, too. For example, we are using the **bookdown** package [@R-bookdown] in this sample book, which was built on top of R Markdown and **knitr** [@xie2015].
43 |
--------------------------------------------------------------------------------
/02-literature.Rmd:
--------------------------------------------------------------------------------
1 | # Literature
2 |
3 | Here is a review of existing methods.
4 |
--------------------------------------------------------------------------------
/03-method.Rmd:
--------------------------------------------------------------------------------
1 | # Methods
2 |
3 | We describe our methods in this chapter.
4 |
--------------------------------------------------------------------------------
/04-application.Rmd:
--------------------------------------------------------------------------------
1 | # Applications
2 |
3 | Some _significant_ applications are demonstrated in this chapter.
4 |
5 | ## Example one
6 |
7 | ## Example two
8 |
--------------------------------------------------------------------------------
/05-summary.Rmd:
--------------------------------------------------------------------------------
1 | # Final Words
2 |
3 | We have finished a nice book.
4 |
--------------------------------------------------------------------------------
/06-references.Rmd:
--------------------------------------------------------------------------------
1 | `r if (knitr::is_html_output()) '
2 | # References {-}
3 | '`
4 |
--------------------------------------------------------------------------------
/DESCRIPTION:
--------------------------------------------------------------------------------
1 | Package: bspagedjs
2 | Title: bookdown::bs4_book() and pagedjs-cli fun
3 | Version: 0.0.0.9000
4 | Authors@R:
5 | person(given = "Maëlle",
6 | family = "Salmon",
7 | role = c("cre", "aut"),
8 | email = "msmaellesalmon@gmail.com",
9 | comment = c(ORCID = "0000-0002-2815-0399"))
10 | Description: What the package does (one paragraph).
11 | License: MIT + file LICENSE
12 | Encoding: UTF-8
13 | LazyData: true
14 | Roxygen: list(markdown = TRUE)
15 | RoxygenNote: 7.1.1.9000
16 | Suggests:
17 | bookdown (>= 0.21.3),
18 | bslib,
19 | downlit,
20 | xml2,
21 | fs
22 | Remotes:
23 | rstudio/bookdown,
24 | rstudio/bslib,
25 | r-lib/downlit,
26 | rstudio/htmltools,
27 | yihui/xfun
28 | URL: https://github.com/maelle/bspagedjs
29 | BugReports: https://github.com/maelle/bspagedjs/issues
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Book PDF without LaTeX? :sunglasses:
2 |
3 | This is a minimal example of a book based on R Markdown and **bookdown** (https://github.com/rstudio/bookdown).
4 |
5 | ## Result
6 |
7 | * [HTML](https://maelle.github.io/bspagedjs/index.html)
8 | * [PDF](https://maelle.github.io/bspagedjs/result.pdf)
9 |
10 |
11 | ## Context
12 |
13 | This uses the `bs4_book()` template for HTML and then for getting a PDF
14 |
15 | * tweaks of the HTML and merging of all chapters
16 | * some print CSS, see [stylesheet](style.css)
17 | * pagedjs-cli.
18 |
19 | See [build.R](build.R)
20 |
21 | Why use this and not LaTeX?
22 |
23 | * procrastination? :see_no_evil:
24 | * not having to redefine colors, environments for the LaTeX output
25 | * not having to knit the same Rmd's twice for the two outputs (which also excludes using pagedown).
26 |
27 | Why not pagedown?
28 |
29 | * I want a non paginated HTML in the browser, and I want the PDF to be pre-generated.
30 |
31 |
32 | ## What's needed?
33 |
34 | * dev bookdown and co to use `bs4_book()`
35 | * a stylesheet with print CSS
36 | * mathjax without loading messages see [mathjax.html](mathjax.html) (or no mathjax if your book does not feature equations)
37 |
38 | So in `_output.yml` e.g.
39 |
40 | ```yaml
41 | bookdown::bs4_book:
42 | theme:
43 | bootswatch: "litera"
44 | primary: "#982a31"
45 | fg: "#2b2121"
46 | bg: "#ffffff"
47 | repo: https://github.com/maelle/bspagedjs
48 | css: style.css
49 | mathjax: NULL
50 | includes:
51 | in_header: mathjax.html
52 | ```
53 |
54 | * pagedjs-cli (locally, or using GitHub Actions)
55 |
--------------------------------------------------------------------------------
/_bookdown.yml:
--------------------------------------------------------------------------------
1 | book_filename: "bspagedjs"
2 | delete_merged_file: true
3 | language:
4 | ui:
5 | chapter_name: "Chapter "
6 | output_dir: docs
7 |
--------------------------------------------------------------------------------
/_bookdown_files/bspagedjs_files/figure-html/nice-fig-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maelle/bspagedjs/bea19c3ca1143d7b94b76bfe7567d0db8006f82d/_bookdown_files/bspagedjs_files/figure-html/nice-fig-1.png
--------------------------------------------------------------------------------
/_bookdown_files/bspagedjs_files/figure-html/unnamed-chunk-3-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maelle/bspagedjs/bea19c3ca1143d7b94b76bfe7567d0db8006f82d/_bookdown_files/bspagedjs_files/figure-html/unnamed-chunk-3-1.png
--------------------------------------------------------------------------------
/_output.yml:
--------------------------------------------------------------------------------
1 | bookdown::bs4_book:
2 | theme:
3 | bootswatch: "litera"
4 | primary: "#982a31"
5 | fg: "#2b2121"
6 | bg: "#ffffff"
7 | repo: https://github.com/maelle/bspagedjs
8 | css: style.css
9 | mathjax: NULL
10 | includes:
11 | in_header: mathjax.html
12 |
--------------------------------------------------------------------------------
/book.bib:
--------------------------------------------------------------------------------
1 | @Book{xie2015,
2 | title = {Dynamic Documents with {R} and knitr},
3 | author = {Yihui Xie},
4 | publisher = {Chapman and Hall/CRC},
5 | address = {Boca Raton, Florida},
6 | year = {2015},
7 | edition = {2nd},
8 | note = {ISBN 978-1498716963},
9 | url = {http://yihui.org/knitr/},
10 | }
11 |
--------------------------------------------------------------------------------
/bspagedjs.Rproj:
--------------------------------------------------------------------------------
1 | Version: 1.0
2 |
3 | RestoreWorkspace: Default
4 | SaveWorkspace: Default
5 | AlwaysSaveHistory: Default
6 |
7 | EnableCodeIndexing: Yes
8 | UseSpacesForTab: Yes
9 | NumSpacesForTab: 2
10 | Encoding: UTF-8
11 |
12 | RnwWeave: Sweave
13 | LaTeX: pdfLaTeX
14 |
15 | AutoAppendNewline: Yes
16 | StripTrailingWhitespace: Yes
17 |
18 | BuildType: Website
19 |
--------------------------------------------------------------------------------
/build.R:
--------------------------------------------------------------------------------
1 | # the nice HTML book
2 | bookdown::render_book("index.Rmd")
3 |
4 | # the place where we tweak, merge and print HTMLs
5 | if (fs::dir_exists("docs2")) fs::dir_delete("docs2")
6 | fs::dir_copy("docs", "docs2")
7 |
8 | htmls <- fs::dir_ls("docs2", glob = "*.html")
9 |
10 | tweak_page <- function(page_path) {
11 | # put TOC at the beginning and fix text
12 | page <- xml2::read_html(page_path)
13 | page_toc <- xml2::xml_find_first(page, ".//nav[@id='toc']")
14 | toc_title <- xml2::xml_find_first(page_toc, "h2")
15 | xml2::xml_text(toc_title) <- "In this chapter"
16 | source_title <- xml2::xml_find_first(page_toc, "//a[@id='book-edit']")
17 | xml2::xml_text(source_title) <- "Edit this chapter"
18 |
19 | xml2::xml_add_sibling(
20 | xml2::xml_find_first(page, ".//main[@id='content']//h1"),
21 | page_toc,
22 | where = "after"
23 | )
24 | xml2::xml_remove(page_toc)
25 |
26 | # fix cross-refs
27 | hrefs <- xml2::xml_find_all(page, ".//a")
28 | xml2::xml_attr(hrefs, "href") <- gsub("^.*\\.html#", "#", xml2::xml_attr(hrefs, "href"))
29 |
30 | xml2::write_html(page, page_path)
31 | }
32 |
33 | lapply(htmls, tweak_page)
34 |
35 | # Now we'll add the main content of all pages to index dot html
36 | page1 <- xml2::read_html("docs2/index.html")
37 |
38 |
39 |
40 | get_contents <- function(page_path, main = xml2::xml_find_first(page1, ".//main[@id='content']")) {
41 | page <- xml2::read_html(page_path)
42 | contents <- xml2::xml_contents(xml2::xml_find_first(page, ".//main[@id='content']"))
43 |
44 | for (i in contents) {
45 | xml2::xml_add_child(main, i)
46 | }
47 | }
48 |
49 | # Important to get HTMLs in the right order, thanks book TOC
50 | ordered_htmls <- xml2::xml_attr(
51 | xml2::xml_find_all(page1, ".//ul[contains(@class, 'book-toc')]//li//a"),
52 | "href"
53 | )
54 | ordered_htmls <- ordered_htmls[ordered_htmls!="index.html"]
55 | ordered_htmls <- file.path("docs2", ordered_htmls)
56 |
57 | lapply(ordered_htmls, get_contents)
58 |
59 | # fix toc links
60 | toc <- xml2::xml_find_first(page1, ".//nav")
61 | active <- xml2::xml_find_first(toc, ".//a[@class='active']")
62 | xml2::xml_attr(active, "class") <- ''
63 | toc_links <- xml2::xml_find_all(toc, ".//a[@class='']")
64 | xml2::xml_attr(toc_links, "href") <- paste0(
65 | "#",
66 | gsub(
67 | "\\.html$",
68 | "",
69 | xml2::xml_attr(toc_links, "href")
70 | )
71 | )
72 | # fix first anchor
73 | xml2::xml_attr(toc_links[1], "href") <- xml2::xml_attr(xml2::xml_find_first(page1, ".//a[@class='anchor']"), "href")
74 |
75 | for (i in rev(xml2::xml_contents(toc))) {
76 |
77 | xml2::xml_add_sibling(
78 | xml2::xml_child(xml2::xml_find_first(page1, ".//main[@id='content']")),
79 | i,
80 | .where = "before"
81 | )
82 | }
83 |
84 |
85 | xml2::write_html(page1, "docs2/index.html")
86 |
87 | # Print!
88 | system("pagedjs-cli ./docs2/index.html -o docs/result.pdf -w 227 -h 291")
89 |
--------------------------------------------------------------------------------
/index.Rmd:
--------------------------------------------------------------------------------
1 | ---
2 | title: "A Minimal Book Example"
3 | author: "Yihui Xie"
4 | date: "`r Sys.Date()`"
5 | site: bookdown::bookdown_site
6 | documentclass: book
7 | bibliography: [book.bib, packages.bib]
8 | biblio-style: apalike
9 | link-citations: yes
10 | description: "This is a minimal example of using the bookdown package to write a book. The output format for this example is bookdown::gitbook."
11 | ---
12 |
13 | # Prerequisites
14 |
15 | This is a _sample_ book written in **Markdown**. You can use anything that Pandoc's Markdown supports, e.g., a math equation $a^2 + b^2 = c^2$.
16 |
17 | The **bookdown** package can be installed from CRAN or Github:
18 |
19 | ```{r eval=FALSE}
20 | install.packages("bookdown")
21 | # or the development version
22 | # devtools::install_github("rstudio/bookdown")
23 | ```
24 |
25 | Remember each Rmd file contains one and only one chapter, and a chapter is defined by the first-level heading `#`.
26 |
27 | To compile this example to PDF, you need XeLaTeX. You are recommended to install TinyTeX (which includes XeLaTeX): .
28 |
29 | ```{r include=FALSE}
30 | # automatically create a bib database for R packages
31 | knitr::write_bib(c(
32 | .packages(), 'bookdown', 'knitr', 'rmarkdown'
33 | ), 'packages.bib')
34 | ```
35 |
--------------------------------------------------------------------------------
/mathjax.html:
--------------------------------------------------------------------------------
1 |
4 |
6 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testsite",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/polyfill": {
8 | "version": "7.12.1",
9 | "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.12.1.tgz",
10 | "integrity": "sha512-X0pi0V6gxLi6lFZpGmeNa4zxtwEmCs42isWLNjZZDE0Y8yVfgu0T2OAHlzBbdYlqbW/YXVvoBHpATEM+goCj8g==",
11 | "requires": {
12 | "core-js": "^2.6.5",
13 | "regenerator-runtime": "^0.13.4"
14 | }
15 | },
16 | "@babel/runtime": {
17 | "version": "7.12.5",
18 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
19 | "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
20 | "requires": {
21 | "regenerator-runtime": "^0.13.4"
22 | }
23 | },
24 | "@pdf-lib/fontkit": {
25 | "version": "0.0.4",
26 | "resolved": "https://registry.npmjs.org/@pdf-lib/fontkit/-/fontkit-0.0.4.tgz",
27 | "integrity": "sha512-MfwaMqLKRuXXOuTisAUiie+cBH/Wo50SPBDQB5tmVqEHpJGkyh7eYi/xPgFugtPHEeWP6INUk5t9L7IAbV7jmw==",
28 | "requires": {
29 | "pako": "^1.0.6"
30 | }
31 | },
32 | "@pdf-lib/standard-fonts": {
33 | "version": "0.0.4",
34 | "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-0.0.4.tgz",
35 | "integrity": "sha512-2pg8hXnChVAF6aSFraXtwB0cx/AgE15FvuLJbdPJSq9LYp1xMp0lapH4+t1HsdD9cA05rnWYLqlEBwS4YK1jLg==",
36 | "requires": {
37 | "base64-arraybuffer": "^0.1.5",
38 | "pako": "^1.0.6"
39 | }
40 | },
41 | "@types/mime-types": {
42 | "version": "2.1.0",
43 | "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.0.tgz",
44 | "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM="
45 | },
46 | "accepts": {
47 | "version": "1.3.7",
48 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
49 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
50 | "requires": {
51 | "mime-types": "~2.1.24",
52 | "negotiator": "0.6.2"
53 | }
54 | },
55 | "agent-base": {
56 | "version": "5.1.1",
57 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
58 | "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
59 | },
60 | "ansi-regex": {
61 | "version": "5.0.0",
62 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
63 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
64 | },
65 | "ansi-styles": {
66 | "version": "4.3.0",
67 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
68 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
69 | "requires": {
70 | "color-convert": "^2.0.1"
71 | }
72 | },
73 | "array-flatten": {
74 | "version": "1.1.1",
75 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
76 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
77 | },
78 | "async-limiter": {
79 | "version": "1.0.1",
80 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
81 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
82 | },
83 | "balanced-match": {
84 | "version": "1.0.0",
85 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
86 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
87 | },
88 | "base64-arraybuffer": {
89 | "version": "0.1.5",
90 | "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz",
91 | "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg="
92 | },
93 | "body-parser": {
94 | "version": "1.19.0",
95 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
96 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
97 | "requires": {
98 | "bytes": "3.1.0",
99 | "content-type": "~1.0.4",
100 | "debug": "2.6.9",
101 | "depd": "~1.1.2",
102 | "http-errors": "1.7.2",
103 | "iconv-lite": "0.4.24",
104 | "on-finished": "~2.3.0",
105 | "qs": "6.7.0",
106 | "raw-body": "2.4.0",
107 | "type-is": "~1.6.17"
108 | }
109 | },
110 | "brace-expansion": {
111 | "version": "1.1.11",
112 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
113 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
114 | "requires": {
115 | "balanced-match": "^1.0.0",
116 | "concat-map": "0.0.1"
117 | }
118 | },
119 | "buffer-crc32": {
120 | "version": "0.2.13",
121 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
122 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
123 | },
124 | "buffer-from": {
125 | "version": "1.1.1",
126 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
127 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
128 | },
129 | "bytes": {
130 | "version": "3.1.0",
131 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
132 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
133 | },
134 | "chalk": {
135 | "version": "3.0.0",
136 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
137 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
138 | "requires": {
139 | "ansi-styles": "^4.1.0",
140 | "supports-color": "^7.1.0"
141 | }
142 | },
143 | "clear-cut": {
144 | "version": "2.0.2",
145 | "resolved": "https://registry.npmjs.org/clear-cut/-/clear-cut-2.0.2.tgz",
146 | "integrity": "sha1-CC2zLsqkSjWKewhoUv4dVIC77tE="
147 | },
148 | "cli-cursor": {
149 | "version": "3.1.0",
150 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
151 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
152 | "requires": {
153 | "restore-cursor": "^3.1.0"
154 | }
155 | },
156 | "cli-spinners": {
157 | "version": "2.5.0",
158 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz",
159 | "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ=="
160 | },
161 | "clone": {
162 | "version": "1.0.4",
163 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
164 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
165 | },
166 | "color-convert": {
167 | "version": "2.0.1",
168 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
169 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
170 | "requires": {
171 | "color-name": "~1.1.4"
172 | }
173 | },
174 | "color-name": {
175 | "version": "1.1.4",
176 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
177 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
178 | },
179 | "commander": {
180 | "version": "3.0.2",
181 | "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz",
182 | "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow=="
183 | },
184 | "concat-map": {
185 | "version": "0.0.1",
186 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
187 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
188 | },
189 | "concat-stream": {
190 | "version": "1.6.2",
191 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
192 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
193 | "requires": {
194 | "buffer-from": "^1.0.0",
195 | "inherits": "^2.0.3",
196 | "readable-stream": "^2.2.2",
197 | "typedarray": "^0.0.6"
198 | }
199 | },
200 | "content-disposition": {
201 | "version": "0.5.3",
202 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
203 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
204 | "requires": {
205 | "safe-buffer": "5.1.2"
206 | }
207 | },
208 | "content-type": {
209 | "version": "1.0.4",
210 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
211 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
212 | },
213 | "cookie": {
214 | "version": "0.4.0",
215 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
216 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
217 | },
218 | "cookie-signature": {
219 | "version": "1.0.6",
220 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
221 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
222 | },
223 | "core-js": {
224 | "version": "2.6.11",
225 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
226 | "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
227 | },
228 | "core-util-is": {
229 | "version": "1.0.2",
230 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
231 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
232 | },
233 | "css-tree": {
234 | "version": "1.0.0-alpha.39",
235 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz",
236 | "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==",
237 | "requires": {
238 | "mdn-data": "2.0.6",
239 | "source-map": "^0.6.1"
240 | }
241 | },
242 | "d": {
243 | "version": "1.0.1",
244 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
245 | "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
246 | "requires": {
247 | "es5-ext": "^0.10.50",
248 | "type": "^1.0.1"
249 | }
250 | },
251 | "debug": {
252 | "version": "2.6.9",
253 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
254 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
255 | "requires": {
256 | "ms": "2.0.0"
257 | }
258 | },
259 | "defaults": {
260 | "version": "1.0.3",
261 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
262 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
263 | "requires": {
264 | "clone": "^1.0.2"
265 | }
266 | },
267 | "depd": {
268 | "version": "1.1.2",
269 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
270 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
271 | },
272 | "destroy": {
273 | "version": "1.0.4",
274 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
275 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
276 | },
277 | "ee-first": {
278 | "version": "1.1.1",
279 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
280 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
281 | },
282 | "encodeurl": {
283 | "version": "1.0.2",
284 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
285 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
286 | },
287 | "es5-ext": {
288 | "version": "0.10.53",
289 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
290 | "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
291 | "requires": {
292 | "es6-iterator": "~2.0.3",
293 | "es6-symbol": "~3.1.3",
294 | "next-tick": "~1.0.0"
295 | }
296 | },
297 | "es6-iterator": {
298 | "version": "2.0.3",
299 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
300 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
301 | "requires": {
302 | "d": "1",
303 | "es5-ext": "^0.10.35",
304 | "es6-symbol": "^3.1.1"
305 | }
306 | },
307 | "es6-symbol": {
308 | "version": "3.1.3",
309 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
310 | "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
311 | "requires": {
312 | "d": "^1.0.1",
313 | "ext": "^1.1.2"
314 | }
315 | },
316 | "escape-html": {
317 | "version": "1.0.3",
318 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
319 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
320 | },
321 | "escape-string-regexp": {
322 | "version": "1.0.5",
323 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
324 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
325 | },
326 | "etag": {
327 | "version": "1.8.1",
328 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
329 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
330 | },
331 | "event-emitter": {
332 | "version": "0.3.5",
333 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
334 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
335 | "requires": {
336 | "d": "1",
337 | "es5-ext": "~0.10.14"
338 | }
339 | },
340 | "express": {
341 | "version": "4.17.1",
342 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
343 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
344 | "requires": {
345 | "accepts": "~1.3.7",
346 | "array-flatten": "1.1.1",
347 | "body-parser": "1.19.0",
348 | "content-disposition": "0.5.3",
349 | "content-type": "~1.0.4",
350 | "cookie": "0.4.0",
351 | "cookie-signature": "1.0.6",
352 | "debug": "2.6.9",
353 | "depd": "~1.1.2",
354 | "encodeurl": "~1.0.2",
355 | "escape-html": "~1.0.3",
356 | "etag": "~1.8.1",
357 | "finalhandler": "~1.1.2",
358 | "fresh": "0.5.2",
359 | "merge-descriptors": "1.0.1",
360 | "methods": "~1.1.2",
361 | "on-finished": "~2.3.0",
362 | "parseurl": "~1.3.3",
363 | "path-to-regexp": "0.1.7",
364 | "proxy-addr": "~2.0.5",
365 | "qs": "6.7.0",
366 | "range-parser": "~1.2.1",
367 | "safe-buffer": "5.1.2",
368 | "send": "0.17.1",
369 | "serve-static": "1.14.1",
370 | "setprototypeof": "1.1.1",
371 | "statuses": "~1.5.0",
372 | "type-is": "~1.6.18",
373 | "utils-merge": "1.0.1",
374 | "vary": "~1.1.2"
375 | }
376 | },
377 | "ext": {
378 | "version": "1.4.0",
379 | "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz",
380 | "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==",
381 | "requires": {
382 | "type": "^2.0.0"
383 | },
384 | "dependencies": {
385 | "type": {
386 | "version": "2.1.0",
387 | "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
388 | "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="
389 | }
390 | }
391 | },
392 | "extract-zip": {
393 | "version": "1.7.0",
394 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
395 | "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
396 | "requires": {
397 | "concat-stream": "^1.6.2",
398 | "debug": "^2.6.9",
399 | "mkdirp": "^0.5.4",
400 | "yauzl": "^2.10.0"
401 | }
402 | },
403 | "fd-slicer": {
404 | "version": "1.1.0",
405 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
406 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
407 | "requires": {
408 | "pend": "~1.2.0"
409 | }
410 | },
411 | "finalhandler": {
412 | "version": "1.1.2",
413 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
414 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
415 | "requires": {
416 | "debug": "2.6.9",
417 | "encodeurl": "~1.0.2",
418 | "escape-html": "~1.0.3",
419 | "on-finished": "~2.3.0",
420 | "parseurl": "~1.3.3",
421 | "statuses": "~1.5.0",
422 | "unpipe": "~1.0.0"
423 | }
424 | },
425 | "forwarded": {
426 | "version": "0.1.2",
427 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
428 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
429 | },
430 | "fresh": {
431 | "version": "0.5.2",
432 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
433 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
434 | },
435 | "fs.realpath": {
436 | "version": "1.0.0",
437 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
438 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
439 | },
440 | "glob": {
441 | "version": "7.1.6",
442 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
443 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
444 | "requires": {
445 | "fs.realpath": "^1.0.0",
446 | "inflight": "^1.0.4",
447 | "inherits": "2",
448 | "minimatch": "^3.0.4",
449 | "once": "^1.3.0",
450 | "path-is-absolute": "^1.0.0"
451 | }
452 | },
453 | "has-flag": {
454 | "version": "4.0.0",
455 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
456 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
457 | },
458 | "http-errors": {
459 | "version": "1.7.2",
460 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
461 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
462 | "requires": {
463 | "depd": "~1.1.2",
464 | "inherits": "2.0.3",
465 | "setprototypeof": "1.1.1",
466 | "statuses": ">= 1.5.0 < 2",
467 | "toidentifier": "1.0.0"
468 | }
469 | },
470 | "https-proxy-agent": {
471 | "version": "4.0.0",
472 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
473 | "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
474 | "requires": {
475 | "agent-base": "5",
476 | "debug": "4"
477 | },
478 | "dependencies": {
479 | "debug": {
480 | "version": "4.2.0",
481 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
482 | "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
483 | "requires": {
484 | "ms": "2.1.2"
485 | }
486 | },
487 | "ms": {
488 | "version": "2.1.2",
489 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
490 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
491 | }
492 | }
493 | },
494 | "hyphenopoly": {
495 | "version": "3.4.0",
496 | "resolved": "https://registry.npmjs.org/hyphenopoly/-/hyphenopoly-3.4.0.tgz",
497 | "integrity": "sha512-FZM+oRkCSGh18RdAo38OuUM1YcteWndUlWWKrTdhoDEARAIDPwuEyib2/ugZtkgL07lDcu/nWi13F1j85Hi5Sw=="
498 | },
499 | "iconv-lite": {
500 | "version": "0.4.24",
501 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
502 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
503 | "requires": {
504 | "safer-buffer": ">= 2.1.2 < 3"
505 | }
506 | },
507 | "inflight": {
508 | "version": "1.0.6",
509 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
510 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
511 | "requires": {
512 | "once": "^1.3.0",
513 | "wrappy": "1"
514 | }
515 | },
516 | "inherits": {
517 | "version": "2.0.3",
518 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
519 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
520 | },
521 | "ipaddr.js": {
522 | "version": "1.9.1",
523 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
524 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
525 | },
526 | "is-interactive": {
527 | "version": "1.0.0",
528 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
529 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
530 | },
531 | "isarray": {
532 | "version": "1.0.0",
533 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
534 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
535 | },
536 | "katex": {
537 | "version": "0.11.1",
538 | "resolved": "https://registry.npmjs.org/katex/-/katex-0.11.1.tgz",
539 | "integrity": "sha512-5oANDICCTX0NqYIyAiFCCwjQ7ERu3DQG2JFHLbYOf+fXaMoH8eg/zOq5WSYJsKMi/QebW+Eh3gSM+oss1H/bww==",
540 | "requires": {
541 | "commander": "^2.19.0"
542 | },
543 | "dependencies": {
544 | "commander": {
545 | "version": "2.20.3",
546 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
547 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
548 | }
549 | }
550 | },
551 | "lodash": {
552 | "version": "4.17.20",
553 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
554 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
555 | },
556 | "log-symbols": {
557 | "version": "3.0.0",
558 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
559 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
560 | "requires": {
561 | "chalk": "^2.4.2"
562 | },
563 | "dependencies": {
564 | "ansi-styles": {
565 | "version": "3.2.1",
566 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
567 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
568 | "requires": {
569 | "color-convert": "^1.9.0"
570 | }
571 | },
572 | "chalk": {
573 | "version": "2.4.2",
574 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
575 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
576 | "requires": {
577 | "ansi-styles": "^3.2.1",
578 | "escape-string-regexp": "^1.0.5",
579 | "supports-color": "^5.3.0"
580 | }
581 | },
582 | "color-convert": {
583 | "version": "1.9.3",
584 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
585 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
586 | "requires": {
587 | "color-name": "1.1.3"
588 | }
589 | },
590 | "color-name": {
591 | "version": "1.1.3",
592 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
593 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
594 | },
595 | "has-flag": {
596 | "version": "3.0.0",
597 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
598 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
599 | },
600 | "supports-color": {
601 | "version": "5.5.0",
602 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
603 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
604 | "requires": {
605 | "has-flag": "^3.0.0"
606 | }
607 | }
608 | }
609 | },
610 | "mathjax": {
611 | "version": "3.1.2",
612 | "resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.1.2.tgz",
613 | "integrity": "sha512-BojKspBv4nNWzO1wC6VEI+g9gHDOhkaGHGgLxXkasdU4pwjdO5AXD5M/wcLPkXYPjZ/N+6sU8rjQTlyvN2cWiQ=="
614 | },
615 | "mdn-data": {
616 | "version": "2.0.6",
617 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz",
618 | "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA=="
619 | },
620 | "media-typer": {
621 | "version": "0.3.0",
622 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
623 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
624 | },
625 | "merge-descriptors": {
626 | "version": "1.0.1",
627 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
628 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
629 | },
630 | "methods": {
631 | "version": "1.1.2",
632 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
633 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
634 | },
635 | "mime": {
636 | "version": "1.6.0",
637 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
638 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
639 | },
640 | "mime-db": {
641 | "version": "1.44.0",
642 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
643 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
644 | },
645 | "mime-types": {
646 | "version": "2.1.27",
647 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
648 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
649 | "requires": {
650 | "mime-db": "1.44.0"
651 | }
652 | },
653 | "mimic-fn": {
654 | "version": "2.1.0",
655 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
656 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
657 | },
658 | "minimatch": {
659 | "version": "3.0.4",
660 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
661 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
662 | "requires": {
663 | "brace-expansion": "^1.1.7"
664 | }
665 | },
666 | "minimist": {
667 | "version": "1.2.5",
668 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
669 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
670 | },
671 | "mkdirp": {
672 | "version": "0.5.5",
673 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
674 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
675 | "requires": {
676 | "minimist": "^1.2.5"
677 | }
678 | },
679 | "ms": {
680 | "version": "2.0.0",
681 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
682 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
683 | },
684 | "mute-stream": {
685 | "version": "0.0.8",
686 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
687 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
688 | },
689 | "negotiator": {
690 | "version": "0.6.2",
691 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
692 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
693 | },
694 | "next-tick": {
695 | "version": "1.0.0",
696 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
697 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
698 | },
699 | "node-fetch": {
700 | "version": "2.6.1",
701 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
702 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
703 | },
704 | "on-finished": {
705 | "version": "2.3.0",
706 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
707 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
708 | "requires": {
709 | "ee-first": "1.1.1"
710 | }
711 | },
712 | "once": {
713 | "version": "1.4.0",
714 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
715 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
716 | "requires": {
717 | "wrappy": "1"
718 | }
719 | },
720 | "onetime": {
721 | "version": "5.1.2",
722 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
723 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
724 | "requires": {
725 | "mimic-fn": "^2.1.0"
726 | }
727 | },
728 | "ora": {
729 | "version": "4.1.1",
730 | "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz",
731 | "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==",
732 | "requires": {
733 | "chalk": "^3.0.0",
734 | "cli-cursor": "^3.1.0",
735 | "cli-spinners": "^2.2.0",
736 | "is-interactive": "^1.0.0",
737 | "log-symbols": "^3.0.0",
738 | "mute-stream": "0.0.8",
739 | "strip-ansi": "^6.0.0",
740 | "wcwidth": "^1.0.1"
741 | }
742 | },
743 | "pagedjs": {
744 | "version": "0.1.43",
745 | "resolved": "https://registry.npmjs.org/pagedjs/-/pagedjs-0.1.43.tgz",
746 | "integrity": "sha512-aShTeMKnF64b1ywLBt/yv2ZCw6ypxsmbRchJ/0Fd3qOodqywPLofyKsCrkgZnWtQGRZ2KeBLO+zv0r3oKprPcQ==",
747 | "requires": {
748 | "@babel/polyfill": "^7.10.1",
749 | "@babel/runtime": "^7.10.2",
750 | "clear-cut": "^2.0.2",
751 | "css-tree": "1.0.0-alpha.39",
752 | "event-emitter": "^0.3.5"
753 | }
754 | },
755 | "pagedjs-cli": {
756 | "version": "0.0.10",
757 | "resolved": "https://registry.npmjs.org/pagedjs-cli/-/pagedjs-cli-0.0.10.tgz",
758 | "integrity": "sha512-KdQQ6dSIt5xOjsBYlxK/UbpkFhVqknDvI1xP11k6X3Wz/D00uC6/rvKsZlPGkGaCArlh1UOd2tkmGu+m7KURpw==",
759 | "requires": {
760 | "commander": "^3.0.2",
761 | "express": "^4.17.1",
762 | "hyphenopoly": "^3.2.1",
763 | "katex": "^0.11.1",
764 | "lodash": "^4.17.15",
765 | "mathjax": "^3.0.0",
766 | "node-fetch": "^2.6.0",
767 | "ora": "^4.0.2",
768 | "pagedjs": "0.1.34",
769 | "pdf-lib": "0.6.4",
770 | "puppeteer": "^2.0.0",
771 | "replace-ext": "^1.0.0"
772 | },
773 | "dependencies": {
774 | "css-tree": {
775 | "version": "1.0.0-alpha.29",
776 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz",
777 | "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==",
778 | "requires": {
779 | "mdn-data": "~1.1.0",
780 | "source-map": "^0.5.3"
781 | }
782 | },
783 | "mdn-data": {
784 | "version": "1.1.4",
785 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz",
786 | "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA=="
787 | },
788 | "pagedjs": {
789 | "version": "0.1.34",
790 | "resolved": "https://registry.npmjs.org/pagedjs/-/pagedjs-0.1.34.tgz",
791 | "integrity": "sha512-ilBSaChoy8gulel16LTz8IkFDrZdVRkSBqW+TNmmDLGzo2g32EVXekc9mHQ76LnH7KTrAU3uJns80PwQlE22nQ==",
792 | "requires": {
793 | "@babel/polyfill": "^7.4.4",
794 | "@babel/runtime": "^7.4.4",
795 | "css-tree": "1.0.0-alpha.29",
796 | "event-emitter": "^0.3.5",
797 | "lodash": "^4.17.11"
798 | }
799 | },
800 | "source-map": {
801 | "version": "0.5.7",
802 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
803 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
804 | }
805 | }
806 | },
807 | "pako": {
808 | "version": "1.0.11",
809 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
810 | "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
811 | },
812 | "parseurl": {
813 | "version": "1.3.3",
814 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
815 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
816 | },
817 | "path-is-absolute": {
818 | "version": "1.0.1",
819 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
820 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
821 | },
822 | "path-to-regexp": {
823 | "version": "0.1.7",
824 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
825 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
826 | },
827 | "pdf-lib": {
828 | "version": "0.6.4",
829 | "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-0.6.4.tgz",
830 | "integrity": "sha512-5gkZnUgud2q/UDLNIKiHUdrrh8jadKRdMVnr+gdlCRctx+NooU/84iQAplmcy3AQmwMltCD6q8VVzVZJ8XZ8qw==",
831 | "requires": {
832 | "@pdf-lib/fontkit": "^0.0.4",
833 | "@pdf-lib/standard-fonts": "^0.0.4",
834 | "lodash": "^4.17.4",
835 | "pako": "^1.0.6",
836 | "png-ts": "^0.0.3",
837 | "proxy-polyfill": "^0.3.0"
838 | }
839 | },
840 | "pend": {
841 | "version": "1.2.0",
842 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
843 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
844 | },
845 | "png-ts": {
846 | "version": "0.0.3",
847 | "resolved": "https://registry.npmjs.org/png-ts/-/png-ts-0.0.3.tgz",
848 | "integrity": "sha512-Qwn3yMfbrbaN86QjrDAqD1UVJc4AV4hvBCx5Dv9libLd6D20xKtgOFs/UcvD0nnjxWlgS12kEVWCDFd9ZtwB+g==",
849 | "requires": {
850 | "pako": "^1.0.6"
851 | }
852 | },
853 | "process-nextick-args": {
854 | "version": "2.0.1",
855 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
856 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
857 | },
858 | "progress": {
859 | "version": "2.0.3",
860 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
861 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
862 | },
863 | "proxy-addr": {
864 | "version": "2.0.6",
865 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
866 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
867 | "requires": {
868 | "forwarded": "~0.1.2",
869 | "ipaddr.js": "1.9.1"
870 | }
871 | },
872 | "proxy-from-env": {
873 | "version": "1.1.0",
874 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
875 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
876 | },
877 | "proxy-polyfill": {
878 | "version": "0.3.2",
879 | "resolved": "https://registry.npmjs.org/proxy-polyfill/-/proxy-polyfill-0.3.2.tgz",
880 | "integrity": "sha512-ENKSXOMCewnQTOyqrQXxEjIhzT6dy572mtehiItbDoIUF5Sv5UkmRUc8kowg2MFvr232Uo8rwRpNg3V5kgTKbA=="
881 | },
882 | "puppeteer": {
883 | "version": "2.1.1",
884 | "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-2.1.1.tgz",
885 | "integrity": "sha512-LWzaDVQkk1EPiuYeTOj+CZRIjda4k2s5w4MK4xoH2+kgWV/SDlkYHmxatDdtYrciHUKSXTsGgPgPP8ILVdBsxg==",
886 | "requires": {
887 | "@types/mime-types": "^2.1.0",
888 | "debug": "^4.1.0",
889 | "extract-zip": "^1.6.6",
890 | "https-proxy-agent": "^4.0.0",
891 | "mime": "^2.0.3",
892 | "mime-types": "^2.1.25",
893 | "progress": "^2.0.1",
894 | "proxy-from-env": "^1.0.0",
895 | "rimraf": "^2.6.1",
896 | "ws": "^6.1.0"
897 | },
898 | "dependencies": {
899 | "debug": {
900 | "version": "4.2.0",
901 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
902 | "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
903 | "requires": {
904 | "ms": "2.1.2"
905 | }
906 | },
907 | "mime": {
908 | "version": "2.4.6",
909 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
910 | "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA=="
911 | },
912 | "ms": {
913 | "version": "2.1.2",
914 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
915 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
916 | }
917 | }
918 | },
919 | "qs": {
920 | "version": "6.7.0",
921 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
922 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
923 | },
924 | "range-parser": {
925 | "version": "1.2.1",
926 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
927 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
928 | },
929 | "raw-body": {
930 | "version": "2.4.0",
931 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
932 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
933 | "requires": {
934 | "bytes": "3.1.0",
935 | "http-errors": "1.7.2",
936 | "iconv-lite": "0.4.24",
937 | "unpipe": "1.0.0"
938 | }
939 | },
940 | "readable-stream": {
941 | "version": "2.3.7",
942 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
943 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
944 | "requires": {
945 | "core-util-is": "~1.0.0",
946 | "inherits": "~2.0.3",
947 | "isarray": "~1.0.0",
948 | "process-nextick-args": "~2.0.0",
949 | "safe-buffer": "~5.1.1",
950 | "string_decoder": "~1.1.1",
951 | "util-deprecate": "~1.0.1"
952 | }
953 | },
954 | "regenerator-runtime": {
955 | "version": "0.13.7",
956 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
957 | "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
958 | },
959 | "replace-ext": {
960 | "version": "1.0.1",
961 | "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
962 | "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw=="
963 | },
964 | "restore-cursor": {
965 | "version": "3.1.0",
966 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
967 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
968 | "requires": {
969 | "onetime": "^5.1.0",
970 | "signal-exit": "^3.0.2"
971 | }
972 | },
973 | "rimraf": {
974 | "version": "2.7.1",
975 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
976 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
977 | "requires": {
978 | "glob": "^7.1.3"
979 | }
980 | },
981 | "safe-buffer": {
982 | "version": "5.1.2",
983 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
984 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
985 | },
986 | "safer-buffer": {
987 | "version": "2.1.2",
988 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
989 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
990 | },
991 | "send": {
992 | "version": "0.17.1",
993 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
994 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
995 | "requires": {
996 | "debug": "2.6.9",
997 | "depd": "~1.1.2",
998 | "destroy": "~1.0.4",
999 | "encodeurl": "~1.0.2",
1000 | "escape-html": "~1.0.3",
1001 | "etag": "~1.8.1",
1002 | "fresh": "0.5.2",
1003 | "http-errors": "~1.7.2",
1004 | "mime": "1.6.0",
1005 | "ms": "2.1.1",
1006 | "on-finished": "~2.3.0",
1007 | "range-parser": "~1.2.1",
1008 | "statuses": "~1.5.0"
1009 | },
1010 | "dependencies": {
1011 | "ms": {
1012 | "version": "2.1.1",
1013 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1014 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1015 | }
1016 | }
1017 | },
1018 | "serve-static": {
1019 | "version": "1.14.1",
1020 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1021 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1022 | "requires": {
1023 | "encodeurl": "~1.0.2",
1024 | "escape-html": "~1.0.3",
1025 | "parseurl": "~1.3.3",
1026 | "send": "0.17.1"
1027 | }
1028 | },
1029 | "setprototypeof": {
1030 | "version": "1.1.1",
1031 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1032 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1033 | },
1034 | "signal-exit": {
1035 | "version": "3.0.3",
1036 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
1037 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
1038 | },
1039 | "source-map": {
1040 | "version": "0.6.1",
1041 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1042 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
1043 | },
1044 | "statuses": {
1045 | "version": "1.5.0",
1046 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1047 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1048 | },
1049 | "string_decoder": {
1050 | "version": "1.1.1",
1051 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1052 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1053 | "requires": {
1054 | "safe-buffer": "~5.1.0"
1055 | }
1056 | },
1057 | "strip-ansi": {
1058 | "version": "6.0.0",
1059 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
1060 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
1061 | "requires": {
1062 | "ansi-regex": "^5.0.0"
1063 | }
1064 | },
1065 | "supports-color": {
1066 | "version": "7.2.0",
1067 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1068 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1069 | "requires": {
1070 | "has-flag": "^4.0.0"
1071 | }
1072 | },
1073 | "toidentifier": {
1074 | "version": "1.0.0",
1075 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1076 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1077 | },
1078 | "type": {
1079 | "version": "1.2.0",
1080 | "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
1081 | "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
1082 | },
1083 | "type-is": {
1084 | "version": "1.6.18",
1085 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1086 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1087 | "requires": {
1088 | "media-typer": "0.3.0",
1089 | "mime-types": "~2.1.24"
1090 | }
1091 | },
1092 | "typedarray": {
1093 | "version": "0.0.6",
1094 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
1095 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
1096 | },
1097 | "unpipe": {
1098 | "version": "1.0.0",
1099 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1100 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1101 | },
1102 | "util-deprecate": {
1103 | "version": "1.0.2",
1104 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1105 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1106 | },
1107 | "utils-merge": {
1108 | "version": "1.0.1",
1109 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1110 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1111 | },
1112 | "vary": {
1113 | "version": "1.1.2",
1114 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1115 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1116 | },
1117 | "wcwidth": {
1118 | "version": "1.0.1",
1119 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
1120 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
1121 | "requires": {
1122 | "defaults": "^1.0.3"
1123 | }
1124 | },
1125 | "wrappy": {
1126 | "version": "1.0.2",
1127 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1128 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1129 | },
1130 | "ws": {
1131 | "version": "6.2.1",
1132 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz",
1133 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==",
1134 | "requires": {
1135 | "async-limiter": "~1.0.0"
1136 | }
1137 | },
1138 | "yauzl": {
1139 | "version": "2.10.0",
1140 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
1141 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
1142 | "requires": {
1143 | "buffer-crc32": "~0.2.3",
1144 | "fd-slicer": "~1.1.0"
1145 | }
1146 | }
1147 | }
1148 | }
1149 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "testsite",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "author": "",
10 | "license": "ISC",
11 | "dependencies": {
12 | "pagedjs": "^0.1.40",
13 | "pagedjs-cli": "0.0.10"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/packages.bib:
--------------------------------------------------------------------------------
1 | @Manual{R-base,
2 | title = {R: A Language and Environment for Statistical Computing},
3 | author = {{R Core Team}},
4 | organization = {R Foundation for Statistical Computing},
5 | address = {Vienna, Austria},
6 | year = {2020},
7 | url = {https://www.R-project.org/},
8 | }
9 |
10 | @Manual{R-bookdown,
11 | title = {bookdown: Authoring Books and Technical Documents with R Markdown},
12 | author = {Yihui Xie},
13 | year = {2020},
14 | note = {R package version 0.21.3},
15 | url = {https://github.com/rstudio/bookdown},
16 | }
17 |
18 | @Manual{R-devtools,
19 | title = {devtools: Tools to Make Developing R Packages Easier},
20 | author = {Hadley Wickham and Jim Hester and Winston Chang},
21 | year = {2020},
22 | note = {R package version 2.3.2},
23 | url = {https://CRAN.R-project.org/package=devtools},
24 | }
25 |
26 | @Manual{R-knitr,
27 | title = {knitr: A General-Purpose Package for Dynamic Report Generation in R},
28 | author = {Yihui Xie},
29 | year = {2020},
30 | note = {R package version 1.30},
31 | url = {https://yihui.org/knitr/},
32 | }
33 |
34 | @Manual{R-lookup,
35 | title = {lookup: Lookup R function definitions, including compiled code, S3 and
36 | S4 methods},
37 | author = {Jim Hester and Hadley Wickham and Gábor Csárdi},
38 | year = {2020},
39 | note = {R package version 0.0.0.9000},
40 | }
41 |
42 | @Manual{R-reprex,
43 | title = {reprex: Prepare Reproducible Example Code via the Clipboard},
44 | author = {Jennifer Bryan and Jim Hester and David Robinson and Hadley Wickham},
45 | year = {2020},
46 | note = {https://reprex.tidyverse.org,
47 | https://github.com/tidyverse/reprex#readme},
48 | }
49 |
50 | @Manual{R-rmarkdown,
51 | title = {rmarkdown: Dynamic Documents for R},
52 | author = {JJ Allaire and Yihui Xie and Jonathan McPherson and Javier Luraschi and Kevin Ushey and Aron Atkins and Hadley Wickham and Joe Cheng and Winston Chang and Richard Iannone},
53 | year = {2020},
54 | note = {R package version 2.5.3},
55 | url = {https://github.com/rstudio/rmarkdown},
56 | }
57 |
58 | @Manual{R-usethis,
59 | title = {usethis: Automate Package and Project Setup},
60 | author = {Hadley Wickham and Jennifer Bryan},
61 | year = {2020},
62 | note = {https://usethis.r-lib.org, https://github.com/r-lib/usethis},
63 | }
64 |
65 | @Book{bookdown2016,
66 | title = {bookdown: Authoring Books and Technical Documents with {R} Markdown},
67 | author = {Yihui Xie},
68 | publisher = {Chapman and Hall/CRC},
69 | address = {Boca Raton, Florida},
70 | year = {2016},
71 | note = {ISBN 978-1138700109},
72 | url = {https://github.com/rstudio/bookdown},
73 | }
74 |
75 | @Book{knitr2015,
76 | title = {Dynamic Documents with {R} and knitr},
77 | author = {Yihui Xie},
78 | publisher = {Chapman and Hall/CRC},
79 | address = {Boca Raton, Florida},
80 | year = {2015},
81 | edition = {2nd},
82 | note = {ISBN 978-1498716963},
83 | url = {https://yihui.org/knitr/},
84 | }
85 |
86 | @InCollection{knitr2014,
87 | booktitle = {Implementing Reproducible Computational Research},
88 | editor = {Victoria Stodden and Friedrich Leisch and Roger D. Peng},
89 | title = {knitr: A Comprehensive Tool for Reproducible Research in {R}},
90 | author = {Yihui Xie},
91 | publisher = {Chapman and Hall/CRC},
92 | year = {2014},
93 | note = {ISBN 978-1466561595},
94 | url = {http://www.crcpress.com/product/isbn/9781466561595},
95 | }
96 |
97 | @Book{rmarkdown2018,
98 | title = {R Markdown: The Definitive Guide},
99 | author = {Yihui Xie and J.J. Allaire and Garrett Grolemund},
100 | publisher = {Chapman and Hall/CRC},
101 | address = {Boca Raton, Florida},
102 | year = {2018},
103 | note = {ISBN 9781138359338},
104 | url = {https://bookdown.org/yihui/rmarkdown},
105 | }
106 |
107 | @Book{rmarkdown2020,
108 | title = {R Markdown Cookbook},
109 | author = {Yihui Xie and Christophe Dervieux and Emily Riederer},
110 | publisher = {Chapman and Hall/CRC},
111 | address = {Boca Raton, Florida},
112 | year = {2020},
113 | note = {ISBN 9780367563837},
114 | url = {https://bookdown.org/yihui/rmarkdown-cookbook},
115 | }
116 |
117 |
--------------------------------------------------------------------------------
/style.css:
--------------------------------------------------------------------------------
1 | @media print {
2 | .btn.btn-outline-primary.d-lg-none.ml-2.mt-1 {
3 | display: none;
4 | }
5 |
6 | .prev {
7 | display: none;
8 | }
9 | .next {
10 | display: none;
11 | }
12 |
13 | .bg-primary.text-light.mt-5 {
14 | display: none;
15 | }
16 |
17 | .book-extra a::after {
18 | content: " (" attr(href) ")";
19 | }
20 |
21 | .book-extra {
22 | border-bottom: 1px solid #ccc;
23 | padding-bottom: 0.5rem;
24 | }
25 |
26 |
27 | main img {
28 | max-width: 100%;
29 | max-height: calc(0.5 * (var(--pagedjs-width) - var(--pagedjs-margin-left) - var(--pagedjs-margin-right)));
30 | width: auto;
31 | }
32 |
33 |
34 |
35 | @page {
36 | @bottom-left {
37 | content: "Page " counter(page) " of " counter(pages);
38 | }
39 | }
40 |
41 | .section.level1 h1 {
42 | break-before: page;
43 | string-set: title content(text)
44 | }
45 |
46 |
47 | @page {
48 | @bottom-right {
49 | content: string(title)
50 | }
51 | }
52 | @page {
53 | size: 227mm 291mm;
54 | margin: 10mm 15mm;
55 | }
56 | .d-flex.align-items-start.justify-content-between h1 {
57 | display: none;
58 | }
59 |
60 |
61 | }
62 |
--------------------------------------------------------------------------------