87 lines
2.5 KiB
JavaScript
87 lines
2.5 KiB
JavaScript
|
/* globals Shiny,$ */
|
||
|
|
||
|
document.getElementById("preview").addEventListener("click", function (ev) {
|
||
|
const vb = ev.target.closest(".bslib-value-box");
|
||
|
if (!vb) return;
|
||
|
Shiny.setInputValue("clicked_value_box", vb.parentElement.id);
|
||
|
});
|
||
|
|
||
|
Shiny.addCustomMessageHandler("active-value-box", function (id) {
|
||
|
document
|
||
|
.querySelectorAll(".active-preview")
|
||
|
.forEach((el) => el.classList.remove("active-preview"));
|
||
|
|
||
|
const vb = document.getElementById(id);
|
||
|
if (!vb) {
|
||
|
Shiny.setInputValue("clicked_value_box", "");
|
||
|
return;
|
||
|
}
|
||
|
vb.parentElement.classList.add("active-preview");
|
||
|
});
|
||
|
|
||
|
function reportValueBoxForegroundColor(id) {
|
||
|
const vb = document.getElementById(id).querySelector(".value-box-title");
|
||
|
if (!vb) {
|
||
|
console.warn(id, "no value box found");
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const styles = window.getComputedStyle(vb);
|
||
|
const fg = styles.getPropertyValue("color");
|
||
|
const inputId = id + "_fg_color";
|
||
|
|
||
|
Shiny.setInputValue(inputId, fg, { priority: "event" });
|
||
|
}
|
||
|
|
||
|
function showOrHideLoadingBox(id) {
|
||
|
const hasBox = document.getElementById(id).querySelector(".bslib-value-box");
|
||
|
document.getElementById(id + "_placeholder").style.display = hasBox
|
||
|
? "none"
|
||
|
: "block";
|
||
|
}
|
||
|
|
||
|
["one", "two", "three"].forEach(function (id) {
|
||
|
id = `${id}-value_box`;
|
||
|
$(document).on("shiny:value", `#${id}`, () => {
|
||
|
showOrHideLoadingBox(id);
|
||
|
Shiny.shinyapp.taskQueue.enqueue(() => {
|
||
|
showOrHideLoadingBox(id);
|
||
|
reportValueBoxForegroundColor(id);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
|
||
|
$(document).on("shiny:inputchanged", "#color_mode", function() {
|
||
|
['one', 'two', 'three'].forEach(id => {
|
||
|
reportValueBoxForegroundColor(`${id}-value_box`);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Watch for the themer to be added to the DOM
|
||
|
window.watchForThemer = function () {
|
||
|
const hideThemer = () => {
|
||
|
const themer = document.getElementById("bsthemerContainer");
|
||
|
themer.style.top = null;
|
||
|
themer.style.bottom = "1rem";
|
||
|
window.bootstrap.Collapse.getOrCreateInstance(
|
||
|
themer.querySelector(".accordion")
|
||
|
);
|
||
|
};
|
||
|
|
||
|
const observer = new MutationObserver(function (mutationsList, observer) {
|
||
|
// Check if the target element has been added
|
||
|
for (let mutation of mutationsList) {
|
||
|
if (mutation.type === "childList" && mutation.addedNodes.length > 0) {
|
||
|
if (!document.getElementById("bsthemerContainer")) continue;
|
||
|
|
||
|
hideThemer();
|
||
|
observer.disconnect();
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Start observing the changes in the parent element of the target element
|
||
|
observer.observe(document.body, { childList: true });
|
||
|
};
|