diff --git a/NAMESPACE b/NAMESPACE index e7c3bc93..aba3ea10 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,6 +6,7 @@ export(add_dsfr_deps) export(column_dsfr) export(fluidPage_dsfr) export(fluidRow_dsfr) +export(header_dsfr) export(parse_html) export(radioButtons_dsfr) export(run_app) diff --git a/R/app_server.R b/R/app_server.R index 989f592a..b6790c75 100644 --- a/R/app_server.R +++ b/R/app_server.R @@ -7,12 +7,11 @@ app_server <- function(input, output, session) { # Your application server logic - observeEvent(input$go,{ + observeEvent(input$go, { message("je clique ", input$go) }) - observeEvent(input$espece,{ + observeEvent(input$espece, { message("je change d'esepce ", input$espece) }) - } diff --git a/R/app_ui.R b/R/app_ui.R index 3d9c0ced..9b20244d 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -10,27 +10,36 @@ app_ui <- function(request) { golem_add_external_resources(), # Your application UI logic fluidPage_dsfr( + header = header_dsfr( + intitule = "Intitule", + officiel = "Officiel", + nom_site_service = "Nom du site / service", + baseline = "baseline - precisions sur l organisation", + class = "fr-m-1w" + ), title = "Exemple shiny dsfr", h1("Exemple d'utilisation de {shinygouv}"), fluidRow_dsfr( - column_dsfr(0, #Calcul automatique de la largeur - p("Premi\\u00E8re Colonne"), - actionButton_dsfr("go", label = "Sample!"), - plotOutput( - "plot_sample" - ) - ), - column_dsfr(0,#Calcul automatique de la largeur - p("Deuxi\\u00E8me Colonne"), - radioButtons_dsfr( - inputId = "espece", - label = "Especes", - choices = c("Setosa" = "setosa","Versicolor" = "versicolor"), - class = NULL - ), - plotOutput( - "plot_espece" - ) + column_dsfr( + 0, # Calcul automatique de la largeur + p("Premi\\u00E8re Colonne"), + actionButton_dsfr("go", label = "Sample!"), + plotOutput( + "plot_sample" + ) + ), + column_dsfr( + 0, # Calcul automatique de la largeur + p("Deuxi\\u00E8me Colonne"), + radioButtons_dsfr( + inputId = "espece", + label = "Especes", + choices = c("Setosa" = "setosa", "Versicolor" = "versicolor"), + class = NULL + ), + plotOutput( + "plot_espece" + ) ) ) ) diff --git a/R/column_dsfr.R b/R/column_dsfr.R index 3fd6f8b7..a7560e4a 100644 --- a/R/column_dsfr.R +++ b/R/column_dsfr.R @@ -1,52 +1,51 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand #' column_dsfr -#' -#' +#' +#' #' @param width width par défaut est NULL, cela signifie que la taille de la colonne depend des autres colonnes. Vous pouvez aussi utiliser 0 #' @param ... differents tag pour construire la page #' #' @return shiny.tag.list -#' +#' #' @importFrom htmltools tagList -#' +#' #' @export #' @examples -#' -#' if(interactive()){ -#' shiny::shinyApp( -#' ui = fluidPage_dsfr( -#' title = "exemple", -#' fluidRow_dsfr( -#' column_dsfr(0, "test"), -#' column_dsfr(0, "test"), -#' column_dsfr(0, "test"), -#' column_dsfr(0, "test") -#' ) -#' ), -#' server = function(input, output){} +#' +#' if (interactive()) { +#' shiny::shinyApp( +#' ui = fluidPage_dsfr( +#' title = "exemple", +#' fluidRow_dsfr( +#' column_dsfr(0, "test"), +#' column_dsfr(0, "test"), +#' column_dsfr(0, "test"), +#' column_dsfr(0, "test") +#' ) +#' ), +#' server = function(input, output) {} #' ) #' } -#' -column_dsfr <- function(width = NULL, ...){ - - if(is.null(width)) { +#' +column_dsfr <- function(width = NULL, ...) { + if (is.null(width)) { add_width <- "" - }else{ - if(width != 0){ - add_width <- paste0("-", width) - }else{ - add_width <- "" - } + } else { + if (width != 0) { + add_width <- paste0("-", width) + } else { + add_width <- "" } + } class <- paste0("fr-col", add_width) - + layout_dsfr_template( - html = tagList( - ... - ), - class = class, - other_class = NULL - ) + html = tagList( + ... + ), + class = class, + other_class = NULL + ) } diff --git a/R/fluidpage_dsfr.R b/R/fluidpage_dsfr.R index c267340e..5ac816a4 100644 --- a/R/fluidpage_dsfr.R +++ b/R/fluidpage_dsfr.R @@ -1,46 +1,52 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand #' fluidPage_dsfr -#' +#' #' @param ... element a inclure dans la page +#' @param header l entete de la page #' @param theme pas implemente #' @param lang pas implemente #' @param title titre de la page #' #' @return html -#' +#' #' @importFrom htmltools tagList -#' +#' #' @export #' #' @examples #' my_page <- fluidPage_dsfr( +#' header = header_dsfr( +#' intitule = "Prefet de", +#' officiel = "Bretagne", +#' ), #' title = "Gouv", #' htmltools::div("test") #' ) -#' if(interactive()){ -#' shiny::shinyApp( -#' my_page, -#' server = function(input, output){} +#' if (interactive()) { +#' shiny::shinyApp( +#' my_page, +#' server = function(input, output) {} #' ) #' } fluidPage_dsfr <- function( - ..., - title = NULL, - theme = NULL, - lang = NULL + ..., + header = NULL, + title = NULL, + theme = NULL, + lang = NULL ) { - + # TODO theme et lang # check les params ui <- fluidPage_dsfr_template( + header = tagList(header), title = tagList(title), body = tagList( ... - ) + ) ) %>% - parse_html(zone = "/html") %>% - add_dsfr_deps() + parse_html(zone = "/html") %>% + add_dsfr_deps() ui - } diff --git a/R/fluidpage_dsfr_template.R b/R/fluidpage_dsfr_template.R index 3874e81a..3e7b92b5 100644 --- a/R/fluidpage_dsfr_template.R +++ b/R/fluidpage_dsfr_template.R @@ -1,27 +1,27 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand #' fluidPage_dsfr_template -#' +#' @param header entete de la page #' @param title titre de la page -#' @param body body +#' @param body body #' #' @importFrom htmltools htmlTemplate #' @return html #' @noRd fluidPage_dsfr_template <- function( - title, - body -){ - + header, + title, + body +) { htmltools::htmlTemplate( filename = system.file( "v1.7.2", - "composant", + "composant", "fluidpage.html", package = "shinygouv" ), + header = header, title = title, body = body ) } - diff --git a/R/fluidrow_dsfr.R b/R/fluidrow_dsfr.R index bc98a81b..3d0f0543 100644 --- a/R/fluidrow_dsfr.R +++ b/R/fluidrow_dsfr.R @@ -1,35 +1,35 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand #' fluidRow_dsfr -#' -#' +#' +#' #' @param ... differents tag pour construire la page #' @param class ajout de class pour la fluidRow_dsfr (voir la page officiel du CSS) #' #' @return shiny.tag.list #' @importFrom htmltools tagList -#' +#' #' @export #' @examples -#' -#' if(interactive()){ -#' shiny::shinyApp( -#' ui = fluidPage_dsfr( -#' title = "exemple", -#' fluidRow_dsfr( -#' shiny::p("Voici un exemple") -#' ) -#' ), -#' server = function(input, output){} +#' +#' if (interactive()) { +#' shiny::shinyApp( +#' ui = fluidPage_dsfr( +#' title = "exemple", +#' fluidRow_dsfr( +#' shiny::p("Voici un exemple") +#' ) +#' ), +#' server = function(input, output) {} #' ) #' } -#' -fluidRow_dsfr <- function(..., class = NULL){ - layout_dsfr_template( - html = tagList( - ... - ), - class = "fr-grid-row", - other_class = class - ) +#' +fluidRow_dsfr <- function(..., class = NULL) { + layout_dsfr_template( + html = tagList( + ... + ), + class = "fr-grid-row", + other_class = class + ) } diff --git a/R/header_dsfr.R b/R/header_dsfr.R new file mode 100644 index 00000000..65cc064a --- /dev/null +++ b/R/header_dsfr.R @@ -0,0 +1,46 @@ +# WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_header.Rmd: do not edit by hand + +#' header_dsfr +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param officiel la partie "officiel" du bloc marque +#' @param url l url de redirection - optionnel +#' @param titre le texte de description de l url - optionnel +#' @param nom_site_service le nom du site ou du service - optionnel +#' @param baseline le texte sous le nom de site/service - optionnel +#' @param class un classe a ajouter si necessaire ("fr-m-1w" correspond a une margin de 1w sur tous les cotés) - optionnel, par defaut "fr-container" (centré) (voir le Systeme de design de l'Etat "fondamentaux-techniques/espacements") +#' @return html +#' @export +#' +#' @examples +#' +#' header_dsfr( +#' intitule = "Prefet de", +#' officiel = "Bretagne", +#' ) +header_dsfr <- function( + intitule, + officiel, + url = "/", + titre = NULL, + nom_site_service = NULL, + baseline = NULL, + class = "fr-container" +) { + + # check les params + assertthat::assert_that(is.character(intitule)) + assertthat::assert_that(is.character(officiel)) + # TODO verifier que l url est valide + + header_dsfr_template( + class = class, + intitule = intitule, + officiel = officiel, + url = url, + titre = titre, + nom_site_service = nom_site_service, + baseline = baseline + ) %>% + parse_html() +} diff --git a/R/header_dsfr_template.R b/R/header_dsfr_template.R new file mode 100644 index 00000000..ce9362c9 --- /dev/null +++ b/R/header_dsfr_template.R @@ -0,0 +1,38 @@ +# WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_header.Rmd: do not edit by hand + +#' header_dsfr_template +#' @param intitule la partie "intitule" du bloc marque +#' @param officiel la partie "officiel" du bloc marque +#' @param url l url de redirection +#' @param titre le texte de description de l url +#' @param nom_site_service le nom du site ou du service - optionnel +#' @param baseline le texte sous le nom de site/service - optionnel +#' @param class un classe a ajouter si necessaire (".fr-m-1w" pour #TODO) - optionnel +#' @importFrom htmltools htmlTemplate +#' @return html +#' @noRd +header_dsfr_template <- function( + intitule, + officiel, + url, + titre, + nom_site_service, + baseline, + class +) { + htmltools::htmlTemplate( + filename = system.file( + "v1.7.2", + "composant", + "entete.html", + package = "shinygouv" + ), + class = class, + intitule = intitule, + officiel = officiel, + url = url, + titre = titre, + nom_site_service = nom_site_service, + baseline = baseline + ) +} diff --git a/R/layout_dsfr_template.R b/R/layout_dsfr_template.R index 48649f43..82e0062c 100644 --- a/R/layout_dsfr_template.R +++ b/R/layout_dsfr_template.R @@ -1,7 +1,7 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand #' layout_dsfr_template -#' +#' #' @param html list de tag #' @param class class de la div #' @param other_class autre classes a ajouter @@ -10,15 +10,14 @@ #' @return html #' @noRd layout_dsfr_template <- function( - html, - class, - other_class -){ - + html, + class, + other_class +) { htmltools::htmlTemplate( filename = system.file( "v1.7.2", - "layout", + "layout", "layout.html", package = "shinygouv" ), @@ -27,4 +26,3 @@ layout_dsfr_template <- function( other_class = other_class ) } - diff --git a/R/parse_html.R b/R/parse_html.R index 32908911..609af8e6 100644 --- a/R/parse_html.R +++ b/R/parse_html.R @@ -1,6 +1,6 @@ # WARNING - Generated by {fusen} from /dev/flat_tools.Rmd: do not edit by hand -#' Traduit du html en resultat shiny +#' Traduit du html en resultat shiny #' #' @param html_code resultat d'une fonction htmlTemplate ou une chaine de caractere #' @param zone zone a garder pour parser @@ -12,8 +12,7 @@ #' html_code <- '' #' parse_html(html_code) parse_html <- function(html_code, zone = "/html/body/*") { - xml <- parse_to_xml(html_code, zone) %>% render_node(prefix = TRUE) - - eval(parse(text = xml)) + + eval(parse(text = xml)) } diff --git a/R/parse_to_xml.R b/R/parse_to_xml.R index 04dcdf71..b9819244 100644 --- a/R/parse_to_xml.R +++ b/R/parse_to_xml.R @@ -1,22 +1,22 @@ # WARNING - Generated by {fusen} from /dev/flat_tools.Rmd: do not edit by hand #' Traduit du code html de htmltools pour du code xml -#' +#' #' @param html_code resultat de la fonction htmlTemplate #' @importFrom XML htmlParse getNodeSet #' #' @noRd -parse_to_xml <- function(html_code, zone = "/html/body/*"){ - if(inherits(html_code, "XMLInternalElementNode")){ +parse_to_xml <- function(html_code, zone = "/html/body/*") { + if (inherits(html_code, "XMLInternalElementNode")) { stop("Use this function with character or shiny.tag.list") } - - if(!is.character(html_code)){ + + if (!is.character(html_code)) { html_code <- as.character(html_code) } - - html_code %>% - XML::htmlParse() %>% - XML::getNodeSet(zone) %>% - getElement(1) + + html_code %>% + XML::htmlParse() %>% + XML::getNodeSet(zone) %>% + getElement(1) } diff --git a/R/radiobuttons_dsfr.R b/R/radiobuttons_dsfr.R index f073f1c9..3bd5ea38 100644 --- a/R/radiobuttons_dsfr.R +++ b/R/radiobuttons_dsfr.R @@ -1,44 +1,50 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_radioButtons.Rmd: do not edit by hand #' radioButtons_dsfr -#' +#' #' @param inputId id de l'input #' @param label label du bouton #' @param choices Liste des valeurs à sélectionner (si les éléments de la liste portent un nom, c'est ce nom qui est affiché à l'utilisateur et non la valeur) -#' @param inline Si TRUE, positionne les choix en ligne (c'est-à-dire horizontalement). -#' @param class des classes a ajouter si necessaire +#' @param inline Si TRUE, positionne les choix en ligne (c'est-à-dire horizontalement). +#' @param class des classes a ajouter si necessaire #' @return html -#' +#' #' @export #' #' @examples #' radioButtons_dsfr( -#' inputId = "test", label = "Test", choices = c("A","B"), class = NULL +#' inputId = "test", +#' label = "Test", +#' choices = c("A", "B"), +#' class = NULL #' ) -#' +#' #' # radioButtons_dsfr( -#' # inputId = "test", -#' # label = "Test", +#' # inputId = "test", +#' # label = "Test", #' # choices = c("Choix A" = "A","Choix B" = "B"), #' # class = NULL #' # ) radioButtons_dsfr <- function( - inputId, label, choices, inline = FALSE, class = NULL - ) { - + inputId, + label, + choices, + inline = FALSE, + class = NULL +) { + # check les params assertthat::assert_that(is.character(inputId)) assertthat::assert_that(is.character(label)) assertthat::assert_that(is.character(choices)) - assertthat::assert_that(is.logical(inline)) - - radioButtons_dsfr_template( + assertthat::assert_that(is.logical(inline)) + + radioButtons_dsfr_template( inputId = inputId, label = label, choix = choices, - inline = inline, + inline = inline, class = class - ) %>% - parse_html() - + ) %>% + parse_html() } diff --git a/R/radiobuttons_dsfr_template.R b/R/radiobuttons_dsfr_template.R index 072937e3..3bb91668 100644 --- a/R/radiobuttons_dsfr_template.R +++ b/R/radiobuttons_dsfr_template.R @@ -1,26 +1,30 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_radioButtons.Rmd: do not edit by hand #' radioButtons_dsfr_template -#' +#' #' @param inputId id de l'input #' @param label label du bouton #' @param choix choix Liste des valeurs à sélectionner (si les éléments de la liste portent un nom, c'est ce nom qui est affiché à l'utilisateur et non la valeur) #' @param inline Si TRUE, positionne les choix en ligne (c'est-à-dire horizontalement). NON IMLPEMENTE #' @param class des classes a ajouter si necessaire -#' +#' #' @importFrom htmltools htmlTemplate tagList #' @importFrom purrr map map_chr #' @return html #' @noRd -radioButtons_dsfr_template <- function(inputId, label, choix, inline = FALSE, class = NULL - ){ - - inline <- FALSE #TODO - if (isTRUE(inline)){ +radioButtons_dsfr_template <- function( + inputId, + label, + choix, + inline = FALSE, + class = NULL +) { + inline <- FALSE # TODO + if (isTRUE(inline)) { class_inline <- "fr-fieldset--inline" class <- "shiny-input-container-inline" } else { - class_inline = NULL + class_inline <- NULL } x <- 0 htmltools::htmlTemplate( @@ -32,19 +36,20 @@ radioButtons_dsfr_template <- function(inputId, label, choix, inline = FALSE, c ), inputId = inputId, label = label, - choix = purrr::map(.x = choix, - ~ { - x <<- x+1 - radioButtons_unique_dsfr_template( - inputId = paste0(inputId,"-", x), - name = inputId, - choix = .x, - inline = inline - ) - }) %>% + choix = purrr::map( + .x = choix, + ~ { + x <<- x + 1 + radioButtons_unique_dsfr_template( + inputId = paste0(inputId, "-", x), + name = inputId, + choix = .x, + inline = inline + ) + } + ) %>% htmltools::tagList(), - inline = class_inline, + inline = class_inline, class = class ) } - diff --git a/R/radiobuttons_unique_dsfr_template.R b/R/radiobuttons_unique_dsfr_template.R index 629eb431..f73877d6 100644 --- a/R/radiobuttons_unique_dsfr_template.R +++ b/R/radiobuttons_unique_dsfr_template.R @@ -1,33 +1,38 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_radioButtons.Rmd: do not edit by hand #' radioButtons_unique_dsfr_template -#' +#' #' @param inputId id de l'input avec indexation #' @param choix choix Liste des valeurs à sélectionner (si les éléments de la liste portent un nom, c'est ce nom qui est affiché à l'utilisateur et non la valeur) #' @param name nom de l'inputId sans indexation -#' @param inline Si TRUE, positionne les choix en ligne (c'est-à-dire horizontalement). +#' @param inline Si TRUE, positionne les choix en ligne (c'est-à-dire horizontalement). #' #' @importFrom htmltools htmlTemplate #' @return html #' @noRd -radioButtons_unique_dsfr_template <- function(inputId, choix, name, inline = FALSE - ){ - - if (is.null(names(choix))) { - name_choix <- choix} else { +radioButtons_unique_dsfr_template <- function( + inputId, + choix, + name, + inline = FALSE +) { + if (is.null(names(choix))) { + name_choix <- choix + } else { name_choix <- names(choix) - } - - - if(isTRUE(inline)){ - class_inline <- "-inline" - } else { - class_inline <- NULL} - + } + + + if (isTRUE(inline)) { + class_inline <- "-inline" + } else { + class_inline <- NULL + } + htmltools::htmlTemplate( filename = system.file( "v1.7.2", - "composant", + "composant", "radiobouton.html", package = "shinygouv" ), @@ -35,7 +40,6 @@ radioButtons_unique_dsfr_template <- function(inputId, choix, name, inline = FAL name = name, name_choix = name_choix, value_choix = choix, - class_inline = class_inline - ) + class_inline = class_inline + ) } - diff --git a/R/render_node.R b/R/render_node.R index 2fdd0187..56d4a7d8 100644 --- a/R/render_node.R +++ b/R/render_node.R @@ -1,7 +1,7 @@ # WARNING - Generated by {fusen} from /dev/flat_tools.Rmd: do not edit by hand #' render_node -#' +#' #' @param node node qui provient de parse_to_xml #' @param indent ajout de l'indentation #' @param prefix si TRUE alors le resultat sera prefixe par tags @@ -9,28 +9,34 @@ #' @importFrom XML xmlName xmlValue xmlChildren #' @importFrom stringr str_pad #' @importFrom purrr partial -#' -render_node <- function (node, indent = 0, prefix = FALSE) { +#' +render_node <- function(node, indent = 0, prefix = FALSE) { if (xmlName(node) == "text") { txt <- xmlValue(node) if (nchar(trimws(txt)) > 0) { paste0("\"", trimws(txt), "\"") } - }else { - tagName <- if (prefix){ + } else { + tagName <- if (prefix) { paste0("tags$", xmlName(node)) - }else { + } else { xmlName(node) } - - my_render <- partial(render_node, indent = newIndent, - prefix = prefix) + + my_render <- partial( + render_node, + indent = newIndent, + prefix = prefix + ) newIndent <- indent + length(tagName) + 1 xmlChildren(node) %>% Keep(my_render, .) %>% - append(make_attrs(node), .) %>% - paste(collapse = str_pad(",\n", width = newIndent, - side = c("right"))) %>% + append(make_attrs(node), .) %>% + paste(collapse = str_pad( + ",\n", + width = newIndent, + side = c("right") + )) %>% trimws(which = c("left")) %>% paste0(tagName, "(", ., ")") } @@ -39,21 +45,25 @@ render_node <- function (node, indent = 0, prefix = FALSE) { #' @noRd #' @importFrom XML xmlAttrs #' @importFrom stringr str_detect -make_attrs <- function (node) { +make_attrs <- function(node) { attrs <- xmlAttrs(node) names(attrs) %>% Map(function(name) { val <- attrs[[name]] - if (str_detect(string = name, pattern = "-") || str_detect(string = name, - pattern = "for")) { + if (str_detect(string = name, pattern = "-") || str_detect( + string = name, + pattern = "for" + )) { name <- paste0("`", name, "`") } - paste0(name, " = ", if (val == "") {"NA"}else{ paste0("\"", val, "\"")}) + paste0(name, " = ", if (val == "") { + "NA" + } else { + paste0("\"", val, "\"") + }) }, .) } #' @noRd -Keep <- function (fun, xs) { +Keep <- function(fun, xs) { Map(fun, xs) %>% Filter(Negate(is.null), .) } - - diff --git a/R/shinygouv-dependencies.R b/R/shinygouv-dependencies.R index 467fe284..0ca33767 100644 --- a/R/shinygouv-dependencies.R +++ b/R/shinygouv-dependencies.R @@ -13,8 +13,8 @@ add_dsfr_deps <- function(tag) { src = c(file = "dsfr-v1.7.2"), stylesheet = "dist/dsfr.min.css", script = list( - list(type="module", src="dist/dsfr.module.min.js"), - list(type="text/javascript", nomodule=NULL, src="dist/dsfr.nomodule.min.js") + list(type = "module", src = "dist/dsfr.module.min.js"), + list(type = "text/javascript", nomodule = NULL, src = "dist/dsfr.nomodule.min.js") ), package = "shinygouv", all_files = TRUE diff --git a/dev/documentation/fluidpage_dsfr.Rmd b/dev/documentation/fluidpage_dsfr.Rmd index bf56501c..20cb0b7e 100644 --- a/dev/documentation/fluidpage_dsfr.Rmd +++ b/dev/documentation/fluidpage_dsfr.Rmd @@ -34,6 +34,7 @@ Ensuite, vient la traduction avec `htmlTemplate` : ```{r eval = FALSE, echo = TRUE} fluidPage_dsfr_template <- function( + header, title, body ){ @@ -45,13 +46,14 @@ fluidPage_dsfr_template <- function( "fluidpage.html", package = "shinygouv" ), + header = NULL title = title, body = body ) } ``` -Les paramètres `title` et `body` sont repris dans le html pour pouvoir le créer. +Les paramètres `header`, `title` et `body` sont repris dans le html pour pouvoir le créer. # fluidPage_dsfr @@ -66,6 +68,7 @@ Petit détail technique, le `parse_html` permet de s'assurer de retrouver une st ```{r eval = FALSE, echo = TRUE} fluidPage_dsfr <- function( ..., + header = NULL, title = NULL, theme = NULL, lang = NULL @@ -74,6 +77,7 @@ fluidPage_dsfr <- function( # TODO theme et lang # check les params ui <- fluidPage_dsfr_template( + header = tagList(header), title = tagList(title), body = tagList( ... @@ -82,11 +86,16 @@ fluidPage_dsfr <- function( parse_html(zone = "/html") %>% add_dsfr_deps() ui + } ``` ```{r examples-fluidPage_dsfr, eval = FALSE} my_page <- fluidPage_dsfr( + header = header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ), title = "Gouv", htmltools::div("test") ) diff --git a/dev/documentation/header-dsfr.Rmd b/dev/documentation/header-dsfr.Rmd new file mode 100644 index 00000000..fce33694 --- /dev/null +++ b/dev/documentation/header-dsfr.Rmd @@ -0,0 +1,41 @@ +--- +title: "header dsfr" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{header-dsfr} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r setup} +library(shinygouv) +``` + + + +# header_dsfr_template + + + + + + + + + +# header_dsfr + +```{r examples-header_dsfr} + header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ) +``` + diff --git a/dev/v1.7.2/composant/flat_fluidpage.Rmd b/dev/v1.7.2/composant/flat_fluidpage.Rmd index 51b10212..b64653a6 100644 --- a/dev/v1.7.2/composant/flat_fluidpage.Rmd +++ b/dev/v1.7.2/composant/flat_fluidpage.Rmd @@ -26,13 +26,14 @@ Ensuite, vient la traduction avec `htmlTemplate` : ```{r function-fluidPage_dsfr_template} #' fluidPage_dsfr_template -#' +#' @param header entete de la page #' @param title titre de la page #' @param body body #' #' @importFrom htmltools htmlTemplate #' @return html fluidPage_dsfr_template <- function( + header, title, body ){ @@ -44,6 +45,7 @@ fluidPage_dsfr_template <- function( "fluidpage.html", package = "shinygouv" ), + header = header, title = title, body = body ) @@ -53,6 +55,7 @@ fluidPage_dsfr_template <- function( ```{r, eval=FALSE, echo=TRUE} fluidPage_dsfr_template <- function( + header, title, body ){ @@ -64,19 +67,21 @@ fluidPage_dsfr_template <- function( "fluidpage.html", package = "shinygouv" ), + header = NULL title = title, body = body ) } ``` -Les paramètres `title` et `body` sont repris dans le html pour pouvoir le créer. +Les paramètres `header`, `title` et `body` sont repris dans le html pour pouvoir le créer. ```{r tests-fluidPage_dsfr_template} test_that("fluidPage_dsfr_template works", { expect_true(inherits(fluidPage_dsfr_template, "function")) test <- fluidPage_dsfr_template( + header = NULL, title = "titre", body = NULL ) @@ -99,6 +104,7 @@ Petit détail technique, le `parse_html` permet de s'assurer de retrouver une st #' fluidPage_dsfr #' #' @param ... element a inclure dans la page +#' @param header l entete de la page (voir `header_dsfr()`) #' @param theme pas implemente #' @param lang pas implemente #' @param title titre de la page @@ -112,6 +118,7 @@ Petit détail technique, le `parse_html` permet de s'assurer de retrouver une st #' @examples fluidPage_dsfr <- function( ..., + header = NULL, title = NULL, theme = NULL, lang = NULL @@ -120,6 +127,7 @@ fluidPage_dsfr <- function( # TODO theme et lang # check les params ui <- fluidPage_dsfr_template( + header = tagList(header), title = tagList(title), body = tagList( ... @@ -135,6 +143,7 @@ fluidPage_dsfr <- function( ```{r, eval=FALSE, echo=TRUE} fluidPage_dsfr <- function( ..., + header = NULL, title = NULL, theme = NULL, lang = NULL @@ -143,6 +152,7 @@ fluidPage_dsfr <- function( # TODO theme et lang # check les params ui <- fluidPage_dsfr_template( + header = tagList(header), title = tagList(title), body = tagList( ... @@ -151,12 +161,17 @@ fluidPage_dsfr <- function( parse_html(zone = "/html") %>% add_dsfr_deps() ui + } ``` ```{r examples-fluidPage_dsfr, eval=FALSE} my_page <- fluidPage_dsfr( + header = header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ), title = "Gouv", htmltools::div("test") ) @@ -171,6 +186,10 @@ shiny::shinyApp( ```{r tests-fluidPage_dsfr} test_that("fluidPage_dsfr works", { test <- fluidPage_dsfr( + header = header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ), title = "Gouv", body = htmltools::div("test") ) @@ -241,6 +260,7 @@ test_that("fluidPage_dsfr_template works", { expect_true(inherits(fluidPage_dsfr_template, "function")) test <- fluidPage_dsfr_template( + header = NULL, title = "titre", body = NULL ) diff --git a/dev/v1.7.2/composant/flat_header.Rmd b/dev/v1.7.2/composant/flat_header.Rmd new file mode 100644 index 00000000..e63422c8 --- /dev/null +++ b/dev/v1.7.2/composant/flat_header.Rmd @@ -0,0 +1,156 @@ +--- +title: "flat_new_one.Rmd empty" +output: html_document +editor_options: + chunk_output_type: console +--- + + +```{r development, include=FALSE} +library(testthat) +``` + +```{r development-load} +# Load already included functions if relevant +pkgload::load_all(export_all = TRUE) +``` + +# header_dsfr_template + +```{r function-header_dsfr_template} +#' header_dsfr_template +#' @param intitule la partie "intitule" du bloc marque +#' @param officiel la partie "officiel" du bloc marque +#' @param url l url de redirection +#' @param titre le texte de description de l url +#' @param nom_site_service le nom du site ou du service - optionnel +#' @param baseline le texte sous le nom de site/service - optionnel +#' @param class un classe a ajouter si necessaire (".fr-m-1w" pour #TODO) - optionnel +#' @importFrom htmltools htmlTemplate +#' @return html +header_dsfr_template <- function( + intitule, officiel, url, titre, nom_site_service, baseline, class + ){ + + htmltools::htmlTemplate( + filename = system.file( + "v1.7.2", + "composant", + "entete.html", + package = "shinygouv" + ), + class = class, + intitule = intitule, + officiel = officiel, + url = url, + titre = titre, + nom_site_service = nom_site_service, + baseline = baseline + ) +} + +``` + + +```{r tests-header_dsfr_template} +test_that("header_dsfr_template works", { + expect_true(inherits(header_dsfr_template, "function")) + + test <- header_dsfr_template( + class = NULL, + intitule = "Prefet de", + officiel = "Bretagne", + url = "https://www.prefectures-regions.gouv.fr/bretagne", + titre = "Accueil - Préfecture de Bretagne", + nom_site_service = "DREAL Bretagne", + baseline = "description" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test)) +}) +``` + + +# header_dsfr + +```{r function-header_dsfr} +#' header_dsfr +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param officiel la partie "officiel" du bloc marque +#' @param url l url de redirection - optionnel +#' @param titre le texte de description de l url - optionnel +#' @param nom_site_service le nom du site ou du service - optionnel +#' @param baseline le texte sous le nom de site/service - optionnel +#' @param class un classe a ajouter si necessaire ("fr-m-1w" correspond a une margin de 1w sur tous les cotés) - optionnel, par defaut "fr-container" (centré) (voir le Systeme de design de l'Etat "fondamentaux-techniques/espacements") +#' @return html +#' @export +#' +#' @examples + +header_dsfr <- function( + intitule, officiel, url = "/", titre = NULL, nom_site_service = NULL, baseline = NULL, class = "fr-container" + ) { + + # check les params + assertthat::assert_that(is.character(intitule)) + assertthat::assert_that(is.character(officiel)) + #TODO verifier que l url est valide + + header_dsfr_template( + class = class, + intitule = intitule, + officiel = officiel, + url = url, + titre = titre, + nom_site_service = nom_site_service, + baseline = baseline + ) %>% + parse_html() + +} +``` + +```{r examples-header_dsfr} + header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ) +``` + +```{r tests-header_dsfr} +test_that("header_dsfr works", { + test <- header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ) + #' @description tester si shiny.tag + expect_s3_class(test, "shiny.tag") +}) +``` + + +```{r development-inflate, eval=FALSE} +# Run but keep eval=FALSE to avoid infinite loop +# Execute in the console directly + +spec_infalte <- function(){ + nom <- "header dsfr" + fusen::inflate( + flat_file = "dev/v1.7.2/composant/flat_header.Rmd", + vignette_name = nom) + + nom_c <- gsub(x = tolower(nom), "\\s", "-") + nom_file <- paste0(nom_c, ".Rmd") + file.copy( + file.path("vignettes", nom_file), + file.path("dev","documentation", nom_file) + ) + + unlink(file.path("vignettes", nom_file)) +} +spec_infalte() + +``` + diff --git a/inst/v1.7.2/composant/entete.html b/inst/v1.7.2/composant/entete.html new file mode 100644 index 00000000..d5b01c46 --- /dev/null +++ b/inst/v1.7.2/composant/entete.html @@ -0,0 +1,26 @@ + diff --git a/inst/v1.7.2/composant/fluidpage.html b/inst/v1.7.2/composant/fluidpage.html index 7ea95b05..f37d9472 100644 --- a/inst/v1.7.2/composant/fluidpage.html +++ b/inst/v1.7.2/composant/fluidpage.html @@ -15,6 +15,7 @@ + {{header}}
{{body}}
diff --git a/man/fluidPage_dsfr.Rd b/man/fluidPage_dsfr.Rd index 5f58ba7b..fa87d3e8 100644 --- a/man/fluidPage_dsfr.Rd +++ b/man/fluidPage_dsfr.Rd @@ -4,11 +4,13 @@ \alias{fluidPage_dsfr} \title{fluidPage_dsfr} \usage{ -fluidPage_dsfr(..., title = NULL, theme = NULL, lang = NULL) +fluidPage_dsfr(..., header = NULL, title = NULL, theme = NULL, lang = NULL) } \arguments{ \item{...}{element a inclure dans la page} +\item{header}{l entete de la page} + \item{title}{titre de la page} \item{theme}{pas implemente} @@ -23,6 +25,10 @@ fluidPage_dsfr } \examples{ my_page <- fluidPage_dsfr( + header = header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ), title = "Gouv", htmltools::div("test") ) diff --git a/man/header_dsfr.Rd b/man/header_dsfr.Rd new file mode 100644 index 00000000..05785376 --- /dev/null +++ b/man/header_dsfr.Rd @@ -0,0 +1,43 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/header_dsfr.R +\name{header_dsfr} +\alias{header_dsfr} +\title{header_dsfr} +\usage{ +header_dsfr( + intitule, + officiel, + url = "/", + titre = NULL, + nom_site_service = NULL, + baseline = NULL, + class = "fr-container" +) +} +\arguments{ +\item{intitule}{la partie "intitule" du bloc marque} + +\item{officiel}{la partie "officiel" du bloc marque} + +\item{url}{l url de redirection - optionnel} + +\item{titre}{le texte de description de l url - optionnel} + +\item{nom_site_service}{le nom du site ou du service - optionnel} + +\item{baseline}{le texte sous le nom de site/service - optionnel} + +\item{class}{un classe a ajouter si necessaire ("fr-m-1w" correspond a une margin de 1w sur tous les cotés) - optionnel, par defaut "fr-container" (centré) (voir le Systeme de design de l'Etat "fondamentaux-techniques/espacements")} +} +\value{ +html +} +\description{ +header_dsfr +} +\examples{ + header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ) +} diff --git a/tests/testthat/test-column_dsfr.R b/tests/testthat/test-column_dsfr.R index 0d32241e..dad03967 100644 --- a/tests/testthat/test-column_dsfr.R +++ b/tests/testthat/test-column_dsfr.R @@ -1,7 +1,7 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand test_that("column_dsfr works", { - expect_true(inherits(column_dsfr, "function")) + expect_true(inherits(column_dsfr, "function")) test <- column_dsfr( 3, shiny::p("Voici un exemple") diff --git a/tests/testthat/test-fluidpage_dsfr.R b/tests/testthat/test-fluidpage_dsfr.R index 8ddf33ca..d2ef46c2 100644 --- a/tests/testthat/test-fluidpage_dsfr.R +++ b/tests/testthat/test-fluidpage_dsfr.R @@ -2,8 +2,12 @@ test_that("fluidPage_dsfr works", { test <- fluidPage_dsfr( - title = "Gouv", - body = htmltools::div("test") + header = header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ), + title = "Gouv", + body = htmltools::div("test") ) #' @description tester si shiny.tag expect_s3_class(test, "shiny.tag.list") diff --git a/tests/testthat/test-fluidpage_dsfr_template.R b/tests/testthat/test-fluidpage_dsfr_template.R index e8dc6a39..0f0844b5 100644 --- a/tests/testthat/test-fluidpage_dsfr_template.R +++ b/tests/testthat/test-fluidpage_dsfr_template.R @@ -1,13 +1,14 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand test_that("fluidPage_dsfr_template works", { - expect_true(inherits(fluidPage_dsfr_template, "function")) - + expect_true(inherits(fluidPage_dsfr_template, "function")) + test <- fluidPage_dsfr_template( + header = NULL, title = "titre", body = NULL ) - + #' @description tester si tous les params sont remplaces expect_false(grepl(pattern = "\\{\\{", test)) }) diff --git a/tests/testthat/test-fluidrow_dsfr.R b/tests/testthat/test-fluidrow_dsfr.R index 271bf4d8..c7499dfd 100644 --- a/tests/testthat/test-fluidrow_dsfr.R +++ b/tests/testthat/test-fluidrow_dsfr.R @@ -1,7 +1,7 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand test_that("fluidRow_dsfr works", { - expect_true(inherits(fluidRow_dsfr, "function")) + expect_true(inherits(fluidRow_dsfr, "function")) test <- fluidRow_dsfr( shiny::p("Voici un exemple") ) diff --git a/tests/testthat/test-header_dsfr.R b/tests/testthat/test-header_dsfr.R new file mode 100644 index 00000000..17674140 --- /dev/null +++ b/tests/testthat/test-header_dsfr.R @@ -0,0 +1,10 @@ +# WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_header.Rmd: do not edit by hand + +test_that("header_dsfr works", { + test <- header_dsfr( + intitule = "Prefet de", + officiel = "Bretagne", + ) + #' @description tester si shiny.tag + expect_s3_class(test, "shiny.tag") +}) diff --git a/tests/testthat/test-header_dsfr_template.R b/tests/testthat/test-header_dsfr_template.R new file mode 100644 index 00000000..6c75d4ce --- /dev/null +++ b/tests/testthat/test-header_dsfr_template.R @@ -0,0 +1,18 @@ +# WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_header.Rmd: do not edit by hand + +test_that("header_dsfr_template works", { + expect_true(inherits(header_dsfr_template, "function")) + + test <- header_dsfr_template( + class = NULL, + intitule = "Prefet de", + officiel = "Bretagne", + url = "https://www.prefectures-regions.gouv.fr/bretagne", + titre = "Accueil - Préfecture de Bretagne", + nom_site_service = "DREAL Bretagne", + baseline = "description" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test)) +}) diff --git a/tests/testthat/test-layout_dsfr_template.R b/tests/testthat/test-layout_dsfr_template.R index e8dc6a39..0f0844b5 100644 --- a/tests/testthat/test-layout_dsfr_template.R +++ b/tests/testthat/test-layout_dsfr_template.R @@ -1,13 +1,14 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_fluidpage.Rmd: do not edit by hand test_that("fluidPage_dsfr_template works", { - expect_true(inherits(fluidPage_dsfr_template, "function")) - + expect_true(inherits(fluidPage_dsfr_template, "function")) + test <- fluidPage_dsfr_template( + header = NULL, title = "titre", body = NULL ) - + #' @description tester si tous les params sont remplaces expect_false(grepl(pattern = "\\{\\{", test)) }) diff --git a/tests/testthat/test-parse_html.R b/tests/testthat/test-parse_html.R index e7e3c26b..69b3d585 100644 --- a/tests/testthat/test-parse_html.R +++ b/tests/testthat/test-parse_html.R @@ -3,10 +3,10 @@ test_that("tester parse_html", { html_code <- '' result <- parse_html(html_code) - + #' @description tester si la fonction renvoie bien un shiny.tag expect_s3_class(result, "shiny.tag") - + #' @description tester si on peut manipuler les attributs classes <- htmltools::tagGetAttribute(result, "class") expect_true(length(classes) != 0) diff --git a/tests/testthat/test-parse_to_xml.R b/tests/testthat/test-parse_to_xml.R index fd3dcad2..d9eb9a94 100644 --- a/tests/testthat/test-parse_to_xml.R +++ b/tests/testthat/test-parse_to_xml.R @@ -1,25 +1,24 @@ # WARNING - Generated by {fusen} from /dev/flat_tools.Rmd: do not edit by hand test_that("parse_to_xml works", { - expect_true(inherits(parse_to_xml, "function")) + expect_true(inherits(parse_to_xml, "function")) html_code <- '' - - + + test <- parse_to_xml(html_code) - + #' @description tester la classe du resultat de la fonction sur un caractere expect_s3_class(test, "XMLInternalElementNode") - + #' @description tester l'erreur si le code est déjà du XML expect_error(parse_to_xml(test)) - + test2 <- parse_to_xml( htmltools::tagList( tags$div(id = "ok", name = "jean", "pierre") ) ) - + #' @description tester la classe du resultat de la fonction sur un shiny.tag expect_s3_class(test2, "XMLInternalElementNode") - - }) +}) diff --git a/tests/testthat/test-radiobuttons_dsfr.R b/tests/testthat/test-radiobuttons_dsfr.R index fa78051b..f1cae195 100644 --- a/tests/testthat/test-radiobuttons_dsfr.R +++ b/tests/testthat/test-radiobuttons_dsfr.R @@ -2,7 +2,10 @@ test_that("radioButtons_dsfr works", { test <- radioButtons_dsfr( - inputId = "test", label = "Test", choices = c("A","B"), class = NULL + inputId = "test", + label = "Test", + choices = c("A", "B"), + class = NULL ) #' @description tester si shiny.tag expect_s3_class(test, "shiny.tag") diff --git a/tests/testthat/test-radiobuttons_dsfr_template.R b/tests/testthat/test-radiobuttons_dsfr_template.R index 83ae74cb..8e85a053 100644 --- a/tests/testthat/test-radiobuttons_dsfr_template.R +++ b/tests/testthat/test-radiobuttons_dsfr_template.R @@ -1,15 +1,15 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_radioButtons.Rmd: do not edit by hand test_that("radioButtons_dsfr_template works", { - expect_true(inherits(radioButtons_dsfr_template, "function")) - - test <- radioButtons_dsfr_template( - inputId = "test", - label = "Test", - choix = c("A","B"), - class = NULL - ) - + expect_true(inherits(radioButtons_dsfr_template, "function")) + + test <- radioButtons_dsfr_template( + inputId = "test", + label = "Test", + choix = c("A", "B"), + class = NULL + ) + #' @description tester si tous les params sont remplaces expect_false(grepl(pattern = "\\{\\{", test)) }) diff --git a/tests/testthat/test-radiobuttons_unique_dsfr_template.R b/tests/testthat/test-radiobuttons_unique_dsfr_template.R index 408f7469..c62d1cfb 100644 --- a/tests/testthat/test-radiobuttons_unique_dsfr_template.R +++ b/tests/testthat/test-radiobuttons_unique_dsfr_template.R @@ -1,14 +1,14 @@ # WARNING - Generated by {fusen} from /dev/v1.7.2/composant/flat_radioButtons.Rmd: do not edit by hand test_that("radioButtons_unique_dsfr_template works", { - expect_true(inherits(radioButtons_unique_dsfr_template, "function")) - - test <- radioButtons_unique_dsfr_template( - inputId = "test-1", - name = "test", - choix = c("Choix A" = "A") - ) - + expect_true(inherits(radioButtons_unique_dsfr_template, "function")) + + test <- radioButtons_unique_dsfr_template( + inputId = "test-1", + name = "test", + choix = c("Choix A" = "A") + ) + #' @description tester si tous les params sont remplaces expect_false(grepl(pattern = "\\{\\{", test)) }) diff --git a/tests/testthat/test-render_node.R b/tests/testthat/test-render_node.R index 08575708..dbab982c 100644 --- a/tests/testthat/test-render_node.R +++ b/tests/testthat/test-render_node.R @@ -1,11 +1,11 @@ # WARNING - Generated by {fusen} from /dev/flat_tools.Rmd: do not edit by hand test_that("render_node works", { - expect_true(inherits(render_node, "function")) + expect_true(inherits(render_node, "function")) html_code <- '' test <- parse_to_xml(html_code) - - + + result <- render_node(test, prefix = TRUE) #' @description tester le resultat de render_node