| wa_js | R Documentation |
Adds one inline JavaScript snippet to the page and attaches the shiny.webawesome dependency.
wa_js(code)
code |
One non-missing JavaScript string to inject into the page. |
wa_js() is a small package-level helper for app-local browser glue that
should remain easy to see from the surrounding Shiny code. Typical uses
include listening for browser-side events, reading live component
properties, and publishing values back to Shiny with
Shiny.setInputValue().
A typical property-read pattern is:
find the browser element by DOM id
read the live property in JavaScript
publish the value with Shiny.setInputValue()
consume the published value in Shiny as an ordinary input
This helper is intentionally narrow. It accepts a scalar JavaScript string
and injects it into the rendered page. For larger or shared scripts, prefer
standard Shiny asset patterns such as www/ files and tags$script().
A <script> tag with the shiny.webawesome dependency attached.
if (interactive()) {
ui <- webawesomePage(
wa_js("
function publishDetailsOpen() {
const details = document.getElementById('details');
if (!details ||
!window.Shiny ||
typeof window.Shiny.setInputValue !== 'function') {
return;
}
window.Shiny.setInputValue(
'details_open_state',
details.open,
{ priority: 'event' }
);
}
document.addEventListener('shiny:connected', publishDetailsOpen, {
once: true
});
document.addEventListener('wa-show', function(event) {
if (event.target.id === 'details') {
publishDetailsOpen();
}
});
document.addEventListener('wa-hide', function(event) {
if (event.target.id === 'details') {
publishDetailsOpen();
}
});
"),
wa_details(
input_id = "details",
summary = "More information",
"Details body"
),
shiny::verbatimTextOutput("details_state")
)
server <- function(input, output, session) {
output$details_state <- shiny::renderPrint({
input$details_open_state
})
}
shiny::shinyApp(ui, server)
}
if (interactive()) {
js_file <- tempfile(fileext = ".js")
writeLines(
c(
"document.addEventListener('wa-show', function(event) {",
" if (event.target.id !== 'details') {",
" return;",
" }",
"",
" if (window.Shiny &&",
" typeof window.Shiny.setInputValue === 'function') {",
" window.Shiny.setInputValue(",
" 'details_open_state',",
" event.target.open,",
" { priority: 'event' }",
" );",
" }",
"});"
),
js_file
)
js_code <- paste(readLines(js_file, warn = FALSE), collapse = "\n")
ui <- webawesomePage(
wa_js(js_code),
wa_details(
input_id = "details",
summary = "More information",
"Details body"
)
)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.