Files
shiny/tools/updateSelectize.R
Carson Sievert 50c48de0de More themable selectInput() (#2950)
* Add option to use bootstraplib and have selectInput() theming variables

* Use getShinyOption()

* Have useBsTheme() error out with informative messages if a theme isn't active

* Better Sass variables defaults that account for both bootswatch themes and bs_theme_base_colors()

* Add Carson as an author

* Provide better BS3/BS4 selectize sass variable defaults as a patch to the source files

* tidy up tools script

* add sass to suggests

* yarn install && yarn build

* Wrap sass compilation into reusable function

* Bring -color-item closer to -color-input

* Leverage the new sass::output_file()

* naming change

* Sync up with other PRs

* Sync up DESCRIPTION

* Forgot to update CSS output file logic

* document
2020-09-09 15:02:05 -05:00

124 lines
4.6 KiB
R

#!/usr/bin/env Rscript
library(rprojroot)
## -----------------------------------------------------------------
## First, download the main selectize.js and css
## -----------------------------------------------------------------
version <- "0.12.4"
dest_dir <- find_package_root_file("inst/www/shared/selectize")
tag <- paste0("v", version)
dest_file <- file.path(tempdir(), paste0("selectize.js-", version, ".zip"))
url <- sprintf("https://github.com/selectize/selectize.js/archive/%s.zip", tag)
download.file(url, dest_file)
unzipped <- tempdir()
unzip(dest_file, exdir = unzipped)
unlink(dest_dir, recursive = TRUE)
dir.create(file.path(dest_dir, "js"), recursive = TRUE)
file.copy(
file.path(unzipped, paste0("selectize.js-", version), "dist", "js", "standalone", "selectize.min.js"),
file.path(dest_dir, "js"),
overwrite = TRUE
)
dir.create(file.path(dest_dir, "css"), recursive = TRUE)
file.copy(
file.path(unzipped, paste0("selectize.js-", version), "dist", "css", "selectize.bootstrap3.css"),
file.path(dest_dir, "css"),
overwrite = TRUE
)
## -----------------------------------------------------------------
## Second, download accessibility plugin
## -----------------------------------------------------------------
version <- "927d81e9ea86acac1724d57b2ce9f3c962fd34c4"
url <- sprintf("https://github.com/SLMNBJ/selectize-plugin-a11y/archive/%s.zip", version)
dest_file <- file.path(tempdir(), paste0("selectize-plugin-a11y-", version, ".zip"))
download.file(url, dest_file)
unzipped <- tempdir()
unzip(dest_file, exdir = unzipped)
dir.create(file.path(dest_dir, "accessibility", "js"), recursive = TRUE)
file.copy(
file.path(unzipped, paste0("selectize-plugin-a11y-", version), "selectize-plugin-a11y.js"),
file.path(dest_dir, "accessibility", "js"),
overwrite = TRUE
)
tmpdir <- tempdir()
## -----------------------------------------------------------------
## Third, download Bootstrap 4 SASS port of selectize less
## This is using a specific sha because this hasn't been included in an official release
## https://github.com/papakay/selectize-bootstrap-4-style/pull/19
## -----------------------------------------------------------------
version <- "5013be4e97a14bef47bc8badcc78e6762815ef38"
zip_src <- sprintf("https://github.com/papakay/selectize-bootstrap-4-style/archive/%s.zip", version)
zip_target <- file.path(tmpdir, "select-bs4.zip")
download.file(zip_src, zip_target)
unzip(zip_target, exdir = dirname(zip_target))
target <- "inst/www/shared/selectize/scss"
unlink(target, recursive = TRUE)
dir.create(target)
file.rename(
file.path(tmpdir, sprintf("selectize-bootstrap-4-style-%s/src/selectize", version)),
target
)
# Remove the unnecessary imports of Bootstrap
scss_file <- "inst/www/shared/selectize/scss/selectize.bootstrap4.scss"
scss <- readLines(scss_file)
scss <- scss[!grepl('@import\\s+"\\.\\./bootstrap', scss)]
writeLines(scss, scss_file)
## -----------------------------------------------------------------
## Fourth, download Bootstrap 3 SASS port
## https://github.com/herschel666/selectize-scss
## Note that the base selectize.scss, as well as the plugins, are identical
## to the BS4 port, so we only need the selectize.bootstrap3.scss file
## -----------------------------------------------------------------
version <- "0.10.1"
zip_src <- sprintf("https://github.com/herschel666/selectize-scss/archive/v%s.zip", version)
zip_target <- file.path(tmpdir, "select-bs3.zip")
download.file(zip_src, zip_target)
unzip(zip_target, exdir = dirname(zip_target))
target <- "inst/www/shared/selectize/scss/selectize.bootstrap3.scss"
file.rename(
file.path(tmpdir, sprintf("selectize-scss-%s/src/selectize.bootstrap3.scss", version)),
target
)
# =============================================================================
# Apply patches
# =============================================================================
# The version of selectize-plugin-a11y that we use is modified from the base version
# in the following ways:
# * In our version, each option item has their own unique id to be announced to screen readers when selection changes.
patch_dir <- find_package_root_file("tools/selectize-patches")
for (patch in list.files(patch_dir, full.names = TRUE)) {
tryCatch(
{
message(sprintf("Applying %s", basename(patch)))
withr::with_dir(find_package_root_file(), system(sprintf("git apply %s", patch)))
},
error = function(e) {
quit(save = "no", status = 1)
}
)
}
# =============================================================================
# Generate minified js
# =============================================================================
withr::with_dir(find_package_root_file("tools"), system("yarn grunt"))