Added banner disconnect handler and associated js/css files

This commit is contained in:
2026-01-26 11:01:19 +00:00
parent 9d206cfe2a
commit 7f08c170c0
6 changed files with 120 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
#' Replaces the standard shiny disconnect handler with a banner
#'
#' @return The disconnect handler
#' @export
#'
#' @examples
#' x <- shiny::fluidPage(useBannerDisconnectHandler())
#' shiny::shinyApp(x, function(...) { stop("Server stop") })
useBannerDisconnectHandler <- function() {
if (getOption("shiny.minified", TRUE)) {
js <- "bannerDisconnectHandler.min.js"
css <- "bannerDisconnectHandler.min.css"
} else {
js <- "bannerDisconnectHandler.js"
css <- "bannerDisconnectHandler.css"
}
sdoTags <- htmltools::tagList(
htmltools::tags$div(
id = "sdo-disconnected-dialog",
style = "display: none;",
"Your session has timed out.",
htmltools::tags$br(),
"Please refresh the page to continue.",
htmltools::tags$br(),
htmltools::tags$a(
id = "sdo-reload-link",
href = "#",
onclick = "window.location.reload(true);",
"Refresh now"
)
),
htmltools::tags$div(id = "sdo-overlay", style = "display: none;")
)
sdoDeps <- list(
htmltools::htmlDependency(
"AVSDevR.ShinyDisconnectHandler",
as.character(utils::packageVersion("AVSDevR.ShinyDisconnectHandler")),
c(file = system.file(package = "AVSDevR.ShinyDisconnectHandler")),
script = js,
stylesheet = css
)
)
htmltools::attachDependencies(sdoTags, sdoDeps)
}

View File

@@ -0,0 +1,62 @@
#shiny-disdisconnecteded-overlay {
display: none !important;
}
#sdo-overlay {
overflow: hidden !important;
cursor: not-allowed !important;
background-color: #999999 !important;
opacity: 0.7 !important;
position: fixed !important;
top: 0 !important;
left: 0 !important;
bottom: 0 !important;
right: 0 !important;
z-index: 99998 !important;
}
#sdo-disconnected-dialog {
border-radius: 3px !important;
box-shadow: rgba(0, 0, 0, 0.3) 3px 3px 10px !important;
background: rgba(64, 64, 64, 0.9) !important;
color: #FFFFFF !important;
opacity: 1 !important;
text-align: center !important;
font-size: 50px !important;
position: fixed !important;
top: 50% !important;
left: 50% !important;
bottom: auto !important;
height: auto !important;
width: 100% !important;
padding: 0.8em 1.5em !important;
transform: translateX(-50%) translateY(-50%) !important;
z-index: 99999 !important;
}
#sdo-disconnected-dialog label {
display: none !important;
}
#sdo-disconnected-dialog a {
display: 'block' !important;
color: #337ab7 !important;
font-size: 50 !important;
font-weight: normal !important;
margin-top: 70px !important;
}
#sdo-disconnected-dialog {
padding: 15px !important;
box-shadow: none !important;
}

View File

@@ -0,0 +1,9 @@
$(function() {
$(document).on('shiny:disconnected', function(event) {
$('#sdo-disconnected-dialog').show();
$('#sdo-overlay').show();
if (window.modifiedHandler) {
modifiedHandler(false);
}
});
});

1
inst/bannerDisconnectHandler.min.css vendored Normal file
View File

@@ -0,0 +1 @@
#shiny-disdisconnecteded-overlay{display:none !important}#sdo-overlay{overflow:hidden !important;cursor:not-allowed !important;background-color:#999 !important;opacity:.7 !important;position:fixed !important;top:0 !important;left:0 !important;bottom:0 !important;right:0 !important;z-index:99998 !important}#sdo-disconnected-dialog{border-radius:3px !important;box-shadow:rgba(0,0,0,0.3) 3px 3px 10px !important;background:rgba(64,64,64,0.9) !important;color:#fff !important;opacity:1 !important;text-align:center !important;font-size:50px !important;position:fixed !important;top:50% !important;left:50% !important;bottom:auto !important;height:auto !important;width:100% !important;padding:.8em 1.5em !important;transform:translateX(-50%) translateY(-50%) !important;z-index:99999 !important}#sdo-disconnected-dialog label{display:none !important}#sdo-disconnected-dialog a{display:'block' !important;color:#337ab7 !important;font-size:50 !important;font-weight:normal !important;margin-top:70px !important}#sdo-disconnected-dialog{padding:15px !important;box-shadow:none !important}

1
inst/bannerDisconnectHandler.min.js vendored Normal file
View File

@@ -0,0 +1 @@
$(function(){$(document).on("shiny:disconnected",function(event){$("#sdo-disconnected-dialog").show();$("#sdo-overlay").show();if(window.modifiedHandler){modifiedHandler(false)}})});

View File

@@ -0,0 +1 @@
{"version":3,"sources":["bannerDisconnectHandler.js"],"names":["$","document","on","event","show","window","modifiedHandler"],"mappings":"AAAAA,EAAE,WACAA,EAAEC,QAAQ,EAAEC,GAAG,qBAAsB,SAASC,OAC5CH,EAAE,0BAA0B,EAAEI,KAAK,EACnCJ,EAAE,cAAc,EAAEI,KAAK,EACvB,GAAIC,OAAOC,gBAAiB,CAC1BA,gBAAgB,KAAK,CACvB,CACF,CAAC,CACH,CAAC"}