Skip to content

Commit 1092c4f

Browse files
committed
Merged PR rstudio/leaflet/#258 to add support for popupOptions on layers/markers. Closes #258
1 parent f701a1e commit 1092c4f

File tree

6 files changed

+61
-37
lines changed

6 files changed

+61
-37
lines changed

R/layers.R

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ WMSTileOptions = function(
358358
#' the latitude column from \code{data})
359359
#' @param popup a character vector of the HTML content for the popups (you are
360360
#' recommended to escape the text using \code{\link[htmltools]{htmlEscape}()}
361+
#' @param popupOptions A Vector of \code{\link{popupOptions}} to provide popups
361362
#' for security reasons)
362363
#' @param layerId the layer id
363364
#' @param group the name of the group the newly created layers should belong to
@@ -380,6 +381,7 @@ addPopups = function(
380381
expandLimits(pts$lat, pts$lng)
381382
}
382383

384+
#' options for specify popup realted options
383385
#' @param className a CSS class name set on an element
384386
#' @param
385387
#' maxWidth,minWidth,maxHeight,autoPan,keepInView,closeButton,zoomAnimation,closeOnClick

inst/htmlwidgets/leaflet.js

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,14 @@ function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) {
11101110
this.layerManager.addLayer(marker, "marker", thisId, thisGroup);
11111111
}
11121112
var popup = df.get(i, "popup");
1113-
if (popup !== null) marker.bindPopup(popup);
1113+
var popupOptions = df.get(i, "popupOptions");
1114+
if (popup !== null) {
1115+
if (popupOptions !== null) {
1116+
marker.bindPopup(popup, popupOptions);
1117+
} else {
1118+
marker.bindPopup(popup);
1119+
}
1120+
}
11141121
var label = df.get(i, "label");
11151122
var labelOptions = df.get(i, "labelOptions");
11161123
if (label !== null) {
@@ -1140,7 +1147,7 @@ function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) {
11401147
}).call(map);
11411148
}
11421149

1143-
methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, clusterOptions, clusterId, label, labelOptions) {
1150+
methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions) {
11441151
var icondf = void 0;
11451152
var getIcon = void 0;
11461153

@@ -1185,7 +1192,7 @@ methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, c
11851192
};
11861193
}
11871194

1188-
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1195+
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
11891196

11901197
if (icon) icondf.effectiveLength = df.nrow();
11911198

@@ -1196,7 +1203,7 @@ methods.addMarkers = function (lat, lng, icon, layerId, group, options, popup, c
11961203
});
11971204
};
11981205

1199-
methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, clusterOptions, clusterId, label, labelOptions) {
1206+
methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, popup, popupOptions, clusterOptions, clusterId, label, labelOptions) {
12001207
var icondf = void 0;
12011208
var getIcon = void 0;
12021209
if (icon) {
@@ -1216,7 +1223,7 @@ methods.addAwesomeMarkers = function (lat, lng, icon, layerId, group, options, p
12161223
};
12171224
}
12181225

1219-
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1226+
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
12201227

12211228
if (icon) icondf.effectiveLength = df.nrow();
12221229

@@ -1236,7 +1243,14 @@ function addLayers(map, category, df, layerFunc) {
12361243
this.layerManager.addLayer(layer, category, thisId, thisGroup);
12371244
if (layer.bindPopup) {
12381245
var popup = df.get(i, "popup");
1239-
if (popup !== null) layer.bindPopup(popup);
1246+
var popupOptions = df.get(i, "popupOptions");
1247+
if (popup !== null) {
1248+
if (popupOptions !== null) {
1249+
layer.bindPopup(popup, popupOptions);
1250+
} else {
1251+
layer.bindPopup(popup);
1252+
}
1253+
}
12401254
}
12411255
if (layer.bindLabel) {
12421256
var label = df.get(i, "label");
@@ -1260,16 +1274,16 @@ function addLayers(map, category, df, layerFunc) {
12601274
}
12611275
}
12621276

1263-
methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, label, labelOptions) {
1264-
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1277+
methods.addCircles = function (lat, lng, radius, layerId, group, options, popup, popupOptions, label, labelOptions) {
1278+
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
12651279

12661280
addLayers(this, "shape", df, function (df, i) {
12671281
return _leaflet2.default.circle([df.get(i, "lat"), df.get(i, "lng")], df.get(i, "radius"), df.get(i));
12681282
});
12691283
};
12701284

1271-
methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, label, labelOptions) {
1272-
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1285+
methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options, clusterOptions, clusterId, popup, popupOptions, label, labelOptions) {
1286+
var df = new _dataframe2.default().col("lat", lat).col("lng", lng).col("radius", radius).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
12731287

12741288
addMarkers(this, df, group, clusterOptions, clusterId, function (df, i) {
12751289
return _leaflet2.default.circleMarker([df.get(i, "lat"), df.get(i, "lng")], df.get(i));
@@ -1280,8 +1294,8 @@ methods.addCircleMarkers = function (lat, lng, radius, layerId, group, options,
12801294
* @param lat Array of arrays of latitude coordinates for polylines
12811295
* @param lng Array of arrays of longitude coordinates for polylines
12821296
*/
1283-
methods.addPolylines = function (polygons, layerId, group, options, popup, label, labelOptions) {
1284-
var df = new _dataframe2.default().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1297+
methods.addPolylines = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions) {
1298+
var df = new _dataframe2.default().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
12851299

12861300
addLayers(this, "shape", df, function (df, i) {
12871301
var shape = df.get(i, "shapes")[0];
@@ -1320,8 +1334,8 @@ methods.clearShapes = function () {
13201334
this.layerManager.clearLayers("shape");
13211335
};
13221336

1323-
methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, label, labelOptions) {
1324-
var df = new _dataframe2.default().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1337+
methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, options, popup, popupOptions, label, labelOptions) {
1338+
var df = new _dataframe2.default().col("lat1", lat1).col("lng1", lng1).col("lat2", lat2).col("lng2", lng2).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
13251339

13261340
addLayers(this, "shape", df, function (df, i) {
13271341
return _leaflet2.default.rectangle([[df.get(i, "lat1"), df.get(i, "lng1")], [df.get(i, "lat2"), df.get(i, "lng2")]], df.get(i));
@@ -1332,8 +1346,8 @@ methods.addRectangles = function (lat1, lng1, lat2, lng2, layerId, group, option
13321346
* @param lat Array of arrays of latitude coordinates for polygons
13331347
* @param lng Array of arrays of longitude coordinates for polygons
13341348
*/
1335-
methods.addPolygons = function (polygons, layerId, group, options, popup, label, labelOptions) {
1336-
var df = new _dataframe2.default().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("label", label).col("labelOptions", labelOptions).cbind(options);
1349+
methods.addPolygons = function (polygons, layerId, group, options, popup, popupOptions, label, labelOptions) {
1350+
var df = new _dataframe2.default().col("shapes", polygons).col("layerId", layerId).col("group", group).col("popup", popup).col("popupOptions", popupOptions).col("label", label).col("labelOptions", labelOptions).cbind(options);
13371351

13381352
addLayers(this, "shape", df, function (df, i) {
13391353
var shapes = df.get(i, "shapes");

javascript/src/methods.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ function addMarkers(map, df, group, clusterOptions, clusterId, markerFunc) {
149149
this.layerManager.addLayer(marker, "marker", thisId, thisGroup);
150150
}
151151
let popup = df.get(i, "popup");
152-
let popupOptions = df.get(i, 'popupOptions');
152+
let popupOptions = df.get(i, "popupOptions");
153153
if (popup !== null) {
154154
if (popupOptions !== null){
155155
marker.bindPopup(popup, popupOptions);
@@ -298,7 +298,7 @@ function addLayers(map, category, df, layerFunc) {
298298
this.layerManager.addLayer(layer, category, thisId, thisGroup);
299299
if (layer.bindPopup) {
300300
let popup = df.get(i, "popup");
301-
let popupOptions = df.get(i, 'popupOptions');
301+
let popupOptions = df.get(i, "popupOptions");
302302
if (popup !== null) {
303303
if (popupOptions !== null){
304304
layer.bindPopup(popup, popupOptions);

man/map-layers.Rd

Lines changed: 22 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/map-options.Rd

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testit/test-remote.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ assert(
151151
)
152152
mockSession$.flush()
153153
expected <- list(
154-
list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addPolygons\",\"args\":[[[{\"lng\":[1,2,3,4,5],\"lat\":[1,2,3,4,5]}]],null,null,{\"lineCap\":null,\"lineJoin\":null,\"clickable\":true,\"pointerEvents\":null,\"className\":\"\",\"stroke\":true,\"color\":\"#03F\",\"weight\":5,\"opacity\":0.5,\"fill\":true,\"fillColor\":\"#03F\",\"fillOpacity\":0.2,\"dashArray\":null,\"smoothFactor\":1,\"noClip\":false},null,null,null]}]}", class = "json"))
154+
list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addPolygons\",\"args\":[[[{\"lng\":[1,2,3,4,5],\"lat\":[1,2,3,4,5]}]],null,null,{\"lineCap\":null,\"lineJoin\":null,\"clickable\":true,\"pointerEvents\":null,\"className\":\"\",\"stroke\":true,\"color\":\"#03F\",\"weight\":5,\"opacity\":0.5,\"fill\":true,\"fillColor\":\"#03F\",\"fillOpacity\":0.2,\"dashArray\":null,\"smoothFactor\":1,\"noClip\":false},null,null,null,null]}]}", class = "json"))
155155
)
156156
# cat(deparse(mockSession$.calls), "\n")
157157
assert(identical(mockSession$.calls, expected))
@@ -167,7 +167,7 @@ remote2 <- leafletProxy("map", mockSession,
167167
)
168168
# Check that addMarkers() takes effect immediately, no flush required
169169
remote2 %>% addMarkers()
170-
expected2 <- list(structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addMarkers\",\"args\":[[10,9,8,7,6,5,4,3,2,1],[10,9,8,7,6,5,4,3,2,1],null,null,null,{\"clickable\":true,\"draggable\":false,\"keyboard\":true,\"title\":\"\",\"alt\":\"\",\"zIndexOffset\":0,\"opacity\":1,\"riseOnHover\":false,\"riseOffset\":250},null,null,null,null,null]}]}", class = "json")), .Names = c("type", "message")))
170+
expected2 <- list(structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addMarkers\",\"args\":[[10,9,8,7,6,5,4,3,2,1],[10,9,8,7,6,5,4,3,2,1],null,null,null,{\"clickable\":true,\"draggable\":false,\"keyboard\":true,\"title\":\"\",\"alt\":\"\",\"zIndexOffset\":0,\"opacity\":1,\"riseOnHover\":false,\"riseOffset\":250},null,null,null,null,null,null]}]}", class = "json")), .Names = c("type", "message")))
171171
# cat(deparse(mockSession$.calls), "\n")
172172
assert(identical(mockSession$.calls, expected2))
173173
# Flushing should do nothing
@@ -184,6 +184,6 @@ remote3 <- leafletProxy("map", mockSession,
184184
remote3 %>% clearShapes() %>% addMarkers()
185185
assert(identical(mockSession$.calls, list()))
186186
mockSession$.flush()
187-
expected3 <- list(structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"clearShapes\",\"args\":[]}]}", class = "json")), .Names = c("type", "message")), structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addMarkers\",\"args\":[[10,9,8,7,6,5,4,3,2,1],[10,9,8,7,6,5,4,3,2,1],null,null,null,{\"clickable\":true,\"draggable\":false,\"keyboard\":true,\"title\":\"\",\"alt\":\"\",\"zIndexOffset\":0,\"opacity\":1,\"riseOnHover\":false,\"riseOffset\":250},null,null,null,null,null]}]}", class = "json")), .Names = c("type", "message")))
187+
expected3 <- list(structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"clearShapes\",\"args\":[]}]}", class = "json")), .Names = c("type", "message")), structure(list(type = "leaflet-calls", message = structure("{\"id\":\"map\",\"calls\":[{\"dependencies\":[],\"method\":\"addMarkers\",\"args\":[[10,9,8,7,6,5,4,3,2,1],[10,9,8,7,6,5,4,3,2,1],null,null,null,{\"clickable\":true,\"draggable\":false,\"keyboard\":true,\"title\":\"\",\"alt\":\"\",\"zIndexOffset\":0,\"opacity\":1,\"riseOnHover\":false,\"riseOffset\":250},null,null,null,null,null,null]}]}", class = "json")), .Names = c("type", "message")))
188188
# Check that multiple calls are invoked in order
189189
assert(identical(mockSession$.calls, expected3))

0 commit comments

Comments
 (0)