From 2b5700ac26ff1e9450c85ea164baf2b0f5a5d57e Mon Sep 17 00:00:00 2001 From: Bryan Irvine Date: Wed, 3 Aug 2016 14:33:03 -0700 Subject: [PATCH 1/3] Update worldmap.js --- src/worldmap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/worldmap.js b/src/worldmap.js index ac99601..d921a7b 100644 --- a/src/worldmap.js +++ b/src/worldmap.js @@ -17,7 +17,7 @@ export default class WorldMap { } createMap() { - const mapCenter = window.L.latLng(parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10)); + const mapCenter = window.L.latLng(parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)); this.map = window.L.map(this.mapContainer, {worldCopyJump: true, center: mapCenter}) .fitWorld() .zoomIn(parseInt(this.ctrl.panel.initialZoom, 10)); @@ -167,7 +167,7 @@ export default class WorldMap { } panToMapCenter() { - this.map.panTo([parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10)]); + this.map.panTo([parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)]); this.ctrl.mapCenterMoved = false; } From 83e8a54f346983a316eb2506d966c3284efa6757 Mon Sep 17 00:00:00 2001 From: Bryan Irvine Date: Wed, 3 Aug 2016 14:40:22 -0700 Subject: [PATCH 2/3] Update worldmap.js.map --- dist/worldmap.js.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dist/worldmap.js.map b/dist/worldmap.js.map index 328748d..60df0ab 100644 --- a/dist/worldmap.js.map +++ b/dist/worldmap.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/worldmap.js"],"names":[],"mappings":"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","file":"worldmap.js","sourcesContent":["import _ from 'lodash';\n/* eslint-disable id-length, no-unused-vars */\nimport L from './leaflet';\n/* eslint-disable id-length, no-unused-vars */\n\nconst tileServers = {\n 'CartoDB Positron': { url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'},\n 'CartoDB Dark': {url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'}\n};\n\nexport default class WorldMap {\n constructor(ctrl, mapContainer) {\n this.ctrl = ctrl;\n this.mapContainer = mapContainer;\n this.createMap();\n this.circles = [];\n }\n\n createMap() {\n const mapCenter = window.L.latLng(parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10));\n this.map = window.L.map(this.mapContainer, {worldCopyJump: true, center: mapCenter})\n .fitWorld()\n .zoomIn(parseInt(this.ctrl.panel.initialZoom, 10));\n this.map.panTo(mapCenter);\n\n const selectedTileServer = tileServers[this.ctrl.tileServer];\n window.L.tileLayer(selectedTileServer.url, {\n maxZoom: 18,\n subdomains: selectedTileServer.subdomains,\n reuseTiles: true,\n detectRetina: true,\n attribution: selectedTileServer.attribution\n }).addTo(this.map);\n }\n\n createLegend() {\n this.legend = window.L.control({position: 'bottomleft'});\n this.legend.onAdd = () => {\n this.legend._div = window.L.DomUtil.create('div', 'info legend');\n this.legend.update();\n return this.legend._div;\n };\n\n this.legend.update = () => {\n const thresholds = this.ctrl.data.thresholds;\n let legendHtml = '';\n legendHtml += ' ' +\n '< ' + thresholds[0] + '
';\n for (let index = 0; index < thresholds.length; index++) {\n legendHtml +=\n ' ' +\n thresholds[index] + (thresholds[index + 1] ? '–' + thresholds[index + 1] + '
' : '+');\n }\n this.legend._div.innerHTML = legendHtml;\n };\n this.legend.addTo(this.map);\n }\n\n needToRedrawCircles() {\n if (this.circles.length === 0 && this.ctrl.data.length > 0) return true;\n if (this.circles.length !== this.ctrl.data.length) return true;\n const locations = _.map(_.map(this.circles, 'options'), 'location').sort();\n const dataPoints = _.map(this.ctrl.data, 'key').sort();\n return !_.isEqual(locations, dataPoints);\n }\n\n clearCircles() {\n if (this.circlesLayer) {\n this.circlesLayer.clearLayers();\n this.removeCircles(this.circlesLayer);\n this.circles = [];\n }\n }\n\n drawCircles() {\n if (this.needToRedrawCircles()) {\n this.clearCircles();\n this.createCircles();\n } else {\n this.updateCircles();\n }\n }\n\n createCircles() {\n const circles = [];\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n circles.push(this.createCircle(dataPoint));\n });\n this.circlesLayer = this.addCircles(circles);\n this.circles = circles;\n }\n\n updateCircles() {\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n\n const circle = _.find(this.circles, cir => { return cir.options.location === dataPoint.key; });\n\n if (circle) {\n circle.setRadius(this.calcCircleSize(dataPoint.value || 0));\n circle.setStyle({\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n circle.unbindPopup();\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n }\n });\n }\n\n createCircle(dataPoint) {\n const circle = window.L.circleMarker([dataPoint.locationLatitude, dataPoint.locationLongitude], {\n radius: this.calcCircleSize(dataPoint.value || 0),\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n return circle;\n }\n\n calcCircleSize(dataPointValue) {\n const circleMinSize = parseInt(this.ctrl.panel.circleMinSize, 10);\n const circleMaxSize = parseInt(this.ctrl.panel.circleMaxSize, 10);\n\n if (this.ctrl.data.valueRange === 0) {\n return circleMaxSize;\n }\n\n const dataFactor = (dataPointValue - this.ctrl.data.lowestValue) / this.ctrl.data.valueRange;\n const circleSizeRange = this.ctrl.panel.circleMaxSize - circleMinSize;\n\n return (circleSizeRange * dataFactor) + circleMinSize;\n }\n\n createPopup(circle, locationName, value) {\n const unit = value && value === 1 ? this.ctrl.panel.unitSingular : this.ctrl.panel.unitPlural;\n const label = (locationName + ': ' + value + ' ' + (unit || '')).trim();\n circle.bindPopup(label, {'offset': window.L.point(0, -2), 'className': 'worldmap-popup', 'closeButton': false});\n\n circle.on('mouseover', function onMouseOver(evt) {\n const layer = evt.target;\n layer.bringToFront();\n this.openPopup();\n });\n circle.on('mouseout', function onMouseOut() {\n circle.closePopup();\n });\n }\n\n getColor(value) {\n for (let index = this.ctrl.data.thresholds.length; index > 0; index--) {\n if (value >= this.ctrl.data.thresholds[index - 1]) {\n return this.ctrl.panel.colors[index];\n }\n }\n return _.first(this.ctrl.panel.colors);\n }\n\n resize() {\n this.map.invalidateSize();\n }\n\n panToMapCenter() {\n this.map.panTo([parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10)]);\n this.ctrl.mapCenterMoved = false;\n }\n\n removeLegend() {\n this.legend.removeFrom(this.map);\n this.legend = null;\n }\n\n addCircles(circles) {\n return window.L.layerGroup(circles).addTo(this.map);\n }\n\n removeCircles() {\n this.map.removeLayer(this.circlesLayer);\n }\n\n setZoom(zoomFactor) {\n this.map.setZoom(zoomFactor);\n }\n\n remove() {\n this.circles = [];\n if (this.circlesLayer) this.removeCircles();\n if (this.legend) this.removeLegend();\n this.map.remove();\n }\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../src/worldmap.js"],"names":[],"mappings":"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","file":"worldmap.js","sourcesContent":["import _ from 'lodash';\n/* eslint-disable id-length, no-unused-vars */\nimport L from './leaflet';\n/* eslint-disable id-length, no-unused-vars */\n\nconst tileServers = {\n 'CartoDB Positron': { url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'},\n 'CartoDB Dark': {url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'}\n};\n\nexport default class WorldMap {\n constructor(ctrl, mapContainer) {\n this.ctrl = ctrl;\n this.mapContainer = mapContainer;\n this.createMap();\n this.circles = [];\n }\n\n createMap() {\n const mapCenter = window.L.latLng(parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10));\n this.map = window.L.map(this.mapContainer, {worldCopyJump: true, center: mapCenter})\n .fitWorld()\n .zoomIn(parseInt(this.ctrl.panel.initialZoom, 10));\n this.map.panTo(mapCenter);\n\n const selectedTileServer = tileServers[this.ctrl.tileServer];\n window.L.tileLayer(selectedTileServer.url, {\n maxZoom: 18,\n subdomains: selectedTileServer.subdomains,\n reuseTiles: true,\n detectRetina: true,\n attribution: selectedTileServer.attribution\n }).addTo(this.map);\n }\n\n createLegend() {\n this.legend = window.L.control({position: 'bottomleft'});\n this.legend.onAdd = () => {\n this.legend._div = window.L.DomUtil.create('div', 'info legend');\n this.legend.update();\n return this.legend._div;\n };\n\n this.legend.update = () => {\n const thresholds = this.ctrl.data.thresholds;\n let legendHtml = '';\n legendHtml += ' ' +\n '< ' + thresholds[0] + '
';\n for (let index = 0; index < thresholds.length; index++) {\n legendHtml +=\n ' ' +\n thresholds[index] + (thresholds[index + 1] ? '–' + thresholds[index + 1] + '
' : '+');\n }\n this.legend._div.innerHTML = legendHtml;\n };\n this.legend.addTo(this.map);\n }\n\n needToRedrawCircles() {\n if (this.circles.length === 0 && this.ctrl.data.length > 0) return true;\n if (this.circles.length !== this.ctrl.data.length) return true;\n const locations = _.map(_.map(this.circles, 'options'), 'location').sort();\n const dataPoints = _.map(this.ctrl.data, 'key').sort();\n return !_.isEqual(locations, dataPoints);\n }\n\n clearCircles() {\n if (this.circlesLayer) {\n this.circlesLayer.clearLayers();\n this.removeCircles(this.circlesLayer);\n this.circles = [];\n }\n }\n\n drawCircles() {\n if (this.needToRedrawCircles()) {\n this.clearCircles();\n this.createCircles();\n } else {\n this.updateCircles();\n }\n }\n\n createCircles() {\n const circles = [];\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n circles.push(this.createCircle(dataPoint));\n });\n this.circlesLayer = this.addCircles(circles);\n this.circles = circles;\n }\n\n updateCircles() {\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n\n const circle = _.find(this.circles, cir => { return cir.options.location === dataPoint.key; });\n\n if (circle) {\n circle.setRadius(this.calcCircleSize(dataPoint.value || 0));\n circle.setStyle({\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n circle.unbindPopup();\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n }\n });\n }\n\n createCircle(dataPoint) {\n const circle = window.L.circleMarker([dataPoint.locationLatitude, dataPoint.locationLongitude], {\n radius: this.calcCircleSize(dataPoint.value || 0),\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n return circle;\n }\n\n calcCircleSize(dataPointValue) {\n const circleMinSize = parseInt(this.ctrl.panel.circleMinSize, 10);\n const circleMaxSize = parseInt(this.ctrl.panel.circleMaxSize, 10);\n\n if (this.ctrl.data.valueRange === 0) {\n return circleMaxSize;\n }\n\n const dataFactor = (dataPointValue - this.ctrl.data.lowestValue) / this.ctrl.data.valueRange;\n const circleSizeRange = this.ctrl.panel.circleMaxSize - circleMinSize;\n\n return (circleSizeRange * dataFactor) + circleMinSize;\n }\n\n createPopup(circle, locationName, value) {\n const unit = value && value === 1 ? this.ctrl.panel.unitSingular : this.ctrl.panel.unitPlural;\n const label = (locationName + ': ' + value + ' ' + (unit || '')).trim();\n circle.bindPopup(label, {'offset': window.L.point(0, -2), 'className': 'worldmap-popup', 'closeButton': false});\n\n circle.on('mouseover', function onMouseOver(evt) {\n const layer = evt.target;\n layer.bringToFront();\n this.openPopup();\n });\n circle.on('mouseout', function onMouseOut() {\n circle.closePopup();\n });\n }\n\n getColor(value) {\n for (let index = this.ctrl.data.thresholds.length; index > 0; index--) {\n if (value >= this.ctrl.data.thresholds[index - 1]) {\n return this.ctrl.panel.colors[index];\n }\n }\n return _.first(this.ctrl.panel.colors);\n }\n\n resize() {\n this.map.invalidateSize();\n }\n\n panToMapCenter() {\n this.map.panTo([parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)]);\n this.ctrl.mapCenterMoved = false;\n }\n\n removeLegend() {\n this.legend.removeFrom(this.map);\n this.legend = null;\n }\n\n addCircles(circles) {\n return window.L.layerGroup(circles).addTo(this.map);\n }\n\n removeCircles() {\n this.map.removeLayer(this.circlesLayer);\n }\n\n setZoom(zoomFactor) {\n this.map.setZoom(zoomFactor);\n }\n\n remove() {\n this.circles = [];\n if (this.circlesLayer) this.removeCircles();\n if (this.legend) this.removeLegend();\n this.map.remove();\n }\n}\n"]} From 2062ba4691e2dbe8ae2181a2fc56ebfd4436dd95 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Thu, 25 Aug 2016 11:26:25 +0200 Subject: [PATCH 3/3] adds missing dist files --- dist/worldmap.js | 4 ++-- dist/worldmap.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dist/worldmap.js b/dist/worldmap.js index 5e3c9f1..1e05300 100644 --- a/dist/worldmap.js +++ b/dist/worldmap.js @@ -52,7 +52,7 @@ System.register(['lodash', './leaflet'], function (_export, _context) { _createClass(WorldMap, [{ key: 'createMap', value: function createMap() { - var mapCenter = window.L.latLng(parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10)); + var mapCenter = window.L.latLng(parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)); this.map = window.L.map(this.mapContainer, { worldCopyJump: true, center: mapCenter }).fitWorld().zoomIn(parseInt(this.ctrl.panel.initialZoom, 10)); this.map.panTo(mapCenter); @@ -217,7 +217,7 @@ System.register(['lodash', './leaflet'], function (_export, _context) { }, { key: 'panToMapCenter', value: function panToMapCenter() { - this.map.panTo([parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10)]); + this.map.panTo([parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)]); this.ctrl.mapCenterMoved = false; } }, { diff --git a/dist/worldmap.js.map b/dist/worldmap.js.map index 60df0ab..21d4e00 100644 --- a/dist/worldmap.js.map +++ b/dist/worldmap.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/worldmap.js"],"names":[],"mappings":"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","file":"worldmap.js","sourcesContent":["import _ from 'lodash';\n/* eslint-disable id-length, no-unused-vars */\nimport L from './leaflet';\n/* eslint-disable id-length, no-unused-vars */\n\nconst tileServers = {\n 'CartoDB Positron': { url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'},\n 'CartoDB Dark': {url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'}\n};\n\nexport default class WorldMap {\n constructor(ctrl, mapContainer) {\n this.ctrl = ctrl;\n this.mapContainer = mapContainer;\n this.createMap();\n this.circles = [];\n }\n\n createMap() {\n const mapCenter = window.L.latLng(parseInt(this.ctrl.panel.mapCenterLatitude, 10), parseInt(this.ctrl.panel.mapCenterLongitude, 10));\n this.map = window.L.map(this.mapContainer, {worldCopyJump: true, center: mapCenter})\n .fitWorld()\n .zoomIn(parseInt(this.ctrl.panel.initialZoom, 10));\n this.map.panTo(mapCenter);\n\n const selectedTileServer = tileServers[this.ctrl.tileServer];\n window.L.tileLayer(selectedTileServer.url, {\n maxZoom: 18,\n subdomains: selectedTileServer.subdomains,\n reuseTiles: true,\n detectRetina: true,\n attribution: selectedTileServer.attribution\n }).addTo(this.map);\n }\n\n createLegend() {\n this.legend = window.L.control({position: 'bottomleft'});\n this.legend.onAdd = () => {\n this.legend._div = window.L.DomUtil.create('div', 'info legend');\n this.legend.update();\n return this.legend._div;\n };\n\n this.legend.update = () => {\n const thresholds = this.ctrl.data.thresholds;\n let legendHtml = '';\n legendHtml += ' ' +\n '< ' + thresholds[0] + '
';\n for (let index = 0; index < thresholds.length; index++) {\n legendHtml +=\n ' ' +\n thresholds[index] + (thresholds[index + 1] ? '–' + thresholds[index + 1] + '
' : '+');\n }\n this.legend._div.innerHTML = legendHtml;\n };\n this.legend.addTo(this.map);\n }\n\n needToRedrawCircles() {\n if (this.circles.length === 0 && this.ctrl.data.length > 0) return true;\n if (this.circles.length !== this.ctrl.data.length) return true;\n const locations = _.map(_.map(this.circles, 'options'), 'location').sort();\n const dataPoints = _.map(this.ctrl.data, 'key').sort();\n return !_.isEqual(locations, dataPoints);\n }\n\n clearCircles() {\n if (this.circlesLayer) {\n this.circlesLayer.clearLayers();\n this.removeCircles(this.circlesLayer);\n this.circles = [];\n }\n }\n\n drawCircles() {\n if (this.needToRedrawCircles()) {\n this.clearCircles();\n this.createCircles();\n } else {\n this.updateCircles();\n }\n }\n\n createCircles() {\n const circles = [];\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n circles.push(this.createCircle(dataPoint));\n });\n this.circlesLayer = this.addCircles(circles);\n this.circles = circles;\n }\n\n updateCircles() {\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n\n const circle = _.find(this.circles, cir => { return cir.options.location === dataPoint.key; });\n\n if (circle) {\n circle.setRadius(this.calcCircleSize(dataPoint.value || 0));\n circle.setStyle({\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n circle.unbindPopup();\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n }\n });\n }\n\n createCircle(dataPoint) {\n const circle = window.L.circleMarker([dataPoint.locationLatitude, dataPoint.locationLongitude], {\n radius: this.calcCircleSize(dataPoint.value || 0),\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n return circle;\n }\n\n calcCircleSize(dataPointValue) {\n const circleMinSize = parseInt(this.ctrl.panel.circleMinSize, 10);\n const circleMaxSize = parseInt(this.ctrl.panel.circleMaxSize, 10);\n\n if (this.ctrl.data.valueRange === 0) {\n return circleMaxSize;\n }\n\n const dataFactor = (dataPointValue - this.ctrl.data.lowestValue) / this.ctrl.data.valueRange;\n const circleSizeRange = this.ctrl.panel.circleMaxSize - circleMinSize;\n\n return (circleSizeRange * dataFactor) + circleMinSize;\n }\n\n createPopup(circle, locationName, value) {\n const unit = value && value === 1 ? this.ctrl.panel.unitSingular : this.ctrl.panel.unitPlural;\n const label = (locationName + ': ' + value + ' ' + (unit || '')).trim();\n circle.bindPopup(label, {'offset': window.L.point(0, -2), 'className': 'worldmap-popup', 'closeButton': false});\n\n circle.on('mouseover', function onMouseOver(evt) {\n const layer = evt.target;\n layer.bringToFront();\n this.openPopup();\n });\n circle.on('mouseout', function onMouseOut() {\n circle.closePopup();\n });\n }\n\n getColor(value) {\n for (let index = this.ctrl.data.thresholds.length; index > 0; index--) {\n if (value >= this.ctrl.data.thresholds[index - 1]) {\n return this.ctrl.panel.colors[index];\n }\n }\n return _.first(this.ctrl.panel.colors);\n }\n\n resize() {\n this.map.invalidateSize();\n }\n\n panToMapCenter() {\n this.map.panTo([parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)]);\n this.ctrl.mapCenterMoved = false;\n }\n\n removeLegend() {\n this.legend.removeFrom(this.map);\n this.legend = null;\n }\n\n addCircles(circles) {\n return window.L.layerGroup(circles).addTo(this.map);\n }\n\n removeCircles() {\n this.map.removeLayer(this.circlesLayer);\n }\n\n setZoom(zoomFactor) {\n this.map.setZoom(zoomFactor);\n }\n\n remove() {\n this.circles = [];\n if (this.circlesLayer) this.removeCircles();\n if (this.legend) this.removeLegend();\n this.map.remove();\n }\n}\n"]} +{"version":3,"sources":["../src/worldmap.js"],"names":[],"mappings":"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","file":"worldmap.js","sourcesContent":["import _ from 'lodash';\n/* eslint-disable id-length, no-unused-vars */\nimport L from './leaflet';\n/* eslint-disable id-length, no-unused-vars */\n\nconst tileServers = {\n 'CartoDB Positron': { url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'},\n 'CartoDB Dark': {url: 'https://cartodb-basemaps-{s}.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png', attribution: '© OpenStreetMap © CartoDB', subdomains: 'abcd'}\n};\n\nexport default class WorldMap {\n constructor(ctrl, mapContainer) {\n this.ctrl = ctrl;\n this.mapContainer = mapContainer;\n this.createMap();\n this.circles = [];\n }\n\n createMap() {\n const mapCenter = window.L.latLng(parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude));\n this.map = window.L.map(this.mapContainer, {worldCopyJump: true, center: mapCenter})\n .fitWorld()\n .zoomIn(parseInt(this.ctrl.panel.initialZoom, 10));\n this.map.panTo(mapCenter);\n\n const selectedTileServer = tileServers[this.ctrl.tileServer];\n window.L.tileLayer(selectedTileServer.url, {\n maxZoom: 18,\n subdomains: selectedTileServer.subdomains,\n reuseTiles: true,\n detectRetina: true,\n attribution: selectedTileServer.attribution\n }).addTo(this.map);\n }\n\n createLegend() {\n this.legend = window.L.control({position: 'bottomleft'});\n this.legend.onAdd = () => {\n this.legend._div = window.L.DomUtil.create('div', 'info legend');\n this.legend.update();\n return this.legend._div;\n };\n\n this.legend.update = () => {\n const thresholds = this.ctrl.data.thresholds;\n let legendHtml = '';\n legendHtml += ' ' +\n '< ' + thresholds[0] + '
';\n for (let index = 0; index < thresholds.length; index++) {\n legendHtml +=\n ' ' +\n thresholds[index] + (thresholds[index + 1] ? '–' + thresholds[index + 1] + '
' : '+');\n }\n this.legend._div.innerHTML = legendHtml;\n };\n this.legend.addTo(this.map);\n }\n\n needToRedrawCircles() {\n if (this.circles.length === 0 && this.ctrl.data.length > 0) return true;\n if (this.circles.length !== this.ctrl.data.length) return true;\n const locations = _.map(_.map(this.circles, 'options'), 'location').sort();\n const dataPoints = _.map(this.ctrl.data, 'key').sort();\n return !_.isEqual(locations, dataPoints);\n }\n\n clearCircles() {\n if (this.circlesLayer) {\n this.circlesLayer.clearLayers();\n this.removeCircles(this.circlesLayer);\n this.circles = [];\n }\n }\n\n drawCircles() {\n if (this.needToRedrawCircles()) {\n this.clearCircles();\n this.createCircles();\n } else {\n this.updateCircles();\n }\n }\n\n createCircles() {\n const circles = [];\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n circles.push(this.createCircle(dataPoint));\n });\n this.circlesLayer = this.addCircles(circles);\n this.circles = circles;\n }\n\n updateCircles() {\n this.ctrl.data.forEach(dataPoint => {\n if (!dataPoint.locationName) return;\n\n const circle = _.find(this.circles, cir => { return cir.options.location === dataPoint.key; });\n\n if (circle) {\n circle.setRadius(this.calcCircleSize(dataPoint.value || 0));\n circle.setStyle({\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n circle.unbindPopup();\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n }\n });\n }\n\n createCircle(dataPoint) {\n const circle = window.L.circleMarker([dataPoint.locationLatitude, dataPoint.locationLongitude], {\n radius: this.calcCircleSize(dataPoint.value || 0),\n color: this.getColor(dataPoint.value),\n fillColor: this.getColor(dataPoint.value),\n fillOpacity: 0.5,\n location: dataPoint.key\n });\n\n this.createPopup(circle, dataPoint.locationName, dataPoint.valueRounded);\n return circle;\n }\n\n calcCircleSize(dataPointValue) {\n const circleMinSize = parseInt(this.ctrl.panel.circleMinSize, 10);\n const circleMaxSize = parseInt(this.ctrl.panel.circleMaxSize, 10);\n\n if (this.ctrl.data.valueRange === 0) {\n return circleMaxSize;\n }\n\n const dataFactor = (dataPointValue - this.ctrl.data.lowestValue) / this.ctrl.data.valueRange;\n const circleSizeRange = this.ctrl.panel.circleMaxSize - circleMinSize;\n\n return (circleSizeRange * dataFactor) + circleMinSize;\n }\n\n createPopup(circle, locationName, value) {\n const unit = value && value === 1 ? this.ctrl.panel.unitSingular : this.ctrl.panel.unitPlural;\n const label = (locationName + ': ' + value + ' ' + (unit || '')).trim();\n circle.bindPopup(label, {'offset': window.L.point(0, -2), 'className': 'worldmap-popup', 'closeButton': false});\n\n circle.on('mouseover', function onMouseOver(evt) {\n const layer = evt.target;\n layer.bringToFront();\n this.openPopup();\n });\n circle.on('mouseout', function onMouseOut() {\n circle.closePopup();\n });\n }\n\n getColor(value) {\n for (let index = this.ctrl.data.thresholds.length; index > 0; index--) {\n if (value >= this.ctrl.data.thresholds[index - 1]) {\n return this.ctrl.panel.colors[index];\n }\n }\n return _.first(this.ctrl.panel.colors);\n }\n\n resize() {\n this.map.invalidateSize();\n }\n\n panToMapCenter() {\n this.map.panTo([parseFloat(this.ctrl.panel.mapCenterLatitude), parseFloat(this.ctrl.panel.mapCenterLongitude)]);\n this.ctrl.mapCenterMoved = false;\n }\n\n removeLegend() {\n this.legend.removeFrom(this.map);\n this.legend = null;\n }\n\n addCircles(circles) {\n return window.L.layerGroup(circles).addTo(this.map);\n }\n\n removeCircles() {\n this.map.removeLayer(this.circlesLayer);\n }\n\n setZoom(zoomFactor) {\n this.map.setZoom(zoomFactor);\n }\n\n remove() {\n this.circles = [];\n if (this.circlesLayer) this.removeCircles();\n if (this.legend) this.removeLegend();\n this.map.remove();\n }\n}\n"]} \ No newline at end of file