Skip to content

Commit

Permalink
Translate \n to <br /> in fct labels, too (#1700)
Browse files Browse the repository at this point in the history
* Translate `\n` to `<br />` in fct labels, too

Before, this only worked for colums of type character.

* add @salim-b as ctb

* Add test for `translate_linebreaks()`

* remove superfluous char conversion

* change order of authors

* replace forcats code with base R

* add news item
  • Loading branch information
salim-b authored Jun 22, 2020
1 parent 8d376d1 commit 9a856ae
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 1 deletion.
2 changes: 2 additions & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ Authors@R: c(person("Carson", "Sievert", role = c("aut", "cre"),
email = "[email protected]", comment = c(ORCID = "0000-0002-1994-3581")),
person("Pedro", "Despouy", role = "aut",
email = "[email protected]"),
person("Salim", "Brüggemann", role = "ctb",
email = "[email protected]", comment = c(ORCID = "0000-0002-5329-5987")),
person("Plotly Technologies Inc.", role = "cph"))
License: MIT + file LICENSE
Description: Create interactive web graphics from 'ggplot2' graphs and/or a custom interface to the (MIT-licensed) JavaScript library 'plotly.js' inspired by the grammar of graphics.
Expand Down
2 changes: 2 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

* All HTTP requests are now retried upon failure (#1656)

* R linebreaks (`\n`) in _factor labels_ are now translated to HTML linebreaks (`<br />`), too. Before, this conversion was only done for colums of type character. ([#1700](https://github.com/ropensci/plotly/pull/1700), @salim-b)

## BUG FIXES

* `ggplotly()` now handles discrete axes of a `facet_wrap` and `facet_grid` correctly when there is only one category in panels > 1 (#1577 and #1720).
Expand Down
4 changes: 3 additions & 1 deletion R/utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -609,12 +609,14 @@ translate_linebreaks <- function(p) {
typ <- typeof(a)
if (typ == "list") {
# retain the class of list elements
# which important for many things, such as colorbars
# which is important for many things, such as colorbars
a[] <- lapply(a, recurse)
} else if (typ == "character" && !inherits(a, "JS_EVAL")) {
attrs <- attributes(a)
a <- gsub("\n", br(), a, fixed = TRUE)
attributes(a) <- attrs
} else if (is.factor(a)) {
levels(a) <- gsub("\n", br(), levels(a), fixed = TRUE)
}
a
}
Expand Down
31 changes: 31 additions & 0 deletions tests/testthat/test-plotly.R
Original file line number Diff line number Diff line change
Expand Up @@ -317,3 +317,34 @@ test_that("toWebGL() shouldn't complain if it's already webgl", {
toWebGL()
expect_silent(plotly_build(p))
})

test_that("Line breaks are properly translated (R -> HTML)", {
# create target labels
suffix <- "\n\n(third line)\n(fourth line)"

target_labels <- iris$Species %>%
unique() %>%
paste0(suffix) %>%
gsub(pattern = "\n",
replacement = br(),
x = .,
fixed = TRUE)

# test factor column
d <- iris
levels(d$Species) <- paste0(levels(d$Species), suffix)
p1 <- d %>% plot_ly(x = ~Sepal.Length,
y = ~Species)

expect_equivalent(plotly_build(p1)[["x"]][["layout"]][["yaxis"]][["categoryarray"]],
target_labels)

# test character column
p2 <- d %>%
dplyr::mutate(Species = as.character(Species)) %>%
plot_ly(x = ~Sepal.Length,
y = ~Species)

expect_equivalent(plotly_build(p2)[["x"]][["layout"]][["yaxis"]][["categoryarray"]],
target_labels)
})

0 comments on commit 9a856ae

Please sign in to comment.