Compare commits

...

1 Commits

Author SHA1 Message Date
Carson
1c252987a3 shiny-insert-tab can now accommodate a JSXTag 2022-03-02 13:49:39 -06:00
5 changed files with 54 additions and 5 deletions

View File

@@ -12474,6 +12474,25 @@
};
}
addMessageHandler("shiny-insert-tab", function(message) {
if (message.jsxTag) {
var jsxContainerEl = document.createElement("div");
var jsxId = "shiny-jsx-container-" + message.inputId;
jsxContainerEl.style.display = "none";
jsxContainerEl.setAttribute("id", jsxId);
document.body.appendChild(jsxContainerEl);
var jsxContainer = document.body.querySelector("#" + jsxId);
(0, import_jquery39.default)(jsxContainer).html(message.jsxTag.html);
message.liTag = {
html: jsxContainer.querySelector("ul.nav").innerHTML,
deps: []
};
message.divTag = {
html: jsxContainer.querySelector("div.tab-content").innerHTML,
deps: message.jsxTag.deps
};
jsxContainer.remove();
delete message.jsxTag;
}
var $parentTabset = getTabset(message.inputId);
var $tabset = $parentTabset;
var $tabContent = getTabContent($tabset);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -971,7 +971,37 @@ class ShinyApp {
position: "after" | "before" | void;
select: boolean;
menuName: string;
jsxTag: { html: string; deps: HtmlDep[] };
}) => {
if (message.jsxTag) {
// Render jsxTag (a <script> tag) inside a (temporary) hidden div and use
// the HTML results to populate liTag/divTag
const jsxContainerEl = document.createElement("div");
const jsxId = "shiny-jsx-container-" + message.inputId;
jsxContainerEl.style.display = "none";
jsxContainerEl.setAttribute("id", jsxId);
document.body.appendChild(jsxContainerEl);
const jsxContainer = document.body.querySelector("#" + jsxId);
// Use jQuery's .html() method since that has special handling to ensure
// <script> tags are evaluated.
$(jsxContainer).html(message.jsxTag.html);
message.liTag = {
html: jsxContainer.querySelector("ul.nav").innerHTML,
deps: [],
};
message.divTag = {
html: jsxContainer.querySelector("div.tab-content").innerHTML,
deps: message.jsxTag.deps,
};
jsxContainer.remove();
delete message.jsxTag;
}
const $parentTabset = getTabset(message.inputId);
let $tabset = $parentTabset;
const $tabContent = getTabContent($tabset);