test2 / app.R
pajuan's picture
Update app.R
34893bf verified
library(shiny)
library(bslib)
library(dplyr)
library(ggplot2)
library(shinyAce)
library(shinyjs)
renderLogEntry <- function(entry){
paste0(entry, " - ", date())
}
withConsoleRedirect <- function(containerId, expr) {
txt <- capture.output(results <- expr, type = "output")
if (length(txt) > 0) {
appendTabsetPanel(Session, containerId, tabPanel("Console", verbatimTextOutput(paste0(txt, "\n"))))
}
results
}
ui <- shinyUI(
tagList(
tags$head(
tags$link(rel = "stylesheet", type = "text/css", href = "styles.css"),
tags$script(src = "script.js")
),
fluidPage(
useShinyjs(),
div(
id = "sidebar",
sidebarPanel(
h2("Opciones"),
actionButton("theme_button", "Elige un tema"),
selectInput('theme_code', 'Tema editor', choices = getAceThemes(), selected = 'ambiance'),
downloadButton('save_code', 'Guardar codigo', icon = icon('save')),
downloadButton('save_knit', 'Guardar knitr', icon = icon('save')),
tags$a(href = "https://github.com/pablovanegas/runr", target = "_blank", class = "btn btn-default shiny-bound-input", "Ver Código Fuente")
)
),
mainPanel(
actionButton("toggleSidebar", "Opciones"),
h1("Simple R"),
div(class = "row",
div(class = "col-md-12",
h2("Tu codigo: "),
verbatimTextOutput("log"),
aceEditor("rmd", mode = "markdown", value = '```{r}
2*3
```',
hotkeys = list(
open_chunk = 'Ctrl-Alt-I',
save_code = "Ctrl-S",
help_key = "F1"
),
autoComplete = "live"
),
actionButton("eval", "Run", icon = icon('play')),
actionButton('clear', 'Clear', icon = icon('eraser')),
actionButton("open_chunk", "Insert Chunk", icon = icon('plus'))
)))
,
div(
class = "row",
div(
class = "col-md-12",
h1("Resultado: "),
htmlOutput("knitDoc")
)
)
)
)
)
server <- shinyServer(function(input, output, session) {
hide("sidebar")
observeEvent(input$theme_button, {
showModal(modalDialog(title = "Elige un tema", shinythemes::themeSelector()))
})
observe({
updateAceEditor(session,"rmd",
theme = input$theme_code
)
})
observeEvent(input$eval, {
HTML(knitr::knit2html(text = isolate(input$rmd), quiet = TRUE))
})
observeEvent(input$clear, {
updateAceEditor(session, 'rmd', value = '')
})
observeEvent(input$open_chunk, {
delay(3000, {
updateAceEditor(session, 'rmd', value = paste(isolate(input$rmd), "\n{r}\n\n\n", sep = ''))
})
})
observeEvent(input$rmd_open_chunk, {
delay(3000, {
old_val <- isolate(input$rmd)
new_chunk <- "\n{r}\n\n\n"
new_val <- paste(old_val, new_chunk, sep = "")
updateAceEditor(session, 'rmd', value = new_val)
})
})
observeEvent(input$rmd_help_key, {
showModal(modalDialog(
title = "Help Menu",
h2("Hot-Keys"),
"Use the following hot-keys:",
tags$ul(
tags$li("Ctrl-Alt-I: Open Chunk"),
tags$li("Ctrl-F: Find & Replace"),
tags$li("F1: Help Menu"),
tags$li("Ctrl-Z: Undo"),
tags$li("Ctrl-Y: Redo"),
)
))
})
output$save_code <- downloadHandler(
filename = function() {
paste("code-", Sys.Date(), ".Rmd", sep = "")
},
content = function(file) {
writeLines(input$rmd, file)
}
)
output$save_knit <- downloadHandler(
filename = function() {
paste("knit-", Sys.Date(), ".html", sep = "")
},
content = function(file) {
tmp_file <- tempfile(fileext = ".Rmd")
writeLines(input$rmd, tmp_file)
rmarkdown::render(input = tmp_file, output_file = file, output_format = "html_document")
}
)
observeEvent(input$toggleSidebar, {
toggle(session, "sidebar")
}
)
})
shinyApp(ui, server)