mirror of
https://github.com/rstudio/shiny.git
synced 2026-04-29 03:00:45 -04:00
102 lines
3.0 KiB
R
Executable File
102 lines
3.0 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 --yes 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(),
|
|
write_attachments = FALSE
|
|
)
|
|
}
|
|
)
|
|
|
|
# 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 `npm run build` so the JS patches propogate to the minified files
|
|
withr::with_dir(rprojroot::find_package_root_file(), {
|
|
# exit_code <- system(paste0("npm install --save-dev --save-exact ion-rangeslider@", version))
|
|
# if (exit_code != 0) stop("npm could not install ion-rangeslider")
|
|
|
|
exit_code <- system(paste0("npm install --save --save-exact @types/ion-rangeslider@", types_version))
|
|
if (exit_code != 0) stop("npm could not install @types/ion-rangeslider")
|
|
|
|
system("npm run bundle_external_libs")
|
|
})
|