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>
93 lines
2.9 KiB
R
Executable File
93 lines
2.9 KiB
R
Executable File
tmpdir <- tempdir()
|
|
|
|
# https://github.com/IonDen/ion.rangeSlider
|
|
version <- "2.3.1"
|
|
# types_version <- version
|
|
types_version <- "2.3.0"
|
|
|
|
zip_src <- sprintf("https://github.com/IonDen/ion.rangeSlider/archive/%s.zip", version)
|
|
zip_target <- file.path(tmpdir, "ion.zip")
|
|
download.file(zip_src, zip_target)
|
|
unzip(zip_target, exdir = dirname(zip_target))
|
|
src <- file.path(dirname(zip_target), paste0("ion.rangeSlider-", version))
|
|
target <- rprojroot::find_package_root_file("inst", "www", "shared", "ionrangeslider")
|
|
unlink(target, recursive = TRUE)
|
|
dir.create(target)
|
|
# Move over JS files
|
|
file.rename(
|
|
file.path(src, "js"),
|
|
file.path(target, "js")
|
|
)
|
|
|
|
# Grab less src files and convert to sass
|
|
# Use `npx` to temp install and execute on the entire less folder
|
|
system(paste0("npx less2sass ", file.path(src, "less")))
|
|
|
|
# Copy over only the base (i.e., core) scss that we need for the shiny skin
|
|
dir.create(file.path(target, "scss"))
|
|
file.copy(
|
|
file.path(src, "less", c("_base.scss", "_mixins.scss")),
|
|
file.path(target, "scss", c("_base.scss", "_mixins.scss"))
|
|
)
|
|
|
|
# less2sass conversion doesn't convert this import correctly
|
|
base_css <- file.path(target, "scss", "_base.scss")
|
|
writeLines(
|
|
sub("@import (reference)", "@import", readLines(base_css), fixed = TRUE),
|
|
base_css
|
|
)
|
|
|
|
# Apply git patches *before* compiling skin Sass -> CSS (this should add the shiny skin)
|
|
patch_dir <- rprojroot::find_package_root_file("tools/ion.rangeSlider-patches")
|
|
for (patch in list.files(patch_dir, full.names = TRUE)) {
|
|
tryCatch({
|
|
message(sprintf("Applying %s", basename(patch)))
|
|
withr::with_dir(rprojroot::find_package_root_file(), system(sprintf("git apply %s", patch)))
|
|
},
|
|
error = function(e) {
|
|
quit(save = "no", status = 1)
|
|
}
|
|
)
|
|
}
|
|
|
|
|
|
# Now compile Sass -> CSS so that if the default styles are requested, we
|
|
# can serve them up without compilation (The distributed CSS includes all
|
|
# the skins in the same CSS file, but we want them split up)
|
|
library(sass)
|
|
withr::with_dir(
|
|
target, {
|
|
dir.create("css")
|
|
sass_partial(
|
|
sass_file("scss/shiny.scss"),
|
|
bslib::bs_theme(version = 3),
|
|
output = "css/ion.rangeSlider.css",
|
|
options = sass_options()
|
|
)
|
|
}
|
|
)
|
|
|
|
|
|
# Save version to R file
|
|
writeLines(
|
|
c(
|
|
"# Generated by tools/updateIonRangeSlider.R; do not edit by hand",
|
|
sprintf('version_ion_range_slider <- "%s"', version)
|
|
),
|
|
rprojroot::find_package_root_file("R", "version_ion_range_slider.R")
|
|
)
|
|
|
|
|
|
|
|
|
|
# Finally, run yarn build so the JS patches propogate to the minified files
|
|
withr::with_dir(rprojroot::find_package_root_file(), {
|
|
exit_code <- system(paste0("yarn add --dev ion-rangeslider@", version))
|
|
if (exit_code != 0) stop("yarn could not install ion-rangeslider")
|
|
|
|
exit_code <- system(paste0("yarn add @types/ion-rangeslider@", types_version))
|
|
if (exit_code != 0) stop("yarn could not install @types/ion-rangeslider")
|
|
|
|
system("yarn bundle_external_libs")
|
|
})
|