mirror of
https://github.com/rstudio/shiny.git
synced 2026-02-06 20:55:24 -05:00
96 lines
3.2 KiB
R
96 lines
3.2 KiB
R
|
|
#' @include reactive-domains.R
|
|
NULL
|
|
|
|
#' @include reactives.R
|
|
NULL
|
|
|
|
#' Get the query string / hash component from the URL
|
|
#'
|
|
#' Two user friendly wrappers for getting the query string and the hash
|
|
#' component from the app's URL.
|
|
#'
|
|
#' These can be particularly useful if you want to display different content
|
|
#' depending on the values in the query string / hash (e.g. instead of basing
|
|
#' the conditional on an input or a calculated reactive, you can base it on the
|
|
#' query string). However, note that, if you're changing the query string / hash
|
|
#' programatically from within the server code, you must use
|
|
#' \code{updateQueryString(_yourNewQueryString_, mode = "push")}. The default
|
|
#' \code{mode} for \code{updateQueryString} is \code{"replace"}, which doesn't
|
|
#' raise any events, so any observers or reactives that depend on it will
|
|
#' \emph{not} get triggered. However, if you're changing the query string / hash
|
|
#' directly by typing directly in the browser and hitting enter, you don't have
|
|
#' to worry about this.
|
|
#'
|
|
#' @param session A Shiny session object.
|
|
#'
|
|
#' @return For \code{getQueryString}, a named list. For example, the query
|
|
#' string \code{?param1=value1¶m2=value2} becomes \code{list(param1 =
|
|
#' value1, param2 = value2)}. For \code{getUrlHash}, a character vector with
|
|
#' the hash (including the leading \code{#} symbol).
|
|
#'
|
|
#' @seealso \code{\link{updateQueryString}}
|
|
#'
|
|
#' @examples
|
|
#' ## Only run this example in interactive R sessions
|
|
#' if (interactive()) {
|
|
#'
|
|
#' ## App 1: getQueryString
|
|
#' ## Printing the value of the query string
|
|
#' ## (Use the back and forward buttons to see how the browser
|
|
#' ## keeps a record of each state)
|
|
#' shinyApp(
|
|
#' ui = fluidPage(
|
|
#' textInput("txt", "Enter new query string"),
|
|
#' helpText("Format: ?param1=val1¶m2=val2"),
|
|
#' actionButton("go", "Update"),
|
|
#' hr(),
|
|
#' verbatimTextOutput("query")
|
|
#' ),
|
|
#' server = function(input, output, session) {
|
|
#' observeEvent(input$go, {
|
|
#' updateQueryString(input$txt, mode = "push")
|
|
#' })
|
|
#' output$query <- renderText({
|
|
#' query <- getQueryString()
|
|
#' queryText <- paste(names(query), query,
|
|
#' sep = "=", collapse=", ")
|
|
#' paste("Your query string is:\n", queryText)
|
|
#' })
|
|
#' }
|
|
#' )
|
|
#'
|
|
#' ## App 2: getUrlHash
|
|
#' ## Printing the value of the URL hash
|
|
#' ## (Use the back and forward buttons to see how the browser
|
|
#' ## keeps a record of each state)
|
|
#' shinyApp(
|
|
#' ui = fluidPage(
|
|
#' textInput("txt", "Enter new hash"),
|
|
#' helpText("Format: #hash"),
|
|
#' actionButton("go", "Update"),
|
|
#' hr(),
|
|
#' verbatimTextOutput("hash")
|
|
#' ),
|
|
#' server = function(input, output, session) {
|
|
#' observeEvent(input$go, {
|
|
#' updateQueryString(input$txt, mode = "push")
|
|
#' })
|
|
#' output$hash <- renderText({
|
|
#' hash <- getUrlHash()
|
|
#' paste("Your hash is:\n", hash)
|
|
#' })
|
|
#' }
|
|
#' )
|
|
#' }
|
|
#' @export
|
|
getQueryString <- function(session = getDefaultReactiveDomain()) {
|
|
parseQueryString(session$clientData$url_search)
|
|
}
|
|
|
|
#' @rdname getQueryString
|
|
#' @export
|
|
getUrlHash <- function(session = getDefaultReactiveDomain()) {
|
|
session$clientData$url_hash
|
|
}
|