|
2 | 2 |
|
3 | 3 | versions <- list() |
4 | 4 |
|
5 | | -pak::pkg_install("rstudio/bslib") |
6 | | -# pak::pkg_install("cran::bslib") |
| 5 | +# Use local lib path for installing packages so we don't pollute the user's library |
| 6 | +withr::local_temp_libpaths() |
| 7 | + |
| 8 | +pak::pkg_install(c("rstudio/bslib@main", "rstudio/shiny@main", "rstudio/htmltools@main")) |
| 9 | +# pak::pkg_install(c("cran::bslib", "cran::shiny")) |
7 | 10 |
|
8 | 11 | versions["shiny_html_deps"] <- as.character(packageVersion("shiny")) |
9 | 12 | versions["bslib"] <- as.character(packageVersion("bslib")) |
| 13 | +versions["htmltools"] <- as.character(packageVersion("htmltools")) |
| 14 | + |
| 15 | +pkg_source_version <- function(pkg_name) { |
| 16 | + pkg_info <- sessioninfo::package_info(pkg_name) |
| 17 | + pkg_info_list <- pkg_info[pkg_info$package == pkg_name, , drop = TRUE] |
| 18 | + pkg_info_list$source |
| 19 | +} |
| 20 | +write_json <- function(file, x, ..., pretty = TRUE, auto_unbox = TRUE) { |
| 21 | + jsonlite::write_json( |
| 22 | + c( |
| 23 | + list("note!" = "This file is auto-generated by scripts/htmlDependencies.R"), |
| 24 | + x |
| 25 | + ), |
| 26 | + file, |
| 27 | + ..., |
| 28 | + pretty = pretty, auto_unbox = auto_unbox |
| 29 | + ) |
| 30 | + |
| 31 | +} |
10 | 32 |
|
11 | | -bslib_info <- sessioninfo::package_info("bslib") |
12 | | -bslib_info_list <- bslib_info[bslib_info$package == "bslib", , drop = TRUE] |
| 33 | +bslib_version <- pkg_source_version("bslib") |
| 34 | +shiny_version <- pkg_source_version("shiny") |
| 35 | +htmltools_version <- pkg_source_version("htmltools") |
13 | 36 |
|
14 | 37 | library(htmltools) |
15 | 38 | library(bslib) |
16 | 39 |
|
17 | 40 | shiny_path <- fs::path(getwd(), "shiny") |
18 | 41 | www <- fs::path(shiny_path, "www") |
19 | | -if (fs::dir_exists(www)) fs::dir_delete(www) |
20 | | -fs::dir_create(www) |
| 42 | +www_shared <- fs::path(www, "shared") |
| 43 | +x_www <- fs::path(shiny_path, "experimental", "www") |
| 44 | +x_www_components <- fs::path(x_www, "bslib", "components") |
21 | 45 |
|
22 | 46 | # Copy over shiny's www/shared directory |
23 | | -withr::with_tempdir({ |
24 | | - cmd <- paste("git clone --depth 1 --branch main https://github.com/rstudio/shiny") |
25 | | - system(cmd) |
| 47 | +copy_from_pkg <- function(pkg_name, pkg_dir, local_dir) { |
| 48 | + if (fs::dir_exists(local_dir)) fs::dir_delete(local_dir) |
| 49 | + fs::dir_create(local_dir) |
| 50 | + |
| 51 | + stopifnot(local_dir != ".") |
| 52 | + |
| 53 | + # Copy other folder into local parent folder |
26 | 54 | fs::dir_copy( |
27 | | - "shiny/inst/www/shared", |
28 | | - www |
| 55 | + system.file(pkg_dir, package = pkg_name), |
| 56 | + dirname(local_dir) |
29 | 57 | ) |
30 | | -}) |
| 58 | + # Rename folder to local folder name |
| 59 | + if (basename(local_dir) != basename(pkg_dir)) { |
| 60 | + file.rename( |
| 61 | + fs::path(dirname(local_dir), basename(pkg_dir)), |
| 62 | + local_dir |
| 63 | + ) |
| 64 | + } |
| 65 | + # Save pkg version info |
| 66 | + write_json( |
| 67 | + fs::path(local_dir, "_versions.json"), |
| 68 | + list( |
| 69 | + package = pkg_name, |
| 70 | + version = pkg_source_version(pkg_name) |
| 71 | + ) |
| 72 | + ) |
| 73 | +} |
| 74 | + |
| 75 | + |
| 76 | +# Copy over bslib's components directory |
| 77 | +copy_from_pkg("bslib", "components", x_www_components) |
| 78 | +# Remove unused Sass files |
| 79 | +fs::file_delete( |
| 80 | + fs::dir_ls(x_www_components, type = "file", regexp = "\\.scss$") |
| 81 | +) |
| 82 | +# Remove unused tag require |
| 83 | +fs::file_delete(fs::path(x_www_components, "tag-require.js")) |
| 84 | + |
| 85 | +# Copy over htmltools's fill directory |
| 86 | +copy_from_pkg("htmltools", "fill", fs::path(x_www, "htmltools", "fill")) |
| 87 | + |
| 88 | + |
| 89 | + |
| 90 | + |
| 91 | +# Copy over shiny's www/shared directory |
| 92 | +copy_from_pkg("shiny", "www/shared", www_shared) |
31 | 93 |
|
32 | 94 | # Don't need legacy (hopefully) |
33 | | -fs::dir_delete(fs::path(www, "shared", "legacy")) |
| 95 | +fs::dir_delete(fs::path(www_shared, "legacy")) |
34 | 96 | # Don't need dataTables (hopefully) |
35 | | -fs::dir_delete(fs::path(www, "shared", "datatables")) |
| 97 | +fs::dir_delete(fs::path(www_shared, "datatables")) |
36 | 98 |
|
37 | 99 | # jQuery will come in via bslib (below) |
38 | 100 | fs::file_delete( |
39 | | - fs::dir_ls(fs::path(www, "shared"), type = "file", regexp = "jquery") |
| 101 | + fs::dir_ls(www_shared, type = "file", regexp = "jquery") |
40 | 102 | ) |
41 | 103 |
|
42 | 104 | # Upgrade to Bootstrap 5 by default |
43 | 105 | deps <- bs_theme_dependencies(bs_theme(version = 5)) |
44 | 106 | withr::with_options( |
45 | 107 | list(htmltools.dir.version = FALSE), |
46 | | - ignore <- lapply(deps, copyDependencyToDir, "shiny/www/shared") |
| 108 | + ignore <- lapply(deps, copyDependencyToDir, www_shared) |
47 | 109 | ) |
48 | 110 | bs_ver <- names(bslib::versions())[bslib::versions() == "5"] |
49 | 111 | versions["bootstrap"] <- bs_ver |
50 | | -jsonlite::write_json( |
| 112 | +write_json( |
| 113 | + "shiny/www/shared/bootstrap/_version.json", |
51 | 114 | list( |
52 | | - bslib_version = bslib_info_list$source, |
| 115 | + shiny_version = shiny_version, |
| 116 | + bslib_version = bslib_version, |
| 117 | + htmltools_version = htmltools_version, |
53 | 118 | bootstrap_version = bs_ver |
54 | | - ), |
55 | | - "shiny/www/shared/bootstrap/version.json", |
56 | | - pretty = TRUE, auto_unbox = TRUE |
| 119 | + ) |
57 | 120 | ) |
58 | 121 |
|
59 | 122 | # This additional bs3compat HTMLDependency() only holds |
60 | 123 | # the JS shim for tab panel logic, which we don't need |
61 | 124 | # since we're generating BS5+ tab markup. Note, however, |
62 | 125 | # we still do have bs3compat's CSS on the page, which |
63 | 126 | # comes in via the bootstrap HTMLDependency() |
64 | | -fs::dir_delete(fs::path(www, "shared", "bs3compat")) |
| 127 | +fs::dir_delete(fs::path(www_shared, "bs3compat")) |
65 | 128 |
|
66 | 129 | requirejs_version <- "2.3.6" |
67 | 130 | versions["requirejs"] <- requirejs_version |
68 | | -requirejs <- fs::path(www, "shared", "requirejs") |
| 131 | +requirejs <- fs::path(www_shared, "requirejs") |
69 | 132 | fs::dir_create(requirejs) |
70 | 133 | download.file( |
71 | 134 | paste0("https://cdnjs.cloudflare.com/ajax/libs/require.js/", requirejs_version, "/require.min.js"), |
|
94 | 157 | version_vars, |
95 | 158 | "\n", |
96 | 159 | version_all, |
97 | | - # paste0("versions = ", versions_txt), |
98 | 160 | sep = "" |
99 | 161 | ) |
0 commit comments