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 @@
+
+ {{intitule}}
+
+ {{nom_site_service}}
+ {{baseline}}
{{officiel}}
+