From aae0e55ab52831180a79f3970912187821343512 Mon Sep 17 00:00:00 2001 From: murielle Delmotte Date: Wed, 19 Jul 2023 14:52:00 +0200 Subject: [PATCH 1/3] feat: implementation footer_dsfr tags: docs, test pourquoi: - avoir un footer conforme au dsfr quoi: - ajout de fonction footer_dsfr - possibilite d'ajouter des url supplementaire a celles par defaut - ajout du pied de page dans l'app shiny demo Issue #141 --- NAMESPACE | 5 + R/app_ui.R | 5 + R/column_dsfr.R | 2 +- R/fluidpage_dsfr.R | 4 +- R/fluidpage_dsfr_template.R | 2 +- R/fluidrow_dsfr.R | 2 +- R/footer_bottom_dsfr.R | 62 +++ R/footer_dsfr.R | 189 +++++++ R/footer_dsfr_template.R | 51 ++ R/footer_extra_url_bottom_dsfr.R | 17 + R/layout_dsfr_template.R | 2 +- README.Rmd | 8 +- README.md | 20 +- dev/flat_composants/flat_fluidpage.Rmd | 2 +- dev/flat_composants/flat_footer.Rmd | 500 ++++++++++++++++++ inst/v1.9.3/composant/piedpage.html | 57 ++ inst/v1.9.3/composant/piedpage_content.html | 1 + man/fluidPage_dsfr.Rd | 2 +- man/footer_dsfr.Rd | 157 ++++++ tests/testthat/snapshot/footer_dsfr.Rda | Bin 0 -> 959 bytes tests/testthat/test-column_dsfr.R | 2 +- tests/testthat/test-fluidpage_dsfr.R | 2 +- tests/testthat/test-fluidpage_dsfr_template.R | 2 +- tests/testthat/test-fluidrow_dsfr.R | 2 +- tests/testthat/test-footer_dsfr.R | 84 +++ tests/testthat/test-footer_dsfr_template.R | 68 +++ tests/testthat/test-layout_dsfr_template.R | 2 +- 27 files changed, 1225 insertions(+), 25 deletions(-) create mode 100644 R/footer_bottom_dsfr.R create mode 100644 R/footer_dsfr.R create mode 100644 R/footer_dsfr_template.R create mode 100644 R/footer_extra_url_bottom_dsfr.R create mode 100644 dev/flat_composants/flat_footer.Rmd create mode 100644 inst/v1.9.3/composant/piedpage.html create mode 100644 inst/v1.9.3/composant/piedpage_content.html create mode 100644 man/footer_dsfr.Rd create mode 100644 tests/testthat/snapshot/footer_dsfr.Rda create mode 100644 tests/testthat/test-footer_dsfr.R create mode 100644 tests/testthat/test-footer_dsfr_template.R diff --git a/NAMESPACE b/NAMESPACE index 6fd46cef..8008a307 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,11 @@ export(convert_to_dsfr) export(dateRangeInput_dsfr) export(fluidPage_dsfr) export(fluidRow_dsfr) +export(footer_bottom_dsfr) +export(footer_dsfr) +export(footer_extra_url_body_dsfr) +export(footer_extra_url_bottom_dsfr) +export(footer_li_dsfr) export(get_dsfr_version) export(header_dsfr) export(modalDialog_dsfr) diff --git a/R/app_ui.R b/R/app_ui.R index 0d9a6b5f..5736f3ba 100644 --- a/R/app_ui.R +++ b/R/app_ui.R @@ -17,6 +17,11 @@ app_ui <- function(request) { nom_site_service = "Bienvenue sur l\'application de d\u00e9monstration de {shinygouv}", baseline = "https://github.com/spyrales/shinygouv" ), + footer = footer_dsfr( + intitule = span("D\u00e9mo", br(), "de", br(), "{shinygouv}"), + description = "Une application de d\u00e9monstration de {shinygouv}", + accessibilite = "non" + ), navbarPanel_dsfr( title = "inputs d\'ui", mod_input_ui_ui("input_ui_1") diff --git a/R/column_dsfr.R b/R/column_dsfr.R index ee38204f..c3cdba2d 100644 --- a/R/column_dsfr.R +++ b/R/column_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand #' column_dsfr #' diff --git a/R/fluidpage_dsfr.R b/R/fluidpage_dsfr.R index e67446df..eb0404ca 100644 --- a/R/fluidpage_dsfr.R +++ b/R/fluidpage_dsfr.R @@ -1,10 +1,10 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand #' fluidPage_dsfr #' #' @param ... element a inclure dans la page #' @param header l entete de la page (voir `header_dsfr()`) -#' @param footer contenu du pied de page +#' @param footer contenu du pied de page (voir `footer_dsfr()`) #' @param theme pas implemente #' @param lang pas implemente #' @param title titre de la page diff --git a/R/fluidpage_dsfr_template.R b/R/fluidpage_dsfr_template.R index ebd378c1..a7855054 100644 --- a/R/fluidpage_dsfr_template.R +++ b/R/fluidpage_dsfr_template.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand #' fluidPage_dsfr_template #' @param header entete de la page diff --git a/R/fluidrow_dsfr.R b/R/fluidrow_dsfr.R index 3f50702f..4c2f271e 100644 --- a/R/fluidrow_dsfr.R +++ b/R/fluidrow_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand #' fluidRow_dsfr #' diff --git a/R/footer_bottom_dsfr.R b/R/footer_bottom_dsfr.R new file mode 100644 index 00000000..d3d15e4e --- /dev/null +++ b/R/footer_bottom_dsfr.R @@ -0,0 +1,62 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +#' footer_bottom_dsfr +#' +#' Il se compose des éléments suivants: +#'- la liste de liens liés aux obligations légales. Cette liste doit être définie en fonction du site, toutefois les liens & contenus suivants sont obligatoires : “accessibilité : non/partiellement/totalement conforme”, mentions légales, données personnelles et gestion des cookies. - obligatoire. +#' - une mention de la licence - obligatoire “Sauf mention contraire, tous les contenus de ce site sont sous licence etalab-2.0” +#' +#' @param accessibilite le type d'accessibilité (non/partiellement/totalement conforme) +#' @param lien_accessibilite lien url vers l'accessibilite +#' @param lien_mentions_legales lien url vers les mentions légales +#' @param lien_donnees_personnelles lien url vers les données personnelles +#' @param lien_gestion_cookies lien url vers la gestion des cookies +#' @param ... d'autre liens de références (voir `footer_li_dsfr()`) +#' +#' @return html +#' @rdname footer_dsfr +#' @export +footer_bottom_dsfr <- + function(accessibilite = "non", + ..., + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#") { + + + assertthat::assert_that(is.character(accessibilite)) + assertthat::assert_that(is.character(lien_accessibilite)) + assertthat::assert_that(is.character(lien_mentions_legales)) + assertthat::assert_that(is.character(lien_donnees_personnelles)) + assertthat::assert_that(is.character(lien_gestion_cookies)) + + if ( isFALSE(accessibilite %in% c("non", "partiellement", "totalement conforme"))){ + stop("l accessibilite doit etre 'non', 'partiellement' ou 'totalement conforme'") + } + + contenu <- list(...) + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage_bottom.html", + package = "shinygouv" + ), + accessibilite = accessibilite, + lien_accessibilite = lien_accessibilite, + lien_mentions_legales = lien_mentions_legales, + lien_donnees_personnelles = lien_donnees_personnelles, + lien_gestion_cookies = lien_gestion_cookies, + bottom_list = purrr::map(contenu, ~ { + footer_one_li( + id = .x$id, + href = .x$href, + titre = .x$titre, + texte = .x$texte, + type = "bottom" + ) + }) + ) + } + diff --git a/R/footer_dsfr.R b/R/footer_dsfr.R new file mode 100644 index 00000000..5882e779 --- /dev/null +++ b/R/footer_dsfr.R @@ -0,0 +1,189 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +#' footer_dsfr + +#' Il se compose des éléments suivants: +#' - un bloc marque, voir la charte de marque +#' - un texte de présentation - optionnel. +#' - 4 liens de références de l'écosystème institutionnel - obligatoires. +#'- la liste de liens liés aux obligations légales. Cette liste doit être définie en fonction du site, toutefois les liens & contenus suivants sont obligatoires : “accessibilité : non/partiellement/totalement conforme”, mentions légales, données personnelles et gestion des cookies. - obligatoire. +#' - une mention de la licence - obligatoire “Sauf mention contraire, tous les contenus de ce site sont sous licence etalab-2.0” +#' +#' Il est possible d'ajouter des url supplémentaires dans le corps et le bas du pied de page. +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param description un texte de présentation - optionnel +#' @param accessibilite le type d'accessibilité (non/partiellement/totalement conforme) +#' @param lien_accessibilite lien url vers l'accessibilite +#' @param lien_mentions_legales lien url vers les mentions légales +#' @param lien_donnees_personnelles lien url vers les données personnelles +#' @param lien_gestion_cookies lien url vers la gestion des cookies +#' @param add_extra_url_body url supplementaire a ajouter au corps du pied de page (voir `footer_extra_url_body_dsfr()`) +#' @param add_extra_url_bottom url supplementaire a ajouter au bas du pied de page (voir `footer_extra_url_bottom_dsfr()`) +#' +#' @return html +#' @export +#' @rdname footer_dsfr +#' @examples +#' if (interactive()) { +#' library(shiny) +#' shinyApp( +#' ui = fluidPage_dsfr( +#' footer = footer_dsfr( +#' intitule = "Territoire", +#' description = "une description", +#' accessibilite = "non", +#' add_extra_url_body = footer_extra_url_body_dsfr( +#' footer_li_dsfr( +#' href = "https://siteinternet.fr", +#' titre = "siteinternet.fr.fr - nouvelle fenêtre", +#' texte = "siteinternet.fr.fr", type = "body" +#' ), +#' footer_li_dsfr( +#' href = "https://siteinternet.fr", +#' titre = "siteinternet.fr.fr - nouvelle fenêtre", +#' texte = "siteinternet.fr.fr", type = "body" +#' ) +#' ), +#' add_extra_url_bottom = footer_extra_url_bottom_dsfr( +#' +#' footer_li_dsfr( +#' href = "https://siteinternet.fr", +#' titre = "siteinternet.fr.fr - nouvelle fenêtre", +#' texte = "siteinternet.fr.fr", type = "bottom" +#' ) +#' ) +#' ), +#' tabsetPanel_dsfr( +#' "coucou", +#' tabPanel_dsfr( +#' id = "tab1", +#' title = "Une prems tab", +#' content = tagList(h3("Coucou"), +#' plotOutput("plot")) +#' ), +#' tabPanel_dsfr( +#' id = "tab2", +#' title = "Une deuxieme tab", +#' content = tagList(h3("Salut"), +#' plotOutput("plot2")) +#' ) +#' ) +#' ), +#' server = function(input, output) { +#' output$plot <- renderPlot({ +#' plot(cars) +#' }) +#' output$plot2 <- renderPlot({ +#' plot(iris) +#' }) +#' } +#' ) +#' } +footer_dsfr <- function( + intitule = NULL , + description = NULL , + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#", + add_extra_url_body = NULL, + add_extra_url_bottom = NULL) { + + + if ( isFALSE(accessibilite %in% c("non", "partiellement", "totalement conforme"))){ + stop("l accessibilite doit etre 'non', 'partiellement' ou 'totalement conforme'") + } + + assertthat::assert_that(is.character(lien_accessibilite)) + assertthat::assert_that(is.character(lien_mentions_legales)) + assertthat::assert_that(is.character(lien_donnees_personnelles)) + assertthat::assert_that(is.character(lien_gestion_cookies)) + + + + footer_dsfr_template( + intitule = intitule, + description = description, + footer_body = add_extra_url_body, + footer_bottom = add_extra_url_bottom, + accessibilite = accessibilite, + lien_accessibilite = lien_accessibilite, + lien_mentions_legales = lien_mentions_legales, + lien_donnees_personnelles = lien_donnees_personnelles, + lien_gestion_cookies = lien_gestion_cookies + ) +} + + +#' footer_extra_url_body_dsfr +#' +#' Permet d'ajouter des liends/url dans le corps du pied de page +#' +#' @param ... d'autres liens de références (voir `footer_li_dsfr()`) +#' +#' @return html +#' @rdname footer_dsfr +#' @export +#' @examples +#' footer_extra_url_body_dsfr( +#' footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body"), +#' footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body")) +footer_extra_url_body_dsfr <- function(...) { + tagList(...) + +} + + + +#' footer_li_dsfr +#' +#' Permet de créer la balise html pour ajouter un lien en fonction de sa destination (body/bottom) +#' +#' @param href une url +#' @param texte le texte +#' @param id un identifiant (optionnel) +#' @param titre le titre de l infobulle (optionnel) +#' @param type le type de rendu de l url (body/bottom, par defaut body) +#' +#' @rdname footer_dsfr +#' +#' @return html +#' +#' @export +#' @examples +#' footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body") +#' footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "bottom") +footer_li_dsfr <- function(id = NULL, + href, + titre = NULL, + texte, + type = "body") { + + if (type == "body"){ + target = "target='_blank'" + ttype = "content" + } else if (type == "bottom"){ + target = NULL + ttype = "bottom" + } else { + stop("Dans footer_li_dsfr, type doit etre 'body' ou 'bottom'") + } + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage_content.html", + package = "shinygouv" + ), + id = id, + href = href, + titre = titre, + texte = texte, + type = ttype, + target = target + ) |> parse_html() +} + diff --git a/R/footer_dsfr_template.R b/R/footer_dsfr_template.R new file mode 100644 index 00000000..5fe8e673 --- /dev/null +++ b/R/footer_dsfr_template.R @@ -0,0 +1,51 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +#' footer_dsfr_template +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param description un texte de présentation - optionnel +#' @param footer_body le corps du footer +#' @param footer_bottom le bas du footer +#' @param accessibilite le type d'accessibilité (non/partiellement/totalement conforme) +#' @param lien_accessibilite lien url vers l'accessibilite +#' @param lien_mentions_legales lien url vers les mentions légales +#' @param lien_donnees_personnelles lien url vers les données personnelles +#' @param lien_gestion_cookies lien url vers la gestion des cookies +#' +#' @importFrom htmltools htmlTemplate +#' @return html +#' @noRd +footer_dsfr_template <- function( + intitule , + description , + footer_body, footer_bottom, + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ) { + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage.html", + package = "shinygouv" + ), + intitule = intitule , + description = description, + footer_body = footer_body, + footer_bottom = footer_bottom, + accessibilite = accessibilite, + lien_accessibilite = lien_accessibilite, + lien_mentions_legales = lien_mentions_legales, + lien_donnees_personnelles = lien_donnees_personnelles, + lien_gestion_cookies = lien_gestion_cookies + ) |> parse_html() +} + + + + + diff --git a/R/footer_extra_url_bottom_dsfr.R b/R/footer_extra_url_bottom_dsfr.R new file mode 100644 index 00000000..2659084e --- /dev/null +++ b/R/footer_extra_url_bottom_dsfr.R @@ -0,0 +1,17 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +#' footer_extra_url_bottom_dsfr +#' +#' Permet d'ajouter des liends/url dans le bas du pied de page +#' +#' @param ... d'autre liens de références (voir `footer_li_dsfr()`) +#' +#' @return html +#' @rdname footer_dsfr +#' @export +footer_extra_url_bottom_dsfr <- + function(...) { + tagList(...) + + } + diff --git a/R/layout_dsfr_template.R b/R/layout_dsfr_template.R index 5b83a0c6..e6b884a2 100644 --- a/R/layout_dsfr_template.R +++ b/R/layout_dsfr_template.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand #' layout_dsfr_template #' diff --git a/README.Rmd b/README.Rmd index 3c310281..0fc79864 100644 --- a/README.Rmd +++ b/README.Rmd @@ -26,10 +26,10 @@ library(shiny) library(shinygouv) app_ui <- fluidPage_dsfr( header = header_dsfr( - intitule = span("D\u00e9mo", br(), "de", br(), "{shinygouv}"), - nom_site_service = "Bienvenue sur l\'application de d\u00e9monstration de {shinygouv}", - baseline = "https://github.com/spyrales/shinygouv" - ), + intitule = span("D\u00e9mo", br(), "de", br(), "{shinygouv}"), + nom_site_service = "Bienvenue sur l\'application de d\u00e9monstration de {shinygouv}", + baseline = "https://github.com/spyrales/shinygouv" + ), title = "Exemple", fluidRow_dsfr( column_dsfr( diff --git a/README.md b/README.md index d7c5b213..e48468c4 100644 --- a/README.md +++ b/README.md @@ -14,21 +14,25 @@ partie UI: ``` r library(shiny) library(shinygouv) - app_ui <- 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" + intitule = span("D\u00e9mo", br(), "de", br(), "{shinygouv}"), + nom_site_service = "Bienvenue sur l\'application de d\u00e9monstration de {shinygouv}", + baseline = "https://github.com/spyrales/shinygouv" ), title = "Exemple", fluidRow_dsfr( - column_dsfr(0, - shiny::p("Exemple colonne")) + column_dsfr( + 0, + fileInput("file1", "Ajouter des fichiers", accept = ".csv") + ) ) ) +shinyApp( + ui = app_ui, + server = function(input, output) { + } +) ``` # Visualiser un application de démonstration comprenant les composants déjà implémentés: diff --git a/dev/flat_composants/flat_fluidpage.Rmd b/dev/flat_composants/flat_fluidpage.Rmd index 9d8c8e2c..23a2ee42 100644 --- a/dev/flat_composants/flat_fluidpage.Rmd +++ b/dev/flat_composants/flat_fluidpage.Rmd @@ -179,7 +179,7 @@ Il est donc à noter qu'il ne sera pas possible de faire des tags Attributes sur #' #' @param ... element a inclure dans la page #' @param header l entete de la page (voir `header_dsfr()`) -#' @param footer contenu du pied de page +#' @param footer contenu du pied de page (voir `footer_dsfr()`) #' @param theme pas implemente #' @param lang pas implemente #' @param title titre de la page diff --git a/dev/flat_composants/flat_footer.Rmd b/dev/flat_composants/flat_footer.Rmd new file mode 100644 index 00000000..31ad411d --- /dev/null +++ b/dev/flat_composants/flat_footer.Rmd @@ -0,0 +1,500 @@ +--- +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) +``` + +Vous pouvez ajouter le footer officiel dans votre application avec `footer_dsfr()`. Par exemple avec un `fluidPage_dsfr()` : + +```{r, eval=FALSE} +fluidPage_dsfr( + header = header_dsfr( + intitule = span("Intitulé", br(), "sur 3", br(), "lignes"), + nom_site_service = "Nom du site / service", + baseline = "baseline - precisions sur l organisation", + class = "fr-m-1w" + ), + footer = footer_dsfr( + ), + title = "Exemple shiny dsfr", + h1("Exemple d'utilisation de {shinygouv}"), +) +``` + + +# footer_extra_url_body_dsfr + +```{r function-footer_extra_url_body_dsfr} +#' footer_extra_url_body_dsfr +#' +#' Permet d'ajouter des liends/url dans le corps du pied de page +#' +#' @param ... d'autres liens de références (voir `footer_li_dsfr()`) +#' +#' @return html +#' @rdname footer_dsfr +#' @export +footer_extra_url_body_dsfr <- function(...) { + tagList(...) + +} + + +``` + +```{r example-footer_extra_url_body_dsfr} +footer_extra_url_body_dsfr( + footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body"), + footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body")) +``` + +```{r tests-footer_extra_url_body_dsfr} +test_that("footer_extra_url_body_dsfr works", { + expect_true(inherits(footer_extra_url_body_dsfr, "function")) + + test_html <- footer_extra_url_body_dsfr() + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") + + + test_html <- footer_extra_url_body_dsfr(footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr")) + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") +}) +``` + + +# footer_extra_url_bottom_dsfr + +```{r function-footer_extra_url_bottom_dsfr} +#' footer_extra_url_bottom_dsfr +#' +#' Permet d'ajouter des liends/url dans le bas du pied de page +#' +#' @param ... d'autre liens de références (voir `footer_li_dsfr()`) +#' +#' @return html +#' @rdname footer_dsfr +#' @export +footer_extra_url_bottom_dsfr <- + function(...) { + tagList(...) + + } + +``` + +```{r example-footer_extra_url_bottom_dsfr} +footer_extra_url_bottom_dsfr(footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr")) +``` + +```{r tests-footer_extra_url_bottom_dsfr} +test_that("footer_extra_url_bottom_dsfr works", { + expect_true(inherits(footer_extra_url_bottom_dsfr, "function")) + + test_html <-footer_extra_url_bottom_dsfr(accessibilite = "non", lien_accessibilite = "url_accessibilite", footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr")) + + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") + +}) +``` + +# footer_li_dsfr + +```{r function-footer_li_dsfr} +#' footer_li_dsfr +#' +#' Permet de créer la balise html pour ajouter un lien en fonction de sa destination (body/bottom) +#' +#' @param href une url +#' @param texte le texte +#' @param id un identifiant (optionnel) +#' @param titre le titre de l infobulle (optionnel) +#' @param type le type de rendu de l url (body/bottom, par defaut body) +#' +#' @rdname footer_dsfr +#' +#' @return html +#' +#' @export +footer_li_dsfr <- function(id = NULL, + href, + titre = NULL, + texte, + type = "body") { + + if (type == "body"){ + target = "target='_blank'" + ttype = "content" + } else if (type == "bottom"){ + target = NULL + ttype = "bottom" + } else { + stop("Dans footer_li_dsfr, type doit etre 'body' ou 'bottom'") + } + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage_content.html", + package = "shinygouv" + ), + id = id, + href = href, + titre = titre, + texte = texte, + type = ttype, + target = target + ) |> parse_html() +} + +``` + +```{r example-footer_li_dsfr} +footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body") +footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "bottom") +``` + +```{r tests-footer_li_dsfr} +test_that("footer_li_dsfr works", { + expect_true(inherits(footer_li_dsfr, "function")) + + test_html <- footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr") + #' @description tester si tagList + expect_s3_class(test_html, "shiny.tag") + + +}) +``` + + +# footer_dsfr_template + +```{r function-footer_dsfr_template} +#' footer_dsfr_template +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param description un texte de présentation - optionnel +#' @param footer_body le corps du footer +#' @param footer_bottom le bas du footer +#' @param accessibilite le type d'accessibilité (non/partiellement/totalement conforme) +#' @param lien_accessibilite lien url vers l'accessibilite +#' @param lien_mentions_legales lien url vers les mentions légales +#' @param lien_donnees_personnelles lien url vers les données personnelles +#' @param lien_gestion_cookies lien url vers la gestion des cookies +#' +#' @importFrom htmltools htmlTemplate +#' @return html +footer_dsfr_template <- function( + intitule , + description , + footer_body, footer_bottom, + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ) { + + htmltools::htmlTemplate( + filename = system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage.html", + package = "shinygouv" + ), + intitule = intitule , + description = description, + footer_body = footer_body, + footer_bottom = footer_bottom, + accessibilite = accessibilite, + lien_accessibilite = lien_accessibilite, + lien_mentions_legales = lien_mentions_legales, + lien_donnees_personnelles = lien_donnees_personnelles, + lien_gestion_cookies = lien_gestion_cookies + ) |> parse_html() +} + + + + + +``` + + + +```{r tests-footer_dsfr_template} +test_that("footer_dsfr_template works", { + expect_true(inherits(footer_dsfr_template, "function")) + + htmlfile <- readLines( + system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage.html", + package = "shinygouv" + ) + ) + + #' @description Comparer les parametres par rapport a ceux de la version precedente + + purrr::walk(c( + "intitule" , + "description" , + "footer_body", + "footer_bottom", + "accessibilite" , + "lien_accessibilite", + "lien_mentions_legales" , + "lien_donnees_personnelles", + "lien_gestion_cookies" + ), + function(param) { + with_moustache <- paste0("\\{\\{", param, "\\}\\}") + expect_true(any(grepl(pattern = with_moustache, htmlfile)), + label = paste0("sans moustache '", param, "'")) + }) + + + test_html <- footer_dsfr_template( + intitule = "intitule" , + description = "description" , + footer_body = "footer_body", + footer_bottom = "footer_bottom", + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test_html)) + + + #' @description Verifie que les parametres ont bien ete remplace par leurs valeurs + + purrr::walk(c( + intitule = "intitule" , + description = "description" , + footer_body = "footer_body", + footer_bottom = "footer_bottom", + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ), + function(param) { + expect_true(any(grepl(pattern = param, test_html)), + label = paste0("remplacement de '", param, "'")) + }) +}) +``` + + +# footer_dsfr + +```{r function-footer_dsfr} +#' footer_dsfr + +#' Il se compose des éléments suivants: +#' - un bloc marque, voir la charte de marque +#' - un texte de présentation - optionnel. +#' - 4 liens de références de l'écosystème institutionnel - obligatoires. +#'- la liste de liens liés aux obligations légales. Cette liste doit être définie en fonction du site, toutefois les liens & contenus suivants sont obligatoires : “accessibilité : non/partiellement/totalement conforme”, mentions légales, données personnelles et gestion des cookies. - obligatoire. +#' - une mention de la licence - obligatoire “Sauf mention contraire, tous les contenus de ce site sont sous licence etalab-2.0” +#' +#' Il est possible d'ajouter des url supplémentaires dans le corps et le bas du pied de page. +#' +#' @param intitule la partie "intitule" du bloc marque +#' @param description un texte de présentation - optionnel +#' @param accessibilite le type d'accessibilité (non/partiellement/totalement conforme) +#' @param lien_accessibilite lien url vers l'accessibilite +#' @param lien_mentions_legales lien url vers les mentions légales +#' @param lien_donnees_personnelles lien url vers les données personnelles +#' @param lien_gestion_cookies lien url vers la gestion des cookies +#' @param add_extra_url_body url supplementaire a ajouter au corps du pied de page (voir `footer_extra_url_body_dsfr()`) +#' @param add_extra_url_bottom url supplementaire a ajouter au bas du pied de page (voir `footer_extra_url_bottom_dsfr()`) +#' +#' @return html +#' @export +#' @rdname footer_dsfr +#' @examples +footer_dsfr <- function( + intitule = NULL , + description = NULL , + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#", + add_extra_url_body = NULL, + add_extra_url_bottom = NULL) { + + + if ( isFALSE(accessibilite %in% c("non", "partiellement", "totalement conforme"))){ + stop("l accessibilite doit etre 'non', 'partiellement' ou 'totalement conforme'") + } + + assertthat::assert_that(is.character(lien_accessibilite)) + assertthat::assert_that(is.character(lien_mentions_legales)) + assertthat::assert_that(is.character(lien_donnees_personnelles)) + assertthat::assert_that(is.character(lien_gestion_cookies)) + + + + footer_dsfr_template( + intitule = intitule, + description = description, + footer_body = add_extra_url_body, + footer_bottom = add_extra_url_bottom, + accessibilite = accessibilite, + lien_accessibilite = lien_accessibilite, + lien_mentions_legales = lien_mentions_legales, + lien_donnees_personnelles = lien_donnees_personnelles, + lien_gestion_cookies = lien_gestion_cookies + ) +} + +``` + + +```{r examples-footer_dsfr} +if (interactive()) { + library(shiny) + shinyApp( + ui = fluidPage_dsfr( + footer = footer_dsfr( + intitule = "Territoire", + description = "une description", + accessibilite = "non", + add_extra_url_body = footer_extra_url_body_dsfr( + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "body" + ), + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "body" + ) + ), + add_extra_url_bottom = footer_extra_url_bottom_dsfr( + + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "bottom" + ) + ) + ), + tabsetPanel_dsfr( + "coucou", + tabPanel_dsfr( + id = "tab1", + title = "Une prems tab", + content = tagList(h3("Coucou"), + plotOutput("plot")) + ), + tabPanel_dsfr( + id = "tab2", + title = "Une deuxieme tab", + content = tagList(h3("Salut"), + plotOutput("plot2")) + ) + ) + ), + server = function(input, output) { + output$plot <- renderPlot({ + plot(cars) + }) + output$plot2 <- renderPlot({ + plot(iris) + }) + } + ) +} +``` + + + + +```{r tests-footer_dsfr} +test_that("footer_dsfr works", { + test_html <- + footer_dsfr( + intitule = "Territoire", + description = "une description", + accessibilite = "partiellement", + add_extra_url_body = + footer_extra_url_body_dsfr( + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr" + ) + ), + add_extra_url_bottom = footer_extra_url_bottom_dsfr(accessibilite = "non") + ) + + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "footer_dsfr.Rda") + ) + + #' @description Verifer que le HTML est correct en sortie + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction footer_dsfr puis lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # saveRDS(test_html, + # file = file.path("tests/testthat/snapshot", + # "footer_dsfr.Rda" + # ) + # ) + +}) +``` + + +```{r development-inflate, eval=FALSE} +# Run but keep eval=FALSE to avoid infinite loop +# Execute in the console directly +fusen::inflate( + flat_file = "dev/flat_composants/flat_footer.Rmd", + vignette_name = NA, + open_vignette = FALSE, + check = FALSE +) +``` + diff --git a/inst/v1.9.3/composant/piedpage.html b/inst/v1.9.3/composant/piedpage.html new file mode 100644 index 00000000..657d6cc5 --- /dev/null +++ b/inst/v1.9.3/composant/piedpage.html @@ -0,0 +1,57 @@ + diff --git a/inst/v1.9.3/composant/piedpage_content.html b/inst/v1.9.3/composant/piedpage_content.html new file mode 100644 index 00000000..f0a30319 --- /dev/null +++ b/inst/v1.9.3/composant/piedpage_content.html @@ -0,0 +1 @@ + diff --git a/man/fluidPage_dsfr.Rd b/man/fluidPage_dsfr.Rd index 2e99a6ca..0ca53e9c 100644 --- a/man/fluidPage_dsfr.Rd +++ b/man/fluidPage_dsfr.Rd @@ -20,7 +20,7 @@ fluidPage_dsfr( \item{title}{titre de la page} -\item{footer}{contenu du pied de page} +\item{footer}{contenu du pied de page (voir \code{footer_dsfr()})} \item{theme}{pas implemente} diff --git a/man/footer_dsfr.Rd b/man/footer_dsfr.Rd new file mode 100644 index 00000000..349b9129 --- /dev/null +++ b/man/footer_dsfr.Rd @@ -0,0 +1,157 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/footer_bottom_dsfr.R, R/footer_dsfr.R, +% R/footer_extra_url_bottom_dsfr.R +\name{footer_bottom_dsfr} +\alias{footer_bottom_dsfr} +\alias{footer_dsfr} +\alias{footer_extra_url_body_dsfr} +\alias{footer_li_dsfr} +\alias{footer_extra_url_bottom_dsfr} +\title{footer_bottom_dsfr} +\usage{ +footer_bottom_dsfr( + accessibilite = "non", + ..., + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" +) + +footer_dsfr( + intitule = NULL, + description = NULL, + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#", + add_extra_url_body = NULL, + add_extra_url_bottom = NULL +) + +footer_extra_url_body_dsfr(...) + +footer_li_dsfr(id = NULL, href, titre = NULL, texte, type = "body") + +footer_extra_url_bottom_dsfr(...) +} +\arguments{ +\item{accessibilite}{le type d'accessibilité (non/partiellement/totalement conforme)} + +\item{...}{d'autre liens de références (voir \code{footer_li_dsfr()})} + +\item{lien_accessibilite}{lien url vers l'accessibilite} + +\item{lien_mentions_legales}{lien url vers les mentions légales} + +\item{lien_donnees_personnelles}{lien url vers les données personnelles} + +\item{lien_gestion_cookies}{lien url vers la gestion des cookies} + +\item{intitule}{la partie "intitule" du bloc marque} + +\item{description}{un texte de présentation - optionnel} + +\item{add_extra_url_body}{url supplementaire a ajouter au corps du pied de page (voir \code{footer_extra_url_body_dsfr()})} + +\item{add_extra_url_bottom}{url supplementaire a ajouter au bas du pied de page (voir \code{footer_extra_url_bottom_dsfr()})} + +\item{id}{un identifiant (optionnel)} + +\item{href}{une url} + +\item{titre}{le titre de l infobulle (optionnel)} + +\item{texte}{le texte} + +\item{type}{le type de rendu de l url (body/bottom, par defaut body)} +} +\value{ +html + +html + +html + +html + +html +} +\description{ +Il se compose des éléments suivants: +\itemize{ +\item la liste de liens liés aux obligations légales. Cette liste doit être définie en fonction du site, toutefois les liens & contenus suivants sont obligatoires : “accessibilité : non/partiellement/totalement conforme”, mentions légales, données personnelles et gestion des cookies. - obligatoire. +\item une mention de la licence - obligatoire “Sauf mention contraire, tous les contenus de ce site sont sous licence etalab-2.0” +} + +Il est possible d'ajouter des url supplémentaires dans le corps et le bas du pied de page. + +Permet d'ajouter des liends/url dans le corps du pied de page + +Permet de créer la balise html pour ajouter un lien en fonction de sa destination (body/bottom) + +Permet d'ajouter des liends/url dans le bas du pied de page +} +\examples{ +if (interactive()) { + library(shiny) + shinyApp( + ui = fluidPage_dsfr( + footer = footer_dsfr( + intitule = "Territoire", + description = "une description", + accessibilite = "non", + add_extra_url_body = footer_extra_url_body_dsfr( + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "body" + ), + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "body" + ) + ), + add_extra_url_bottom = footer_extra_url_bottom_dsfr( + + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr", type = "bottom" + ) + ) + ), + tabsetPanel_dsfr( + "coucou", + tabPanel_dsfr( + id = "tab1", + title = "Une prems tab", + content = tagList(h3("Coucou"), + plotOutput("plot")) + ), + tabPanel_dsfr( + id = "tab2", + title = "Une deuxieme tab", + content = tagList(h3("Salut"), + plotOutput("plot2")) + ) + ) + ), + server = function(input, output) { + output$plot <- renderPlot({ + plot(cars) + }) + output$plot2 <- renderPlot({ + plot(iris) + }) + } + ) +} +footer_extra_url_body_dsfr( + footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body"), + footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body")) +footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "body") +footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr", type = "bottom") +} diff --git a/tests/testthat/snapshot/footer_dsfr.Rda b/tests/testthat/snapshot/footer_dsfr.Rda new file mode 100644 index 0000000000000000000000000000000000000000..fe79e99c3ec374ef11639386deff3f88d0d66721 GIT binary patch literal 959 zcmV;w13>&AiwFP!000002JKnfZqqOr&UzSZOd8u@2qeG~hbz(|E)W_L5)v9WAfz!Q z?kXqw+gfw&Vmp&|x7Xl~J2YOSZ^DBBcGHx`Nk+mpww6k5n%Mu*{`|SW^Ksd6oT^i+ z>T6x!I`t2`+wL>{v@z^(oU8h~;MANY{kz!aT!C<$N>=X`pECta5!U8;iiy^xws7N) zT4kc6&TtRpNV+;|tO-tGbYCGsEb3D%jpz^k-5A=)j=dU?{ZZfxR@aJ-!^DmWi$huX zY00GgRLc8V9p~F>c|15cLsw|hmB1`84ZtWC9dIdOdqsWc4d(*RLBV>$?Z{VBwK;BZ z4o$<;9Z)_qt+GB zjuTTvY4{XKte-Qam-Gly-r*%iE+MeI3qlaZiO7q*W?&zC!%7L_${S1?{j%U+p8)@elTNzSa#3+3?aK{7`hSa()sO))1_bFV z!r3{EZY8885~f5J9^rbPM@mX~)V$C;H43X+9h>R=*j}q;ht*Z8FSnXaLsCQw3I?jt zwl}%OmPhdf2S$|l&{EPL&2x;0`#>q6Hn71rWr(7{*r&+6ek>C%DzgcwBrg_3=XyHq z8KsvC1V@w&M+zO%)|;VkqvTc$%-<4?jz(5tY^L?50-IUs&arv6*u0;OO*8(6BYL_i zg}O0uPD&L8=RHel8j!h~N^}m(bAhDD(Oe=LxBzz*i z+|87)vQ=&}D`rahlFXD5!>JNerAW@{o{KlwQ2YVH@=# z;zp(#5SR#fgcJ`oj}KvBDg^xy0P-PvRi{_K(w9*F3CuOC<93v{8>QW9=~@(+E=xgS ziaksC`S<{dsBY*reBNtDg3VZOc;KR-=~3=Adsu4Q%{T8Fy}&Y+cLExjL6KGWN#k*L h`IH#WTKT%@xYNv32-CkH=JwCi{x6DdxT)+R003eO-OT_1 literal 0 HcmV?d00001 diff --git a/tests/testthat/test-column_dsfr.R b/tests/testthat/test-column_dsfr.R index 90fa73cb..57367d71 100644 --- a/tests/testthat/test-column_dsfr.R +++ b/tests/testthat/test-column_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand test_that("column_dsfr works", { expect_true(inherits(column_dsfr, "function")) diff --git a/tests/testthat/test-fluidpage_dsfr.R b/tests/testthat/test-fluidpage_dsfr.R index 639eda09..063921e8 100644 --- a/tests/testthat/test-fluidpage_dsfr.R +++ b/tests/testthat/test-fluidpage_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand test_that("fluidPage_dsfr works", { test_html <- fluidPage_dsfr( diff --git a/tests/testthat/test-fluidpage_dsfr_template.R b/tests/testthat/test-fluidpage_dsfr_template.R index ef743905..031c1f10 100644 --- a/tests/testthat/test-fluidpage_dsfr_template.R +++ b/tests/testthat/test-fluidpage_dsfr_template.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand test_that("fluidPage_dsfr_template works", { expect_true(inherits(fluidPage_dsfr_template, "function")) diff --git a/tests/testthat/test-fluidrow_dsfr.R b/tests/testthat/test-fluidrow_dsfr.R index 6a455522..77c968ca 100644 --- a/tests/testthat/test-fluidrow_dsfr.R +++ b/tests/testthat/test-fluidrow_dsfr.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand test_that("fluidRow_dsfr works", { expect_true(inherits(fluidRow_dsfr, "function")) diff --git a/tests/testthat/test-footer_dsfr.R b/tests/testthat/test-footer_dsfr.R new file mode 100644 index 00000000..5bd6a127 --- /dev/null +++ b/tests/testthat/test-footer_dsfr.R @@ -0,0 +1,84 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +test_that("footer_extra_url_body_dsfr works", { + expect_true(inherits(footer_extra_url_body_dsfr, "function")) + + test_html <- footer_extra_url_body_dsfr() + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") + + + test_html <- footer_extra_url_body_dsfr(footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr")) + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") +}) + +test_that("footer_extra_url_bottom_dsfr works", { + expect_true(inherits(footer_extra_url_bottom_dsfr, "function")) + + test_html <-footer_extra_url_bottom_dsfr(accessibilite = "non", lien_accessibilite = "url_accessibilite", footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr")) + + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag.list") + +}) + +test_that("footer_li_dsfr works", { + expect_true(inherits(footer_li_dsfr, "function")) + + test_html <- footer_li_dsfr(href = "http://siteinternet.fr", texte = "siteinternet.fr") + #' @description tester si tagList + expect_s3_class(test_html, "shiny.tag") + + +}) + +test_that("footer_dsfr works", { + test_html <- + footer_dsfr( + intitule = "Territoire", + description = "une description", + accessibilite = "partiellement", + add_extra_url_body = + footer_extra_url_body_dsfr( + footer_li_dsfr( + href = "https://siteinternet.fr", + titre = "siteinternet.fr.fr - nouvelle fenêtre", + texte = "siteinternet.fr.fr" + ) + ), + add_extra_url_bottom = footer_extra_url_bottom_dsfr(accessibilite = "non") + ) + + #' @description tester si shiny.tag + expect_s3_class(test_html, "shiny.tag") + + ## lecture snapshot + snapshot_html <- readRDS( + file = file.path( + "snapshot", # pour passer les tests en production (apres le inflate), + # "tests/testthat/snapshot", # pour passer les tests en developpement (avant le inflate), + "footer_dsfr.Rda") + ) + + #' @description Verifer que le HTML est correct en sortie + # Retire tous les espaces et saut de ligne pour la comparaison + # Pour eviter les problèmes inter-OS + expect_equal(gsub("\\s|\\n", "", test_html), + gsub("\\s|\\n", "", snapshot_html)) + + # Si erreur au précedent test deux cas possible : + # + # - nouveau composant: Lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # - composant a mettre a jour: si le test ne passe plus avant de changer le snapshot, + # assurez vous d'avoir bien pris en compte la nouvelle personnalisation + # dans la fonction footer_dsfr puis lancer le saveRDS, relancer le test et recommenter le saveRDS + # + # saveRDS(test_html, + # file = file.path("tests/testthat/snapshot", + # "footer_dsfr.Rda" + # ) + # ) + +}) diff --git a/tests/testthat/test-footer_dsfr_template.R b/tests/testthat/test-footer_dsfr_template.R new file mode 100644 index 00000000..2efefeef --- /dev/null +++ b/tests/testthat/test-footer_dsfr_template.R @@ -0,0 +1,68 @@ +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_footer.Rmd: do not edit by hand + +test_that("footer_dsfr_template works", { + expect_true(inherits(footer_dsfr_template, "function")) + + htmlfile <- readLines( + system.file( + get_dsfr_version(with_v = TRUE), + "composant", + "piedpage.html", + package = "shinygouv" + ) + ) + + #' @description Comparer les parametres par rapport a ceux de la version precedente + + purrr::walk(c( + "intitule" , + "description" , + "footer_body", + "footer_bottom", + "accessibilite" , + "lien_accessibilite", + "lien_mentions_legales" , + "lien_donnees_personnelles", + "lien_gestion_cookies" + ), + function(param) { + with_moustache <- paste0("\\{\\{", param, "\\}\\}") + expect_true(any(grepl(pattern = with_moustache, htmlfile)), + label = paste0("sans moustache '", param, "'")) + }) + + + test_html <- footer_dsfr_template( + intitule = "intitule" , + description = "description" , + footer_body = "footer_body", + footer_bottom = "footer_bottom", + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ) + + #' @description tester si tous les params sont remplaces + expect_false(grepl(pattern = "\\{\\{", test_html)) + + + #' @description Verifie que les parametres ont bien ete remplace par leurs valeurs + + purrr::walk(c( + intitule = "intitule" , + description = "description" , + footer_body = "footer_body", + footer_bottom = "footer_bottom", + accessibilite = "non", + lien_accessibilite = "#", + lien_mentions_legales = "#", + lien_donnees_personnelles = "#", + lien_gestion_cookies = "#" + ), + function(param) { + expect_true(any(grepl(pattern = param, test_html)), + label = paste0("remplacement de '", param, "'")) + }) +}) diff --git a/tests/testthat/test-layout_dsfr_template.R b/tests/testthat/test-layout_dsfr_template.R index bf11e631..367668ba 100644 --- a/tests/testthat/test-layout_dsfr_template.R +++ b/tests/testthat/test-layout_dsfr_template.R @@ -1,4 +1,4 @@ -# WARNING - Generated by {fusen} from dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand +# WARNING - Generated by {fusen} from /dev/flat_composants/flat_fluidpage.Rmd: do not edit by hand test_that("layout_dsfr_template works", { expect_true(inherits(layout_dsfr_template, "function")) From 648608ec8da0e583131d52b32a7fe4756945cfee Mon Sep 17 00:00:00 2001 From: Juliette Engelaere-Lefebvre Date: Wed, 23 Aug 2023 14:58:24 +0200 Subject: [PATCH 2/3] typo --- NAMESPACE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 2f76b272..c2c11382 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,8 +7,8 @@ export(checkboxGroupInput_dsfr) export(checkboxInput_dsfr) export(column_dsfr) export(convert_to_dsfr) -export(fileInput_dsfr) export(dateRangeInput_dsfr) +export(fileInput_dsfr) export(fluidPage_dsfr) export(fluidRow_dsfr) export(footer_bottom_dsfr) From adc1eb8b90b4d0212f0e9d0d67b41381dc701928 Mon Sep 17 00:00:00 2001 From: Juliette Engelaere-Lefebvre Date: Wed, 23 Aug 2023 15:25:49 +0200 Subject: [PATCH 3/3] =?UTF-8?q?mise=20=C3=A0=20jour=20(actualisation=20des?= =?UTF-8?q?=20liens)=20du=20modele=20de=20commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/composant.md | 8 ++++---- vignettes/Dev-A-guide-du-developpeur.Rmd | 12 +++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/composant.md b/.github/ISSUE_TEMPLATE/composant.md index d9cc9fba..df91a1d6 100644 --- a/.github/ISSUE_TEMPLATE/composant.md +++ b/.github/ISSUE_TEMPLATE/composant.md @@ -17,7 +17,7 @@ ETQ utilisateur/utilisatrice, je souhaite pouvoir ajouter un composant de type ` ## Comment technique -- Je crée une branche pour développer la fonctionnalité -- Utilisation du workflow décrit dans 'dev/documentation/comment-faire-un-composant-shiny.Rmd' -- Utiliser le flat file fourni pour développer avec {fusen} -- J'ouvre une PR assignée aux responsables de projet lorsque c'est traité +- Je crée une branche pour développer la fonctionnalité +- Utilisation du workflow décrit dans la vignette dédiée aux développeurs [comment-faire-un-composant-shiny](https://spyrales.github.io/shinygouv/articles/Dev-B-comment-faire-un-composant-shiny.html] +- Utiliser le flat file fourni pour développer avec {fusen} (dev/flat_composants/flat_new_one.Rmd) +- J'ouvre une PR assignée aux responsables de projet lorsque c'est traité diff --git a/vignettes/Dev-A-guide-du-developpeur.Rmd b/vignettes/Dev-A-guide-du-developpeur.Rmd index 3fbba243..b106fc1d 100644 --- a/vignettes/Dev-A-guide-du-developpeur.Rmd +++ b/vignettes/Dev-A-guide-du-developpeur.Rmd @@ -17,14 +17,16 @@ Ceci est un dossier de documentation dédié aux développeurs et développeuses ## Contribuer à {shinygouv} - Introduction Pour des contributions au code de ce projet, svp regardez le guide général de contribution à https://spyrales.github.io/shinygouv/CONTRIBUTING.html -## Structuration du repo (a compléter) +## Structuration du repo -Le développement de ce package a été réalisé [avec {fusen}](https://thinkr-open.github.io/fusen/) : les fonctions, vignettes et test sont générées par des fichiers Rmd dans le dossier /dev. +Le développement de ce package a été réalisé [avec {fusen}](https://thinkr-open.github.io/fusen/) : les fonctions, vignettes et test sont générées par des fichiers Rmd dans le dossier /dev/flat_composants. -Le repo contient deux app : -- une app de demo des composant de shinygouv : que l'on peut visualiser avec shinygouv::run_app(), -- une app de test pour la fonction de conversion convert_to_dsfr(), présente dans "inst/test.convert.dsfr/". +Le repo contient deux app : +- une app de demo des composant de shinygouv : que l'on peut visualiser avec shinygouv::run_app(), +- une app de test pour la fonction de conversion convert_to_dsfr(), présente dans "inst/test.convert.dsfr/". + +Les modules de l'app de démo son rangées dans le répertoire `R` et se mélangent aux fonctions de composants implémentées. ## Version du framework dsfr en cours de développement