Skip to content

Commit

Permalink
docs: move comments to prose
Browse files Browse the repository at this point in the history
  • Loading branch information
jack-davison committed Sep 10, 2024
1 parent d8147be commit 6472d76
Showing 1 changed file with 19 additions and 13 deletions.
32 changes: 19 additions & 13 deletions vignettes/articles/extending.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -43,38 +43,44 @@ Often when passing a list from R to JavaScript it is desirable to remove any nul

# Example

Here is a small example which shows how you can integrate heatmap functionality using a [plugin](https://leaflet.github.io/Leaflet.heat/).
Here is a small example which shows how you can integrate heatmap functionality using a [plugin](https://leaflet.github.io/Leaflet.heat/).

There are four key steps to add this plugin to a Leaflet map in R:

1. Define a function that takes a `htmltools::htmlDependency()` object and adds it to the map. This ensures that however or whenever the map gets rendered, the plugin will be loaded into the browser.

2. Actually create the `htmltools::htmlDependency()`. This function tells the browser our plugin name, version, and where to find the script. There's also a stylesheet argument if the plugin comes with CSS files.

3. Use our `registerPlugin()` function to register the plugin dependency with the `leaflet()` object. As the first argument of our function is `map`, this can be achieved as part of a pipeline.

4. We need to tell `Leaflet` what to actually *do* with our new plugin using `htmlwidgets::onRender()`. This adds additional rendering logic to this specific widget, written in JavaScript. Note that, in the below example, `this` refers to the `Leaflet` (JS) map object itself.

```{r, fig.height=4}
library(leaflet)
library(htmltools)
library(htmlwidgets)
# This tells htmlwidgets about our plugin name, version, and
# where to find the script. (There's also a stylesheet argument
# if the plugin comes with CSS files.)
# function to register plugin
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
# define plugin as a HTML dependency
heatPlugin <- htmlDependency(
"Leaflet.heat",
"0.2.0",
src = c(href = "http://leaflet.github.io/Leaflet.heat/dist/"),
script = "leaflet-heat.js"
)
# A function that takes a plugin htmlDependency object and adds
# it to the map. This ensures that however or whenever the map
# gets rendered, the plugin will be loaded into the browser.
registerPlugin <- function(map, plugin) {
map$dependencies <- c(map$dependencies, list(plugin))
map
}
# initialise leaflet map in R
leaflet() %>%
addTiles() %>%
fitBounds(min(quakes$long), min(quakes$lat), max(quakes$long), max(quakes$lat)) %>%
# Register heatmap plugin on this map instance
registerPlugin(heatPlugin) %>%
# Add custom JS logic; `this` refers to the Leaflet (JS) map object.
# Add custom JS logic
onRender("function(el, x, data) {
data = HTMLWidgets.dataframeToD3(data);
data = data.map(function(val) { return [val.lat, val.long, val.mag*100]; });
Expand Down

0 comments on commit 6472d76

Please sign in to comment.