From 3b62437f983568f3060872a87ded79aeb1080a8c Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 19:26:43 +0100 Subject: [PATCH 01/16] Feat: New functions addsvg_sprite and rmsvg_sprite to modify sprite maps Both functions require use of xml2 package. --- R/sprite.R | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 R/sprite.R diff --git a/R/sprite.R b/R/sprite.R new file mode 100644 index 00000000..f7e8653e --- /dev/null +++ b/R/sprite.R @@ -0,0 +1,72 @@ +idExists <- function(id, sprite) { + sprite_sym <- xml_text(xml_find_all( + sprite, "/*[name()='svg']/*[name()='symbol']/@id")) + if(id %in% sprite_sym) return(TRUE) else return(FALSE) +} + +#' Add svg to a sprite map +#' +#' @param newsvg \code{xml_document} object with svg that will be added +#' @param sprite \code{xml_document} object with the sprite map +#' @param id sets the id of the new svg inside the sprite map, if is +#' NULL it looks for the id inside the \code{newsvg} object. +#' +#' @return invisible copy of new sprite map +#' +#' @details the sprite map object is modified in place +#' +#' @examples +#' library(xml2) +#' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +#' newsvg <- read_xml(' ') +#' addsvg_sprite(newsvg, sprite, "new-icon") +#' @export +addsvg_sprite <- function(newsvg, sprite, id = NULL) { + if(!requireNamespace("xml2", quietly = TRUE)) { + stop("Package \"xml2\" needed for this function to work. + Please install it", call. = FALSE) + } + if(is.null(id)) { + id <- xml_attr(newsvg, "id") + if(is.na(id)) stop("id is NULL and newsvg does not have id") + } + stopifnot(!idExists(id, sprite)) + viewBox <- xml_attr(newsvg, "viewBox") + root_newsvg <- xml_new_root("symbol", "id" = id, + "viewBox" = viewBox) + xml_add_child(root_newsvg, xml_child(newsvg)) + xml_add_child(sprite, + xml_find_first(root_newsvg, "/*[name()='symbol']")) + invisible(sprite) +} + + +#' Remove svg from an sprite map +#' +#' @param id symbol id of the svg to be removed +#' @param sprite \code{xml_document} object with the sprite map +#' +#' @return invisible copy of new sprite map +#' +#' @details sprite map is modifyed on place +#' +#' @examples +#' library(xml2) +#' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +#' newsvg <- read_xml(" ") +#' addsvg_sprite(newsvg, sprite, "new-icon") +#' rmsvg_sprite("new-icon", sprite) +#' @export + rmsvg_sprite <- function(id, sprite) { + if(!requireNamespace("xml2", quietly = TRUE)) { + stop("Package \"xml2\" needed for this function to work. + Please install it", call. = FALSE) + } + stopifnot(idExists(id, sprite)) + sym2remove <- xml_find_first(sprite, + paste0("/*[name()='svg']/*[name()='symbol'][@id='",id,"']")) + xml_remove(sym2remove) + invisible(sprite) +} + + From 4b2c05ef41086b0d99b316252ddaf561a009823b Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 19:38:16 +0100 Subject: [PATCH 02/16] Update documentation for sprite map functions --- man/addsvg_sprite.Rd | 31 +++++++++++++++++++++++++++++++ man/rmsvg_sprite.Rd | 29 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 man/addsvg_sprite.Rd create mode 100644 man/rmsvg_sprite.Rd diff --git a/man/addsvg_sprite.Rd b/man/addsvg_sprite.Rd new file mode 100644 index 00000000..de93209b --- /dev/null +++ b/man/addsvg_sprite.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/sprite.R +\name{addsvg_sprite} +\alias{addsvg_sprite} +\title{Add svg to a sprite map} +\usage{ +addsvg_sprite(newsvg, sprite, id = NULL) +} +\arguments{ +\item{newsvg}{\code{xml_document} object with svg that will be added} + +\item{sprite}{\code{xml_document} object with the sprite map} + +\item{id}{sets the id of the new svg inside the sprite map, if is +NULL it looks for the id inside the \code{newsvg} object.} +} +\value{ +invisible copy of new sprite map +} +\description{ +Add svg to a sprite map +} +\details{ +the sprite map object is modified in place +} +\examples{ +library(xml2) +sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +newsvg <- read_xml(' ') +addsvg_sprite(newsvg, sprite, "new-icon") +} diff --git a/man/rmsvg_sprite.Rd b/man/rmsvg_sprite.Rd new file mode 100644 index 00000000..be68fe9f --- /dev/null +++ b/man/rmsvg_sprite.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/sprite.R +\name{rmsvg_sprite} +\alias{rmsvg_sprite} +\title{Remove svg from an sprite map} +\usage{ +rmsvg_sprite(id, sprite) +} +\arguments{ +\item{id}{symbol id of the svg to be removed} + +\item{sprite}{\code{xml_document} object with the sprite map} +} +\value{ +invisible copy of new sprite map +} +\description{ +Remove svg from an sprite map +} +\details{ +sprite map is modifyed on place +} +\examples{ +library(xml2) +sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +newsvg <- read_xml(" ") +addsvg_sprite(newsvg, sprite, "new-icon") +rmsvg_sprite("new-icon", sprite) +} From 536c288d8017259c9a91d513a4592c5879735878 Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 19:47:07 +0100 Subject: [PATCH 03/16] Update DESCRIPTION --- DESCRIPTION | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 7d661433..43903cc3 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -46,5 +46,6 @@ Suggests: DT, covr, leaflet, - plotly + plotly, + xml2 RoxygenNote: 7.1.1 From dc2bab293e0e1423b85bca4655d1153781deaf4f Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 19:47:21 +0100 Subject: [PATCH 04/16] Update NAMESPACE --- NAMESPACE | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index 4e66d2ff..4bbcafc6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,6 +7,7 @@ export(SUPPORTED_THEMES) export(accordion) export(actionButton) export(action_button) +export(addsvg_sprite) export(button) export(calendar) export(card) @@ -59,6 +60,7 @@ export(removeNotification) export(remove_all_modals) export(remove_modal) export(render_menu_link) +export(rmsvg_sprite) export(search_field) export(search_selection_api) export(search_selection_choices) From 2efa17b8a4eb44d4cd92e7a85eec8812ca41f88c Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 20:12:28 +0100 Subject: [PATCH 05/16] fix: Reduce size of svg examples --- R/sprite.R | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/R/sprite.R b/R/sprite.R index f7e8653e..9660669a 100644 --- a/R/sprite.R +++ b/R/sprite.R @@ -1,5 +1,5 @@ idExists <- function(id, sprite) { - sprite_sym <- xml_text(xml_find_all( + sprite_sym <- xml2::xml_text(xml2::xml_find_all( sprite, "/*[name()='svg']/*[name()='symbol']/@id")) if(id %in% sprite_sym) return(TRUE) else return(FALSE) } @@ -12,13 +12,15 @@ idExists <- function(id, sprite) { #' NULL it looks for the id inside the \code{newsvg} object. #' #' @return invisible copy of new sprite map -#' +#' #' @details the sprite map object is modified in place #' #' @examples #' library(xml2) #' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") -#' newsvg <- read_xml(' ') +#' newsvg <- read_xml(" +#' +#' ") #' addsvg_sprite(newsvg, sprite, "new-icon") #' @export addsvg_sprite <- function(newsvg, sprite, id = NULL) { @@ -27,16 +29,16 @@ addsvg_sprite <- function(newsvg, sprite, id = NULL) { Please install it", call. = FALSE) } if(is.null(id)) { - id <- xml_attr(newsvg, "id") + id <- xml2::xml_attr(newsvg, "id") if(is.na(id)) stop("id is NULL and newsvg does not have id") } stopifnot(!idExists(id, sprite)) - viewBox <- xml_attr(newsvg, "viewBox") - root_newsvg <- xml_new_root("symbol", "id" = id, + viewBox <- xml2::xml_attr(newsvg, "viewBox") + root_newsvg <- xml2::xml_new_root("symbol", "id" = id, "viewBox" = viewBox) - xml_add_child(root_newsvg, xml_child(newsvg)) - xml_add_child(sprite, - xml_find_first(root_newsvg, "/*[name()='symbol']")) + xml2::xml_add_child(root_newsvg, xml2::xml_child(newsvg)) + xml2::xml_add_child(sprite, + xml2::xml_find_first(root_newsvg, "/*[name()='symbol']")) invisible(sprite) } @@ -53,7 +55,9 @@ addsvg_sprite <- function(newsvg, sprite, id = NULL) { #' @examples #' library(xml2) #' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") -#' newsvg <- read_xml(" ") +#' newsvg <- read_xml(" +#' +#' ") #' addsvg_sprite(newsvg, sprite, "new-icon") #' rmsvg_sprite("new-icon", sprite) #' @export @@ -63,10 +67,10 @@ addsvg_sprite <- function(newsvg, sprite, id = NULL) { Please install it", call. = FALSE) } stopifnot(idExists(id, sprite)) - sym2remove <- xml_find_first(sprite, + sym2remove <- xml2::xml_find_first(sprite, paste0("/*[name()='svg']/*[name()='symbol'][@id='",id,"']")) - xml_remove(sym2remove) + xml2::xml_remove(sym2remove) invisible(sprite) } - + From 3697232efdcb9395a0a2197e7b5a9de5da803574 Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 20:14:09 +0100 Subject: [PATCH 06/16] Update last examples in documentation --- man/addsvg_sprite.Rd | 4 +++- man/rmsvg_sprite.Rd | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/man/addsvg_sprite.Rd b/man/addsvg_sprite.Rd index de93209b..c71e77aa 100644 --- a/man/addsvg_sprite.Rd +++ b/man/addsvg_sprite.Rd @@ -26,6 +26,8 @@ the sprite map object is modified in place \examples{ library(xml2) sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") -newsvg <- read_xml(' ') +newsvg <- read_xml(" + + ") addsvg_sprite(newsvg, sprite, "new-icon") } diff --git a/man/rmsvg_sprite.Rd b/man/rmsvg_sprite.Rd index be68fe9f..0ead05b2 100644 --- a/man/rmsvg_sprite.Rd +++ b/man/rmsvg_sprite.Rd @@ -23,7 +23,9 @@ sprite map is modifyed on place \examples{ library(xml2) sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") -newsvg <- read_xml(" ") +newsvg <- read_xml(" + +") addsvg_sprite(newsvg, sprite, "new-icon") rmsvg_sprite("new-icon", sprite) } From b4af868dd9a2992e8effccc80d7663cc6206c971 Mon Sep 17 00:00:00 2001 From: osenan Date: Fri, 13 Nov 2020 20:15:17 +0100 Subject: [PATCH 07/16] include unit tests for addsvg_sprite and rmsvg_sprite --- tests/testthat/test_sprite.R | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/testthat/test_sprite.R diff --git a/tests/testthat/test_sprite.R b/tests/testthat/test_sprite.R new file mode 100644 index 00000000..408bc690 --- /dev/null +++ b/tests/testthat/test_sprite.R @@ -0,0 +1,26 @@ +context("sprite") + +test_that("Function addsvg_sprite add an svg to current sprite",{ + require(xml2) + sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") + newsvg <- read_xml(" + + ") + + addsvg_sprite(newsvg, sprite, "shiny-logo") + expect_equal(xml_attr(xml_child(sprite), "id"), "shiny-logo") + expect_error(addsvg_sprite(newsvg, sprite, "shiny-logo")) +}) + +test_that("Function rmsvg_sprite removes the \"id\" svg",{ + require(xml2) + sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") + newsvg <- read_xml(" + + ") + + addsvg_sprite(newsvg, sprite, "shiny-logo") + rmsvg_sprite("shiny-logo", sprite) + expect_equal(length(xml_children(sprite)), 0) + expect_error(rmsvg_sprite("shiny-logo", sprite)) +}) From 11f21e5cd2bddc729a9508b0e33a3959284ba36f Mon Sep 17 00:00:00 2001 From: osenan Date: Mon, 16 Nov 2020 03:45:24 +0100 Subject: [PATCH 08/16] Fix: Typo in rmsvg_sprite documentation --- R/sprite.R | 2 +- man/rmsvg_sprite.Rd | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/sprite.R b/R/sprite.R index 9660669a..80355f00 100644 --- a/R/sprite.R +++ b/R/sprite.R @@ -43,7 +43,7 @@ addsvg_sprite <- function(newsvg, sprite, id = NULL) { } -#' Remove svg from an sprite map +#' Remove svg from a sprite map #' #' @param id symbol id of the svg to be removed #' @param sprite \code{xml_document} object with the sprite map diff --git a/man/rmsvg_sprite.Rd b/man/rmsvg_sprite.Rd index 0ead05b2..e80e2efb 100644 --- a/man/rmsvg_sprite.Rd +++ b/man/rmsvg_sprite.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/sprite.R \name{rmsvg_sprite} \alias{rmsvg_sprite} -\title{Remove svg from an sprite map} +\title{Remove svg from a sprite map} \usage{ rmsvg_sprite(id, sprite) } @@ -15,7 +15,7 @@ rmsvg_sprite(id, sprite) invisible copy of new sprite map } \description{ -Remove svg from an sprite map +Remove svg from a sprite map } \details{ sprite map is modifyed on place From 267129abcf03a1f698ba603e2824e748680b7131 Mon Sep 17 00:00:00 2001 From: osenan Date: Mon, 16 Nov 2020 18:44:17 +0100 Subject: [PATCH 09/16] Fix: * Change function and variable names to fit with coding style: - addsvg_sprite for add_svg_sprite - rmsvg_sprite for remove_svg_sprite - idExists for id_exists * Simplify code in id_exists return statement, easier to read and mantain * Update tests and documentation according to changes in functions --- R/sprite.R | 60 ++++++++++--------- man/{addsvg_sprite.Rd => add_svg_sprite.Rd} | 8 +-- man/{rmsvg_sprite.Rd => remove_svg_sprite.Rd} | 10 ++-- tests/testthat/test_sprite.R | 10 ++-- 4 files changed, 45 insertions(+), 43 deletions(-) rename man/{addsvg_sprite.Rd => add_svg_sprite.Rd} (86%) rename man/{rmsvg_sprite.Rd => remove_svg_sprite.Rd} (80%) diff --git a/R/sprite.R b/R/sprite.R index 80355f00..ebe31659 100644 --- a/R/sprite.R +++ b/R/sprite.R @@ -1,7 +1,7 @@ -idExists <- function(id, sprite) { - sprite_sym <- xml2::xml_text(xml2::xml_find_all( - sprite, "/*[name()='svg']/*[name()='symbol']/@id")) - if(id %in% sprite_sym) return(TRUE) else return(FALSE) +id_exists <- function(id, sprite) { + sprite_symbols <- xml2::xml_text(xml2::xml_find_all( + sprite, "/*[name()='svg']/*[name()='symbol']/@id")) + id %in% sprite_symbols } #' Add svg to a sprite map @@ -21,25 +21,26 @@ idExists <- function(id, sprite) { #' newsvg <- read_xml(" #' #' ") -#' addsvg_sprite(newsvg, sprite, "new-icon") +#' add_svg_sprite(newsvg, sprite, "new-icon") #' @export -addsvg_sprite <- function(newsvg, sprite, id = NULL) { - if(!requireNamespace("xml2", quietly = TRUE)) { - stop("Package \"xml2\" needed for this function to work. - Please install it", call. = FALSE) - } - if(is.null(id)) { - id <- xml2::xml_attr(newsvg, "id") - if(is.na(id)) stop("id is NULL and newsvg does not have id") - } - stopifnot(!idExists(id, sprite)) - viewBox <- xml2::xml_attr(newsvg, "viewBox") - root_newsvg <- xml2::xml_new_root("symbol", "id" = id, - "viewBox" = viewBox) - xml2::xml_add_child(root_newsvg, xml2::xml_child(newsvg)) - xml2::xml_add_child(sprite, - xml2::xml_find_first(root_newsvg, "/*[name()='symbol']")) - invisible(sprite) +add_svg_sprite <- function(newsvg, sprite, id = NULL) { + if(!requireNamespace("xml2", quietly = TRUE)) { + stop("Package \"xml2\" needed for this function to work. + Please install it", call. = FALSE) + } + if(is.null(id)) { + id <- xml2::xml_attr(newsvg, "id") + if(is.na(id)) stop("id is NULL and newsvg does not have id") + } + stopifnot(!id_exists(id, sprite)) + viewBox <- xml2::xml_attr(newsvg, "viewBox") + root_newsvg <- xml2::xml_new_root( + "symbol", "id" = id, "viewBox" = viewBox) + xml2::xml_add_child(root_newsvg, xml2::xml_child(newsvg)) + xml2::xml_add_child( + sprite, + xml2::xml_find_first(root_newsvg, "/*[name()='symbol']")) + invisible(sprite) } @@ -58,18 +59,19 @@ addsvg_sprite <- function(newsvg, sprite, id = NULL) { #' newsvg <- read_xml(" #' #' ") -#' addsvg_sprite(newsvg, sprite, "new-icon") -#' rmsvg_sprite("new-icon", sprite) +#' add_svg_sprite(newsvg, sprite, "new-icon") +#' remove_svg_sprite("new-icon", sprite) #' @export - rmsvg_sprite <- function(id, sprite) { + remove_svg_sprite <- function(id, sprite) { if(!requireNamespace("xml2", quietly = TRUE)) { stop("Package \"xml2\" needed for this function to work. Please install it", call. = FALSE) } - stopifnot(idExists(id, sprite)) - sym2remove <- xml2::xml_find_first(sprite, - paste0("/*[name()='svg']/*[name()='symbol'][@id='",id,"']")) - xml2::xml_remove(sym2remove) + stopifnot(id_exists(id, sprite)) + symbol2remove <- xml2::xml_find_first( + sprite, + paste0("/*[name()='svg']/*[name()='symbol'][@id='",id,"']")) + xml2::xml_remove(symbol2remove) invisible(sprite) } diff --git a/man/addsvg_sprite.Rd b/man/add_svg_sprite.Rd similarity index 86% rename from man/addsvg_sprite.Rd rename to man/add_svg_sprite.Rd index c71e77aa..c862e269 100644 --- a/man/addsvg_sprite.Rd +++ b/man/add_svg_sprite.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/sprite.R -\name{addsvg_sprite} -\alias{addsvg_sprite} +\name{add_svg_sprite} +\alias{add_svg_sprite} \title{Add svg to a sprite map} \usage{ -addsvg_sprite(newsvg, sprite, id = NULL) +add_svg_sprite(newsvg, sprite, id = NULL) } \arguments{ \item{newsvg}{\code{xml_document} object with svg that will be added} @@ -29,5 +29,5 @@ sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/20 newsvg <- read_xml(" ") -addsvg_sprite(newsvg, sprite, "new-icon") +add_svg_sprite(newsvg, sprite, "new-icon") } diff --git a/man/rmsvg_sprite.Rd b/man/remove_svg_sprite.Rd similarity index 80% rename from man/rmsvg_sprite.Rd rename to man/remove_svg_sprite.Rd index e80e2efb..d7f7f539 100644 --- a/man/rmsvg_sprite.Rd +++ b/man/remove_svg_sprite.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/sprite.R -\name{rmsvg_sprite} -\alias{rmsvg_sprite} +\name{remove_svg_sprite} +\alias{remove_svg_sprite} \title{Remove svg from a sprite map} \usage{ -rmsvg_sprite(id, sprite) +remove_svg_sprite(id, sprite) } \arguments{ \item{id}{symbol id of the svg to be removed} @@ -26,6 +26,6 @@ sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/20 newsvg <- read_xml(" ") -addsvg_sprite(newsvg, sprite, "new-icon") -rmsvg_sprite("new-icon", sprite) +add_svg_sprite(newsvg, sprite, "new-icon") +remove_svg_sprite("new-icon", sprite) } diff --git a/tests/testthat/test_sprite.R b/tests/testthat/test_sprite.R index 408bc690..01c12d9e 100644 --- a/tests/testthat/test_sprite.R +++ b/tests/testthat/test_sprite.R @@ -7,9 +7,9 @@ test_that("Function addsvg_sprite add an svg to current sprite",{ ") - addsvg_sprite(newsvg, sprite, "shiny-logo") + add_svg_sprite(newsvg, sprite, "shiny-logo") expect_equal(xml_attr(xml_child(sprite), "id"), "shiny-logo") - expect_error(addsvg_sprite(newsvg, sprite, "shiny-logo")) + expect_error(add_svg_sprite(newsvg, sprite, "shiny-logo")) }) test_that("Function rmsvg_sprite removes the \"id\" svg",{ @@ -19,8 +19,8 @@ test_that("Function rmsvg_sprite removes the \"id\" svg",{ ") - addsvg_sprite(newsvg, sprite, "shiny-logo") - rmsvg_sprite("shiny-logo", sprite) + add_svg_sprite(newsvg, sprite, "shiny-logo") + remove_svg_sprite("shiny-logo", sprite) expect_equal(length(xml_children(sprite)), 0) - expect_error(rmsvg_sprite("shiny-logo", sprite)) + expect_error(remove_svg_sprite("shiny-logo", sprite)) }) From d33882da599f062a93c45afb6a1c3f0d6f4e3e19 Mon Sep 17 00:00:00 2001 From: osenan Date: Mon, 16 Nov 2020 19:03:57 +0100 Subject: [PATCH 10/16] Fix: Add message when id not found --- R/sprite.R | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/R/sprite.R b/R/sprite.R index ebe31659..b1a61e7c 100644 --- a/R/sprite.R +++ b/R/sprite.R @@ -24,13 +24,13 @@ id_exists <- function(id, sprite) { #' add_svg_sprite(newsvg, sprite, "new-icon") #' @export add_svg_sprite <- function(newsvg, sprite, id = NULL) { - if(!requireNamespace("xml2", quietly = TRUE)) { + if (!requireNamespace("xml2", quietly = TRUE)) { stop("Package \"xml2\" needed for this function to work. Please install it", call. = FALSE) } - if(is.null(id)) { + if (is.null(id)) { id <- xml2::xml_attr(newsvg, "id") - if(is.na(id)) stop("id is NULL and newsvg does not have id") + if (is.na(id)) stop("id is NULL and newsvg does not have id") } stopifnot(!id_exists(id, sprite)) viewBox <- xml2::xml_attr(newsvg, "viewBox") @@ -63,16 +63,14 @@ add_svg_sprite <- function(newsvg, sprite, id = NULL) { #' remove_svg_sprite("new-icon", sprite) #' @export remove_svg_sprite <- function(id, sprite) { - if(!requireNamespace("xml2", quietly = TRUE)) { + if (!requireNamespace("xml2", quietly = TRUE)) { stop("Package \"xml2\" needed for this function to work. Please install it", call. = FALSE) } - stopifnot(id_exists(id, sprite)) + if (!id_exists(id, sprite)) stop(glue::glue("id {id} not found in sprite")) symbol2remove <- xml2::xml_find_first( sprite, paste0("/*[name()='svg']/*[name()='symbol'][@id='",id,"']")) xml2::xml_remove(symbol2remove) invisible(sprite) } - - From 8dbe91fa4a9b5172ac5acd2ab58ab2429d763b1e Mon Sep 17 00:00:00 2001 From: osenan Date: Sun, 13 Dec 2020 11:53:49 +0100 Subject: [PATCH 11/16] first example app version --- examples/sprite/app.R | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 examples/sprite/app.R diff --git a/examples/sprite/app.R b/examples/sprite/app.R new file mode 100644 index 00000000..529cab45 --- /dev/null +++ b/examples/sprite/app.R @@ -0,0 +1,23 @@ +library(shiny.semantic) +library(shiny) + +ui <- shinyUI( + semanticPage( +# tagList( + action_button("shiny", "Click me"), + action_button("appsilon", "Click me"), + textOutput("text") + ) +) + +server <- function(input, output, session) { + observeEvent(input$shiny, { + output$text <- renderText("Shiny button clicked") + }) + observeEvent(input$appsilon, { + output$text <- renderText("Appsilon button clicked") + }) +} + +shinyApp(ui, server) + From cd2becc98d3a7af140388f6a5869713ef43cb851 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 16 Dec 2020 05:59:47 +0100 Subject: [PATCH 12/16] Feat: add new examples to add_svg_sprite and remove_svg_sprite --- R/sprite.R | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/R/sprite.R b/R/sprite.R index b1a61e7c..37f409e4 100644 --- a/R/sprite.R +++ b/R/sprite.R @@ -22,6 +22,14 @@ id_exists <- function(id, sprite) { #' #' ") #' add_svg_sprite(newsvg, sprite, "new-icon") +#' +#' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +#' appsilon_logo <- read_xml(system.file("assets/icons/appsilon-logo.svg", package = "shiny.semantic")) +#' shiny_logo <- read_xml(system.file("assets/icons/shiny-logo.svg", package = "shiny.semantic")) +#' add_svg_sprite(appsilon_logo, sprite, "appsilon_logo") +#' add_svg_sprite(shiny_logo, sprite, "shiny_logo") +#' sprite_file <- tempfile() +#' write_xml(sprite, sprite_file, options = "no_declaration") #' @export add_svg_sprite <- function(newsvg, sprite, id = NULL) { if (!requireNamespace("xml2", quietly = TRUE)) { @@ -61,6 +69,15 @@ add_svg_sprite <- function(newsvg, sprite, id = NULL) { #' ") #' add_svg_sprite(newsvg, sprite, "new-icon") #' remove_svg_sprite("new-icon", sprite) +#' +#' #' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +#' appsilon_logo <- read_xml(system.file("assets/icons/appsilon-logo.svg", package = "shiny.semantic")) +#' shiny_logo <- read_xml(system.file("assets/icons/shiny-logo.svg", package = "shiny.semantic")) +#' add_svg_sprite(appsilon_logo, sprite, "appsilon_logo") +#' add_svg_sprite(shiny_logo, sprite, "shiny_logo") +#' remove_svg_sprite("shiny_logo", sprite) +#' sprite_file <- tempfile() +#' write_xml(sprite, sprite_file, options = "no_declaration") #' @export remove_svg_sprite <- function(id, sprite) { if (!requireNamespace("xml2", quietly = TRUE)) { From bf91b4fc1fcd3dadb6aabedc36e73287672e6a0a Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 16 Dec 2020 05:59:58 +0100 Subject: [PATCH 13/16] update NAMESPACE --- NAMESPACE | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 4bbcafc6..cc461954 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,7 +7,7 @@ export(SUPPORTED_THEMES) export(accordion) export(actionButton) export(action_button) -export(addsvg_sprite) +export(add_svg_sprite) export(button) export(calendar) export(card) @@ -59,8 +59,8 @@ export(removeModal) export(removeNotification) export(remove_all_modals) export(remove_modal) +export(remove_svg_sprite) export(render_menu_link) -export(rmsvg_sprite) export(search_field) export(search_selection_api) export(search_selection_choices) From 65ec29046d91a95d5f4825f79484cfe61fa517e0 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 16 Dec 2020 06:00:14 +0100 Subject: [PATCH 14/16] update documentation --- man/add_svg_sprite.Rd | 8 ++++++++ man/remove_svg_sprite.Rd | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/man/add_svg_sprite.Rd b/man/add_svg_sprite.Rd index c862e269..686db0ea 100644 --- a/man/add_svg_sprite.Rd +++ b/man/add_svg_sprite.Rd @@ -30,4 +30,12 @@ newsvg <- read_xml(" ") add_svg_sprite(newsvg, sprite, "new-icon") + +sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +appsilon_logo <- read_xml(system.file("assets/icons/appsilon-logo.svg", package = "shiny.semantic")) +shiny_logo <- read_xml(system.file("assets/icons/shiny-logo.svg", package = "shiny.semantic")) +add_svg_sprite(appsilon_logo, sprite, "appsilon_logo") +add_svg_sprite(shiny_logo, sprite, "shiny_logo") +sprite_file <- tempfile() +write_xml(sprite, sprite_file, options = "no_declaration") } diff --git a/man/remove_svg_sprite.Rd b/man/remove_svg_sprite.Rd index d7f7f539..f49f8075 100644 --- a/man/remove_svg_sprite.Rd +++ b/man/remove_svg_sprite.Rd @@ -28,4 +28,13 @@ newsvg <- read_xml("") add_svg_sprite(newsvg, sprite, "new-icon") remove_svg_sprite("new-icon", sprite) + +#' sprite <- xml_new_root("svg", "version" = "1.1", "xmlns" = "http://www.w3.org/2000/svg") +appsilon_logo <- read_xml(system.file("assets/icons/appsilon-logo.svg", package = "shiny.semantic")) +shiny_logo <- read_xml(system.file("assets/icons/shiny-logo.svg", package = "shiny.semantic")) +add_svg_sprite(appsilon_logo, sprite, "appsilon_logo") +add_svg_sprite(shiny_logo, sprite, "shiny_logo") +remove_svg_sprite("shiny_logo", sprite) +sprite_file <- tempfile() +write_xml(sprite, sprite_file, options = "no_declaration") } From 5bcd51793725e4ad60aad1347e6529c85272bc61 Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 16 Dec 2020 06:00:34 +0100 Subject: [PATCH 15/16] add name as contributor to DESCRIPTION --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index 43903cc3..8d4b48b5 100755 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -15,6 +15,7 @@ Authors@R: c(person("Filip", "Stachura", email = "filip@appsilon.com", role = "a person("Pedro", "Manuel Coutinho da Silva", email = "pedro@appsilon.com", role = "ctb"), person("Paweł", "Przytuła", email = "pawel@appsilon.com", role = "ctb"), person("Kamil", "Żyła", email = "kamil@appsilon.com", role = "ctb"), + person("Oriol", "Senan", email = "oriol@appsilon.com", role = "ctb"), person(family = "Appsilon Sp. z o.o.", role = c("cph"))) Description: Creating a great user interface for your Shiny apps can be a hassle, especially if you want to work purely in R From cc966a17e3dd970b3f1263d067c4c63b823abc6e Mon Sep 17 00:00:00 2001 From: osenan Date: Wed, 16 Dec 2020 06:01:47 +0100 Subject: [PATCH 16/16] include svg files for add_svg_sprite examples --- examples/sprite/app.R | 23 ----------------------- inst/assets/icons/appsilon-logo.svg | 7 +++++++ inst/assets/icons/shiny-logo.svg | 3 +++ 3 files changed, 10 insertions(+), 23 deletions(-) delete mode 100644 examples/sprite/app.R create mode 100644 inst/assets/icons/appsilon-logo.svg create mode 100644 inst/assets/icons/shiny-logo.svg diff --git a/examples/sprite/app.R b/examples/sprite/app.R deleted file mode 100644 index 529cab45..00000000 --- a/examples/sprite/app.R +++ /dev/null @@ -1,23 +0,0 @@ -library(shiny.semantic) -library(shiny) - -ui <- shinyUI( - semanticPage( -# tagList( - action_button("shiny", "Click me"), - action_button("appsilon", "Click me"), - textOutput("text") - ) -) - -server <- function(input, output, session) { - observeEvent(input$shiny, { - output$text <- renderText("Shiny button clicked") - }) - observeEvent(input$appsilon, { - output$text <- renderText("Appsilon button clicked") - }) -} - -shinyApp(ui, server) - diff --git a/inst/assets/icons/appsilon-logo.svg b/inst/assets/icons/appsilon-logo.svg new file mode 100644 index 00000000..22e7cb60 --- /dev/null +++ b/inst/assets/icons/appsilon-logo.svg @@ -0,0 +1,7 @@ + diff --git a/inst/assets/icons/shiny-logo.svg b/inst/assets/icons/shiny-logo.svg new file mode 100644 index 00000000..79df6fa6 --- /dev/null +++ b/inst/assets/icons/shiny-logo.svg @@ -0,0 +1,3 @@ +