Compare commits

...

3 Commits

Author SHA1 Message Date
6ce44cc15f Increment version number to 1.0.0 2026-02-24 12:15:58 +00:00
dfe0a1c49e Increment version number to 0.1.0 2026-02-10 18:17:13 +00:00
56f1c979df Documentation added 2026-02-10 18:17:01 +00:00
15 changed files with 796 additions and 3 deletions

View File

@@ -1,6 +1,6 @@
Package: AVSDevR.ShinyApplication Package: AVSDevR.ShinyApplication
Title: Shiny Application Wrapper Title: Shiny Application Wrapper
Version: 0.0.0.9000 Version: 1.0.0
Authors@R: Authors@R:
person("Craig", "Williams", , "craig@avsdev.uk", role = c("aut", "cre")) person("Craig", "Williams", , "craig@avsdev.uk", role = c("aut", "cre"))
Description: Wraps a shiny application with some helper scripts, including Description: Wraps a shiny application with some helper scripts, including

View File

@@ -1,17 +1,25 @@
#' AdminLTE (bootstrap dashboard) themed R shiny application
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
AdminLTEApplication <- R6::R6Class( AdminLTEApplication <- R6::R6Class(
"AdminLTEApplication", "AdminLTEApplication",
inherit = FrameApplication, inherit = FrameApplication,
public = list( public = list(
#' @description Uses a specific AdminLTE skin colour
#' @param skin <character> The AdminLTE skin colour to use
withSkin = function(skin) { withSkin = function(skin) {
private$skin <- skin private$skin <- skin
invisible(self) invisible(self)
}, },
#' @description Returns the basic FrameApplication UI without the AdminLTE
#' page body.
#' @returns R Shiny tagList for the frame UI
frameUI = function() { frameUI = function() {
super$ui() super$ui()
}, },
#' @description AdminLTE ui for an R Shiny application
#' @returns R Shiny tagList for an AdminLTE UI
ui = function() { ui = function() {
ui <- shiny::tags$body( ui <- shiny::tags$body(
class = paste0("hold-transition skin-", private$skin), class = paste0("hold-transition skin-", private$skin),

View File

@@ -1,9 +1,15 @@
#' Basic R shiny application
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
FrameApplication <- R6::R6Class( FrameApplication <- R6::R6Class(
"FrameApplication", "FrameApplication",
public = list( public = list(
#' @description Creates a new R Shiny application
#' @param appPage <module> An application module (attempts to load
#' pages/application.R if not supplied)
#' @param language <character> The language to use for the HTML page
#' (defaults to "en")
initialize = function(appPage = NULL, language = NULL) { initialize = function(appPage = NULL, language = NULL) {
if (!is.null(appPage)) { if (!is.null(appPage)) {
private$appPage <- appPage private$appPage <- appPage
@@ -15,6 +21,8 @@ FrameApplication <- R6::R6Class(
} }
invisible(self) invisible(self)
}, },
#' @description Binds the application to a session logger
#' @param sessionLogger The session logger instance to use
withSessionLogger = function(sessionLogger) { withSessionLogger = function(sessionLogger) {
if (!inherits(sessionLogger, "SessionLogger")) { if (!inherits(sessionLogger, "SessionLogger")) {
rlang::abort("sessionLogger is not an instance of SessionLogger class") rlang::abort("sessionLogger is not an instance of SessionLogger class")
@@ -22,10 +30,18 @@ FrameApplication <- R6::R6Class(
private$sessionLogger <- sessionLogger private$sessionLogger <- sessionLogger
invisible(self) invisible(self)
}, },
#' @description Loads with the Bootstrap 4 shim CSS file
withBootstrap4Shim = function() { withBootstrap4Shim = function() {
private$withBS4 <- TRUE private$withBS4 <- TRUE
invisible(self) invisible(self)
}, },
#' @description Returns a DBClient instance for the current session
#' @param session An R Shiny session
#' @param db_config The database configuration to use (will attempt to find
#' and load a global.R or .env.R file if not supploed)
#' @param allowFailure If a configuration cannot be loaded or a connection
#' to the database cannot be made, do not abort
#' @returns A DBClient instance which is useable for the session
getSessionDBClient = function( getSessionDBClient = function(
session, db_config = NULL, allowFailure = FALSE session, db_config = NULL, allowFailure = FALSE
) { ) {
@@ -59,6 +75,7 @@ FrameApplication <- R6::R6Class(
# Create the client instance # Create the client instance
AVSDevR.DBClient::DBClient$new(db_conn) AVSDevR.DBClient::DBClient$new(db_conn)
}, },
#' @description Creates the UI component for an R Shiny application
ui = function() { ui = function() {
if (file.exists("widgets/menu.R")) { if (file.exists("widgets/menu.R")) {
# Multi-frame application # Multi-frame application
@@ -119,6 +136,11 @@ FrameApplication <- R6::R6Class(
# Set the language # Set the language
shiny:::setLang(ui, private$language) shiny:::setLang(ui, private$language)
}, },
#' @description Creates the server component for an R Shiny application
#' @param input The UI inputs bound for the session
#' @param output The UI outputs bound for the session
#' @param session The current session
#' @param ... Parameters passed into the inner application
server = function(input, output, session, ...) { server = function(input, output, session, ...) {
if (!is.null(private$sessionLogger)) { if (!is.null(private$sessionLogger)) {
private$sessionLogger$attachSession(session) private$sessionLogger$attachSession(session)
@@ -131,6 +153,8 @@ FrameApplication <- R6::R6Class(
... ...
) )
}, },
#' @description Instantiates an R Shiny application
#' @returns An R Shiny application suitable for \link[shiny]{runApp}
app = function() { app = function() {
shiny::shinyApp(self$ui(), self$server) shiny::shinyApp(self$ui(), self$server)
} }

View File

@@ -1,8 +1,16 @@
#' R shiny application session logger
#'
#' Wraps an R Shiny application or attaches to an R Shiny session to log session
#' start / end events
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
SessionLogger <- R6::R6Class( SessionLogger <- R6::R6Class(
"SessionLogger", "SessionLogger",
public = list( public = list(
#' @description Wraps an existing R Shiny application with a session logger
#' @param app An R Shiny application (\link[shiny]{shinyApp})
#' @returns The wrapped R Shiny application
wrap = function(app) { wrap = function(app) {
wrapped_server <- function(input, output, session, ...) { wrapped_server <- function(input, output, session, ...) {
self$attachSession(session) self$attachSession(session)
@@ -15,6 +23,10 @@ SessionLogger <- R6::R6Class(
app app
}, },
#' @description Attaches to an existing R Shiny session to log start / end
#' events.
#' @param session An R Shiny session to log start / end events for
#' @returns A function which can be called to cancel the "end" log
attachSession = function(session) { attachSession = function(session) {
private$onSessionStarted(session) private$onSessionStarted(session)
session$onSessionEnded(function() { session$onSessionEnded(function() {
@@ -64,6 +76,10 @@ SessionLogger <- R6::R6Class(
) )
) )
#' R shiny application session console logger.
#'
#' Logs session start / stop events to console.
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
SessionLoggerConsole <- R6::R6Class( SessionLoggerConsole <- R6::R6Class(
@@ -92,12 +108,19 @@ SessionLoggerConsole <- R6::R6Class(
) )
) )
#' R shiny application session database logger
#'
#' Logs session start / stop events to database
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
SessionLoggerDB <- R6::R6Class( SessionLoggerDB <- R6::R6Class(
"SessionLoggerDB", "SessionLoggerDB",
inherit = SessionLogger, inherit = SessionLogger,
public = list( public = list(
#' @description Initialises the instance with a database client
#' \link[AVSDevR.DBClient]{DBClient}
#' @param db_client <\link[AVSDevR.DBClient]{DBClient}> A DBClient instance
initialize = function(db_client) { initialize = function(db_client) {
if (is.null(db_client) || !inherits(db_client, "DBClient")) { if (is.null(db_client) || !inherits(db_client, "DBClient")) {
stop("DBClient instance required!") stop("DBClient instance required!")

View File

@@ -1,9 +1,16 @@
#' Core UserFrosting (basic AdminLTE themed) R shiny application
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
UFApplication <- R6::R6Class( UFApplication <- R6::R6Class(
"UFApplication", "UFApplication",
inherit = AdminLTEApplication, inherit = AdminLTEApplication,
public = list( public = list(
#' @description Sets up the UserFrosting configuration for the application
#' @param uri <character> The URI for the UserFrosting API instance
#' @param with_users <logical> Enable UF user API interaction
#' @param user_optional <logical> Are users optional?
#' @param app_name <character> The shiny application name for the UF API
configureUF = function( configureUF = function(
uri, with_users = TRUE, user_optional = FALSE, app_name = NULL uri, with_users = TRUE, user_optional = FALSE, app_name = NULL
) { ) {
@@ -19,6 +26,9 @@ UFApplication <- R6::R6Class(
} }
invisible(self) invisible(self)
}, },
#' @description Instantiates an R Shiny application with UserFrosting
#' support.
#' @returns An R Shiny application suitable for \link[shiny]{runApp}
app = function() { app = function() {
AVSDevR.UserFrosting::ufWrapApplication( AVSDevR.UserFrosting::ufWrapApplication(
super$app(), private$ufURI, private$with_users, super$app(), private$ufURI, private$with_users,

View File

@@ -1,13 +1,20 @@
#' UserFrosting full dashboard R shiny application
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
UFDashboardApplication <- R6::R6Class( UFDashboardApplication <- R6::R6Class(
"UFDashboardApplication", "UFDashboardApplication",
inherit = UFApplication, inherit = UFApplication,
public = list( public = list(
#' @description Starts the application with the UserFrosting sidebar
#' collapsed by default
withSidebarCollapsed = function() { withSidebarCollapsed = function() {
private$sidebar_collapsed <- TRUE private$sidebar_collapsed <- TRUE
invisible(self) invisible(self)
}, },
#' @description Creates the UserFrosting UI component for an R Shiny
#' application
#' @returns An R Shiny tagList for \link[shiny]{shinyApp}
ui = function() { ui = function() {
if (file.exists("widgets/help.R")) { if (file.exists("widgets/help.R")) {
private$mHelp <- modules::use("widgets/help.R") private$mHelp <- modules::use("widgets/help.R")
@@ -67,6 +74,14 @@ UFDashboardApplication <- R6::R6Class(
# Set the language # Set the language
shiny:::setLang(ui, private$language) shiny:::setLang(ui, private$language)
}, },
#' @description Creates the UserFrosting server component for an R Shiny
#' application
#' @param input The UI inputs bound for the session
#' @param output The UI outputs bound for the session
#' @param session The current session
#' @param ufApi The UserFrosting API instance
#' @param ufUser The UserFrosting user if authenticated and verified
#' @param ... Parameters passed into the inner application
server = function( server = function(
input, output, session, ufApi = NULL, ufUser = NULL, ... input, output, session, ufApi = NULL, ufUser = NULL, ...
) { ) {

View File

@@ -1,3 +1,5 @@
#' UserFrosting frame only R shiny application
#'
#' @export #' @export
# nolint next: object_name_linter. R6Class # nolint next: object_name_linter. R6Class
UFFrameApplication <- R6::R6Class( UFFrameApplication <- R6::R6Class(

View File

@@ -0,0 +1,95 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/adminLTEApplication.R
\name{AdminLTEApplication}
\alias{AdminLTEApplication}
\title{AdminLTE (bootstrap dashboard) themed R shiny application}
\value{
R Shiny tagList for the frame UI
R Shiny tagList for an AdminLTE UI
}
\description{
AdminLTE (bootstrap dashboard) themed R shiny application
AdminLTE (bootstrap dashboard) themed R shiny application
}
\section{Super class}{
\code{AVSDevR.ShinyApplication::FrameApplication} -> \code{AdminLTEApplication}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-AdminLTEApplication-withSkin}{\code{AdminLTEApplication$withSkin()}}
\item \href{#method-AdminLTEApplication-frameUI}{\code{AdminLTEApplication$frameUI()}}
\item \href{#method-AdminLTEApplication-ui}{\code{AdminLTEApplication$ui()}}
\item \href{#method-AdminLTEApplication-clone}{\code{AdminLTEApplication$clone()}}
}
}
\if{html}{\out{
<details><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="app"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-app'><code>AVSDevR.ShinyApplication::FrameApplication$app()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="getSessionDBClient"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-getSessionDBClient'><code>AVSDevR.ShinyApplication::FrameApplication$getSessionDBClient()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="initialize"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-initialize'><code>AVSDevR.ShinyApplication::FrameApplication$initialize()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="server"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-server'><code>AVSDevR.ShinyApplication::FrameApplication$server()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withBootstrap4Shim"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withBootstrap4Shim'><code>AVSDevR.ShinyApplication::FrameApplication$withBootstrap4Shim()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withSessionLogger"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withSessionLogger'><code>AVSDevR.ShinyApplication::FrameApplication$withSessionLogger()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-AdminLTEApplication-withSkin"></a>}}
\if{latex}{\out{\hypertarget{method-AdminLTEApplication-withSkin}{}}}
\subsection{Method \code{withSkin()}}{
Uses a specific AdminLTE skin colour
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{AdminLTEApplication$withSkin(skin)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{skin}}{\if{html}{\out{<character>}} The AdminLTE skin colour to use}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-AdminLTEApplication-frameUI"></a>}}
\if{latex}{\out{\hypertarget{method-AdminLTEApplication-frameUI}{}}}
\subsection{Method \code{frameUI()}}{
Returns the basic FrameApplication UI without the AdminLTE
page body.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{AdminLTEApplication$frameUI()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-AdminLTEApplication-ui"></a>}}
\if{latex}{\out{\hypertarget{method-AdminLTEApplication-ui}{}}}
\subsection{Method \code{ui()}}{
AdminLTE ui for an R Shiny application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{AdminLTEApplication$ui()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-AdminLTEApplication-clone"></a>}}
\if{latex}{\out{\hypertarget{method-AdminLTEApplication-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{AdminLTEApplication$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

164
man/FrameApplication.Rd Normal file
View File

@@ -0,0 +1,164 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/frameApplication.R
\name{FrameApplication}
\alias{FrameApplication}
\title{Basic R shiny application}
\value{
A DBClient instance which is useable for the session
An R Shiny application suitable for \link[shiny]{runApp}
}
\description{
Basic R shiny application
Basic R shiny application
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-FrameApplication-new}{\code{FrameApplication$new()}}
\item \href{#method-FrameApplication-withSessionLogger}{\code{FrameApplication$withSessionLogger()}}
\item \href{#method-FrameApplication-withBootstrap4Shim}{\code{FrameApplication$withBootstrap4Shim()}}
\item \href{#method-FrameApplication-getSessionDBClient}{\code{FrameApplication$getSessionDBClient()}}
\item \href{#method-FrameApplication-ui}{\code{FrameApplication$ui()}}
\item \href{#method-FrameApplication-server}{\code{FrameApplication$server()}}
\item \href{#method-FrameApplication-app}{\code{FrameApplication$app()}}
\item \href{#method-FrameApplication-clone}{\code{FrameApplication$clone()}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-new"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-new}{}}}
\subsection{Method \code{new()}}{
Creates a new R Shiny application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$new(appPage = NULL, language = NULL)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{appPage}}{\if{html}{\out{<module>}} An application module (attempts to load
pages/application.R if not supplied)}
\item{\code{language}}{\if{html}{\out{<character>}} The language to use for the HTML page
(defaults to "en")}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-withSessionLogger"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-withSessionLogger}{}}}
\subsection{Method \code{withSessionLogger()}}{
Binds the application to a session logger
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$withSessionLogger(sessionLogger)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{sessionLogger}}{The session logger instance to use}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-withBootstrap4Shim"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-withBootstrap4Shim}{}}}
\subsection{Method \code{withBootstrap4Shim()}}{
Loads with the Bootstrap 4 shim CSS file
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$withBootstrap4Shim()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-getSessionDBClient"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-getSessionDBClient}{}}}
\subsection{Method \code{getSessionDBClient()}}{
Returns a DBClient instance for the current session
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$getSessionDBClient(
session,
db_config = NULL,
allowFailure = FALSE
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{session}}{An R Shiny session}
\item{\code{db_config}}{The database configuration to use (will attempt to find
and load a global.R or .env.R file if not supploed)}
\item{\code{allowFailure}}{If a configuration cannot be loaded or a connection
to the database cannot be made, do not abort}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-ui"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-ui}{}}}
\subsection{Method \code{ui()}}{
Creates the UI component for an R Shiny application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$ui()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-server"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-server}{}}}
\subsection{Method \code{server()}}{
Creates the server component for an R Shiny application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$server(input, output, session, ...)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{input}}{The UI inputs bound for the session}
\item{\code{output}}{The UI outputs bound for the session}
\item{\code{session}}{The current session}
\item{\code{...}}{Parameters passed into the inner application}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-app"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-app}{}}}
\subsection{Method \code{app()}}{
Instantiates an R Shiny application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$app()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-FrameApplication-clone"></a>}}
\if{latex}{\out{\hypertarget{method-FrameApplication-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{FrameApplication$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

80
man/SessionLogger.Rd Normal file
View File

@@ -0,0 +1,80 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/sessionLogger.R
\name{SessionLogger}
\alias{SessionLogger}
\title{R shiny application session logger}
\value{
The wrapped R Shiny application
A function which can be called to cancel the "end" log
}
\description{
R shiny application session logger
R shiny application session logger
}
\details{
Wraps an R Shiny application or attaches to an R Shiny session to log session
start / end events
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-SessionLogger-wrap}{\code{SessionLogger$wrap()}}
\item \href{#method-SessionLogger-attachSession}{\code{SessionLogger$attachSession()}}
\item \href{#method-SessionLogger-clone}{\code{SessionLogger$clone()}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLogger-wrap"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLogger-wrap}{}}}
\subsection{Method \code{wrap()}}{
Wraps an existing R Shiny application with a session logger
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLogger$wrap(app)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{app}}{An R Shiny application (\link[shiny]{shinyApp})}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLogger-attachSession"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLogger-attachSession}{}}}
\subsection{Method \code{attachSession()}}{
Attaches to an existing R Shiny session to log start / end
events.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLogger$attachSession(session)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{session}}{An R Shiny session to log start / end events for}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLogger-clone"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLogger-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLogger$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

View File

@@ -0,0 +1,43 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/sessionLogger.R
\name{SessionLoggerConsole}
\alias{SessionLoggerConsole}
\title{R shiny application session console logger.}
\description{
Logs session start / stop events to console.
}
\section{Super class}{
\code{AVSDevR.ShinyApplication::SessionLogger} -> \code{SessionLoggerConsole}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-SessionLoggerConsole-clone}{\code{SessionLoggerConsole$clone()}}
}
}
\if{html}{\out{
<details open><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="SessionLogger" data-id="attachSession"><a href='../../AVSDevR.ShinyApplication/html/SessionLogger.html#method-SessionLogger-attachSession'><code>AVSDevR.ShinyApplication::SessionLogger$attachSession()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="SessionLogger" data-id="wrap"><a href='../../AVSDevR.ShinyApplication/html/SessionLogger.html#method-SessionLogger-wrap'><code>AVSDevR.ShinyApplication::SessionLogger$wrap()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLoggerConsole-clone"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLoggerConsole-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLoggerConsole$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

67
man/SessionLoggerDB.Rd Normal file
View File

@@ -0,0 +1,67 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/sessionLogger.R
\name{SessionLoggerDB}
\alias{SessionLoggerDB}
\title{R shiny application session database logger}
\description{
R shiny application session database logger
R shiny application session database logger
}
\details{
Logs session start / stop events to database
}
\section{Super class}{
\code{AVSDevR.ShinyApplication::SessionLogger} -> \code{SessionLoggerDB}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-SessionLoggerDB-new}{\code{SessionLoggerDB$new()}}
\item \href{#method-SessionLoggerDB-clone}{\code{SessionLoggerDB$clone()}}
}
}
\if{html}{\out{
<details open><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="SessionLogger" data-id="attachSession"><a href='../../AVSDevR.ShinyApplication/html/SessionLogger.html#method-SessionLogger-attachSession'><code>AVSDevR.ShinyApplication::SessionLogger$attachSession()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="SessionLogger" data-id="wrap"><a href='../../AVSDevR.ShinyApplication/html/SessionLogger.html#method-SessionLogger-wrap'><code>AVSDevR.ShinyApplication::SessionLogger$wrap()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLoggerDB-new"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLoggerDB-new}{}}}
\subsection{Method \code{new()}}{
Initialises the instance with a database client
\link[AVSDevR.DBClient]{DBClient}
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLoggerDB$new(db_client)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{db_client}}{<\link[AVSDevR.DBClient]{DBClient}> A DBClient instance}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-SessionLoggerDB-clone"></a>}}
\if{latex}{\out{\hypertarget{method-SessionLoggerDB-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{SessionLoggerDB$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

95
man/UFApplication.Rd Normal file
View File

@@ -0,0 +1,95 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/ufApplication.R
\name{UFApplication}
\alias{UFApplication}
\title{Core UserFrosting (basic AdminLTE themed) R shiny application}
\value{
An R Shiny application suitable for \link[shiny]{runApp}
}
\description{
Core UserFrosting (basic AdminLTE themed) R shiny application
Core UserFrosting (basic AdminLTE themed) R shiny application
}
\section{Super classes}{
\code{AVSDevR.ShinyApplication::FrameApplication} -> \code{AVSDevR.ShinyApplication::AdminLTEApplication} -> \code{UFApplication}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-UFApplication-configureUF}{\code{UFApplication$configureUF()}}
\item \href{#method-UFApplication-app}{\code{UFApplication$app()}}
\item \href{#method-UFApplication-clone}{\code{UFApplication$clone()}}
}
}
\if{html}{\out{
<details><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="getSessionDBClient"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-getSessionDBClient'><code>AVSDevR.ShinyApplication::FrameApplication$getSessionDBClient()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="initialize"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-initialize'><code>AVSDevR.ShinyApplication::FrameApplication$initialize()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="server"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-server'><code>AVSDevR.ShinyApplication::FrameApplication$server()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withBootstrap4Shim"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withBootstrap4Shim'><code>AVSDevR.ShinyApplication::FrameApplication$withBootstrap4Shim()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withSessionLogger"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withSessionLogger'><code>AVSDevR.ShinyApplication::FrameApplication$withSessionLogger()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="frameUI"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-frameUI'><code>AVSDevR.ShinyApplication::AdminLTEApplication$frameUI()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="ui"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-ui'><code>AVSDevR.ShinyApplication::AdminLTEApplication$ui()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="withSkin"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-withSkin'><code>AVSDevR.ShinyApplication::AdminLTEApplication$withSkin()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFApplication-configureUF"></a>}}
\if{latex}{\out{\hypertarget{method-UFApplication-configureUF}{}}}
\subsection{Method \code{configureUF()}}{
Sets up the UserFrosting configuration for the application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFApplication$configureUF(
uri,
with_users = TRUE,
user_optional = FALSE,
app_name = NULL
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{uri}}{\if{html}{\out{<character>}} The URI for the UserFrosting API instance}
\item{\code{with_users}}{\if{html}{\out{<logical>}} Enable UF user API interaction}
\item{\code{user_optional}}{\if{html}{\out{<logical>}} Are users optional?}
\item{\code{app_name}}{\if{html}{\out{<character>}} The shiny application name for the UF API}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFApplication-app"></a>}}
\if{latex}{\out{\hypertarget{method-UFApplication-app}{}}}
\subsection{Method \code{app()}}{
Instantiates an R Shiny application with UserFrosting
support.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFApplication$app()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFApplication-clone"></a>}}
\if{latex}{\out{\hypertarget{method-UFApplication-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFApplication$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

View File

@@ -0,0 +1,114 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/ufDashboardApplication.R
\name{UFDashboardApplication}
\alias{UFDashboardApplication}
\title{UserFrosting full dashboard R shiny application}
\value{
An R Shiny tagList for \link[shiny]{shinyApp}
}
\description{
UserFrosting full dashboard R shiny application
UserFrosting full dashboard R shiny application
}
\section{Super classes}{
\code{AVSDevR.ShinyApplication::FrameApplication} -> \code{AVSDevR.ShinyApplication::AdminLTEApplication} -> \code{AVSDevR.ShinyApplication::UFApplication} -> \code{UFDashboardApplication}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-UFDashboardApplication-withSidebarCollapsed}{\code{UFDashboardApplication$withSidebarCollapsed()}}
\item \href{#method-UFDashboardApplication-ui}{\code{UFDashboardApplication$ui()}}
\item \href{#method-UFDashboardApplication-server}{\code{UFDashboardApplication$server()}}
\item \href{#method-UFDashboardApplication-clone}{\code{UFDashboardApplication$clone()}}
}
}
\if{html}{\out{
<details><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="getSessionDBClient"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-getSessionDBClient'><code>AVSDevR.ShinyApplication::FrameApplication$getSessionDBClient()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="initialize"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-initialize'><code>AVSDevR.ShinyApplication::FrameApplication$initialize()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withBootstrap4Shim"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withBootstrap4Shim'><code>AVSDevR.ShinyApplication::FrameApplication$withBootstrap4Shim()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withSessionLogger"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withSessionLogger'><code>AVSDevR.ShinyApplication::FrameApplication$withSessionLogger()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="frameUI"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-frameUI'><code>AVSDevR.ShinyApplication::AdminLTEApplication$frameUI()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="withSkin"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-withSkin'><code>AVSDevR.ShinyApplication::AdminLTEApplication$withSkin()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="UFApplication" data-id="app"><a href='../../AVSDevR.ShinyApplication/html/UFApplication.html#method-UFApplication-app'><code>AVSDevR.ShinyApplication::UFApplication$app()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="UFApplication" data-id="configureUF"><a href='../../AVSDevR.ShinyApplication/html/UFApplication.html#method-UFApplication-configureUF'><code>AVSDevR.ShinyApplication::UFApplication$configureUF()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFDashboardApplication-withSidebarCollapsed"></a>}}
\if{latex}{\out{\hypertarget{method-UFDashboardApplication-withSidebarCollapsed}{}}}
\subsection{Method \code{withSidebarCollapsed()}}{
Starts the application with the UserFrosting sidebar
collapsed by default
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFDashboardApplication$withSidebarCollapsed()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFDashboardApplication-ui"></a>}}
\if{latex}{\out{\hypertarget{method-UFDashboardApplication-ui}{}}}
\subsection{Method \code{ui()}}{
Creates the UserFrosting UI component for an R Shiny
application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFDashboardApplication$ui()}\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFDashboardApplication-server"></a>}}
\if{latex}{\out{\hypertarget{method-UFDashboardApplication-server}{}}}
\subsection{Method \code{server()}}{
Creates the UserFrosting server component for an R Shiny
application
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFDashboardApplication$server(
input,
output,
session,
ufApi = NULL,
ufUser = NULL,
...
)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{input}}{The UI inputs bound for the session}
\item{\code{output}}{The UI outputs bound for the session}
\item{\code{session}}{The current session}
\item{\code{ufApi}}{The UserFrosting API instance}
\item{\code{ufUser}}{The UserFrosting user if authenticated and verified}
\item{\code{...}}{Parameters passed into the inner application}
}
\if{html}{\out{</div>}}
}
}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFDashboardApplication-clone"></a>}}
\if{latex}{\out{\hypertarget{method-UFDashboardApplication-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFDashboardApplication$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}

53
man/UFFrameApplication.Rd Normal file
View File

@@ -0,0 +1,53 @@
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/ufFrameApplication.R
\name{UFFrameApplication}
\alias{UFFrameApplication}
\title{UserFrosting frame only R shiny application}
\description{
UserFrosting frame only R shiny application
UserFrosting frame only R shiny application
}
\section{Super classes}{
\code{AVSDevR.ShinyApplication::FrameApplication} -> \code{AVSDevR.ShinyApplication::AdminLTEApplication} -> \code{AVSDevR.ShinyApplication::UFApplication} -> \code{UFFrameApplication}
}
\section{Methods}{
\subsection{Public methods}{
\itemize{
\item \href{#method-UFFrameApplication-clone}{\code{UFFrameApplication$clone()}}
}
}
\if{html}{\out{
<details><summary>Inherited methods</summary>
<ul>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="getSessionDBClient"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-getSessionDBClient'><code>AVSDevR.ShinyApplication::FrameApplication$getSessionDBClient()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="initialize"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-initialize'><code>AVSDevR.ShinyApplication::FrameApplication$initialize()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="server"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-server'><code>AVSDevR.ShinyApplication::FrameApplication$server()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withBootstrap4Shim"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withBootstrap4Shim'><code>AVSDevR.ShinyApplication::FrameApplication$withBootstrap4Shim()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="FrameApplication" data-id="withSessionLogger"><a href='../../AVSDevR.ShinyApplication/html/FrameApplication.html#method-FrameApplication-withSessionLogger'><code>AVSDevR.ShinyApplication::FrameApplication$withSessionLogger()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="frameUI"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-frameUI'><code>AVSDevR.ShinyApplication::AdminLTEApplication$frameUI()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="ui"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-ui'><code>AVSDevR.ShinyApplication::AdminLTEApplication$ui()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="AdminLTEApplication" data-id="withSkin"><a href='../../AVSDevR.ShinyApplication/html/AdminLTEApplication.html#method-AdminLTEApplication-withSkin'><code>AVSDevR.ShinyApplication::AdminLTEApplication$withSkin()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="UFApplication" data-id="app"><a href='../../AVSDevR.ShinyApplication/html/UFApplication.html#method-UFApplication-app'><code>AVSDevR.ShinyApplication::UFApplication$app()</code></a></span></li>
<li><span class="pkg-link" data-pkg="AVSDevR.ShinyApplication" data-topic="UFApplication" data-id="configureUF"><a href='../../AVSDevR.ShinyApplication/html/UFApplication.html#method-UFApplication-configureUF'><code>AVSDevR.ShinyApplication::UFApplication$configureUF()</code></a></span></li>
</ul>
</details>
}}
\if{html}{\out{<hr>}}
\if{html}{\out{<a id="method-UFFrameApplication-clone"></a>}}
\if{latex}{\out{\hypertarget{method-UFFrameApplication-clone}{}}}
\subsection{Method \code{clone()}}{
The objects of this class are cloneable with this method.
\subsection{Usage}{
\if{html}{\out{<div class="r">}}\preformatted{UFFrameApplication$clone(deep = FALSE)}\if{html}{\out{</div>}}
}
\subsection{Arguments}{
\if{html}{\out{<div class="arguments">}}
\describe{
\item{\code{deep}}{Whether to make a deep clone.}
}
\if{html}{\out{</div>}}
}
}
}