mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-14 09:28:02 -05:00
Co-authored-by: Barret Schloerke <schloerke@gmail.com> Co-authored-by: Carson Sievert <cpsievert1@gmail.com>
115 lines
3.4 KiB
R
Executable File
115 lines
3.4 KiB
R
Executable File
#!/usr/bin/env Rscript
|
|
# Retrieves a particular version of bootstrap-datepicker:
|
|
# https://github.com/uxsolutions/bootstrap-datepicker
|
|
|
|
library(rprojroot)
|
|
|
|
version <- "1.9.0"
|
|
types_version <- "0.0.14"
|
|
|
|
dest_dir <- rprojroot::find_package_root_file("inst/www/shared/datepicker")
|
|
tag <- paste0("v", version)
|
|
dest_file <- file.path(tempdir(), paste0("bootstrap-datepicker-", version, ".zip"))
|
|
url <- sprintf("https://github.com/uxsolutions/bootstrap-datepicker/archive/%s.zip", tag)
|
|
|
|
download.file(url, dest_file)
|
|
unzipped <- tempdir()
|
|
unzip(dest_file, exdir = unzipped)
|
|
src_dir <- file.path(unzipped, paste0("bootstrap-datepicker-", version))
|
|
|
|
unlink(dest_dir, recursive = TRUE)
|
|
|
|
dir.create(file.path(dest_dir, "js"), recursive = TRUE)
|
|
file.copy(
|
|
dir(file.path(src_dir, "dist", "js"), full.names = TRUE),
|
|
file.path(dest_dir, "js"),
|
|
overwrite = TRUE
|
|
)
|
|
|
|
dir.create(file.path(dest_dir, "js", "locales"), recursive = TRUE)
|
|
file.copy(
|
|
dir(file.path(src_dir, "dist", "locales"), "\\.js$", full.names = TRUE),
|
|
file.path(dest_dir, "js", "locales"),
|
|
overwrite = TRUE
|
|
)
|
|
|
|
# Create a target directory for Sass source
|
|
scss_dir <- file.path(dest_dir, "scss")
|
|
dir.create(scss_dir, recursive = TRUE)
|
|
|
|
# Grab less source files & convert to sass
|
|
# Use `npx` to temp install and execute on the entire less folder
|
|
src <- file.path(unzipped, paste0("bootstrap-datepicker-", version))
|
|
system(paste0("npx less2sass ", src))
|
|
|
|
|
|
# Copy over just the bootstrap
|
|
sass_files <- file.path(src, c("less/datepicker3.scss", "build/build3.scss"))
|
|
file.copy(sass_files, scss_dir)
|
|
|
|
# Fix relative imports
|
|
scss <- dir(file.path(dest_dir, "scss"), full.names = TRUE)
|
|
invisible(lapply(
|
|
scss, function(x) {
|
|
txt <- readLines(x)
|
|
txt <- sub('^@import "../less/', '@import "', txt)
|
|
txt <- sub('^@import "../build/', '@import "', txt)
|
|
writeLines(txt, x)
|
|
}
|
|
))
|
|
|
|
|
|
# Apply patches to source
|
|
patch_dir <- rprojroot::find_package_root_file("tools/datepicker-patches")
|
|
withr::with_dir(find_package_root_file(), {
|
|
for (patch in list.files(patch_dir, full.names = TRUE)) {
|
|
tryCatch(
|
|
{
|
|
message(sprintf("Applying %s", basename(patch)))
|
|
system(sprintf("git apply %s", patch))
|
|
},
|
|
error = function(e) quit(save = "no", status = 1)
|
|
)
|
|
}
|
|
})
|
|
|
|
# Compile to CSS
|
|
library(sass)
|
|
library(bslib)
|
|
css_dir <- file.path(dest_dir, "css")
|
|
dir.create(css_dir, recursive = TRUE)
|
|
sass_partial(
|
|
sass_file(file.path(dest_dir, "scss", "build3.scss")),
|
|
bundle = bs_theme(),
|
|
output = file.path(css_dir, "bootstrap-datepicker3.css"),
|
|
write_attachments = FALSE
|
|
)
|
|
sass_partial(
|
|
sass_file(file.path(dest_dir, "scss", "build3.scss")),
|
|
bundle = bs_theme(),
|
|
output = file.path(css_dir, "bootstrap-datepicker3.min.css"),
|
|
options = sass_options(output_style = "compressed"),
|
|
write_attachments = FALSE
|
|
)
|
|
|
|
|
|
writeLines(
|
|
c(
|
|
"# Generated by tools/updateBootstrapDatepicker.R; do not edit by hand",
|
|
sprintf('version_bs_date_picker <- "%s"', version)
|
|
),
|
|
rprojroot::find_package_root_file("R", "version_bs_date_picker.R")
|
|
)
|
|
|
|
# Update TypeScript installation
|
|
withr::with_dir(
|
|
rprojroot::find_package_root_file(),
|
|
{
|
|
exit_code <- system(paste0("yarn add --dev bootstrap-datepicker@", version))
|
|
if (exit_code != 0) stop("yarn could not install bootstrap-datepicker")
|
|
|
|
exit_code <- system(paste0("yarn add @types/bootstrap-datepicker@", types_version))
|
|
if (exit_code != 0) stop("yarn could not install @types/bootstrap-datepicker")
|
|
}
|
|
)
|