library(shiny) shinyUI(fluidPage( title = 'Tidy R Code with formatR (Yihui Xie)', helpText(), # just a placeholder for a little bit top margin sidebarLayout( sidebarPanel( tags$head( tags$script(src = 'shiny-handler.js'), tags$style(type = 'text/css', '.popover {max-width: 100%;}') ), helpText('This Shiny app uses the function', code('tidy_source()'), 'in the', a(href = 'https://yihui.org/formatR/', strong('formatR')), sprintf('(>= v%s)', packageVersion('formatR')), 'package to reformat R code in the text box on the right.', a(list(icon('hand-point-right'), 'demo'), class = 'btn btn-small btn-info', onclick = '$("textarea#src").val($("#demo").val()).trigger("change");')), checkboxInput('arg_comment', 'Preserve comments', TRUE), checkboxInput('arg_blank', 'Preserve blank lines', TRUE), checkboxInput('arg_assign', 'Substitute = with <-', FALSE), checkboxInput('arg_pipe', 'Substitute %>% with |>', FALSE), checkboxInput('arg_anl', 'Start function arguments on a new line', FALSE), checkboxInput('arg_brace', 'Put { on a new line', FALSE), checkboxInput('arg_wrap', 'Wrap comments', TRUE), numericInput ('arg_indent', 'Number of spaces for indentation', 4, min = 0), radioButtons('width_type', 'Line width type', c('minimum', 'maximum'), inline = TRUE), numericInput ('arg_width', 'Line width value', 70, min = 20, max = 500), submitButton ('Format My Code', icon('play')) ), mainPanel( tags$textarea( id = 'src', rows = 20, style = 'width: 99%; font-family: monospace; word-wrap: normal; white-space: pre;', placeholder = 'paste your R code here...' ), tags$textarea( id = 'demo', style = 'display: none;', paste(c( readLines(system.file('format', 'messy.R', package = 'formatR')), if (getRversion() >= '4.1.0') c( '', "# R's native pipe on a single line", 'mtcars |> subset(am==0) |> (\\(.) lm(mpg~hp, data=.))()' ), '', '# magrittr pipes on a single line', 'mtcars %>% subset(am==0) %>% lm(mpg~hp, data=.)' ), collapse = '\n') ) ) ) ))