jenkins-bot has submitted this change and it was merged.
Change subject: Re-use existing layer when changing GeoJSON
......................................................................
Re-use existing layer when changing GeoJSON
Change-Id: If236cf6b5dafd949d07eb5d57856c18710176873
---
M modules/kartographer.js
1 file changed, 34 insertions(+), 15 deletions(-)
Approvals:
Yurik: Looks good to me, approved
jenkins-bot: Verified
diff --git a/modules/kartographer.js b/modules/kartographer.js
index d24c7a0..c238b05 100644
--- a/modules/kartographer.js
+++ b/modules/kartographer.js
@@ -46,7 +46,7 @@
* @param {string} [data.style] Map style
* @param {Object} [data.geoJson] Raw GeoJSON
* @param {Object} [data.overlays] Overlays
- * @return {L.Map} Map object
+ * @return {L.mapbox.Map} Map object
*/
mw.kartographer.createMap = function ( container, data ) {
var geoJson, map,
@@ -95,42 +95,61 @@
};
/**
+ * Get GeoJSON layer for the specified map.
+ *
+ * If a layer doesn't exist, create and attach one.
+ *
+ * @param {L.mapbox.Map} map Map to get layers from
+ * @return {L.mapbox.FeatureLayer|null} GeoJSON layer, if present
+ */
+ mw.kartographer.getGeoJsonLayer = function ( map ) {
+ var geoJsonLayer = null;
+ map.eachLayer( function ( layer ) {
+ if ( !geoJsonLayer && layer instanceof
L.mapbox.FeatureLayer && layer.getGeoJSON() ) {
+ geoJsonLayer = layer;
+ }
+ } );
+ return geoJsonLayer;
+ };
+
+ /**
* Set the GeoJSON for a map, removing any existing GeoJSON layer.
*
- * @param {L.Map} map Map to set the GeoJSON for
+ * @param {L.mapbox.Map} map Map to set the GeoJSON for
* @param {Object|null} geoJson GeoJSON data, or null to clear
* @return {boolean} The GeoJSON provided was valid as was applied
*/
mw.kartographer.setGeoJson = function ( map, geoJson ) {
- var newLayer;
+ var geoJsonLayer = mw.kartographer.getGeoJsonLayer( map ),
+ isNew = !geoJsonLayer;
+
+ if ( isNew ) {
+ geoJsonLayer = L.mapbox.featureLayer();
+ }
if ( geoJson ) {
try {
- newLayer = L.mapbox.featureLayer().setGeoJSON(
geoJson );
+ geoJsonLayer.setGeoJSON( geoJson );
} catch ( e ) {
// Invalid GeoJSON
return false;
}
+ } else {
+ map.removeLayer( geoJsonLayer );
}
- // Remove any existing GeoJSON layers
- map.eachLayer( function ( layer ) {
- if ( layer instanceof L.mapbox.FeatureLayer &&
layer.getGeoJSON() ) {
- map.removeLayer( layer );
- }
- } );
-
- // Add new layer if geoJson was non-null
- if ( newLayer ) {
- map.addLayer( newLayer );
+ // Only attach new layer once GeoJSON has been set
+ if ( isNew ) {
+ map.addLayer( geoJsonLayer );
}
+
return true;
};
/**
* Set the GeoJSON for a map as string
*
- * @param {L.Map} map Map to set the GeoJSON for
+ * @param {L.mapbox.Map} map Map to set the GeoJSON for
* @param {string} geoJsonString GeoJSON data, empty string to clear
* @return {boolean} The GeoJSON string provided was valid as was
applied
*/
--
To view, visit https://gerrit.wikimedia.org/r/270942
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: If236cf6b5dafd949d07eb5d57856c18710176873
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Kartographer
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: Yurik <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits