From f6e5290dba8bb5634ab4abd3df619df93503923f Mon Sep 17 00:00:00 2001 From: Carson Sievert Date: Thu, 8 Feb 2018 18:09:41 -0600 Subject: [PATCH 1/2] respond to plotly's persistent selection mode --- inst/examples/DT-crosstalk/plotly-persist.R | 15 +++++++++++++++ inst/htmlwidgets/datatables.js | 7 ++++++- 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 inst/examples/DT-crosstalk/plotly-persist.R diff --git a/inst/examples/DT-crosstalk/plotly-persist.R b/inst/examples/DT-crosstalk/plotly-persist.R new file mode 100644 index 00000000..a74e23e1 --- /dev/null +++ b/inst/examples/DT-crosstalk/plotly-persist.R @@ -0,0 +1,15 @@ +library(plotly) +library(crosstalk) +library(DT) + +m <- SharedData$new(mtcars) +bscols( + plot_ly(m, x = ~wt, y = ~mpg) %>% + add_markers() %>% + config(displayModeBar = FALSE) %>% + layout( + title = "Hold shift while clicking \n markers for persistent selection", + margin = list(t = 60) + ), + datatable(m) +) diff --git a/inst/htmlwidgets/datatables.js b/inst/htmlwidgets/datatables.js index 1d451db6..55936088 100644 --- a/inst/htmlwidgets/datatables.js +++ b/inst/htmlwidgets/datatables.js @@ -320,7 +320,12 @@ HTMLWidgets.widget({ } if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - $table[0].ctselect = keysToMatches(e.value); + var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; + if (ctOpts.persistent === true) { + $table[0].ctselect = [].concat($table[0].ctselect, keysToMatches(e.value)); + } else { + $table[0].ctselect = keysToMatches(e.value); + } table.draw(); } else { if ($table[0].ctselect) { From 5361003a8f9e3e00969f452a1df393b3583538d7 Mon Sep 17 00:00:00 2001 From: Yihui Xie Date: Thu, 8 Feb 2018 23:54:28 -0600 Subject: [PATCH 2/2] one more space --- inst/htmlwidgets/datatables.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/htmlwidgets/datatables.js b/inst/htmlwidgets/datatables.js index 55936088..b8bdedb5 100644 --- a/inst/htmlwidgets/datatables.js +++ b/inst/htmlwidgets/datatables.js @@ -322,7 +322,7 @@ HTMLWidgets.widget({ if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; if (ctOpts.persistent === true) { - $table[0].ctselect = [].concat($table[0].ctselect, keysToMatches(e.value)); + $table[0].ctselect = [].concat($table[0].ctselect, keysToMatches(e.value)); } else { $table[0].ctselect = keysToMatches(e.value); }