From cc3b49a5661690b8cf8ddd670ad2208fcf358e0b Mon Sep 17 00:00:00 2001 From: Ths2-9Y-LqJt6 Date: Thu, 15 Nov 2018 10:28:39 -0800 Subject: [PATCH] release 1.7.2 --- README.md | 3 +++ dist/maptable.js | 4 ++-- dist/maptable.js.map | 2 +- dist/maptable.min.js | 6 +++--- docs/maptable.js | 4 ++-- docs/maptable.min.js | 6 +++--- package.json | 2 +- 7 files changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 88972f1..f15d277 100755 --- a/README.md +++ b/README.md @@ -544,6 +544,9 @@ Run these commands as your unprivileged user you're doing your development as: ## Release History +* Version 1.7.2 November 15 2018 + * Change first click on column head to be Descending instead of Ascending - [Issue #95](https://github.com/Packet-Clearing-House/maptable/issues/95) + * Fix some corner cases this.legendCountry[attrKey] is not defined in GeoMap.js - [Issue #96](https://github.com/Packet-Clearing-House/maptable/issues/96) * Version 1.7.1 November 14 2018 * Fix Excessive updates to window history - [Issue #93](https://github.com/Packet-Clearing-House/maptable/issues/93) * Version 1.7.0 November 14 2018 (Also includes items in unreleased 1.6.1) diff --git a/dist/maptable.js b/dist/maptable.js index 66880e6..3d466e8 100644 --- a/dist/maptable.js +++ b/dist/maptable.js @@ -1291,7 +1291,7 @@ this.d3.maptable = (function () { // Update Legend Object.keys(this.options.countries.attr).forEach(function (attrKey) { var attrValue = _this4.options.countries.attr[attrKey]; - if ((typeof attrValue === 'undefined' ? 'undefined' : babelHelpers.typeof(attrValue)) === 'object' && attrValue.legend) { + if ((typeof attrValue === 'undefined' ? 'undefined' : babelHelpers.typeof(attrValue)) === 'object' && attrValue.legend && _this4.legendCountry[attrKey] != undefined) { var scaleDomain = d3.extent(_this4.dataCountries, function (d) { return Number(d.attrProperties[attrKey].value); }); @@ -2656,7 +2656,7 @@ this.d3.maptable = (function () { }).indexOf(key); var sortValue = { key: key }; if (sortIndex === -1) { - sortValue.mode = 'asc'; + sortValue.mode = 'desc'; if (d3.event && d3.event.shiftKey) { this.sorting[1] = sortValue; } else { diff --git a/dist/maptable.js.map b/dist/maptable.js.map index 3265a6e..e46ecb8 100644 --- a/dist/maptable.js.map +++ b/dist/maptable.js.map @@ -1 +1 @@ -{"version":3,"file":"maptable.js","sources":["../src/utils.js","../src/defaultOptions.js","../src/components/Legend.js","../src/components/Watermark.js","../src/components/StackBlur.js","../src/components/GeoMap.js","../src/components/Filters.js","../src/components/Table.js","../src/maptable.js","../src/index.js"],"sourcesContent":["function appendOptions(select, options, defaultValue) {\n options.forEach((f) => {\n // Filter select\n const option = document.createElement('option');\n option.setAttribute('value', f.value);\n option.innerText = f.text;\n select.appendChild(option);\n });\n select.value = defaultValue;\n}\n\nfunction rangeToBool(el1, range, el2) {\n if (range === '=') {\n return parseInt(el1, 10) === parseInt(el2, 10);\n }\n if (range === '≠') {\n return parseInt(el1, 10) !== parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '>') {\n return parseInt(el1, 10) > parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '<') {\n return parseInt(el1, 10) < parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '≥') {\n return parseInt(el1, 10) >= parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '≤') {\n return parseInt(el1, 10) <= parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n return true;\n}\n\n/* eslint no-loop-func: 0 */\nfunction extendRecursive() {\n const dst = {};\n let src;\n const args = [].splice.call(arguments, 0);\n const toString = ({}).toString;\n\n while (args.length > 0) {\n src = args.splice(0, 1)[0];\n if (toString.call(src) === '[object Object]') {\n Object.keys(src).forEach((p) => {\n if (toString.call(src[p]) === '[object Object]') {\n dst[p] = extendRecursive(dst[p] || {}, src[p]);\n } else {\n dst[p] = src[p];\n }\n });\n }\n }\n return dst;\n}\n\nfunction keyToTile(k) {\n const upperK = k.charAt(0).toUpperCase() + k.slice(1);\n return upperK.replace(/_/g, ' ');\n}\n\nfunction sanitizeKey(k) {\n return k.toLowerCase()\n .replace(/ /g, '_')\n .replace(/\"/g, '')\n .replace(/'/g, '');\n}\n\nfunction toNumber(str) {\n if (!str || str === '') return null;\n return Number(str.toString().replace(/[^0-9.]+|\\s+/gmi, ''));\n}\n\nfunction quantile(array, percentile) {\n array.sort((a, b) => a - b);\n const index = percentile / 100.0 * (array.length - 1);\n let result;\n if (Math.floor(index) === index) {\n result = array[index];\n } else {\n const i = Math.floor(index);\n const fraction = index - i;\n result = array[i] + (array[i + 1] - array[i]) * fraction;\n }\n return result;\n}\n\nfunction uniqueValues(arr) {\n if (!arr) return arr;\n const a = [];\n for (let i = 0, l = arr.length; i < l; i += 1) {\n if (a.indexOf(arr[i]) === -1 && arr[i] !== '') {\n a.push(arr[i]);\n }\n }\n return a;\n}\n\nexport default {\n rangeToBool,\n appendOptions,\n extendRecursive,\n sanitizeKey,\n toNumber,\n keyToTile,\n quantile,\n uniqueValues,\n};\n","export default {\n map: {\n longitudeKey: 'longitude',\n latitudeKey: 'latitude',\n countryIdentifierKey: 'country_code',\n countryIdentifierType: 'iso_a2',\n zoom: true,\n saveState: true,\n exportSvg: null,\n exportSvgClient: false,\n ratioFromWidth: 0.5,\n scaleHeight: 1.0,\n scaleZoom: [1, 10],\n fitContentMargin: 10,\n autoFitContent: false,\n tooltipClassName: 'popover bottom',\n countries: {\n legend: false,\n attr: {\n fill: '#FCFCFC',\n stroke: '#CCC',\n 'stroke-width': 0.5,\n },\n tooltipClassName: 'mt-map-tooltip popover bottom',\n },\n heatmap: {\n mask: true,\n weightByAttribute: null,\n weightByAttributeScale: 'linear',\n circles: {\n min: 1,\n max: 90,\n step: 4,\n color: '#FF0000',\n colorStrength: 1,\n blur: 4.0,\n },\n borders: {\n stroke: 1,\n opacity: 0.1,\n color: '#000',\n },\n },\n markers: {\n attr: {\n r: 4,\n fill: 'blue',\n stroke: '#CCC',\n 'stroke-width': 0.5,\n },\n tooltipClassName: 'mt-map-tooltip popover bottom',\n },\n title: {\n fontSize: 12,\n fontFamily: 'Helevetica, Arial, Sans-Serif',\n },\n },\n filters: {\n saveState: true,\n },\n table: {\n className: 'table table-striped table-bordered',\n collapseRowsBy: [],\n },\n};\n","export default class Legend {\n constructor(map) {\n this.legendWidth = 220;\n this.map = map;\n // Create Legend\n this.node = this.map.svg\n .append('g')\n .attr('id', 'mt-map-legend')\n .attr('transform',\n `translate(${(this.map.getWidth() - 350)}, ${(this.map.getHeight() - 60)})`);\n\n this.buildIndice();\n }\n\n buildScale(domain) {\n const legendGradient = this.node\n .append('defs')\n .append('linearGradient')\n .attr('id', 'mt-map-legend-gradient')\n .attr('x1', '0%')\n .attr('y1', '0%')\n .attr('x2', '100%')\n .attr('y2', '0%');\n\n if (this.map.options.countries.attr.fill.minNegative\n && this.map.options.countries.attr.fill.maxNegative) {\n // todo - maybe watch for domain[0] < 0 && domain[1] < 0? fall back to normal min & max?\n const midPercentNegative = Math.round(((0 - domain[0]) / (domain[1] - domain[0])) * 100);\n const midPercentPositive = midPercentNegative + 1;\n\n legendGradient.append('stop')\n .attr('offset', '0%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.maxNegative};stop-opacity:1`);\n\n legendGradient.append('stop')\n .attr('offset', `${midPercentNegative}%`)\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.minNegative};stop-opacity:1`);\n legendGradient.append('stop')\n .attr('offset', `${midPercentPositive}%`)\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.min};stop-opacity:1`);\n } else {\n legendGradient.append('stop')\n .attr('offset', '0%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.min};stop-opacity:1`);\n }\n\n legendGradient.append('stop')\n .attr('offset', '100%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.max};stop-opacity:1`);\n\n this.node.append('rect')\n .attr('x', 40)\n .attr('y', 0)\n .attr('width', this.legendWidth)\n .attr('height', 15)\n .attr('fill', 'url(#mt-map-legend-gradient)');\n }\n\n buildIndice() {\n const indice = this.node.append('g')\n .attr('id', 'mt-map-legend-indice')\n .attr('style', 'display:none')\n .attr('transform', 'translate(36,15)');\n\n indice.append('polygon')\n .attr('points', '4.5 0 9 5 0 5')\n .attr('fill', '#222222');\n\n indice.append('text')\n .attr('x', 4)\n .attr('y', 13)\n .attr('width', 10)\n .attr('height', 10)\n .attr('text-anchor', 'middle')\n .attr('font-family', 'Arial')\n .attr('font-size', '9')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '1')\n .attr('fill', '#222222')\n .text('0');\n\n this.node.append('text')\n .attr('id', 'mt-map-legend-min')\n .attr('x', 35)\n .attr('y', 13)\n .attr('width', 35)\n .attr('height', 15)\n .attr('text-anchor', 'end')\n .attr('font-family', 'Arial')\n .attr('font-size', '14')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '3')\n .attr('fill', '#222222')\n .text('0');\n\n this.node.append('text')\n .attr('id', 'mt-map-legend-max')\n .attr('y', 13)\n .attr('x', 265)\n .attr('width', 40)\n .attr('height', 15)\n .attr('text-anchor', 'start')\n .attr('font-family', 'Arial')\n .attr('font-size', '14')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '3')\n .attr('fill', '#222222')\n .text('1');\n }\n\n updateExtents(domain) {\n this.node.select('#mt-map-legend').style('opacity', (domain[0] === domain[1]) ? 0 : 1);\n if (this.node.selectAll('mt-map-legend-min').length) {\n this.node.select('#mt-map-legend-min').text(Math.round(domain[0]));\n this.node.select('#mt-map-legend-max').text(Math.round(domain[1]));\n\n // pass in the min and max (domain) to the legend\n this.buildScale(domain);\n }\n }\n\n indiceChange(val) {\n if (Number.isNaN(val)) {\n this.node.select('#mt-map-legend-indice')\n .attr('style', 'display:none');\n } else {\n const maxValue = parseInt(this.node.select('#mt-map-legend-max').text(), 10);\n const minValue = parseInt(this.node.select('#mt-map-legend-min').text(), 10);\n const positionDelta = Math.round((0 - (minValue - val) / (maxValue - minValue))\n * this.legendWidth);\n this.node.select('#mt-map-legend-indice text').text(Math.round(val));\n this.node.select('#mt-map-legend-indice')\n .attr('style', 'display:block')\n .attr('transform', `translate(${(36 + positionDelta)},15)`);\n }\n }\n}\n","export default class Legend {\n constructor(map, options) {\n this.map = map;\n this.src = options.src;\n this.position = options.position;\n this.width = parseInt(options.width, 10);\n this.height = parseInt(options.height, 10);\n this.padding = options.padding || 10;\n this.style = options.style;\n\n if (!options.src) {\n console.warn('Watermak src not found');\n return;\n }\n if (Number.isNaN(this.width)) {\n console.warn('Watermak width not found');\n return;\n }\n if (Number.isNaN(this.height)) {\n console.warn('Watermak height not found');\n return;\n }\n\n if (window.btoa) {\n this.buildWatermark();\n } else {\n console.warn('Watermark not rendered: btoa error');\n }\n }\n\n buildWatermark() {\n d3.xhr(this.src, (res) => {\n let mapWatermarkDelta = 0;\n if (this.map.options.title) mapWatermarkDelta = 30;\n let mime;\n let x;\n let y;\n if (this.src.indexOf('.svg') !== -1) {\n mime = 'image/svg+xml';\n } else if (this.src.indexOf('.jpg') !== -1 || this.src.indexOf('.jpeg') !== -1) {\n mime = 'image/jpeg';\n } else if (this.src.indexOf('.png') !== -1) {\n mime = 'image/png';\n } else {\n console.warn('invalid watermark mime type');\n return;\n }\n const dataUri = `data:${mime};base64,${window.btoa(res.responseText)}`;\n\n if (this.position) {\n const pos = this.position.split(' ');\n if (pos[0] === 'top') {\n y = this.padding;\n } else if (pos[0] === 'middle') {\n y = (this.map.getHeight() - this.height) / 2;\n } else if (pos[0] === 'bottom') {\n y = this.map.getHeight() - this.height - this.padding - mapWatermarkDelta;\n } else {\n console.warn('position should be (top|middle|bottom) (left|middle|right)');\n }\n\n if (pos[1] === 'left') {\n x = this.padding;\n } else if (pos[1] === 'middle') {\n x = (this.map.getWidth() - this.width) / 2;\n } else if (pos[1] === 'right') {\n x = this.map.getWidth() - this.width - this.padding;\n } else {\n console.warn('position should be (top|middle|bottom) (left|middle|right)');\n }\n }\n\n this.node = this.map.svg\n .append('image')\n .attr('xlink:href', dataUri)\n .attr('width', this.width)\n .attr('height', this.height);\n\n if (x && y) {\n this.node.attr('x', x).attr('y', y);\n }\n\n if (this.style) {\n this.node.attr('style', this.style);\n }\n });\n }\n}\n","/* eslint-disable */\n\n/*\n StackBlur - a fast almost Gaussian Blur For Canvas\n Version: 0.5\n Author: Mario Klingemann\n Contact: mario@quasimondo.com\n Website: http://www.quasimondo.com/StackBlurForCanvas\n Twitter: @quasimondo\n In case you find this class useful - especially in commercial projects -\n I am not totally unhappy for a small donation to my PayPal account\n mario@quasimondo.de\n Or support me on flattr:\n https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript\n Copyright (c) 2010 Mario Klingemann\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\nvar mul_table = [\n 512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,\n 454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,\n 482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,\n 437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,\n 497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,\n 320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,\n 446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,\n 329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,\n 505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,\n 399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,\n 324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,\n 268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,\n 451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,\n 385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,\n 332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,\n 289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];\n\n\nvar shg_table = [\n 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,\n 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,\n 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\n 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ];\n\n\nfunction processImage(img, canvas, radius, blurAlphaChannel)\n{\n if (typeof(img) == 'string') {\n var img = document.getElementById(img);\n }\n else if (typeof HTMLImageElement !== 'undefined' && !img instanceof HTMLImageElement) {\n return;\n }\n var w = img.naturalWidth;\n var h = img.naturalHeight;\n\n if (typeof(canvas) == 'string') {\n var canvas = document.getElementById(canvas);\n }\n else if (typeof HTMLCanvasElement !== 'undefined' && !canvas instanceof HTMLCanvasElement) {\n return;\n }\n\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n canvas.width = w;\n canvas.height = h;\n\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0);\n\n if (Number.isNaN(radius) || radius < 1) return;\n\n if (blurAlphaChannel)\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n else\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n}\n\nfunction getImageDataFromCanvas(canvas, top_x, top_y, width, height)\n{\n if (typeof(canvas) == 'string')\n var canvas = document.getElementById(canvas);\n else if (typeof HTMLCanvasElement !== 'undefined' && !canvas instanceof HTMLCanvasElement)\n return;\n\n var context = canvas.getContext('2d');\n var imageData;\n\n try {\n try {\n imageData = context.getImageData(top_x, top_y, width, height);\n } catch(e) {\n throw new Error(\"unable to access local image data: \" + e);\n return;\n }\n } catch(e) {\n throw new Error(\"unable to access image data: \" + e);\n }\n\n return imageData;\n}\n\nfunction processCanvasRGBA(canvas, top_x, top_y, width, height, radius)\n{\n if (Number.isNaN(radius) || radius < 1) return;\n radius |= 0;\n\n var imageData = getImageDataFromCanvas(canvas, top_x, top_y, width, height);\n\n imageData = processImageDataRGBA(imageData, top_x, top_y, width, height, radius);\n\n canvas.getContext('2d').putImageData(imageData, top_x, top_y);\n}\n\nfunction processImageDataRGBA(imageData, top_x, top_y, width, height, radius)\n{\n var pixels = imageData.data;\n\n var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,\n r_out_sum, g_out_sum, b_out_sum, a_out_sum,\n r_in_sum, g_in_sum, b_in_sum, a_in_sum,\n pr, pg, pb, pa, rbs;\n\n var div = radius + radius + 1;\n var w4 = width << 2;\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n var stackStart = new BlurStack();\n var stack = stackStart;\n for (i = 1; i < div; i++)\n {\n stack = stack.next = new BlurStack();\n if (i == radiusPlus1) var stackEnd = stack;\n }\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n\n yw = yi = 0;\n\n var mul_sum = mul_table[radius];\n var shg_sum = shg_table[radius];\n\n for (y = 0; y < height; y++)\n {\n r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;\n\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n for (i = 1; i < radiusPlus1; i++)\n {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p+2])) * rbs;\n a_sum += (stack.a = (pa = pixels[p+3])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n\n stack = stack.next;\n }\n\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = 0; x < width; x++)\n {\n pixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa != 0)\n {\n pa = 255 / pa;\n pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n } else {\n pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;\n }\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p+1]);\n b_in_sum += (stackIn.b = pixels[p+2]);\n a_in_sum += (stackIn.a = pixels[p+3]);\n\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n a_sum += a_in_sum;\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n a_out_sum += (pa = stackOut.a);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n\n for (x = 0; x < width; x++)\n {\n g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;\n\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n yp = width;\n\n for (i = 1; i <= radius; i++)\n {\n yi = (yp + x) << 2;\n\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi+2])) * rbs;\n a_sum += (stack.a = (pa = pixels[yi+3])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n\n stack = stack.next;\n\n if(i < heightMinus1)\n {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = 0; y < height; y++)\n {\n p = yi << 2;\n pixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa > 0)\n {\n pa = 255 / pa;\n pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[p+1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[p+2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n } else {\n pixels[p] = pixels[p+1] = pixels[p+2] = 0;\n }\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p+1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p+2]));\n a_sum += (a_in_sum += (stackIn.a = pixels[p+3]));\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n a_out_sum += (pa = stackOut.a);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\nfunction processCanvasRGB(canvas, top_x, top_y, width, height, radius)\n{\n if (Number.isNaN(radius) || radius < 1) return;\n radius |= 0;\n\n var imageData = getImageDataFromCanvas(canvas, top_x, top_y, width, height);\n imageData = processImageDataRGB(imageData, top_x, top_y, width, height, radius);\n\n canvas.getContext('2d').putImageData(imageData, top_x, top_y);\n}\n\nfunction processImageDataRGB(imageData, top_x, top_y, width, height, radius)\n{\n var pixels = imageData.data;\n\n var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum,\n r_out_sum, g_out_sum, b_out_sum,\n r_in_sum, g_in_sum, b_in_sum,\n pr, pg, pb, rbs;\n\n var div = radius + radius + 1;\n var w4 = width << 2;\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n var stackStart = new BlurStack();\n var stack = stackStart;\n for (i = 1; i < div; i++)\n {\n stack = stack.next = new BlurStack();\n if (i == radiusPlus1) var stackEnd = stack;\n }\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n\n yw = yi = 0;\n\n var mul_sum = mul_table[radius];\n var shg_sum = shg_table[radius];\n\n for (y = 0; y < height; y++)\n {\n r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;\n\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n for (i = 1; i < radiusPlus1; i++)\n {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p+2])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n\n stack = stack.next;\n }\n\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = 0; x < width; x++)\n {\n pixels[yi] = (r_sum * mul_sum) >> shg_sum;\n pixels[yi+1] = (g_sum * mul_sum) >> shg_sum;\n pixels[yi+2] = (b_sum * mul_sum) >> shg_sum;\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p+1]);\n b_in_sum += (stackIn.b = pixels[p+2]);\n\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n\n for (x = 0; x < width; x++)\n {\n g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;\n\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n yp = width;\n\n for (i = 1; i <= radius; i++)\n {\n yi = (yp + x) << 2;\n\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi+2])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n\n stack = stack.next;\n\n if(i < heightMinus1)\n {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = 0; y < height; y++)\n {\n p = yi << 2;\n pixels[p] = (r_sum * mul_sum) >> shg_sum;\n pixels[p+1] = (g_sum * mul_sum) >> shg_sum;\n pixels[p+2] = (b_sum * mul_sum) >> shg_sum;\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p+1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p+2]));\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\nfunction BlurStack()\n{\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n}\n\nexport default {\n image: processImage,\n canvasRGBA: processCanvasRGBA,\n canvasRGB: processCanvasRGB,\n imageDataRGBA: processImageDataRGBA,\n imageDataRGB: processImageDataRGB\n};\n","import Legend from './Legend';\nimport Watermark from './Watermark';\nimport StackBlur from './StackBlur';\nimport utils from '../utils';\n/**\n * Used the name GeoMap instead of Map to avoid collision with the native Map class of JS\n */\nexport default class GeoMap {\n /**\n * Geo Mapping class constructor that will initiate the map drawing\n * @param maptable: Maptable main Object\n * @param options: options communicated to map\n * @param jsonWorld: Object that contain TopoJSON dataset\n */\n constructor(maptable, options, jsonWorld) {\n const self = this;\n this.maptable = maptable;\n this.scale = 1;\n this.transX = 0;\n this.transY = 0;\n\n this.options = options;\n\n this.jsonWorld = jsonWorld;\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n\n\n // Map wrapper\n const mapWrapper = this.container.querySelector('.mt-map-container');\n\n const existingMap = this.container.querySelector('#mt-map');\n if (existingMap) {\n // transform #mt-map to .mt-map-container'\n mapWrapper.parentNode.insertBefore(mapWrapper, existingMap);\n existingMap.parentNode.removeChild(existingMap);\n }\n\n // Map\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-map');\n mapWrapper.appendChild(this.node);\n\n this.svg = d3.select(this.node)\n .append('svg')\n .attr('id', 'mt-map-svg')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink')\n .attr('viewBox', `0 0 ${this.getWidth()} ${this.getHeight()}`)\n .attr('width', this.getWidth())\n .attr('height', this.getHeight());\n\n this.projection = d3.geo.equirectangular()\n .translate([this.getWidth() / 2, this.getHeight() / (2 * this.options.scaleHeight)])\n .scale((this.getWidth() / 640) * 100)\n .rotate([-12, 0])\n .precision(0.1);\n\n this.path = d3.geo.path().projection(this.projection);\n\n // Add coordinates to rawData\n this.maptable.rawData.forEach((d) => {\n d.longitude = parseFloat(d[self.options.longitudeKey]);\n d.latitude = parseFloat(d[self.options.latitudeKey]);\n let coord = [0, 0];\n if (!Number.isNaN(d.longitude) && !Number.isNaN(d.latitude)) {\n coord = self.projection([d.longitude, d.latitude]);\n }\n d.x = coord[0];\n d.y = coord[1];\n });\n\n this.zoomListener = d3.behavior\n .zoom()\n .scaleExtent(this.options.scaleZoom)\n .on('zoom', this.rescale.bind(this));\n\n // Attach Zoom event to map\n if (this.options.zoom) {\n this.svg = this.svg.call(this.zoomListener.bind(this));\n }\n\n // Add tooltip\n if (this.options.markers) {\n this.tooltipMarkersNode = d3.select(this.node)\n .append('div')\n .attr('id', 'mt-map-markers-tooltip')\n .attr('class', `mt-map-tooltip ${this.options.markers.tooltipClassName}`)\n .style('display', 'none');\n }\n\n if (this.options.countries) {\n this.tooltipCountriesNode = d3.select(this.node)\n .append('div')\n .attr('id', 'mt-map-countries-tooltip')\n .attr('class', `mt-map-tooltip ${this.options.countries.tooltipClassName}`)\n .style('display', 'none');\n }\n\n this.layerGlobal = this.svg.append('g').attr('class', 'mt-map-global');\n this.layerCountries = this.layerGlobal.append('g').attr('class', 'mt-map-countries');\n this.layerHeatmap = this.layerGlobal.append('g').attr('class', 'mt-map-heatmap');\n this.layerMarkers = this.layerGlobal.append('g').attr('class', 'mt-map-markers');\n\n // Add Watermark\n if (this.options.watermark) {\n this.watermark = new Watermark(this, this.options.watermark);\n }\n\n // Add Title\n if (this.options.title) {\n this.buildTitle();\n }\n\n // Add Export SVG Capability\n if (this.options.exportSvgClient || this.options.exportSvg) {\n this.addExportSvgCapability();\n }\n\n // AutoResize\n if (!this.options.width) {\n window.addEventListener('resize', () => {\n this.svg.attr('width', this.getWidth());\n this.svg.attr('height', this.getHeight());\n this.rescale();\n });\n }\n\n // Let's build things\n this.loadGeometries();\n\n // render is triggered by MapTable\n // this.render();\n }\n\n scaleAttributes() {\n return Math.pow(this.scale, 2 / 3); // eslint-disable-line\n }\n\n getWidth() {\n if (this.options.width) {\n return this.options.width;\n }\n return this.node.offsetWidth;\n }\n\n getHeight() {\n const deltaHeight = (this.options.title) ? 30 : 0;\n if (!this.options.height && this.options.ratioFromWidth) {\n return this.getWidth() * this.options.ratioFromWidth * this.options.scaleHeight + deltaHeight;\n }\n return this.options.height * this.options.scaleHeight + deltaHeight;\n }\n\n /**\n * Load geometries and built the map components\n */\n loadGeometries() {\n // We filter world data\n if (this.options.filterCountries) {\n this.jsonWorld.objects.countries.geometries = this.jsonWorld.objects.countries\n .geometries.filter(this.options.filterCountries);\n }\n\n // Build countries\n if (this.options.countries) this.buildCountries();\n\n // Build heatmap\n if (this.options.heatmap) this.buildHeatmap();\n }\n\n /**\n * Logic to build the heatmap elements (without the filling the heatmap image)\n */\n buildHeatmap() {\n // Build vectors\n const lands = topojson.merge(this.jsonWorld, this.jsonWorld.objects.countries.geometries);\n if (!this.options.heatmap.disableMask) {\n this.maskHeatmap = this.layerHeatmap.append('defs')\n .append('clipPath')\n .attr('id', 'mt-map-heatmap-mask');\n\n this.maskHeatmap\n .datum(lands)\n .append('path')\n .attr('class', 'mt-map-heatmap-mask-paths')\n .attr('d', this.path);\n }\n\n this.imgHeatmap = this.layerHeatmap\n .append('image')\n .attr('width', this.getWidth())\n .attr('height', this.getHeight())\n .attr('x', 0)\n .attr('y', 0)\n .attr('class', 'mt-map-heatmap-img');\n\n if (this.options.heatmap.mask) {\n this.imgHeatmap = this.imgHeatmap.attr('clip-path', 'url(#mt-map-heatmap-mask)');\n }\n\n if (this.options.heatmap.borders) {\n const borders = topojson.mesh(this.jsonWorld,\n this.jsonWorld.objects.countries, (a, b) => a !== b);\n\n this.bordersHeatmap = this.layerHeatmap\n .append('g')\n .attr('class', 'mt-map-heatmap-borders');\n\n this.bordersHeatmap.selectAll('path.mt-map-heatmap-borders-paths')\n .data([lands, borders])\n .enter()\n .append('path')\n .attr('class', 'mt-map-heatmap-borders-paths')\n .attr('fill', 'none')\n .attr('stroke-width', this.options.heatmap.borders.stroke)\n .attr('stroke', this.options.heatmap.borders.color)\n .attr('style', `opacity: ${this.options.heatmap.borders.opacity}`)\n .attr('d', this.path);\n }\n }\n\n /**\n * Get Scale for every circle magnitude\n * @param heatmapDataset: heatmap dataset that we use\n * @returns scale: function - Scale function that output a value [0 - 1]\n */\n getMagnitudeScale(heatmapDataset) {\n const opts = this.options.heatmap;\n const lengthDataset = heatmapDataset.length;\n if (!lengthDataset) return () => 0;\n // const layersPerLocation = (opts.circles.max - opts.circles.min) / opts.circles.step;\n const maxOpacityScale = d3.scale.linear()\n .domain([1, lengthDataset])\n .range([1, 0.25]);\n const centralCircleOpacity = maxOpacityScale(lengthDataset);\n\n const scale = d3.scale.linear()\n .domain([opts.circles.min, 20])\n .range([centralCircleOpacity, 0]);\n return m => scale(m);\n }\n\n /**\n * Get Scale for every data point (used for weighting)\n * @returns scale: function - Scale function that output a value [0 - 1]\n */\n getDatumScale() {\n if (!this.options.heatmap.weightByAttribute) return () => 1;\n const dataExtents = d3.extent(this.maptable.data, this.options.heatmap.weightByAttribute);\n const userScale = (this.options.heatmap.weightByAttributeScale === 'log')\n ? d3.scale.log : d3.scale.linear;\n const scale = userScale().domain(dataExtents).range([0.5, 1]);\n return (d) => {\n const val = this.options.heatmap.weightByAttribute(d);\n if (!val) return 0;\n return scale(val);\n };\n }\n\n /**\n * Get the Data URL of the heatmap image\n * @returns {string} base64 image\n */\n getHeatmapData() {\n const canvasHeatmap = d3.select(this.node)\n .append('canvas')\n .attr('id', 'mt-map-heatmap-canvas')\n .attr('width', this.getWidth())\n .attr('height', this.getHeight())\n .attr('style', 'display: none;');\n\n const ctx = canvasHeatmap.node().getContext('2d');\n ctx.globalCompositeOperation = 'multiply';\n const circles = d3.range(\n this.options.heatmap.circles.min,\n this.options.heatmap.circles.max,\n this.options.heatmap.circles.step,\n );\n const datumScale = this.getDatumScale();\n const heatmapDataset = this.maptable.data.filter(d => datumScale(d) > 0.1);\n const path = this.path.context(ctx);\n const magnitudeScale = this.getMagnitudeScale(heatmapDataset);\n const colorScale = d3.scale.linear()\n .domain([1, 0])\n .range(['#000000', '#FFFFFF']);\n\n // Make a flat white background first\n ctx.beginPath();\n ctx.rect(0, 0, this.getWidth(), this.getHeight());\n ctx.fillStyle = '#ffffff';\n ctx.fill();\n ctx.closePath();\n\n // color strenght factor\n const colorMultiplier = (x) => {\n const a = this.options.heatmap.circles.colorStrength;\n const aa = 1 + ((a - 1) / 100);\n if (a > 1) return (2 - aa) * x + aa - 1;\n return a * x;\n };\n\n // add condensed clouds\n heatmapDataset.forEach((point) => {\n const scaleOpacityDatum = datumScale(point);\n circles.forEach((m) => {\n const opacity = colorMultiplier(magnitudeScale(m) * scaleOpacityDatum);\n if (opacity > 0) {\n ctx.beginPath();\n path(d3.geo.circle().origin([point.longitude, point.latitude]).angle(m - 0.0001)());\n ctx.fillStyle = colorScale(opacity);\n ctx.fill();\n ctx.closePath();\n }\n });\n });\n\n StackBlur.canvasRGBA(canvasHeatmap.node(), 0, 0, this.getWidth(),\n this.getHeight(), this.options.heatmap.circles.blur);\n\n // Add color layer\n ctx.beginPath();\n ctx.globalCompositeOperation = 'screen';\n ctx.rect(0, 0, this.getWidth(), this.getHeight());\n ctx.fillStyle = this.options.heatmap.circles.color;\n ctx.fill();\n ctx.closePath();\n\n const dataUrl = canvasHeatmap.node().toDataURL();\n canvasHeatmap.remove();\n return dataUrl;\n }\n\n /**\n * Set the data URL to the heatmap image\n */\n updateHeatmap() {\n const dataUrl = this.getHeatmapData();\n this.imgHeatmap.attr('xlink:href', dataUrl);\n }\n\n /**\n * build the paths for the countries\n */\n buildCountries() {\n this.dataCountries = topojson.feature(this.jsonWorld,\n this.jsonWorld.objects.countries).features;\n\n // Build country paths\n this.layerCountries\n .selectAll('.mt-map-country')\n .data(this.dataCountries)\n .enter()\n .insert('path')\n .attr('class', 'mt-map-country')\n .attr('d', this.path);\n\n // Build Country Legend\n this.legendCountry = {};\n\n if (this.shouldRenderLegend()) {\n this.legendCountry.fill = new Legend(this);\n }\n }\n\n shouldRenderLegend() {\n const f = this.options.countries.attr.fill;\n if (!f) return false;\n if (!f.legend || !f.min || !f.max) return false;\n if (f.aggregate && f.aggregate.scale) {\n const scale = (typeof (f.aggregate.scale) === 'function')\n ? f.aggregate.scale.bind(this.maptable)()\n : f.aggregate.scale;\n if (scale !== 'linear') return false;\n }\n return true;\n }\n\n /**\n * Set the right color for every country\n */\n updateCountries() {\n // Data from user input\n const dataByCountry = d3.nest()\n .key(d => d[this.options.countryIdentifierKey])\n .entries(this.maptable.data);\n\n // We merge both data\n this.dataCountries.forEach((geoDatum) => {\n geoDatum.key = geoDatum.properties[this.options.countryIdentifierType];\n const matchedCountry = dataByCountry.filter(uDatum => uDatum.key === geoDatum.key);\n geoDatum.values = (matchedCountry.length === 0) ? [] : matchedCountry[0].values;\n geoDatum.attr = {};\n geoDatum.rollupValue = {};\n });\n\n // We calculate attributes values\n Object.keys(this.options.countries.attr).forEach((k) => {\n this.setAttrValues(k, this.options.countries.attr[k], this.dataCountries);\n });\n\n // Update SVG\n const countryItem = d3.selectAll('.mt-map-country').each(function (d) {\n const targetPath = this;\n Object.keys(d.attr).forEach((key) => {\n d3.select(targetPath).attr(key, d.attr[key]);\n });\n });\n\n // Update Legend\n Object.keys(this.options.countries.attr).forEach((attrKey) => {\n const attrValue = this.options.countries.attr[attrKey];\n if (typeof (attrValue) === 'object' && attrValue.legend) {\n const scaleDomain = d3.extent(this.dataCountries,\n d => Number(d.attrProperties[attrKey].value));\n this.legendCountry[attrKey].updateExtents(scaleDomain);\n\n // When we mouseover the legend, it should highlight the indice selected\n countryItem.on('mouseover', (d) => {\n this.legendCountry[attrKey].indiceChange(d.attrProperties[attrKey].value);\n })\n .on('mouseout', () => {\n this.legendCountry[attrKey].indiceChange(NaN);\n });\n }\n });\n\n // Update Tooltip\n if (this.options.countries && this.options.countries.tooltip) {\n this.activateTooltip(countryItem, this.tooltipCountriesNode,\n this.options.countries.tooltip, true);\n }\n }\n\n updateMarkers() {\n const defaultGroupBy = a => `${a.longitude},${a.latitude}`;\n\n this.dataMarkers = d3.nest()\n .key(defaultGroupBy)\n .entries(this.maptable.data)\n .filter(d => d.values[0].x !== 0);\n\n // We merge both data\n this.dataMarkers.forEach((d) => {\n d.attr = {};\n d.attrProperties = {};\n });\n\n // We calculate attributes values\n Object.keys(this.options.markers.attr).forEach((k) => {\n this.setAttrValues(k, this.options.markers.attr[k], this.dataMarkers);\n });\n\n // Enter\n const markerItem = this.layerMarkers\n .selectAll('.mt-map-marker')\n .data(this.dataMarkers);\n let markerObject = markerItem.enter();\n if (this.options.markers.customTag) {\n markerObject = this.options.markers.customTag(markerObject);\n } else {\n markerObject = markerObject.append('svg:circle');\n }\n const markerClassName = (this.options.markers.className)\n ? this.options.markers.className : '';\n\n markerObject.attr('class', `mt-map-marker ${markerClassName}`);\n\n // Exit\n markerItem.exit().transition()\n .attr('r', 0)\n .attr('fill', '#eee')\n .style('opacity', 0)\n .remove();\n\n // Update\n const attrX = (this.options.markers.attrX) ? this.options.markers.attrX : 'cx';\n const attrY = (this.options.markers.attrY) ? this.options.markers.attrY : 'cy';\n\n const attrXDelta = (this.options.markers.attrXDelta) ? this.options.markers.attrXDelta : 0;\n const attrYDelta = (this.options.markers.attrYDelta) ? this.options.markers.attrYDelta : 0;\n\n const markerUpdate = markerItem\n .attr(attrX, d => d.values[0].x + attrXDelta)\n .attr(attrY, d => d.values[0].y + attrYDelta);\n\n d3.selectAll(`${this.containerSelector} .mt-map-marker`).each(function (d) {\n const targetPath = this;\n Object.keys(d.attr).forEach((key) => {\n d3.select(targetPath).attr(key, d.attr[key]);\n });\n });\n\n if (this.options.markers.tooltip) {\n this.activateTooltip(markerUpdate, this.tooltipMarkersNode,\n this.options.markers.tooltip, false);\n }\n\n this.rescale();\n }\n\n fitContent() {\n if (this.maptable.data.length === 0) {\n this.transX = 0;\n this.transY = 0;\n this.scale = 1;\n this.zoomListener.translate([this.transX, this.transY])\n .scale(this.scale);\n return;\n }\n const hor = d3.extent(this.maptable.data, d => d.x);\n const ver = d3.extent(this.maptable.data, d => d.y);\n\n // center dots with the good ratio\n const ratio = this.getWidth() / this.getHeight();\n const deltaMarker = 20 + ((this.options.title) ? 30 : 0);\n\n const currentWidth = (hor[1] - hor[0]) + deltaMarker;\n const currentHeight = (ver[1] - ver[0]) + deltaMarker;\n\n const realHeight = currentWidth / ratio;\n const realWidth = currentHeight * ratio;\n\n let diffMarginWidth = 0;\n let diffMarginHeight = 0;\n if (realWidth >= currentWidth) {\n diffMarginWidth = (realWidth - currentWidth) / 2;\n } else {\n diffMarginHeight = (realHeight - currentHeight) / 2;\n }\n\n // add layout margin\n hor[0] -= (this.options.fitContentMargin + diffMarginWidth);\n hor[1] += (this.options.fitContentMargin + diffMarginWidth);\n ver[0] -= (this.options.fitContentMargin + diffMarginHeight);\n ver[1] += (this.options.fitContentMargin + diffMarginHeight);\n\n this.scale = this.getWidth() / (hor[1] - hor[0]);\n this.transX = -1 * hor[0] * this.scale;\n this.transY = -1 * ver[0] * this.scale;\n\n this.zoomListener.translate([this.transX, this.transY]).scale(this.scale);\n }\n\n buildTitle() {\n const titleContainer = this.svg\n .append('svg')\n .attr('width', this.getWidth())\n .attr('x', 0)\n .attr('y', (this.getHeight() - 30))\n .attr('height', 30);\n\n if (this.options.title.bgColor) {\n titleContainer.append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', this.getWidth())\n .attr('height', 30)\n .attr('fill', this.options.title.bgColor);\n }\n\n titleContainer.append('text')\n .attr('id', 'mt-map-title')\n .attr('x', 20)\n .attr('font-size', this.options.title.fontSize)\n .attr('font-family', this.options.title.fontFamily)\n .attr('y', 20);\n\n if (this.options.title.source) {\n titleContainer.append('text')\n .attr('y', 20)\n .attr('x', (this.getWidth() - 20))\n .attr('text-anchor', 'end')\n .attr('font-size', this.options.title.fontSize)\n .attr('font-family', this.options.title.fontFamily)\n .html(this.options.title.source());\n }\n }\n\n /**\n * We encode a transaltion to be independent from the dimensions of the visualization\n * @param originalTranslation: Array - original translation value (from screen)\n * @returns encodedTranslation: Array - encoded translation\n */\n encodeTranslation(originalTranslation) {\n const newTx = originalTranslation[0] / (this.scale * this.getWidth());\n\n const newTy = originalTranslation[1] / (this.scale * this.getHeight());\n\n return [newTx, newTy];\n }\n\n /**\n * We decode a translation to adapt it to the dimensions of the visualization\n * @param encodedTranslation: Array - encoded translation\n * @returns originalTranslation: Array - original translation value (from screen)\n */\n decodeTranslation(encodedTranslation) {\n const newTx = encodedTranslation[0] * this.getWidth() * this.scale;\n\n const newTy = encodedTranslation[1] * this.getHeight() * this.scale;\n\n return [newTx, newTy];\n }\n\n /**\n * Restore state from the url hash\n */\n restoreState(defaultZoom) {\n if (!defaultZoom || defaultZoom.length !== 3) return;\n this.scale = defaultZoom[0];\n const originalTranslation = this.decodeTranslation([defaultZoom[1], defaultZoom[2]]);\n this.transX = originalTranslation[0];\n this.transY = originalTranslation[1];\n this.zoomListener.scale(defaultZoom[0])\n .translate(originalTranslation)\n .event(this.svg);\n }\n\n /**\n * Save state into the url hash\n */\n saveState() {\n const encodedTranslation = this.encodeTranslation([this.transX, this.transY]);\n const exportedData = [this.scale, encodedTranslation[0],\n encodedTranslation[1]];\n if (exportedData[0] !== 1 && exportedData[1] !== 0 && exportedData[2] !== 0) {\n this.maptable.saveState('zoom', exportedData);\n } else {\n this.maptable.removeState('zoom');\n }\n }\n\n rescale() {\n const self = this;\n if (d3.event && d3.event.translate) {\n this.scale = d3.event.scale;\n this.transX = (this.scale === 1) ? 0 : d3.event.translate[0];\n this.transY = (this.scale === 1) ? 0 : d3.event.translate[1];\n }\n\n const maxTransX = 0;\n const maxTransY = 0;\n const minTransX = this.getWidth() * (1 - this.scale);\n const minTransY = this.getHeight() * (1 - this.scale);\n\n if (this.transY > maxTransY) {\n this.transY = maxTransY;\n } else if (this.transY < minTransY) {\n this.transY = minTransY;\n }\n\n if (this.transX > maxTransX) {\n this.transX = maxTransX;\n } else if (this.transX < minTransX) {\n this.transX = minTransX;\n }\n\n if (d3.event && d3.event.translate) {\n d3.event.translate[0] = this.transX;\n d3.event.translate[1] = this.transY;\n }\n\n this.layerGlobal.attr('transform',\n `translate(${this.transX}, ${this.transY})scale(${this.scale})`);\n\n // Hide tooltip\n if (self.tooltipCountriesNode) self.tooltipCountriesNode.attr('style', 'display:none;');\n if (self.tooltipMarkersNode) self.tooltipMarkersNode.attr('style', 'display:none;');\n\n // Rescale markers size\n if (this.options.markers) {\n // markers\n d3.selectAll(`${this.containerSelector} .mt-map-marker`).each(function (d) {\n // stroke\n if (d.attr['stroke-width']) {\n d3.select(this).attr('stroke-width', d.attr['stroke-width'] / self.scaleAttributes());\n }\n // radius\n if (d.attr.r) {\n d3.select(this).attr('r', d.attr.r / self.scaleAttributes());\n }\n });\n }\n\n // Rescale Country stroke-width\n if (this.options.countries) {\n d3.selectAll(`${this.containerSelector} .mt-map-country`).style('stroke-width',\n this.options.countries.attr['stroke-width'] / this.scale);\n }\n\n // Rescale heatmap borders\n if (this.options.heatmap && this.options.heatmap.borders) {\n d3.selectAll(`${this.containerSelector} .mt-map-heatmap-borders-paths`)\n .style('stroke-width', this.options.heatmap.borders.stroke / this.scale);\n }\n\n // save state\n if (this.maptable.firstExecution && this.options.saveState) this.saveState();\n }\n\n setAttrValues(attrKey, attrValue, dataset) {\n if (typeof (attrValue) === 'number' || typeof (attrValue) === 'string') {\n // Static value\n dataset.forEach((d) => {\n d.attr[attrKey] = attrValue;\n });\n } else if (typeof (attrValue) === 'function') {\n // Dynamic value based on the dataset\n dataset.forEach((d) => {\n d.attr[attrKey] = attrValue(d);\n });\n } else if (typeof (attrValue) === 'object') {\n let scale = 'linear';\n let key = null;\n let mode = 'count';\n let scaleToUse = d3.scale.linear();\n if (attrValue.aggregate) {\n key = (typeof (attrValue.aggregate.key) === 'function')\n ? attrValue.aggregate.key.bind(this.maptable)()\n : attrValue.aggregate.key;\n\n mode = (typeof (attrValue.aggregate.mode) === 'function')\n ? attrValue.aggregate.mode.bind(this.maptable)()\n : attrValue.aggregate.mode;\n\n if (typeof (attrValue.aggregate.scale) === 'function') {\n scale = attrValue.aggregate.scale.bind(this.maptable)();\n } else if (attrValue.aggregate.scale) {\n scale = attrValue.aggregate.scale;\n }\n\n if (!key || !mode) {\n throw new Error(`MapTable: You should provide values 'key' & 'mode' for attr.${attrKey}.aggregate`);\n }\n\n // Custom aggregate mode\n if (mode === 'sum') {\n attrValue.rollup = groupedData => (\n groupedData.map(d => Number(d[key])).reduce((a, c) => a + c, 0)\n );\n } else if (mode === 'avg') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const validData = groupedData.filter(d => !Number.isNaN(Number(d[key])));\n return validData\n .map(d => Number(d[key]))\n .reduce((a, c) => a + c, 0) / validData.length;\n };\n } else if (mode === 'count') {\n attrValue.rollup = groupedData => groupedData.length;\n } else if (mode === 'min') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return groupedValues.reduce((min, p) => (p < min ? p : min), groupedValues[0]);\n };\n } else if (mode === 'max') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return groupedValues.reduce((max, p) => (p > max ? p : max), groupedValues[0]);\n };\n } else if (mode.indexOf('percentile') !== -1) {\n const percentile = utils.toNumber(mode);\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return utils.quantile(groupedValues, percentile);\n };\n } else if (typeof (attrValue.rollup) === 'function') {\n attrValue.rollup = attrValue.rollup.bind(this.maptable);\n }\n\n // Custom scale\n if (scale) {\n if (scale.indexOf('log') !== -1) {\n scaleToUse = d3.scale.log().base(utils.toNumber(scale) || 10);\n } else if (scale.indexOf('pow') !== -1) {\n scaleToUse = d3.scale.pow().exponent(utils.toNumber(scale) || 1);\n } else if (scale === 'sqrt') {\n scaleToUse = d3.scale.sqrt();\n }\n // Rank scale neeed additional transformations\n }\n }\n\n // Dynamic value based on a scale\n if (!attrValue.rollup) {\n attrValue.rollup = d => d.length;\n }\n if (!attrValue.min || !attrValue.max) {\n throw new Error(`MapTable: You should provide values 'min' & 'max' for attr.${attrKey}`);\n }\n\n dataset.forEach((d) => {\n const aggregatedValue = attrValue.rollup(d.values);\n if (!d.attrProperties) d.attrProperties = {};\n if (!d.attrProperties[attrKey]) d.attrProperties[attrKey] = {};\n d.attrProperties[attrKey].value = aggregatedValue;\n if (key) {\n d.attrProperties[attrKey].key = key;\n d.attrProperties[attrKey].mode = mode;\n d.attrProperties[attrKey].scale = scale;\n const c = this.maptable.columnDetails[key];\n d.attrProperties[attrKey].columnDetails = c;\n const datum = {};\n datum[key] = aggregatedValue;\n d.attrProperties[attrKey].formatted = (c && c.cellContent)\n ? c.cellContent.bind(this.maptable)(datum)\n : aggregatedValue;\n }\n });\n if (scale === 'rank') {\n const positiveRanks = utils.uniqueValues([0].concat(dataset\n .map(d => Math.floor(d.attrProperties[attrKey].value * 100) / 100).filter(v => v > 0)));\n const negativeRanks = utils.uniqueValues(dataset\n .map(d => Math.floor(d.attrProperties[attrKey].value * 100) / 100).filter(v => v < 0));\n\n positiveRanks.sort((a, b) => a - b);\n negativeRanks.sort((a, b) => b - a);\n\n dataset.forEach((d) => {\n if (d.attrProperties[attrKey].value !== 0) {\n const ranks = d.attrProperties[attrKey].value >= 0 ? positiveRanks : negativeRanks;\n const pos = ranks.indexOf(Math.floor(d.attrProperties[attrKey].value * 100) / 100);\n const percentile = Math.round(pos / ranks.length * 100);\n const newValue = d.attrProperties[attrKey].value < 0\n ? percentile - (percentile * 2)\n : percentile;\n d.attrProperties[attrKey].value = newValue;\n }\n });\n }\n\n const scaleDomain = d3.extent(dataset, d => Number(d.attrProperties[attrKey].value));\n if (attrValue.transform) {\n scaleDomain[0] = attrValue.transform\n .bind(this.maptable)(scaleDomain[0], this.maptable.data);\n scaleDomain[1] = attrValue.transform\n .bind(this.maptable)(scaleDomain[1], this.maptable.data);\n }\n\n let minValue = attrValue.min;\n let maxValue = attrValue.max;\n\n if (attrValue.min === 'minValue') {\n minValue = scaleDomain[0];\n }\n if (attrValue.max === 'maxValue') {\n maxValue = scaleDomain[1];\n }\n\n // check for negative color declarations\n if ((attrValue.maxNegative && !attrValue.minNegative)\n || (!attrValue.maxNegative && attrValue.minNegative)) {\n throw new Error('MapTable: maxNegative or minNegative undefined. Please declare both.');\n }\n const useNegative = (attrValue.maxNegative && attrValue.minNegative);\n let scaleFunction;\n let scaleNegativeFunction;\n\n if (useNegative) {\n scaleFunction = scaleToUse.copy()\n .domain([0, scaleDomain[1]])\n .range([minValue, maxValue]);\n scaleNegativeFunction = scaleToUse.copy()\n .domain([scaleDomain[0], 0])\n .range([attrValue.maxNegative, attrValue.minNegative]);\n } else {\n scaleFunction = scaleToUse\n .domain(scaleDomain)\n .range([minValue, maxValue]);\n }\n\n\n dataset.forEach((d) => {\n let scaledValue;\n if (!d.values.length || Number.isNaN(d.attrProperties[attrKey].value)) {\n if (typeof (attrValue.empty) === 'undefined') {\n throw new Error(`MapTable: no empty property found for attr.${attrKey}`);\n }\n scaledValue = attrValue.empty;\n } else {\n const originalValueRaw = d.attrProperties[attrKey].value;\n const originalValue = (attrValue.transform)\n ? attrValue.transform.bind(this.maptable)(originalValueRaw, this.maptable.data)\n : originalValueRaw;\n\n if (useNegative && originalValue < 0) {\n scaledValue = scaleNegativeFunction(originalValue);\n } else {\n scaledValue = scaleFunction(originalValue);\n }\n if (originalValue === 0 && attrValue.empty) {\n scaledValue = attrValue.empty;\n }\n }\n d.attr[attrKey] = scaledValue;\n });\n } else {\n throw new Error(`Maptable: Invalid value for ${attrKey}`);\n }\n }\n\n render() {\n if (this.options.markers) this.updateMarkers();\n if (this.options.countries) this.updateCountries();\n if (this.options.title) this.updateTitle();\n if (this.options.heatmap) this.updateHeatmap();\n if (this.options.autoFitContent) {\n this.fitContent();\n this.rescale();\n }\n // On render\n if (this.options.onRender && this.options.onRender.constructor === Function) {\n this.options.onRender.bind(this.maptable)();\n }\n }\n\n updateTitle() {\n if (this.options.title.content) {\n const showing = this.maptable.data.filter(d => d[this.options.latitudeKey] !== 0).length;\n const total = this.maptable.rawData.filter(d => d[this.options.latitudeKey] !== 0).length;\n\n let inlineFilters = '';\n if (this.maptable.filters) {\n inlineFilters = this.maptable.filters.getDescription();\n }\n\n this.container.querySelector('#mt-map-title').innerHTML = this.options.title\n .content.bind(this.maptable)(showing, total, inlineFilters, this.maptable.data,\n this.maptable.rawData, this.dataCountries);\n }\n }\n\n activateTooltip(target, tooltipNode, tooltipContent, isCountry) {\n const self = this;\n target.on(isCountry ? 'mousemove' : 'mouseover', function (d) {\n const content = tooltipContent.bind(this.maptable)(d);\n if (!content) return;\n tooltipNode.html(content).attr('style', 'display:block;position:fixed;');\n\n let mouseLeft;\n let mouseTop;\n const tooltipDelta = tooltipNode.node().offsetWidth / 2;\n if (isCountry) {\n const mapRect = self.node.getBoundingClientRect();\n const mousePosition = d3.mouse(self.svg.node()).map(v => parseInt(v, 10));\n\n mouseLeft = mapRect.left + mousePosition[0] - tooltipDelta;\n mouseTop = mapRect.top + mousePosition[1] + 10;\n } else {\n const targetRect = this.getBoundingClientRect();\n mouseLeft = (targetRect.left + (targetRect.width / 2) - tooltipDelta);\n mouseTop = (targetRect.top + targetRect.height + 2); // +2 is for the border\n }\n\n tooltipNode.attr(\n 'style',\n `top:${mouseTop}px;left:${mouseLeft}px;display:block;position:fixed;`,\n )\n .on('mouseout', () => {\n tooltipNode.style('display', 'none');\n });\n })\n .on('mouseout', () => {\n tooltipNode.style('display', 'none');\n });\n }\n\n exportSvg() {\n // Get the d3js SVG element\n const svg = this.container.querySelector('#mt-map-svg');\n // Extract the data as SVG text string\n const svgXml = `\n${(new XMLSerializer()).serializeToString(svg)}`;\n\n if (this.options.exportSvgClient) {\n if (!window.saveAs) {\n throw new Error('MapTable: Missing FileSaver.js library');\n }\n const blob = new Blob([svgXml], { type: 'image/svg+xml' });\n window.saveAs(blob, 'visualization.svg');\n } else if (this.options.exportSvg) {\n const form = this.node.querySelector('#mt-map-svg-form');\n form.querySelector('[name=\"data\"]').value = svgXml;\n form.submit();\n }\n }\n\n addExportSvgCapability() {\n const exportNode = document.createElement('div');\n exportNode.setAttribute('id', 'mt-map-export');\n this.container.querySelector('#mt-map').appendChild(exportNode);\n\n const exportButton = document.createElement('button');\n exportButton.setAttribute('class', 'btn btn-xs btn-default');\n exportButton.innerHTML = 'Download';\n exportButton.addEventListener('click', this.exportSvg.bind(this));\n exportNode.appendChild(exportButton);\n\n if (this.options.exportSvg) {\n const exportForm = document.createElement('div');\n exportForm.innerHTML = `
`;\n exportNode.appendChild(exportForm);\n }\n }\n}\n","import utils from '../utils';\n\nexport default class Filters {\n constructor(maptable, options) {\n this.maptable = maptable;\n this.options = options;\n this.criteria = [];\n\n if (this.options.show) {\n const arrayDiff = this.options.show\n .filter(i => Object.keys(this.maptable.columnDetails).indexOf(i) < 0);\n if (arrayDiff.length > 0) {\n throw new Error(`MapTable: invalid columns \"${arrayDiff.join(', ')}\"`);\n }\n this.activeColumns = this.options.show;\n } else {\n this.activeColumns = Object.keys(this.maptable.columnDetails);\n }\n\n this.container = document.createElement('div');\n this.maptable.node.appendChild(this.container);\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n this.node = this.container.querySelector('#mt-filters');\n\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-filters');\n this.node.setAttribute('class', 'panel panel-default');\n this.maptable.node.appendChild(this.node);\n }\n\n // -- Filters Header\n\n const filtersHeaderNode = document.createElement('div');\n filtersHeaderNode.setAttribute('class', 'panel-heading');\n\n const filtersResetNode = document.createElement('button');\n filtersResetNode.setAttribute('id', 'mt-filters-reset');\n filtersResetNode.setAttribute('class', 'btn btn-default btn-xs pull-right');\n filtersResetNode.style.display = 'none';\n filtersResetNode.style.marginLeft = 5;\n filtersResetNode.innerText = '↺ Reset';\n filtersResetNode.addEventListener('click', this.reset);\n filtersHeaderNode.appendChild(filtersResetNode);\n\n const filtersTitleNode = document.createElement('h3');\n filtersTitleNode.setAttribute('class', 'panel-title');\n filtersTitleNode.appendChild(document.createTextNode('Filters'));\n filtersHeaderNode.appendChild(filtersTitleNode);\n\n this.node.appendChild(filtersHeaderNode);\n\n // -- Filters Content\n const filtersBodyNode = document.createElement('div');\n filtersBodyNode.setAttribute('id', 'mt-filters-content');\n filtersBodyNode.setAttribute('class', 'panel-body');\n\n const filtersElementsNode = document.createElement('div');\n filtersElementsNode.setAttribute('id', 'mt-filters-elements');\n filtersBodyNode.appendChild(filtersElementsNode);\n\n const filtersNewNode = document.createElement('a');\n filtersNewNode.setAttribute('id', 'mt-filters-new');\n filtersNewNode.setAttribute('href', '#');\n filtersNewNode.innerText = '+ New filter';\n filtersNewNode.addEventListener('click', this.add.bind(this));\n filtersBodyNode.appendChild(filtersNewNode);\n\n this.node.appendChild(filtersBodyNode);\n }\n\n /**\n * Add a filter\n * @param evt: Window Event Object\n */\n add(evt) {\n if (evt) evt.preventDefault();\n const possibleFilters = this.getPossibleFilters();\n\n if (possibleFilters.length === 0) {\n return;\n }\n const filterName = possibleFilters[0].key;\n this.create(filterName);\n }\n\n create(filterName, replaceNode) {\n const rowNode = this.buildRow(filterName);\n if (replaceNode) {\n replaceNode.parentNode.replaceChild(rowNode, replaceNode);\n } else {\n this.node.querySelector('#mt-filters-elements').appendChild(rowNode);\n }\n this.criteria.push(filterName);\n this.maptable.render();\n if (this.container.style.display === 'none') {\n this.toggle();\n }\n }\n\n remove(filterName) {\n const rowNode = this.node.querySelector(`[data-mt-filter-name=\"${filterName}\"]`);\n if (rowNode) rowNode.parentNode.removeChild(rowNode);\n const filterIndex = this.criteria.indexOf(filterName);\n this.criteria.splice(filterIndex, 1);\n this.maptable.render();\n }\n\n /**\n * Reset filters\n */\n reset() {\n const rowNodes = this.node.querySelectorAll('[data-mt-filter-name]');\n for (let i = 0; i < rowNodes.length; i += 1) {\n rowNodes[i].parentNode.removeChild(rowNodes[i]);\n }\n this.criteria = [];\n this.maptable.render();\n }\n\n /**\n * Export the current filters to an object\n * @returns exportedFilters: Object - key => value that contain data about the current filters\n */\n exportFilters() {\n const output = {};\n const filtersChildren = this.node.querySelector('#mt-filters-elements').childNodes;\n\n for (let i = 0; i < filtersChildren.length; i += 1) {\n const element = filtersChildren[i];\n const filterName = element.querySelector('.mt-filter-name').value;\n const columnDetails = this.maptable.columnDetails[filterName];\n const filterOutput = [columnDetails.filterMethod];\n if (columnDetails.filterMethod === 'compare') {\n const filterRangeSelect = element.querySelector('.mt-filter-range');\n filterOutput[1] = filterRangeSelect.value;\n if (filterRangeSelect.value !== 'any') {\n if (filterRangeSelect.value === 'BETWEEN') {\n const filterValueMin = element.querySelector('.mt-filter-value-min').value;\n const filterValueMax = element.querySelector('.mt-filter-value-max').value;\n if (filterValueMin !== '' && filterValueMax === '') {\n filterOutput[2] = filterValueMin;\n filterOutput[3] = filterValueMax;\n }\n } else {\n const filterValue = element.querySelector('.mt-filter-value-min').value;\n filterOutput[2] = filterValue;\n }\n }\n } else if (columnDetails.filterMethod === 'field'\n || columnDetails.filterMethod === 'dropdown') {\n filterOutput[1] = '';\n const filterValue = element.querySelector('.mt-filter-value').value;\n filterOutput[2] = filterValue;\n }\n if (filterOutput[1] !== 'any' && filterOutput[2] && filterOutput[2] !== '') {\n output[filterName] = filterOutput;\n }\n }\n return output;\n }\n\n /**\n * Set the value for the current filters\n * @param criteria - Object - same format as the exportedFilters\n */\n setFilters(criteria) {\n this.reset();\n Object.keys(criteria).forEach((filterName) => {\n this.create(filterName);\n const criterion = criteria[filterName];\n const row = document\n .querySelector(`#mt-filters-elements [data-mt-filter-name=\"${filterName}\"]`);\n if (row) {\n if (criterion[0] === 'compare') {\n row.querySelector('.mt-filter-range').value = criterion[1];\n if (criterion[1] !== 'any') {\n if (criterion[1] === 'BETWEEN') {\n row.querySelector('.mt-filter-value-min').value = criterion[2];\n row.querySelector('.mt-filter-value-max').value = criterion[3];\n } else {\n row.querySelector('.mt-filter-value-min').value = criterion[2];\n }\n }\n } else if (criterion[0] === 'field' || criterion[0] === 'dropdown') {\n row.querySelector('.mt-filter-value').value = decodeURIComponent(criterion[2]);\n }\n }\n });\n this.maptable.render();\n }\n\n /**\n * Restore state from the URL hash\n */\n restoreState(defaultCriteria) {\n if (!defaultCriteria) return;\n this.setFilters(defaultCriteria);\n }\n\n /**\n * Get a human readable description of the filters (used for the title)\n * @returns {string} Human readable description\n */\n getDescription() {\n const outputArray = [];\n\n const filtersChildren = this.node.querySelector('#mt-filters-elements').childNodes;\n\n for (let i = 0; i < filtersChildren.length; i += 1) {\n const element = filtersChildren[i];\n const filterName = element.querySelector('.mt-filter-name').value;\n\n const columnDetails = this.maptable.columnDetails[filterName];\n\n let line = '';\n\n if (columnDetails.filterMethod === 'compare') {\n const filterRangeSelect = element.querySelector('.mt-filter-range');\n if (filterRangeSelect.value !== 'any') {\n if (filterRangeSelect.value === 'BETWEEN') {\n const filterValueMin = element.querySelector('.mt-filter-value-min').value;\n const filterValueMax = element.querySelector('.mt-filter-value-max').value;\n if (filterValueMin === '' || filterValueMax === '') continue;\n line += `${columnDetails.title} is between `;\n line += `${filterValueMin} and\n ${filterValueMax}`;\n } else {\n const filterValue = element.querySelector('.mt-filter-value-min').value;\n if (filterValue === '') continue;\n line += `${columnDetails.title} is `;\n line += filterRangeSelect.options[filterRangeSelect.selectedIndex].text;\n line += `${filterValue}`;\n }\n }\n } else if (columnDetails.filterMethod === 'field'\n || columnDetails.filterMethod === 'dropdown') {\n const filterValue = element.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n const separatorWord = (columnDetails.filterMethod === 'field') ? 'contains' : 'is';\n line += `${columnDetails.title} ${separatorWord}\n ${filterValue}`;\n }\n outputArray.push(line);\n }\n return outputArray.join(', ');\n }\n\n buildRow(filterName) {\n const that = this;\n\n const possibleFilters = this.getPossibleFilters();\n\n const columnDetails = this.maptable.columnDetails[filterName];\n\n const rowNode = document.createElement('div');\n rowNode.setAttribute('class', 'mt-filter-row');\n rowNode.setAttribute('data-mt-filter-name', filterName);\n\n // Button to remove filter\n const minusButton = document.createElement('button');\n minusButton.setAttribute('class', 'btn btn-default pull-right');\n minusButton.setAttribute('data-mt-filter-btn-minus', 1);\n minusButton.innerText = '– Remove this filter';\n minusButton.addEventListener('click', () => {\n filterName = rowNode.querySelector('.mt-filter-name').value;\n this.remove(filterName);\n });\n rowNode.appendChild(minusButton);\n\n // Filters separator \"AND\"\n const filterSeparator = document.createElement('span');\n filterSeparator.setAttribute('class', 'mt-filters-and');\n filterSeparator.innerText = 'And ';\n rowNode.appendChild(filterSeparator);\n\n // Filter name select\n const filterNameSelect = document.createElement('select');\n filterNameSelect.setAttribute('class', 'mt-filter-name form-control form-control-inline');\n utils.appendOptions(filterNameSelect,\n possibleFilters.map(f => ({ text: f.title, value: f.key })));\n filterNameSelect.value = filterName;\n\n filterNameSelect.addEventListener('change', function () {\n const oldFilterName = this.parentNode.getAttribute('data-mt-filter-name');\n const newFilterName = this.value;\n that.create(newFilterName, this.parentNode);\n that.remove(oldFilterName);\n that.refresh();\n });\n rowNode.appendChild(filterNameSelect);\n\n // Filter verb\n const filterVerb = document.createElement('span');\n filterVerb.innerText = (columnDetails.filterMethod === 'field') ? ' contains ' : ' is ';\n rowNode.appendChild(filterVerb);\n\n // Filter range\n let filterRange = null;\n if (columnDetails.filterMethod !== 'field' && columnDetails.filterMethod !== 'dropdown') {\n filterRange = document.createElement('select');\n filterRange.setAttribute('class', 'mt-filter-range form-control form-control-inline');\n utils.appendOptions(filterRange, ['any', '=', '≠', '<', '>', '≤', '≥', 'BETWEEN'].map(v => ({ text: v, value: v })));\n filterRange.addEventListener('change', function () {\n that.handleRangeChange(this);\n });\n rowNode.appendChild(filterRange);\n\n // Little space:\n rowNode.appendChild(document.createTextNode(' '));\n }\n\n // Filter value\n const filterValue = document.createElement('div');\n filterValue.style.display = 'inline-block';\n filterValue.setAttribute('class', 'mt-filter-value-container');\n\n if (columnDetails.filterMethod === 'compare') {\n ['min', 'max'].forEach((val, i) => {\n const filterInput = document.createElement('input');\n filterInput.setAttribute('class',\n `form-control form-control-inline mt-filter-value-${val}`);\n filterInput.setAttribute('type', columnDetails.filterInputType);\n filterInput.addEventListener('keyup', this.maptable.render.bind(this.maptable));\n filterInput.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterInput);\n if (i === 0) {\n // AND\n const filterValueAnd = document.createElement('span');\n filterValueAnd.setAttribute('class', 'mt-filter-value-and');\n filterValueAnd.innerText = ' and ';\n filterValue.appendChild(filterValueAnd);\n }\n });\n } else if (columnDetails.filterMethod === 'field') {\n const filterInput = document.createElement('input');\n filterInput.setAttribute('class', 'form-control form-control-inline mt-filter-value');\n filterInput.setAttribute('type', 'text');\n filterInput.addEventListener('keyup', this.maptable.render.bind(this.maptable));\n filterInput.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterInput);\n } else if (columnDetails.filterMethod === 'dropdown') {\n const filterSelect = document.createElement('select');\n filterSelect.setAttribute('class', 'form-control form-control-inline mt-filter-value');\n\n const uniqueValues = d3.nest().key(d => d[filterName])\n .sortKeys(d3.ascending)\n .entries(this.maptable.rawData);\n\n utils.appendOptions(filterSelect, [{ text: 'Any', value: '' }].concat(uniqueValues.map(k => ({ text: k.key, value: k.key }))));\n\n filterSelect.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterSelect);\n }\n\n rowNode.appendChild(filterValue);\n\n // We trigger it here to handle the value of the filter range\n if (filterRange) {\n this.handleRangeChange(filterRange);\n }\n\n return rowNode;\n }\n\n handleRangeChange(filterRange) {\n const rowNode = filterRange.parentNode;\n if (filterRange.value === 'any') {\n rowNode.querySelector('.mt-filter-value-container').style.display = 'none';\n } else {\n rowNode.querySelector('.mt-filter-value-container').style.display = 'inline-block';\n if (filterRange.value === 'BETWEEN') {\n rowNode.querySelector('.mt-filter-value-min').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-and').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-max').style.display = 'inline-block';\n } else {\n rowNode.querySelector('.mt-filter-value-min').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-and').style.display = 'none';\n rowNode.querySelector('.mt-filter-value-max').style.display = 'none';\n }\n }\n }\n\n getPossibleFilters(except) {\n return Object.keys(this.maptable.columnDetails)\n .map(k => utils.extendRecursive({ key: k }, this.maptable.columnDetails[k]))\n .filter(v => (this.activeColumns.indexOf(v.key) !== -1)\n && (\n (except && except === v.key)\n || (this.criteria.indexOf(v.key) === -1 && v.filterMethod && !v.isVirtual)\n ));\n }\n\n filterData() {\n const that = this;\n this.maptable.data = this.maptable.rawData.filter((d) => {\n const rowNodes = this.node.querySelectorAll('.mt-filter-row');\n let matched = true;\n for (let i = 0; i < rowNodes.length && matched; i += 1) {\n const rowNode = rowNodes[i];\n const filterName = rowNode.getAttribute('data-mt-filter-name');\n const columnDetails = that.maptable.columnDetails[filterName];\n const fmt = columnDetails.dataParse; // shortcut\n\n if (columnDetails.filterMethod === 'dropdown') {\n const filterValue = rowNode.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n if (d[filterName] !== filterValue) matched = false;\n } else if (columnDetails.filterMethod === 'field') {\n const filterValue = rowNode.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n if (d[filterName].toLowerCase().indexOf(filterValue.toLowerCase()) === -1) {\n matched = false;\n }\n } else if (columnDetails.filterMethod === 'compare') {\n const filterRange = rowNode.querySelector('.mt-filter-range').value;\n if (filterRange === 'BETWEEN') {\n const filterValueMin = rowNode.querySelector('.mt-filter-value-min').value;\n const filterValueMax = rowNode.querySelector('.mt-filter-value-max').value;\n if (filterValueMin === '' || filterValueMax === '') continue;\n if (fmt\n && (fmt(d[filterName]) < fmt(filterValueMin)\n || fmt(d[filterName]) > fmt(filterValueMax))\n ) {\n matched = false;\n } else if (\n parseInt(d[filterName], 10) < parseInt(filterValueMin, 10)\n || parseInt(d[filterName], 10) > parseInt(filterValueMax, 10)\n ) {\n matched = false;\n }\n } else {\n const filterValue = rowNode.querySelector('.mt-filter-value-min').value;\n if (filterValue === '') continue;\n if (fmt && !utils.rangeToBool(fmt(d[filterName]), filterRange, fmt(filterValue))) {\n matched = false;\n } else if (!fmt && !utils.rangeToBool(d[filterName], filterRange, filterValue)) {\n matched = false;\n }\n }\n }\n }\n return matched;\n });\n // save state\n if (this.options.saveState) this.maptable.saveState('filters', this.exportFilters());\n }\n\n refresh() {\n // update dropdown\n const filterNameSelects = this.node.querySelectorAll('.mt-filter-name');\n for (let i = 0; i < filterNameSelects.length; i += 1) {\n const filterNameSelect = filterNameSelects[i];\n const filterName = filterNameSelect.value;\n const possibleFilters = this.getPossibleFilters(filterName);\n filterNameSelect.innerHTML = '';\n utils.appendOptions(filterNameSelect,\n possibleFilters.map(f => ({ text: f.title, value: f.key })));\n filterNameSelect.value = filterName;\n }\n\n // Hide the first \"And\"\n if (this.node.querySelectorAll('.mt-filters-and').length > 0) {\n this.node.querySelectorAll('.mt-filters-and')[0].style.visibility = 'hidden';\n }\n\n // Check if we reached the maximum of allowed filters\n const disableNewFilter = (!this.getPossibleFilters().length);\n this.node.querySelector('#mt-filters-new').style.visibility = disableNewFilter\n ? 'hidden' : 'visible';\n }\n\n toggle() {\n if (this.container.style.display === 'none') {\n this.container.style.display = 'block';\n if (this.criteria.length === 0) {\n this.add();\n }\n } else {\n this.container.style.display = 'none';\n }\n }\n}\n","import utils from '../utils';\n\nexport default class Table {\n /**\n * Table componenet constructor\n * @param maptable: Maptable main Object\n * @param options: options communicated to the table\n * @returns {string|*}\n */\n constructor(maptable, options) {\n this.maptable = maptable;\n this.options = options;\n\n if (this.options.defaultSorting) {\n if (Array.isArray(this.options.defaultSorting) && this.options.defaultSorting.length === 2) {\n this.sorting = this.options.defaultSorting;\n } else {\n this.sorting = [this.options.defaultSorting];\n }\n this.sorting.forEach((s) => {\n if (!s.mode) s.mode = 'asc';\n });\n } else {\n this.sorting = [\n {\n key: Object.keys(this.maptable.data[0])[0],\n mode: 'asc',\n },\n ];\n }\n\n this.initialSorting = this.sorting.map(s => `${s.key},${s.mode}`).join(';');\n this.isSorting = false;\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n\n this.node = this.container.querySelector('#mt-table');\n\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-table');\n this.maptable.node.appendChild(this.node);\n }\n\n this.node = d3.select(this.node)\n .append('table')\n .attr('class', this.options.className);\n\n this.header = this.node.append('thead');\n\n this.body = this.node.append('tbody');\n\n if (this.options.show) {\n const arrayDiff = this.options.show\n .filter(i => Object.keys(this.maptable.columnDetails).indexOf(i) < 0);\n if (arrayDiff.length > 0) {\n throw new Error(`MapTable: invalid columns \"${arrayDiff.join(', ')}\"`);\n }\n this.activeColumns = this.options.show;\n } else {\n this.activeColumns = Object.keys(this.maptable.columnDetails);\n }\n\n this.header.selectAll('tr')\n .data([1])\n .enter()\n .append('tr')\n .selectAll('th')\n .data(this.activeColumns\n .map(k => utils.extendRecursive({ key: k }, this.maptable.columnDetails[k])))\n .enter()\n .append('th')\n .attr('class', (d) => {\n let output = (d.sorting) ? 'mt-table-sortable' : '';\n output += (d.nowrap) ? ' nowrap' : '';\n return output;\n })\n .attr('data-key', d => utils.sanitizeKey(d.key))\n .attr('onselectstart', 'return false;')\n .attr('unselectable', 'on')\n .attr('style', d => ((d.nowrap) ? 'white-space:nowrap;' : ''))\n .on('click', (d) => {\n if (this.isSorting) return;\n this.isSorting = true;\n if (d.sorting) {\n this.sortColumn(d.key);\n }\n this.isSorting = false;\n })\n .text(d => d.title)\n .attr('id', d => `column_header_${utils.sanitizeKey(d.key)}`);\n\n // render is triggered by MapTable\n // this.render();\n }\n\n /**\n * Restore state from the url hash\n */\n restoreState(sortingRaw) {\n if (!sortingRaw) return;\n const sortingList = sortingRaw.split(';');\n const defaultSorting = [];\n sortingList.forEach((s) => {\n const sortingData = s.split(',');\n defaultSorting.push({\n key: sortingData[0],\n mode: sortingData[1] || 'asc',\n });\n });\n this.sorting = defaultSorting;\n }\n\n /**\n * Save state into the url hash\n */\n saveState() {\n const encodedSorting = this.sorting.map(s => `${s.key},${s.mode}`).join(';');\n if (encodedSorting !== this.initialSorting) {\n this.maptable.saveState('sort', encodedSorting);\n }\n }\n\n\n render() {\n // Apply Sort\n this.applySort();\n\n\n let tableData = this.maptable.data;\n if (this.options.distinctBy) {\n tableData = d3.nest()\n .key(d => d[this.options.distinctBy])\n .entries(this.maptable.data)\n .map(g => g.values[0]);\n }\n\n // Enter\n this.body.selectAll('tr')\n .data(tableData)\n .enter()\n .append('tr');\n\n // Exit\n this.body.selectAll('tr')\n .data(tableData)\n .exit()\n .remove();\n\n // Update\n const uniqueCollapsedRows = [];\n this.body.selectAll('tr')\n .data(tableData)\n .attr('class', (row) => {\n if (this.options.rowClassName) {\n return `line ${this.options.rowClassName(row)}`;\n }\n return 'line';\n })\n .html((row) => {\n let tds = '';\n this.activeColumns.forEach((columnKey) => {\n const column = this.maptable.columnDetails[columnKey];\n tds += ' {\n this.container.querySelector(`#column_header_${utils.sanitizeKey(column.key)}`)\n .setAttribute('class', `mt-table-sortable sort_${column.mode}`);\n });\n this.maptable.data = this.maptable.data.sort((a, b) => {\n let compareBool = false;\n this.sorting.forEach((column) => {\n const d3SortMode = (column.mode === 'asc') ? d3.ascending : d3.descending;\n const columnDetails = this.maptable.columnDetails[column.key];\n let el1 = a[column.key];\n let el2 = b[column.key];\n if (columnDetails.dataParse) {\n el1 = columnDetails.dataParse.bind(this.maptable)(el1);\n el2 = columnDetails.dataParse.bind(this.maptable)(el2);\n } else if (columnDetails.virtual) {\n el2 = columnDetails.virtual.bind(this.maptable)(a);\n el2 = columnDetails.virtual.bind(this.maptable)(b);\n } else if (columnDetails.filterType === 'compare') {\n el1 = Number(el1);\n el2 = Number(el2);\n } else if (el1 instanceof String && el2 instanceof String) {\n el1 = el1.toLowerCase();\n el2 = el2.toLowerCase();\n }\n compareBool = compareBool || d3SortMode(el1, el2);\n });\n return compareBool;\n });\n }\n\n /**\n * Sort Table by a column key\n * @param columnKey: String - column key\n */\n sortColumn(key) {\n const sortIndex = this.sorting.map(d => d.key).indexOf(key);\n const sortValue = { key };\n if (sortIndex === -1) {\n sortValue.mode = 'asc';\n if (d3.event && d3.event.shiftKey) {\n this.sorting[1] = sortValue;\n } else {\n this.sorting = [sortValue];\n }\n } else {\n if (this.sorting[sortIndex].mode === 'asc') {\n this.sorting[sortIndex].mode = 'desc';\n } else {\n this.sorting[sortIndex].mode = 'asc';\n // this.sorting.splice(sortIndex, 1); // to disable sorting\n }\n if (!d3.event.shiftKey) {\n this.sorting = [this.sorting[sortIndex]];\n }\n }\n\n this.saveState();\n this.render();\n }\n}\n","import utils from './utils';\n\nimport GeoMap from './components/GeoMap';\nimport Filters from './components/Filters';\nimport Table from './components/Table';\n\nexport default class MapTable {\n constructor(target, options) {\n this.options = options;\n\n this.state = {};\n this.saveStateTimeout = {};\n this.removeStateTimeout = null;\n\n this.node = document.querySelector(target);\n this.node.setAttribute('style', 'position:relative;');\n\n if (this.options.data.type === 'json') {\n d3.json(this.options.data.path, this.loadData.bind(this));\n } else if (this.options.data.type === 'csv') {\n d3.csv(this.options.data.path, this.loadData.bind(this));\n } else if (this.options.data.type === 'tsv') {\n d3.tsv(this.options.data.path, this.loadData.bind(this));\n }\n\n if (this.options.map && this.options.map.heatmap) {\n delete this.options.map.countries;\n }\n }\n\n /**\n * Callback used when we pull the dataset\n * @param err: Error - error data if it happened\n * @param data: Object - dataset object\n */\n loadData(err, data) {\n if (err) {\n throw err;\n }\n this.rawData = data;\n\n if (this.options.data.preFilter) {\n this.rawData = this.rawData.filter(this.options.data.preFilter);\n }\n\n this.setColumnDetails();\n this.data = this.rawData.slice(); // we clone data, so that we can filter it\n // Map\n if (this.options.map) {\n // Map wrapper\n const mapWrapper = document.createElement('div');\n mapWrapper.setAttribute('class', 'mt-map-container');\n const isIE = (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0);\n if (this.options.map.heatmap && isIE) {\n mapWrapper.innerHTML = '
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
';\n this.node.insertBefore(mapWrapper, this.node.firstChild);\n mapWrapper.querySelector('.mt-loading').style.display = 'block';\n this.options.map = false;\n this.buildComponenents();\n return;\n }\n mapWrapper.innerHTML = '
Loading...
';\n this.node.insertBefore(mapWrapper, this.node.firstChild);\n mapWrapper.querySelector('.mt-loading').style.display = 'block';\n d3.json(this.options.map.path, (errGeoMap, jsonWorld) => {\n if (errGeoMap) {\n throw errGeoMap;\n }\n this.map = new GeoMap(this, this.options.map, jsonWorld);\n\n mapWrapper.querySelector('.mt-loading').style.display = 'none';\n\n this.buildComponenents();\n });\n } else {\n this.buildComponenents();\n }\n }\n\n buildComponenents() {\n // Filters\n if (this.options.filters) {\n this.filters = new Filters(this, this.options.filters);\n }\n\n // Table\n if (this.options.table) {\n this.table = new Table(this, this.options.table);\n }\n\n // Restore state\n this.restoreState();\n window.addEventListener('hashchange', () => {\n this.restoreState();\n });\n\n // Render\n this.render();\n }\n\n /**\n * Load state from url\n * @param stateName: name of the state (either filters or zoom)\n * @param isJson: do we need to decode a json from the state?\n * @return loaded state\n */\n loadState(stateName, isJson) {\n // JSON state\n if (isJson) {\n const v = this.parseState(stateName);\n if (!v) return null;\n try {\n const parsedState = JSON.parse(v);\n this.state[stateName] = parsedState;\n } catch (e) {\n console.log(`Maptable: Invalid URL State for mt-${stateName} ${e.message}`);\n return null;\n }\n } else {\n const v = this.parseState(stateName);\n if (v) this.state[stateName] = v;\n }\n return this.state[stateName];\n }\n\n /**\n * Restore state for filters or/and map zooming and/or sorting\n */\n restoreState() {\n if (this.map) {\n this.loadState('zoom', true);\n this.map.restoreState(this.state.zoom);\n }\n\n if (this.filters) {\n this.loadState('filters', true);\n this.filters.restoreState(this.state.filters);\n }\n\n if (this.table) {\n this.loadState('sort', false);\n this.table.restoreState(this.state.sort);\n }\n }\n\n /**\n * Extract state from the url\n * @param stateName: name of the state (either filters or zoom)\n */\n parseState(stateName) {\n const params = document.location.href.replace(/%21mt/g, '!mt').split(`!mt-${stateName}=`);\n return (params[1]) ? decodeURIComponent(params[1].split('!mt')[0]) : null;\n }\n\n /**\n * Remove state\n * @param stateName: name of the state (either filters or zoom)\n */\n removeState(stateName) {\n window.clearTimeout(this.saveStateTimeout[stateName]);\n delete this.state[stateName];\n this.updateState();\n }\n\n /**\n * Save the state in this.state\n * @param stateName: name of the state (either filters or zoom)\n * @param stateData: object, contain state information\n */\n saveState(stateName, stateData) {\n window.clearTimeout(this.saveStateTimeout[stateName]);\n this.saveStateTimeout[stateName] = window.setTimeout(() => {\n this.state[stateName] = stateData;\n this.updateState();\n }, 200);\n }\n\n /**\n * Update state into the URL hash\n */\n updateState() {\n const newUrl = document.location.href.split('#')[0];\n let stateHash = '';\n Object.keys(this.state).forEach((k) => {\n if (!this.state[k]) return;\n let stateValue = this.state[k];\n if (typeof (this.state[k]) === 'object') {\n if (!Object.keys(this.state[k]).length) return;\n stateValue = JSON.stringify(this.state[k]);\n }\n stateHash += `!mt-${k}=${encodeURIComponent(stateValue)}`;\n });\n if (stateHash !== '') stateHash = `#${stateHash}`;\n if (document.location.href !== `${newUrl}${stateHash}`) {\n window.history.pushState(null, null, `${newUrl}${stateHash}`);\n }\n }\n\n render() {\n if (this.filters) {\n this.filters.filterData();\n this.filters.refresh();\n }\n\n if (this.map) {\n this.map.render();\n // On complete\n if (!this.firstExecution\n && this.options.map.onComplete\n && this.options.map.onComplete.constructor === Function\n ) {\n this.options.map.onComplete.bind(this)();\n }\n }\n\n if (this.table) {\n this.table.render();\n // On complete\n if (!this.firstExecution\n && this.options.table.onComplete\n && this.options.table.onComplete.constructor === Function\n ) {\n this.options.table.onComplete.bind(this)();\n }\n }\n\n // On complete\n if (!this.firstExecution\n && this.options.onComplete\n && this.options.onComplete.constructor === Function\n ) {\n this.options.onComplete.bind(this)();\n }\n this.firstExecution = true;\n }\n\n setColumnDetails() {\n const that = this;\n if (that.rawData.length === 0) {\n return;\n }\n const defaultColumns = {};\n\n Object.keys(that.rawData[0]).forEach((k) => {\n const patternNumber = /^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/;\n const isNumber = (patternNumber.test(that.rawData[0][k]));\n defaultColumns[k] = {\n title: utils.keyToTile(k),\n filterMethod: (isNumber) ? 'compare' : 'field',\n filterInputType: (isNumber) ? 'number' : 'text',\n sorting: true,\n };\n if (isNumber) {\n defaultColumns[k].dataParse = val => parseFloat(val);\n }\n });\n that.columnDetails = utils.extendRecursive(defaultColumns, this.options.columns);\n\n // add isVirtual to columns details\n Object.keys(that.columnDetails).forEach((k) => {\n that.columnDetails[k].isVirtual = (typeof (that.columnDetails[k].virtual) === 'function');\n });\n }\n}\n","/* eslint no-unused-vars: 0 */\nimport utils from './utils';\nimport defaultOptions from './defaultOptions';\nimport MapTable from './maptable';\n\nd3.maptable = function (target) {\n let maptableObject;\n const maptable = {};\n const options = {\n target,\n columns: {},\n data: {},\n map: null,\n filters: null,\n table: null,\n };\n\n maptable.map = function (mapOptions = {}) {\n if (!topojson) {\n throw new Error('Maptable requires topojson.js');\n }\n if (typeof (mapOptions.path) !== 'string') {\n throw new Error('MapTable: map not provided');\n }\n options.map = mapOptions;\n return maptable;\n };\n\n maptable.json = function (jsonPath, preFilter) {\n options.data.type = 'json';\n options.data.path = jsonPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.csv = function (csvPath, preFilter) {\n options.data.type = 'csv';\n options.data.path = csvPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.tsv = function (tsvPath, preFilter) {\n options.data.type = 'tsv';\n options.data.path = tsvPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.filters = function (filtersOptions = {}) {\n options.filters = filtersOptions;\n return maptable;\n };\n\n maptable.table = function (tableOptions = {}) {\n options.table = tableOptions;\n return maptable;\n };\n\n maptable.columns = function (columns = {}) {\n options.columns = columns;\n return maptable;\n };\n\n maptable.render = function (onComplete) {\n if (typeof (target) !== 'string' || !document.querySelector(target)) {\n throw new Error('MapTable: target not found');\n }\n\n if (!options.data || !options.data.path) {\n throw new Error('MapTable: Please provide the path for your dataset json|csv|tsv');\n }\n\n if (options.map && !options.map.heatmap) options.map.heatmap = null;\n\n if (options.map && options.map.markers === false) options.map.markers = null;\n\n if (options.map && options.map.countries === false) options.map.countries = null;\n\n if (!options.filters) options.filters = null;\n options.onComplete = onComplete;\n\n const customOptions = utils.extendRecursive(defaultOptions, options);\n maptableObject = new MapTable(target, customOptions);\n\n // public functions\n return {\n render: () => maptableObject.render(),\n loadState: (stateName, isJson) => maptableObject.loadState(stateName, isJson),\n removeState: stateName => maptableObject.removeState(stateName),\n saveState: (stateName, stateData) => maptableObject.saveState(stateName, stateData),\n };\n };\n return maptable;\n};\n\nif (!d3) {\n throw new Error('Maptable requires d3.js');\n}\n\nexport default d3.maptable;\n"],"names":["appendOptions","select","options","defaultValue","forEach","f","option","document","createElement","setAttribute","value","innerText","text","appendChild","rangeToBool","el1","range","el2","parseInt","extendRecursive","dst","src","args","splice","call","arguments","toString","length","Object","keys","p","keyToTile","k","upperK","charAt","toUpperCase","slice","replace","sanitizeKey","toLowerCase","toNumber","str","Number","quantile","array","percentile","sort","a","b","index","result","Math","floor","i","fraction","uniqueValues","arr","l","indexOf","push","map","longitudeKey","latitudeKey","countryIdentifierKey","countryIdentifierType","zoom","saveState","exportSvg","exportSvgClient","ratioFromWidth","scaleHeight","scaleZoom","fitContentMargin","autoFitContent","tooltipClassName","countries","legend","attr","fill","stroke","heatmap","mask","weightByAttribute","weightByAttributeScale","circles","min","max","step","color","colorStrength","blur","borders","opacity","markers","r","title","fontSize","fontFamily","filters","table","className","collapseRowsBy","Legend","legendWidth","node","svg","append","getWidth","getHeight","buildIndice","domain","legendGradient","minNegative","maxNegative","midPercentNegative","round","midPercentPositive","indice","style","selectAll","buildScale","val","isNaN","maxValue","minValue","positionDelta","position","width","height","padding","console","warn","window","btoa","buildWatermark","d3","xhr","res","mapWatermarkDelta","mime","x","y","dataUri","responseText","pos","split","mul_table","shg_table","processImage","img","canvas","radius","blurAlphaChannel","getElementById","HTMLImageElement","w","naturalWidth","h","naturalHeight","HTMLCanvasElement","context","getContext","clearRect","drawImage","processCanvasRGBA","processCanvasRGB","getImageDataFromCanvas","top_x","top_y","imageData","getImageData","e","Error","processImageDataRGBA","putImageData","pixels","data","yp","yi","yw","r_sum","g_sum","b_sum","a_sum","r_out_sum","g_out_sum","b_out_sum","a_out_sum","r_in_sum","g_in_sum","b_in_sum","a_in_sum","pr","pg","pb","pa","rbs","div","w4","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","next","stackEnd","stackIn","stackOut","mul_sum","shg_sum","g","processImageDataRGB","image","canvasRGBA","canvasRGB","imageDataRGBA","imageDataRGB","GeoMap","maptable","jsonWorld","self","scale","transX","transY","containerSelector","target","container","querySelector","mapWrapper","existingMap","parentNode","insertBefore","removeChild","projection","geo","equirectangular","translate","rotate","precision","path","rawData","d","longitude","parseFloat","latitude","coord","zoomListener","behavior","scaleExtent","on","rescale","bind","tooltipMarkersNode","tooltipCountriesNode","layerGlobal","layerCountries","layerHeatmap","layerMarkers","watermark","Watermark","buildTitle","addExportSvgCapability","addEventListener","loadGeometries","pow","offsetWidth","deltaHeight","filterCountries","objects","geometries","filter","buildCountries","buildHeatmap","lands","topojson","merge","disableMask","maskHeatmap","datum","imgHeatmap","mesh","bordersHeatmap","enter","heatmapDataset","opts","lengthDataset","maxOpacityScale","linear","centralCircleOpacity","m","dataExtents","extent","userScale","log","canvasHeatmap","ctx","globalCompositeOperation","datumScale","getDatumScale","magnitudeScale","getMagnitudeScale","colorScale","beginPath","rect","fillStyle","closePath","colorMultiplier","aa","point","scaleOpacityDatum","circle","origin","angle","StackBlur","dataUrl","toDataURL","remove","getHeatmapData","dataCountries","feature","features","insert","legendCountry","shouldRenderLegend","aggregate","dataByCountry","nest","key","entries","geoDatum","properties","matchedCountry","uDatum","values","rollupValue","setAttrValues","countryItem","each","targetPath","attrKey","attrValue","scaleDomain","attrProperties","updateExtents","indiceChange","NaN","tooltip","activateTooltip","defaultGroupBy","dataMarkers","markerItem","markerObject","customTag","markerClassName","exit","transition","attrX","attrY","attrXDelta","attrYDelta","markerUpdate","hor","ver","ratio","deltaMarker","currentWidth","currentHeight","realHeight","realWidth","diffMarginWidth","diffMarginHeight","titleContainer","bgColor","source","html","originalTranslation","newTx","newTy","encodedTranslation","defaultZoom","decodeTranslation","event","encodeTranslation","exportedData","removeState","maxTransX","maxTransY","minTransX","minTransY","scaleAttributes","firstExecution","dataset","mode","scaleToUse","rollup","groupedData","reduce","c","validData","groupedValues","utils","base","exponent","sqrt","aggregatedValue","columnDetails","formatted","cellContent","positiveRanks","concat","v","negativeRanks","ranks","newValue","transform","useNegative","scaleFunction","scaleNegativeFunction","copy","scaledValue","empty","originalValueRaw","originalValue","updateMarkers","updateCountries","updateTitle","updateHeatmap","fitContent","onRender","constructor","Function","content","showing","total","inlineFilters","getDescription","innerHTML","tooltipNode","tooltipContent","isCountry","mouseLeft","mouseTop","tooltipDelta","mapRect","getBoundingClientRect","mousePosition","mouse","left","top","targetRect","svgXml","XMLSerializer","serializeToString","saveAs","blob","Blob","type","form","submit","exportNode","exportButton","exportForm","Filters","criteria","show","arrayDiff","join","activeColumns","filtersHeaderNode","filtersResetNode","display","marginLeft","reset","filtersTitleNode","createTextNode","filtersBodyNode","filtersElementsNode","filtersNewNode","add","evt","preventDefault","possibleFilters","getPossibleFilters","filterName","create","replaceNode","rowNode","buildRow","replaceChild","render","toggle","filterIndex","rowNodes","querySelectorAll","output","filtersChildren","childNodes","element","filterOutput","filterMethod","filterRangeSelect","filterValueMin","filterValueMax","filterValue","criterion","row","decodeURIComponent","defaultCriteria","setFilters","outputArray","line","selectedIndex","separatorWord","that","minusButton","filterSeparator","filterNameSelect","oldFilterName","getAttribute","newFilterName","refresh","filterVerb","filterRange","handleRangeChange","filterInput","filterInputType","filterValueAnd","filterSelect","sortKeys","ascending","except","isVirtual","matched","fmt","dataParse","exportFilters","filterNameSelects","visibility","disableNewFilter","Table","defaultSorting","Array","isArray","sorting","s","initialSorting","isSorting","header","body","nowrap","sortColumn","sortingRaw","sortingList","sortingData","encodedSorting","applySort","tableData","distinctBy","uniqueCollapsedRows","rowClassName","tds","columnKey","column","virtual","sortableColums","compareBool","d3SortMode","descending","filterType","String","sortIndex","sortValue","shiftKey","MapTable","state","saveStateTimeout","removeStateTimeout","json","loadData","csv","tsv","err","preFilter","setColumnDetails","isIE","navigator","userAgent","appVersion","firstChild","buildComponenents","errGeoMap","restoreState","stateName","isJson","parseState","parsedState","JSON","parse","message","loadState","params","location","href","clearTimeout","updateState","stateData","setTimeout","newUrl","stateHash","stateValue","stringify","encodeURIComponent","history","pushState","filterData","onComplete","defaultColumns","patternNumber","isNumber","test","columns","maptableObject","mapOptions","jsonPath","csvPath","tsvPath","filtersOptions","tableOptions","customOptions","defaultOptions"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maptable.js","sources":["../src/utils.js","../src/defaultOptions.js","../src/components/Legend.js","../src/components/Watermark.js","../src/components/StackBlur.js","../src/components/GeoMap.js","../src/components/Filters.js","../src/components/Table.js","../src/maptable.js","../src/index.js"],"sourcesContent":["function appendOptions(select, options, defaultValue) {\n options.forEach((f) => {\n // Filter select\n const option = document.createElement('option');\n option.setAttribute('value', f.value);\n option.innerText = f.text;\n select.appendChild(option);\n });\n select.value = defaultValue;\n}\n\nfunction rangeToBool(el1, range, el2) {\n if (range === '=') {\n return parseInt(el1, 10) === parseInt(el2, 10);\n }\n if (range === '≠') {\n return parseInt(el1, 10) !== parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '>') {\n return parseInt(el1, 10) > parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '<') {\n return parseInt(el1, 10) < parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '≥') {\n return parseInt(el1, 10) >= parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n if (range === '≤') {\n return parseInt(el1, 10) <= parseInt(el2, 10) && el1 !== '' && el2 !== '';\n }\n return true;\n}\n\n/* eslint no-loop-func: 0 */\nfunction extendRecursive() {\n const dst = {};\n let src;\n const args = [].splice.call(arguments, 0);\n const toString = ({}).toString;\n\n while (args.length > 0) {\n src = args.splice(0, 1)[0];\n if (toString.call(src) === '[object Object]') {\n Object.keys(src).forEach((p) => {\n if (toString.call(src[p]) === '[object Object]') {\n dst[p] = extendRecursive(dst[p] || {}, src[p]);\n } else {\n dst[p] = src[p];\n }\n });\n }\n }\n return dst;\n}\n\nfunction keyToTile(k) {\n const upperK = k.charAt(0).toUpperCase() + k.slice(1);\n return upperK.replace(/_/g, ' ');\n}\n\nfunction sanitizeKey(k) {\n return k.toLowerCase()\n .replace(/ /g, '_')\n .replace(/\"/g, '')\n .replace(/'/g, '');\n}\n\nfunction toNumber(str) {\n if (!str || str === '') return null;\n return Number(str.toString().replace(/[^0-9.]+|\\s+/gmi, ''));\n}\n\nfunction quantile(array, percentile) {\n array.sort((a, b) => a - b);\n const index = percentile / 100.0 * (array.length - 1);\n let result;\n if (Math.floor(index) === index) {\n result = array[index];\n } else {\n const i = Math.floor(index);\n const fraction = index - i;\n result = array[i] + (array[i + 1] - array[i]) * fraction;\n }\n return result;\n}\n\nfunction uniqueValues(arr) {\n if (!arr) return arr;\n const a = [];\n for (let i = 0, l = arr.length; i < l; i += 1) {\n if (a.indexOf(arr[i]) === -1 && arr[i] !== '') {\n a.push(arr[i]);\n }\n }\n return a;\n}\n\nexport default {\n rangeToBool,\n appendOptions,\n extendRecursive,\n sanitizeKey,\n toNumber,\n keyToTile,\n quantile,\n uniqueValues,\n};\n","export default {\n map: {\n longitudeKey: 'longitude',\n latitudeKey: 'latitude',\n countryIdentifierKey: 'country_code',\n countryIdentifierType: 'iso_a2',\n zoom: true,\n saveState: true,\n exportSvg: null,\n exportSvgClient: false,\n ratioFromWidth: 0.5,\n scaleHeight: 1.0,\n scaleZoom: [1, 10],\n fitContentMargin: 10,\n autoFitContent: false,\n tooltipClassName: 'popover bottom',\n countries: {\n legend: false,\n attr: {\n fill: '#FCFCFC',\n stroke: '#CCC',\n 'stroke-width': 0.5,\n },\n tooltipClassName: 'mt-map-tooltip popover bottom',\n },\n heatmap: {\n mask: true,\n weightByAttribute: null,\n weightByAttributeScale: 'linear',\n circles: {\n min: 1,\n max: 90,\n step: 4,\n color: '#FF0000',\n colorStrength: 1,\n blur: 4.0,\n },\n borders: {\n stroke: 1,\n opacity: 0.1,\n color: '#000',\n },\n },\n markers: {\n attr: {\n r: 4,\n fill: 'blue',\n stroke: '#CCC',\n 'stroke-width': 0.5,\n },\n tooltipClassName: 'mt-map-tooltip popover bottom',\n },\n title: {\n fontSize: 12,\n fontFamily: 'Helevetica, Arial, Sans-Serif',\n },\n },\n filters: {\n saveState: true,\n },\n table: {\n className: 'table table-striped table-bordered',\n collapseRowsBy: [],\n },\n};\n","export default class Legend {\n constructor(map) {\n this.legendWidth = 220;\n this.map = map;\n // Create Legend\n this.node = this.map.svg\n .append('g')\n .attr('id', 'mt-map-legend')\n .attr('transform',\n `translate(${(this.map.getWidth() - 350)}, ${(this.map.getHeight() - 60)})`);\n\n this.buildIndice();\n }\n\n buildScale(domain) {\n const legendGradient = this.node\n .append('defs')\n .append('linearGradient')\n .attr('id', 'mt-map-legend-gradient')\n .attr('x1', '0%')\n .attr('y1', '0%')\n .attr('x2', '100%')\n .attr('y2', '0%');\n\n if (this.map.options.countries.attr.fill.minNegative\n && this.map.options.countries.attr.fill.maxNegative) {\n // todo - maybe watch for domain[0] < 0 && domain[1] < 0? fall back to normal min & max?\n const midPercentNegative = Math.round(((0 - domain[0]) / (domain[1] - domain[0])) * 100);\n const midPercentPositive = midPercentNegative + 1;\n\n legendGradient.append('stop')\n .attr('offset', '0%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.maxNegative};stop-opacity:1`);\n\n legendGradient.append('stop')\n .attr('offset', `${midPercentNegative}%`)\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.minNegative};stop-opacity:1`);\n legendGradient.append('stop')\n .attr('offset', `${midPercentPositive}%`)\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.min};stop-opacity:1`);\n } else {\n legendGradient.append('stop')\n .attr('offset', '0%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.min};stop-opacity:1`);\n }\n\n legendGradient.append('stop')\n .attr('offset', '100%')\n .attr('style', `stop-color:${this.map.options.countries.attr.fill.max};stop-opacity:1`);\n\n this.node.append('rect')\n .attr('x', 40)\n .attr('y', 0)\n .attr('width', this.legendWidth)\n .attr('height', 15)\n .attr('fill', 'url(#mt-map-legend-gradient)');\n }\n\n buildIndice() {\n const indice = this.node.append('g')\n .attr('id', 'mt-map-legend-indice')\n .attr('style', 'display:none')\n .attr('transform', 'translate(36,15)');\n\n indice.append('polygon')\n .attr('points', '4.5 0 9 5 0 5')\n .attr('fill', '#222222');\n\n indice.append('text')\n .attr('x', 4)\n .attr('y', 13)\n .attr('width', 10)\n .attr('height', 10)\n .attr('text-anchor', 'middle')\n .attr('font-family', 'Arial')\n .attr('font-size', '9')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '1')\n .attr('fill', '#222222')\n .text('0');\n\n this.node.append('text')\n .attr('id', 'mt-map-legend-min')\n .attr('x', 35)\n .attr('y', 13)\n .attr('width', 35)\n .attr('height', 15)\n .attr('text-anchor', 'end')\n .attr('font-family', 'Arial')\n .attr('font-size', '14')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '3')\n .attr('fill', '#222222')\n .text('0');\n\n this.node.append('text')\n .attr('id', 'mt-map-legend-max')\n .attr('y', 13)\n .attr('x', 265)\n .attr('width', 40)\n .attr('height', 15)\n .attr('text-anchor', 'start')\n .attr('font-family', 'Arial')\n .attr('font-size', '14')\n .attr('stroke', '#FFFFF')\n .attr('stroke-width', '3')\n .attr('fill', '#222222')\n .text('1');\n }\n\n updateExtents(domain) {\n this.node.select('#mt-map-legend').style('opacity', (domain[0] === domain[1]) ? 0 : 1);\n if (this.node.selectAll('mt-map-legend-min').length) {\n this.node.select('#mt-map-legend-min').text(Math.round(domain[0]));\n this.node.select('#mt-map-legend-max').text(Math.round(domain[1]));\n\n // pass in the min and max (domain) to the legend\n this.buildScale(domain);\n }\n }\n\n indiceChange(val) {\n if (Number.isNaN(val)) {\n this.node.select('#mt-map-legend-indice')\n .attr('style', 'display:none');\n } else {\n const maxValue = parseInt(this.node.select('#mt-map-legend-max').text(), 10);\n const minValue = parseInt(this.node.select('#mt-map-legend-min').text(), 10);\n const positionDelta = Math.round((0 - (minValue - val) / (maxValue - minValue))\n * this.legendWidth);\n this.node.select('#mt-map-legend-indice text').text(Math.round(val));\n this.node.select('#mt-map-legend-indice')\n .attr('style', 'display:block')\n .attr('transform', `translate(${(36 + positionDelta)},15)`);\n }\n }\n}\n","export default class Legend {\n constructor(map, options) {\n this.map = map;\n this.src = options.src;\n this.position = options.position;\n this.width = parseInt(options.width, 10);\n this.height = parseInt(options.height, 10);\n this.padding = options.padding || 10;\n this.style = options.style;\n\n if (!options.src) {\n console.warn('Watermak src not found');\n return;\n }\n if (Number.isNaN(this.width)) {\n console.warn('Watermak width not found');\n return;\n }\n if (Number.isNaN(this.height)) {\n console.warn('Watermak height not found');\n return;\n }\n\n if (window.btoa) {\n this.buildWatermark();\n } else {\n console.warn('Watermark not rendered: btoa error');\n }\n }\n\n buildWatermark() {\n d3.xhr(this.src, (res) => {\n let mapWatermarkDelta = 0;\n if (this.map.options.title) mapWatermarkDelta = 30;\n let mime;\n let x;\n let y;\n if (this.src.indexOf('.svg') !== -1) {\n mime = 'image/svg+xml';\n } else if (this.src.indexOf('.jpg') !== -1 || this.src.indexOf('.jpeg') !== -1) {\n mime = 'image/jpeg';\n } else if (this.src.indexOf('.png') !== -1) {\n mime = 'image/png';\n } else {\n console.warn('invalid watermark mime type');\n return;\n }\n const dataUri = `data:${mime};base64,${window.btoa(res.responseText)}`;\n\n if (this.position) {\n const pos = this.position.split(' ');\n if (pos[0] === 'top') {\n y = this.padding;\n } else if (pos[0] === 'middle') {\n y = (this.map.getHeight() - this.height) / 2;\n } else if (pos[0] === 'bottom') {\n y = this.map.getHeight() - this.height - this.padding - mapWatermarkDelta;\n } else {\n console.warn('position should be (top|middle|bottom) (left|middle|right)');\n }\n\n if (pos[1] === 'left') {\n x = this.padding;\n } else if (pos[1] === 'middle') {\n x = (this.map.getWidth() - this.width) / 2;\n } else if (pos[1] === 'right') {\n x = this.map.getWidth() - this.width - this.padding;\n } else {\n console.warn('position should be (top|middle|bottom) (left|middle|right)');\n }\n }\n\n this.node = this.map.svg\n .append('image')\n .attr('xlink:href', dataUri)\n .attr('width', this.width)\n .attr('height', this.height);\n\n if (x && y) {\n this.node.attr('x', x).attr('y', y);\n }\n\n if (this.style) {\n this.node.attr('style', this.style);\n }\n });\n }\n}\n","/* eslint-disable */\n\n/*\n StackBlur - a fast almost Gaussian Blur For Canvas\n Version: 0.5\n Author: Mario Klingemann\n Contact: mario@quasimondo.com\n Website: http://www.quasimondo.com/StackBlurForCanvas\n Twitter: @quasimondo\n In case you find this class useful - especially in commercial projects -\n I am not totally unhappy for a small donation to my PayPal account\n mario@quasimondo.de\n Or support me on flattr:\n https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript\n Copyright (c) 2010 Mario Klingemann\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation\n files (the \"Software\"), to deal in the Software without\n restriction, including without limitation the rights to use,\n copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the\n Software is furnished to do so, subject to the following\n conditions:\n The above copyright notice and this permission notice shall be\n included in all copies or substantial portions of the Software.\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n OTHER DEALINGS IN THE SOFTWARE.\n */\n\n\nvar mul_table = [\n 512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,\n 454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,\n 482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,\n 437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,\n 497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,\n 320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,\n 446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,\n 329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,\n 505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,\n 399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,\n 324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,\n 268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,\n 451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,\n 385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,\n 332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,\n 289,287,285,282,280,278,275,273,271,269,267,265,263,261,259];\n\n\nvar shg_table = [\n 9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,\n 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,\n 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,\n 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,\n 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,\n 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,\n 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24 ];\n\n\nfunction processImage(img, canvas, radius, blurAlphaChannel)\n{\n if (typeof(img) == 'string') {\n var img = document.getElementById(img);\n }\n else if (typeof HTMLImageElement !== 'undefined' && !img instanceof HTMLImageElement) {\n return;\n }\n var w = img.naturalWidth;\n var h = img.naturalHeight;\n\n if (typeof(canvas) == 'string') {\n var canvas = document.getElementById(canvas);\n }\n else if (typeof HTMLCanvasElement !== 'undefined' && !canvas instanceof HTMLCanvasElement) {\n return;\n }\n\n canvas.style.width = w + 'px';\n canvas.style.height = h + 'px';\n canvas.width = w;\n canvas.height = h;\n\n var context = canvas.getContext('2d');\n context.clearRect(0, 0, w, h);\n context.drawImage(img, 0, 0);\n\n if (Number.isNaN(radius) || radius < 1) return;\n\n if (blurAlphaChannel)\n processCanvasRGBA(canvas, 0, 0, w, h, radius);\n else\n processCanvasRGB(canvas, 0, 0, w, h, radius);\n}\n\nfunction getImageDataFromCanvas(canvas, top_x, top_y, width, height)\n{\n if (typeof(canvas) == 'string')\n var canvas = document.getElementById(canvas);\n else if (typeof HTMLCanvasElement !== 'undefined' && !canvas instanceof HTMLCanvasElement)\n return;\n\n var context = canvas.getContext('2d');\n var imageData;\n\n try {\n try {\n imageData = context.getImageData(top_x, top_y, width, height);\n } catch(e) {\n throw new Error(\"unable to access local image data: \" + e);\n return;\n }\n } catch(e) {\n throw new Error(\"unable to access image data: \" + e);\n }\n\n return imageData;\n}\n\nfunction processCanvasRGBA(canvas, top_x, top_y, width, height, radius)\n{\n if (Number.isNaN(radius) || radius < 1) return;\n radius |= 0;\n\n var imageData = getImageDataFromCanvas(canvas, top_x, top_y, width, height);\n\n imageData = processImageDataRGBA(imageData, top_x, top_y, width, height, radius);\n\n canvas.getContext('2d').putImageData(imageData, top_x, top_y);\n}\n\nfunction processImageDataRGBA(imageData, top_x, top_y, width, height, radius)\n{\n var pixels = imageData.data;\n\n var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,\n r_out_sum, g_out_sum, b_out_sum, a_out_sum,\n r_in_sum, g_in_sum, b_in_sum, a_in_sum,\n pr, pg, pb, pa, rbs;\n\n var div = radius + radius + 1;\n var w4 = width << 2;\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n var stackStart = new BlurStack();\n var stack = stackStart;\n for (i = 1; i < div; i++)\n {\n stack = stack.next = new BlurStack();\n if (i == radiusPlus1) var stackEnd = stack;\n }\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n\n yw = yi = 0;\n\n var mul_sum = mul_table[radius];\n var shg_sum = shg_table[radius];\n\n for (y = 0; y < height; y++)\n {\n r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;\n\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n for (i = 1; i < radiusPlus1; i++)\n {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p+2])) * rbs;\n a_sum += (stack.a = (pa = pixels[p+3])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n\n stack = stack.next;\n }\n\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = 0; x < width; x++)\n {\n pixels[yi+3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa != 0)\n {\n pa = 255 / pa;\n pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi+1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[yi+2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n } else {\n pixels[yi] = pixels[yi+1] = pixels[yi+2] = 0;\n }\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p+1]);\n b_in_sum += (stackIn.b = pixels[p+2]);\n a_in_sum += (stackIn.a = pixels[p+3]);\n\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n a_sum += a_in_sum;\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n a_out_sum += (pa = stackOut.a);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n\n for (x = 0; x < width; x++)\n {\n g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;\n\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n a_out_sum = radiusPlus1 * (pa = pixels[yi+3]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n a_sum += sumFactor * pa;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack.a = pa;\n stack = stack.next;\n }\n\n yp = width;\n\n for (i = 1; i <= radius; i++)\n {\n yi = (yp + x) << 2;\n\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi+2])) * rbs;\n a_sum += (stack.a = (pa = pixels[yi+3])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n a_in_sum += pa;\n\n stack = stack.next;\n\n if(i < heightMinus1)\n {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = 0; y < height; y++)\n {\n p = yi << 2;\n pixels[p+3] = pa = (a_sum * mul_sum) >> shg_sum;\n if (pa > 0)\n {\n pa = 255 / pa;\n pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;\n pixels[p+1] = ((g_sum * mul_sum) >> shg_sum) * pa;\n pixels[p+2] = ((b_sum * mul_sum) >> shg_sum) * pa;\n } else {\n pixels[p] = pixels[p+1] = pixels[p+2] = 0;\n }\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n a_sum -= a_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n a_out_sum -= stackIn.a;\n\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p+1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p+2]));\n a_sum += (a_in_sum += (stackIn.a = pixels[p+3]));\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n a_out_sum += (pa = stackOut.a);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n a_in_sum -= pa;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n return imageData;\n}\n\nfunction processCanvasRGB(canvas, top_x, top_y, width, height, radius)\n{\n if (Number.isNaN(radius) || radius < 1) return;\n radius |= 0;\n\n var imageData = getImageDataFromCanvas(canvas, top_x, top_y, width, height);\n imageData = processImageDataRGB(imageData, top_x, top_y, width, height, radius);\n\n canvas.getContext('2d').putImageData(imageData, top_x, top_y);\n}\n\nfunction processImageDataRGB(imageData, top_x, top_y, width, height, radius)\n{\n var pixels = imageData.data;\n\n var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum,\n r_out_sum, g_out_sum, b_out_sum,\n r_in_sum, g_in_sum, b_in_sum,\n pr, pg, pb, rbs;\n\n var div = radius + radius + 1;\n var w4 = width << 2;\n var widthMinus1 = width - 1;\n var heightMinus1 = height - 1;\n var radiusPlus1 = radius + 1;\n var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;\n\n var stackStart = new BlurStack();\n var stack = stackStart;\n for (i = 1; i < div; i++)\n {\n stack = stack.next = new BlurStack();\n if (i == radiusPlus1) var stackEnd = stack;\n }\n stack.next = stackStart;\n var stackIn = null;\n var stackOut = null;\n\n yw = yi = 0;\n\n var mul_sum = mul_table[radius];\n var shg_sum = shg_table[radius];\n\n for (y = 0; y < height; y++)\n {\n r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;\n\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n for (i = 1; i < radiusPlus1; i++)\n {\n p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);\n r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[p+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[p+2])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n\n stack = stack.next;\n }\n\n\n stackIn = stackStart;\n stackOut = stackEnd;\n for (x = 0; x < width; x++)\n {\n pixels[yi] = (r_sum * mul_sum) >> shg_sum;\n pixels[yi+1] = (g_sum * mul_sum) >> shg_sum;\n pixels[yi+2] = (b_sum * mul_sum) >> shg_sum;\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n\n p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;\n\n r_in_sum += (stackIn.r = pixels[p]);\n g_in_sum += (stackIn.g = pixels[p+1]);\n b_in_sum += (stackIn.b = pixels[p+2]);\n\n r_sum += r_in_sum;\n g_sum += g_in_sum;\n b_sum += b_in_sum;\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n\n stackOut = stackOut.next;\n\n yi += 4;\n }\n yw += width;\n }\n\n\n for (x = 0; x < width; x++)\n {\n g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;\n\n yi = x << 2;\n r_out_sum = radiusPlus1 * (pr = pixels[yi]);\n g_out_sum = radiusPlus1 * (pg = pixels[yi+1]);\n b_out_sum = radiusPlus1 * (pb = pixels[yi+2]);\n\n r_sum += sumFactor * pr;\n g_sum += sumFactor * pg;\n b_sum += sumFactor * pb;\n\n stack = stackStart;\n\n for (i = 0; i < radiusPlus1; i++)\n {\n stack.r = pr;\n stack.g = pg;\n stack.b = pb;\n stack = stack.next;\n }\n\n yp = width;\n\n for (i = 1; i <= radius; i++)\n {\n yi = (yp + x) << 2;\n\n r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);\n g_sum += (stack.g = (pg = pixels[yi+1])) * rbs;\n b_sum += (stack.b = (pb = pixels[yi+2])) * rbs;\n\n r_in_sum += pr;\n g_in_sum += pg;\n b_in_sum += pb;\n\n stack = stack.next;\n\n if(i < heightMinus1)\n {\n yp += width;\n }\n }\n\n yi = x;\n stackIn = stackStart;\n stackOut = stackEnd;\n for (y = 0; y < height; y++)\n {\n p = yi << 2;\n pixels[p] = (r_sum * mul_sum) >> shg_sum;\n pixels[p+1] = (g_sum * mul_sum) >> shg_sum;\n pixels[p+2] = (b_sum * mul_sum) >> shg_sum;\n\n r_sum -= r_out_sum;\n g_sum -= g_out_sum;\n b_sum -= b_out_sum;\n\n r_out_sum -= stackIn.r;\n g_out_sum -= stackIn.g;\n b_out_sum -= stackIn.b;\n\n p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;\n\n r_sum += (r_in_sum += (stackIn.r = pixels[p]));\n g_sum += (g_in_sum += (stackIn.g = pixels[p+1]));\n b_sum += (b_in_sum += (stackIn.b = pixels[p+2]));\n\n stackIn = stackIn.next;\n\n r_out_sum += (pr = stackOut.r);\n g_out_sum += (pg = stackOut.g);\n b_out_sum += (pb = stackOut.b);\n\n r_in_sum -= pr;\n g_in_sum -= pg;\n b_in_sum -= pb;\n\n stackOut = stackOut.next;\n\n yi += width;\n }\n }\n\n return imageData;\n}\n\nfunction BlurStack()\n{\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.next = null;\n}\n\nexport default {\n image: processImage,\n canvasRGBA: processCanvasRGBA,\n canvasRGB: processCanvasRGB,\n imageDataRGBA: processImageDataRGBA,\n imageDataRGB: processImageDataRGB\n};\n","import Legend from './Legend';\nimport Watermark from './Watermark';\nimport StackBlur from './StackBlur';\nimport utils from '../utils';\n/**\n * Used the name GeoMap instead of Map to avoid collision with the native Map class of JS\n */\nexport default class GeoMap {\n /**\n * Geo Mapping class constructor that will initiate the map drawing\n * @param maptable: Maptable main Object\n * @param options: options communicated to map\n * @param jsonWorld: Object that contain TopoJSON dataset\n */\n constructor(maptable, options, jsonWorld) {\n const self = this;\n this.maptable = maptable;\n this.scale = 1;\n this.transX = 0;\n this.transY = 0;\n\n this.options = options;\n\n this.jsonWorld = jsonWorld;\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n\n\n // Map wrapper\n const mapWrapper = this.container.querySelector('.mt-map-container');\n\n const existingMap = this.container.querySelector('#mt-map');\n if (existingMap) {\n // transform #mt-map to .mt-map-container'\n mapWrapper.parentNode.insertBefore(mapWrapper, existingMap);\n existingMap.parentNode.removeChild(existingMap);\n }\n\n // Map\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-map');\n mapWrapper.appendChild(this.node);\n\n this.svg = d3.select(this.node)\n .append('svg')\n .attr('id', 'mt-map-svg')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('xmlns:xlink', 'http://www.w3.org/1999/xlink')\n .attr('viewBox', `0 0 ${this.getWidth()} ${this.getHeight()}`)\n .attr('width', this.getWidth())\n .attr('height', this.getHeight());\n\n this.projection = d3.geo.equirectangular()\n .translate([this.getWidth() / 2, this.getHeight() / (2 * this.options.scaleHeight)])\n .scale((this.getWidth() / 640) * 100)\n .rotate([-12, 0])\n .precision(0.1);\n\n this.path = d3.geo.path().projection(this.projection);\n\n // Add coordinates to rawData\n this.maptable.rawData.forEach((d) => {\n d.longitude = parseFloat(d[self.options.longitudeKey]);\n d.latitude = parseFloat(d[self.options.latitudeKey]);\n let coord = [0, 0];\n if (!Number.isNaN(d.longitude) && !Number.isNaN(d.latitude)) {\n coord = self.projection([d.longitude, d.latitude]);\n }\n d.x = coord[0];\n d.y = coord[1];\n });\n\n this.zoomListener = d3.behavior\n .zoom()\n .scaleExtent(this.options.scaleZoom)\n .on('zoom', this.rescale.bind(this));\n\n // Attach Zoom event to map\n if (this.options.zoom) {\n this.svg = this.svg.call(this.zoomListener.bind(this));\n }\n\n // Add tooltip\n if (this.options.markers) {\n this.tooltipMarkersNode = d3.select(this.node)\n .append('div')\n .attr('id', 'mt-map-markers-tooltip')\n .attr('class', `mt-map-tooltip ${this.options.markers.tooltipClassName}`)\n .style('display', 'none');\n }\n\n if (this.options.countries) {\n this.tooltipCountriesNode = d3.select(this.node)\n .append('div')\n .attr('id', 'mt-map-countries-tooltip')\n .attr('class', `mt-map-tooltip ${this.options.countries.tooltipClassName}`)\n .style('display', 'none');\n }\n\n this.layerGlobal = this.svg.append('g').attr('class', 'mt-map-global');\n this.layerCountries = this.layerGlobal.append('g').attr('class', 'mt-map-countries');\n this.layerHeatmap = this.layerGlobal.append('g').attr('class', 'mt-map-heatmap');\n this.layerMarkers = this.layerGlobal.append('g').attr('class', 'mt-map-markers');\n\n // Add Watermark\n if (this.options.watermark) {\n this.watermark = new Watermark(this, this.options.watermark);\n }\n\n // Add Title\n if (this.options.title) {\n this.buildTitle();\n }\n\n // Add Export SVG Capability\n if (this.options.exportSvgClient || this.options.exportSvg) {\n this.addExportSvgCapability();\n }\n\n // AutoResize\n if (!this.options.width) {\n window.addEventListener('resize', () => {\n this.svg.attr('width', this.getWidth());\n this.svg.attr('height', this.getHeight());\n this.rescale();\n });\n }\n\n // Let's build things\n this.loadGeometries();\n\n // render is triggered by MapTable\n // this.render();\n }\n\n scaleAttributes() {\n return Math.pow(this.scale, 2 / 3); // eslint-disable-line\n }\n\n getWidth() {\n if (this.options.width) {\n return this.options.width;\n }\n return this.node.offsetWidth;\n }\n\n getHeight() {\n const deltaHeight = (this.options.title) ? 30 : 0;\n if (!this.options.height && this.options.ratioFromWidth) {\n return this.getWidth() * this.options.ratioFromWidth * this.options.scaleHeight + deltaHeight;\n }\n return this.options.height * this.options.scaleHeight + deltaHeight;\n }\n\n /**\n * Load geometries and built the map components\n */\n loadGeometries() {\n // We filter world data\n if (this.options.filterCountries) {\n this.jsonWorld.objects.countries.geometries = this.jsonWorld.objects.countries\n .geometries.filter(this.options.filterCountries);\n }\n\n // Build countries\n if (this.options.countries) this.buildCountries();\n\n // Build heatmap\n if (this.options.heatmap) this.buildHeatmap();\n }\n\n /**\n * Logic to build the heatmap elements (without the filling the heatmap image)\n */\n buildHeatmap() {\n // Build vectors\n const lands = topojson.merge(this.jsonWorld, this.jsonWorld.objects.countries.geometries);\n if (!this.options.heatmap.disableMask) {\n this.maskHeatmap = this.layerHeatmap.append('defs')\n .append('clipPath')\n .attr('id', 'mt-map-heatmap-mask');\n\n this.maskHeatmap\n .datum(lands)\n .append('path')\n .attr('class', 'mt-map-heatmap-mask-paths')\n .attr('d', this.path);\n }\n\n this.imgHeatmap = this.layerHeatmap\n .append('image')\n .attr('width', this.getWidth())\n .attr('height', this.getHeight())\n .attr('x', 0)\n .attr('y', 0)\n .attr('class', 'mt-map-heatmap-img');\n\n if (this.options.heatmap.mask) {\n this.imgHeatmap = this.imgHeatmap.attr('clip-path', 'url(#mt-map-heatmap-mask)');\n }\n\n if (this.options.heatmap.borders) {\n const borders = topojson.mesh(this.jsonWorld,\n this.jsonWorld.objects.countries, (a, b) => a !== b);\n\n this.bordersHeatmap = this.layerHeatmap\n .append('g')\n .attr('class', 'mt-map-heatmap-borders');\n\n this.bordersHeatmap.selectAll('path.mt-map-heatmap-borders-paths')\n .data([lands, borders])\n .enter()\n .append('path')\n .attr('class', 'mt-map-heatmap-borders-paths')\n .attr('fill', 'none')\n .attr('stroke-width', this.options.heatmap.borders.stroke)\n .attr('stroke', this.options.heatmap.borders.color)\n .attr('style', `opacity: ${this.options.heatmap.borders.opacity}`)\n .attr('d', this.path);\n }\n }\n\n /**\n * Get Scale for every circle magnitude\n * @param heatmapDataset: heatmap dataset that we use\n * @returns scale: function - Scale function that output a value [0 - 1]\n */\n getMagnitudeScale(heatmapDataset) {\n const opts = this.options.heatmap;\n const lengthDataset = heatmapDataset.length;\n if (!lengthDataset) return () => 0;\n // const layersPerLocation = (opts.circles.max - opts.circles.min) / opts.circles.step;\n const maxOpacityScale = d3.scale.linear()\n .domain([1, lengthDataset])\n .range([1, 0.25]);\n const centralCircleOpacity = maxOpacityScale(lengthDataset);\n\n const scale = d3.scale.linear()\n .domain([opts.circles.min, 20])\n .range([centralCircleOpacity, 0]);\n return m => scale(m);\n }\n\n /**\n * Get Scale for every data point (used for weighting)\n * @returns scale: function - Scale function that output a value [0 - 1]\n */\n getDatumScale() {\n if (!this.options.heatmap.weightByAttribute) return () => 1;\n const dataExtents = d3.extent(this.maptable.data, this.options.heatmap.weightByAttribute);\n const userScale = (this.options.heatmap.weightByAttributeScale === 'log')\n ? d3.scale.log : d3.scale.linear;\n const scale = userScale().domain(dataExtents).range([0.5, 1]);\n return (d) => {\n const val = this.options.heatmap.weightByAttribute(d);\n if (!val) return 0;\n return scale(val);\n };\n }\n\n /**\n * Get the Data URL of the heatmap image\n * @returns {string} base64 image\n */\n getHeatmapData() {\n const canvasHeatmap = d3.select(this.node)\n .append('canvas')\n .attr('id', 'mt-map-heatmap-canvas')\n .attr('width', this.getWidth())\n .attr('height', this.getHeight())\n .attr('style', 'display: none;');\n\n const ctx = canvasHeatmap.node().getContext('2d');\n ctx.globalCompositeOperation = 'multiply';\n const circles = d3.range(\n this.options.heatmap.circles.min,\n this.options.heatmap.circles.max,\n this.options.heatmap.circles.step,\n );\n const datumScale = this.getDatumScale();\n const heatmapDataset = this.maptable.data.filter(d => datumScale(d) > 0.1);\n const path = this.path.context(ctx);\n const magnitudeScale = this.getMagnitudeScale(heatmapDataset);\n const colorScale = d3.scale.linear()\n .domain([1, 0])\n .range(['#000000', '#FFFFFF']);\n\n // Make a flat white background first\n ctx.beginPath();\n ctx.rect(0, 0, this.getWidth(), this.getHeight());\n ctx.fillStyle = '#ffffff';\n ctx.fill();\n ctx.closePath();\n\n // color strenght factor\n const colorMultiplier = (x) => {\n const a = this.options.heatmap.circles.colorStrength;\n const aa = 1 + ((a - 1) / 100);\n if (a > 1) return (2 - aa) * x + aa - 1;\n return a * x;\n };\n\n // add condensed clouds\n heatmapDataset.forEach((point) => {\n const scaleOpacityDatum = datumScale(point);\n circles.forEach((m) => {\n const opacity = colorMultiplier(magnitudeScale(m) * scaleOpacityDatum);\n if (opacity > 0) {\n ctx.beginPath();\n path(d3.geo.circle().origin([point.longitude, point.latitude]).angle(m - 0.0001)());\n ctx.fillStyle = colorScale(opacity);\n ctx.fill();\n ctx.closePath();\n }\n });\n });\n\n StackBlur.canvasRGBA(canvasHeatmap.node(), 0, 0, this.getWidth(),\n this.getHeight(), this.options.heatmap.circles.blur);\n\n // Add color layer\n ctx.beginPath();\n ctx.globalCompositeOperation = 'screen';\n ctx.rect(0, 0, this.getWidth(), this.getHeight());\n ctx.fillStyle = this.options.heatmap.circles.color;\n ctx.fill();\n ctx.closePath();\n\n const dataUrl = canvasHeatmap.node().toDataURL();\n canvasHeatmap.remove();\n return dataUrl;\n }\n\n /**\n * Set the data URL to the heatmap image\n */\n updateHeatmap() {\n const dataUrl = this.getHeatmapData();\n this.imgHeatmap.attr('xlink:href', dataUrl);\n }\n\n /**\n * build the paths for the countries\n */\n buildCountries() {\n this.dataCountries = topojson.feature(this.jsonWorld,\n this.jsonWorld.objects.countries).features;\n\n // Build country paths\n this.layerCountries\n .selectAll('.mt-map-country')\n .data(this.dataCountries)\n .enter()\n .insert('path')\n .attr('class', 'mt-map-country')\n .attr('d', this.path);\n\n // Build Country Legend\n this.legendCountry = {};\n\n if (this.shouldRenderLegend()) {\n this.legendCountry.fill = new Legend(this);\n }\n }\n\n shouldRenderLegend() {\n const f = this.options.countries.attr.fill;\n if (!f) return false;\n if (!f.legend || !f.min || !f.max) return false;\n if (f.aggregate && f.aggregate.scale) {\n const scale = (typeof (f.aggregate.scale) === 'function')\n ? f.aggregate.scale.bind(this.maptable)()\n : f.aggregate.scale;\n if (scale !== 'linear') return false;\n }\n return true;\n }\n\n /**\n * Set the right color for every country\n */\n updateCountries() {\n // Data from user input\n const dataByCountry = d3.nest()\n .key(d => d[this.options.countryIdentifierKey])\n .entries(this.maptable.data);\n\n // We merge both data\n this.dataCountries.forEach((geoDatum) => {\n geoDatum.key = geoDatum.properties[this.options.countryIdentifierType];\n const matchedCountry = dataByCountry.filter(uDatum => uDatum.key === geoDatum.key);\n geoDatum.values = (matchedCountry.length === 0) ? [] : matchedCountry[0].values;\n geoDatum.attr = {};\n geoDatum.rollupValue = {};\n });\n\n // We calculate attributes values\n Object.keys(this.options.countries.attr).forEach((k) => {\n this.setAttrValues(k, this.options.countries.attr[k], this.dataCountries);\n });\n\n // Update SVG\n const countryItem = d3.selectAll('.mt-map-country').each(function (d) {\n const targetPath = this;\n Object.keys(d.attr).forEach((key) => {\n d3.select(targetPath).attr(key, d.attr[key]);\n });\n });\n\n // Update Legend\n Object.keys(this.options.countries.attr).forEach((attrKey) => {\n const attrValue = this.options.countries.attr[attrKey];\n if (typeof (attrValue) === 'object' && attrValue.legend && this.legendCountry[attrKey] != undefined) {\n const scaleDomain = d3.extent(this.dataCountries,\n d => Number(d.attrProperties[attrKey].value));\n this.legendCountry[attrKey].updateExtents(scaleDomain);\n\n // When we mouseover the legend, it should highlight the indice selected\n countryItem.on('mouseover', (d) => {\n this.legendCountry[attrKey].indiceChange(d.attrProperties[attrKey].value);\n })\n .on('mouseout', () => {\n this.legendCountry[attrKey].indiceChange(NaN);\n });\n }\n });\n\n // Update Tooltip\n if (this.options.countries && this.options.countries.tooltip) {\n this.activateTooltip(countryItem, this.tooltipCountriesNode,\n this.options.countries.tooltip, true);\n }\n }\n\n updateMarkers() {\n const defaultGroupBy = a => `${a.longitude},${a.latitude}`;\n\n this.dataMarkers = d3.nest()\n .key(defaultGroupBy)\n .entries(this.maptable.data)\n .filter(d => d.values[0].x !== 0);\n\n // We merge both data\n this.dataMarkers.forEach((d) => {\n d.attr = {};\n d.attrProperties = {};\n });\n\n // We calculate attributes values\n Object.keys(this.options.markers.attr).forEach((k) => {\n this.setAttrValues(k, this.options.markers.attr[k], this.dataMarkers);\n });\n\n // Enter\n const markerItem = this.layerMarkers\n .selectAll('.mt-map-marker')\n .data(this.dataMarkers);\n let markerObject = markerItem.enter();\n if (this.options.markers.customTag) {\n markerObject = this.options.markers.customTag(markerObject);\n } else {\n markerObject = markerObject.append('svg:circle');\n }\n const markerClassName = (this.options.markers.className)\n ? this.options.markers.className : '';\n\n markerObject.attr('class', `mt-map-marker ${markerClassName}`);\n\n // Exit\n markerItem.exit().transition()\n .attr('r', 0)\n .attr('fill', '#eee')\n .style('opacity', 0)\n .remove();\n\n // Update\n const attrX = (this.options.markers.attrX) ? this.options.markers.attrX : 'cx';\n const attrY = (this.options.markers.attrY) ? this.options.markers.attrY : 'cy';\n\n const attrXDelta = (this.options.markers.attrXDelta) ? this.options.markers.attrXDelta : 0;\n const attrYDelta = (this.options.markers.attrYDelta) ? this.options.markers.attrYDelta : 0;\n\n const markerUpdate = markerItem\n .attr(attrX, d => d.values[0].x + attrXDelta)\n .attr(attrY, d => d.values[0].y + attrYDelta);\n\n d3.selectAll(`${this.containerSelector} .mt-map-marker`).each(function (d) {\n const targetPath = this;\n Object.keys(d.attr).forEach((key) => {\n d3.select(targetPath).attr(key, d.attr[key]);\n });\n });\n\n if (this.options.markers.tooltip) {\n this.activateTooltip(markerUpdate, this.tooltipMarkersNode,\n this.options.markers.tooltip, false);\n }\n\n this.rescale();\n }\n\n fitContent() {\n if (this.maptable.data.length === 0) {\n this.transX = 0;\n this.transY = 0;\n this.scale = 1;\n this.zoomListener.translate([this.transX, this.transY])\n .scale(this.scale);\n return;\n }\n const hor = d3.extent(this.maptable.data, d => d.x);\n const ver = d3.extent(this.maptable.data, d => d.y);\n\n // center dots with the good ratio\n const ratio = this.getWidth() / this.getHeight();\n const deltaMarker = 20 + ((this.options.title) ? 30 : 0);\n\n const currentWidth = (hor[1] - hor[0]) + deltaMarker;\n const currentHeight = (ver[1] - ver[0]) + deltaMarker;\n\n const realHeight = currentWidth / ratio;\n const realWidth = currentHeight * ratio;\n\n let diffMarginWidth = 0;\n let diffMarginHeight = 0;\n if (realWidth >= currentWidth) {\n diffMarginWidth = (realWidth - currentWidth) / 2;\n } else {\n diffMarginHeight = (realHeight - currentHeight) / 2;\n }\n\n // add layout margin\n hor[0] -= (this.options.fitContentMargin + diffMarginWidth);\n hor[1] += (this.options.fitContentMargin + diffMarginWidth);\n ver[0] -= (this.options.fitContentMargin + diffMarginHeight);\n ver[1] += (this.options.fitContentMargin + diffMarginHeight);\n\n this.scale = this.getWidth() / (hor[1] - hor[0]);\n this.transX = -1 * hor[0] * this.scale;\n this.transY = -1 * ver[0] * this.scale;\n\n this.zoomListener.translate([this.transX, this.transY]).scale(this.scale);\n }\n\n buildTitle() {\n const titleContainer = this.svg\n .append('svg')\n .attr('width', this.getWidth())\n .attr('x', 0)\n .attr('y', (this.getHeight() - 30))\n .attr('height', 30);\n\n if (this.options.title.bgColor) {\n titleContainer.append('rect')\n .attr('x', 0)\n .attr('y', 0)\n .attr('width', this.getWidth())\n .attr('height', 30)\n .attr('fill', this.options.title.bgColor);\n }\n\n titleContainer.append('text')\n .attr('id', 'mt-map-title')\n .attr('x', 20)\n .attr('font-size', this.options.title.fontSize)\n .attr('font-family', this.options.title.fontFamily)\n .attr('y', 20);\n\n if (this.options.title.source) {\n titleContainer.append('text')\n .attr('y', 20)\n .attr('x', (this.getWidth() - 20))\n .attr('text-anchor', 'end')\n .attr('font-size', this.options.title.fontSize)\n .attr('font-family', this.options.title.fontFamily)\n .html(this.options.title.source());\n }\n }\n\n /**\n * We encode a transaltion to be independent from the dimensions of the visualization\n * @param originalTranslation: Array - original translation value (from screen)\n * @returns encodedTranslation: Array - encoded translation\n */\n encodeTranslation(originalTranslation) {\n const newTx = originalTranslation[0] / (this.scale * this.getWidth());\n\n const newTy = originalTranslation[1] / (this.scale * this.getHeight());\n\n return [newTx, newTy];\n }\n\n /**\n * We decode a translation to adapt it to the dimensions of the visualization\n * @param encodedTranslation: Array - encoded translation\n * @returns originalTranslation: Array - original translation value (from screen)\n */\n decodeTranslation(encodedTranslation) {\n const newTx = encodedTranslation[0] * this.getWidth() * this.scale;\n\n const newTy = encodedTranslation[1] * this.getHeight() * this.scale;\n\n return [newTx, newTy];\n }\n\n /**\n * Restore state from the url hash\n */\n restoreState(defaultZoom) {\n if (!defaultZoom || defaultZoom.length !== 3) return;\n this.scale = defaultZoom[0];\n const originalTranslation = this.decodeTranslation([defaultZoom[1], defaultZoom[2]]);\n this.transX = originalTranslation[0];\n this.transY = originalTranslation[1];\n this.zoomListener.scale(defaultZoom[0])\n .translate(originalTranslation)\n .event(this.svg);\n }\n\n /**\n * Save state into the url hash\n */\n saveState() {\n const encodedTranslation = this.encodeTranslation([this.transX, this.transY]);\n const exportedData = [this.scale, encodedTranslation[0],\n encodedTranslation[1]];\n if (exportedData[0] !== 1 && exportedData[1] !== 0 && exportedData[2] !== 0) {\n this.maptable.saveState('zoom', exportedData);\n } else {\n this.maptable.removeState('zoom');\n }\n }\n\n rescale() {\n const self = this;\n if (d3.event && d3.event.translate) {\n this.scale = d3.event.scale;\n this.transX = (this.scale === 1) ? 0 : d3.event.translate[0];\n this.transY = (this.scale === 1) ? 0 : d3.event.translate[1];\n }\n\n const maxTransX = 0;\n const maxTransY = 0;\n const minTransX = this.getWidth() * (1 - this.scale);\n const minTransY = this.getHeight() * (1 - this.scale);\n\n if (this.transY > maxTransY) {\n this.transY = maxTransY;\n } else if (this.transY < minTransY) {\n this.transY = minTransY;\n }\n\n if (this.transX > maxTransX) {\n this.transX = maxTransX;\n } else if (this.transX < minTransX) {\n this.transX = minTransX;\n }\n\n if (d3.event && d3.event.translate) {\n d3.event.translate[0] = this.transX;\n d3.event.translate[1] = this.transY;\n }\n\n this.layerGlobal.attr('transform',\n `translate(${this.transX}, ${this.transY})scale(${this.scale})`);\n\n // Hide tooltip\n if (self.tooltipCountriesNode) self.tooltipCountriesNode.attr('style', 'display:none;');\n if (self.tooltipMarkersNode) self.tooltipMarkersNode.attr('style', 'display:none;');\n\n // Rescale markers size\n if (this.options.markers) {\n // markers\n d3.selectAll(`${this.containerSelector} .mt-map-marker`).each(function (d) {\n // stroke\n if (d.attr['stroke-width']) {\n d3.select(this).attr('stroke-width', d.attr['stroke-width'] / self.scaleAttributes());\n }\n // radius\n if (d.attr.r) {\n d3.select(this).attr('r', d.attr.r / self.scaleAttributes());\n }\n });\n }\n\n // Rescale Country stroke-width\n if (this.options.countries) {\n d3.selectAll(`${this.containerSelector} .mt-map-country`).style('stroke-width',\n this.options.countries.attr['stroke-width'] / this.scale);\n }\n\n // Rescale heatmap borders\n if (this.options.heatmap && this.options.heatmap.borders) {\n d3.selectAll(`${this.containerSelector} .mt-map-heatmap-borders-paths`)\n .style('stroke-width', this.options.heatmap.borders.stroke / this.scale);\n }\n\n // save state\n if (this.maptable.firstExecution && this.options.saveState) this.saveState();\n }\n\n setAttrValues(attrKey, attrValue, dataset) {\n if (typeof (attrValue) === 'number' || typeof (attrValue) === 'string') {\n // Static value\n dataset.forEach((d) => {\n d.attr[attrKey] = attrValue;\n });\n } else if (typeof (attrValue) === 'function') {\n // Dynamic value based on the dataset\n dataset.forEach((d) => {\n d.attr[attrKey] = attrValue(d);\n });\n } else if (typeof (attrValue) === 'object') {\n let scale = 'linear';\n let key = null;\n let mode = 'count';\n let scaleToUse = d3.scale.linear();\n if (attrValue.aggregate) {\n key = (typeof (attrValue.aggregate.key) === 'function')\n ? attrValue.aggregate.key.bind(this.maptable)()\n : attrValue.aggregate.key;\n\n mode = (typeof (attrValue.aggregate.mode) === 'function')\n ? attrValue.aggregate.mode.bind(this.maptable)()\n : attrValue.aggregate.mode;\n\n if (typeof (attrValue.aggregate.scale) === 'function') {\n scale = attrValue.aggregate.scale.bind(this.maptable)();\n } else if (attrValue.aggregate.scale) {\n scale = attrValue.aggregate.scale;\n }\n\n if (!key || !mode) {\n throw new Error(`MapTable: You should provide values 'key' & 'mode' for attr.${attrKey}.aggregate`);\n }\n\n // Custom aggregate mode\n if (mode === 'sum') {\n attrValue.rollup = groupedData => (\n groupedData.map(d => Number(d[key])).reduce((a, c) => a + c, 0)\n );\n } else if (mode === 'avg') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const validData = groupedData.filter(d => !Number.isNaN(Number(d[key])));\n return validData\n .map(d => Number(d[key]))\n .reduce((a, c) => a + c, 0) / validData.length;\n };\n } else if (mode === 'count') {\n attrValue.rollup = groupedData => groupedData.length;\n } else if (mode === 'min') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return groupedValues.reduce((min, p) => (p < min ? p : min), groupedValues[0]);\n };\n } else if (mode === 'max') {\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return groupedValues.reduce((max, p) => (p > max ? p : max), groupedValues[0]);\n };\n } else if (mode.indexOf('percentile') !== -1) {\n const percentile = utils.toNumber(mode);\n attrValue.rollup = (groupedData) => {\n if (!groupedData.length) return 0;\n const groupedValues = groupedData.map(d => Number(d[key]));\n return utils.quantile(groupedValues, percentile);\n };\n } else if (typeof (attrValue.rollup) === 'function') {\n attrValue.rollup = attrValue.rollup.bind(this.maptable);\n }\n\n // Custom scale\n if (scale) {\n if (scale.indexOf('log') !== -1) {\n scaleToUse = d3.scale.log().base(utils.toNumber(scale) || 10);\n } else if (scale.indexOf('pow') !== -1) {\n scaleToUse = d3.scale.pow().exponent(utils.toNumber(scale) || 1);\n } else if (scale === 'sqrt') {\n scaleToUse = d3.scale.sqrt();\n }\n // Rank scale neeed additional transformations\n }\n }\n\n // Dynamic value based on a scale\n if (!attrValue.rollup) {\n attrValue.rollup = d => d.length;\n }\n if (!attrValue.min || !attrValue.max) {\n throw new Error(`MapTable: You should provide values 'min' & 'max' for attr.${attrKey}`);\n }\n\n dataset.forEach((d) => {\n const aggregatedValue = attrValue.rollup(d.values);\n if (!d.attrProperties) d.attrProperties = {};\n if (!d.attrProperties[attrKey]) d.attrProperties[attrKey] = {};\n d.attrProperties[attrKey].value = aggregatedValue;\n if (key) {\n d.attrProperties[attrKey].key = key;\n d.attrProperties[attrKey].mode = mode;\n d.attrProperties[attrKey].scale = scale;\n const c = this.maptable.columnDetails[key];\n d.attrProperties[attrKey].columnDetails = c;\n const datum = {};\n datum[key] = aggregatedValue;\n d.attrProperties[attrKey].formatted = (c && c.cellContent)\n ? c.cellContent.bind(this.maptable)(datum)\n : aggregatedValue;\n }\n });\n if (scale === 'rank') {\n const positiveRanks = utils.uniqueValues([0].concat(dataset\n .map(d => Math.floor(d.attrProperties[attrKey].value * 100) / 100).filter(v => v > 0)));\n const negativeRanks = utils.uniqueValues(dataset\n .map(d => Math.floor(d.attrProperties[attrKey].value * 100) / 100).filter(v => v < 0));\n\n positiveRanks.sort((a, b) => a - b);\n negativeRanks.sort((a, b) => b - a);\n\n dataset.forEach((d) => {\n if (d.attrProperties[attrKey].value !== 0) {\n const ranks = d.attrProperties[attrKey].value >= 0 ? positiveRanks : negativeRanks;\n const pos = ranks.indexOf(Math.floor(d.attrProperties[attrKey].value * 100) / 100);\n const percentile = Math.round(pos / ranks.length * 100);\n const newValue = d.attrProperties[attrKey].value < 0\n ? percentile - (percentile * 2)\n : percentile;\n d.attrProperties[attrKey].value = newValue;\n }\n });\n }\n\n const scaleDomain = d3.extent(dataset, d => Number(d.attrProperties[attrKey].value));\n if (attrValue.transform) {\n scaleDomain[0] = attrValue.transform\n .bind(this.maptable)(scaleDomain[0], this.maptable.data);\n scaleDomain[1] = attrValue.transform\n .bind(this.maptable)(scaleDomain[1], this.maptable.data);\n }\n\n let minValue = attrValue.min;\n let maxValue = attrValue.max;\n\n if (attrValue.min === 'minValue') {\n minValue = scaleDomain[0];\n }\n if (attrValue.max === 'maxValue') {\n maxValue = scaleDomain[1];\n }\n\n // check for negative color declarations\n if ((attrValue.maxNegative && !attrValue.minNegative)\n || (!attrValue.maxNegative && attrValue.minNegative)) {\n throw new Error('MapTable: maxNegative or minNegative undefined. Please declare both.');\n }\n const useNegative = (attrValue.maxNegative && attrValue.minNegative);\n let scaleFunction;\n let scaleNegativeFunction;\n\n if (useNegative) {\n scaleFunction = scaleToUse.copy()\n .domain([0, scaleDomain[1]])\n .range([minValue, maxValue]);\n scaleNegativeFunction = scaleToUse.copy()\n .domain([scaleDomain[0], 0])\n .range([attrValue.maxNegative, attrValue.minNegative]);\n } else {\n scaleFunction = scaleToUse\n .domain(scaleDomain)\n .range([minValue, maxValue]);\n }\n\n\n dataset.forEach((d) => {\n let scaledValue;\n if (!d.values.length || Number.isNaN(d.attrProperties[attrKey].value)) {\n if (typeof (attrValue.empty) === 'undefined') {\n throw new Error(`MapTable: no empty property found for attr.${attrKey}`);\n }\n scaledValue = attrValue.empty;\n } else {\n const originalValueRaw = d.attrProperties[attrKey].value;\n const originalValue = (attrValue.transform)\n ? attrValue.transform.bind(this.maptable)(originalValueRaw, this.maptable.data)\n : originalValueRaw;\n\n if (useNegative && originalValue < 0) {\n scaledValue = scaleNegativeFunction(originalValue);\n } else {\n scaledValue = scaleFunction(originalValue);\n }\n if (originalValue === 0 && attrValue.empty) {\n scaledValue = attrValue.empty;\n }\n }\n d.attr[attrKey] = scaledValue;\n });\n } else {\n throw new Error(`Maptable: Invalid value for ${attrKey}`);\n }\n }\n\n render() {\n if (this.options.markers) this.updateMarkers();\n if (this.options.countries) this.updateCountries();\n if (this.options.title) this.updateTitle();\n if (this.options.heatmap) this.updateHeatmap();\n if (this.options.autoFitContent) {\n this.fitContent();\n this.rescale();\n }\n // On render\n if (this.options.onRender && this.options.onRender.constructor === Function) {\n this.options.onRender.bind(this.maptable)();\n }\n }\n\n updateTitle() {\n if (this.options.title.content) {\n const showing = this.maptable.data.filter(d => d[this.options.latitudeKey] !== 0).length;\n const total = this.maptable.rawData.filter(d => d[this.options.latitudeKey] !== 0).length;\n\n let inlineFilters = '';\n if (this.maptable.filters) {\n inlineFilters = this.maptable.filters.getDescription();\n }\n\n this.container.querySelector('#mt-map-title').innerHTML = this.options.title\n .content.bind(this.maptable)(showing, total, inlineFilters, this.maptable.data,\n this.maptable.rawData, this.dataCountries);\n }\n }\n\n activateTooltip(target, tooltipNode, tooltipContent, isCountry) {\n const self = this;\n target.on(isCountry ? 'mousemove' : 'mouseover', function (d) {\n const content = tooltipContent.bind(this.maptable)(d);\n if (!content) return;\n tooltipNode.html(content).attr('style', 'display:block;position:fixed;');\n\n let mouseLeft;\n let mouseTop;\n const tooltipDelta = tooltipNode.node().offsetWidth / 2;\n if (isCountry) {\n const mapRect = self.node.getBoundingClientRect();\n const mousePosition = d3.mouse(self.svg.node()).map(v => parseInt(v, 10));\n\n mouseLeft = mapRect.left + mousePosition[0] - tooltipDelta;\n mouseTop = mapRect.top + mousePosition[1] + 10;\n } else {\n const targetRect = this.getBoundingClientRect();\n mouseLeft = (targetRect.left + (targetRect.width / 2) - tooltipDelta);\n mouseTop = (targetRect.top + targetRect.height + 2); // +2 is for the border\n }\n\n tooltipNode.attr(\n 'style',\n `top:${mouseTop}px;left:${mouseLeft}px;display:block;position:fixed;`,\n )\n .on('mouseout', () => {\n tooltipNode.style('display', 'none');\n });\n })\n .on('mouseout', () => {\n tooltipNode.style('display', 'none');\n });\n }\n\n exportSvg() {\n // Get the d3js SVG element\n const svg = this.container.querySelector('#mt-map-svg');\n // Extract the data as SVG text string\n const svgXml = `\n${(new XMLSerializer()).serializeToString(svg)}`;\n\n if (this.options.exportSvgClient) {\n if (!window.saveAs) {\n throw new Error('MapTable: Missing FileSaver.js library');\n }\n const blob = new Blob([svgXml], { type: 'image/svg+xml' });\n window.saveAs(blob, 'visualization.svg');\n } else if (this.options.exportSvg) {\n const form = this.node.querySelector('#mt-map-svg-form');\n form.querySelector('[name=\"data\"]').value = svgXml;\n form.submit();\n }\n }\n\n addExportSvgCapability() {\n const exportNode = document.createElement('div');\n exportNode.setAttribute('id', 'mt-map-export');\n this.container.querySelector('#mt-map').appendChild(exportNode);\n\n const exportButton = document.createElement('button');\n exportButton.setAttribute('class', 'btn btn-xs btn-default');\n exportButton.innerHTML = 'Download';\n exportButton.addEventListener('click', this.exportSvg.bind(this));\n exportNode.appendChild(exportButton);\n\n if (this.options.exportSvg) {\n const exportForm = document.createElement('div');\n exportForm.innerHTML = `
`;\n exportNode.appendChild(exportForm);\n }\n }\n}\n","import utils from '../utils';\n\nexport default class Filters {\n constructor(maptable, options) {\n this.maptable = maptable;\n this.options = options;\n this.criteria = [];\n\n if (this.options.show) {\n const arrayDiff = this.options.show\n .filter(i => Object.keys(this.maptable.columnDetails).indexOf(i) < 0);\n if (arrayDiff.length > 0) {\n throw new Error(`MapTable: invalid columns \"${arrayDiff.join(', ')}\"`);\n }\n this.activeColumns = this.options.show;\n } else {\n this.activeColumns = Object.keys(this.maptable.columnDetails);\n }\n\n this.container = document.createElement('div');\n this.maptable.node.appendChild(this.container);\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n this.node = this.container.querySelector('#mt-filters');\n\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-filters');\n this.node.setAttribute('class', 'panel panel-default');\n this.maptable.node.appendChild(this.node);\n }\n\n // -- Filters Header\n\n const filtersHeaderNode = document.createElement('div');\n filtersHeaderNode.setAttribute('class', 'panel-heading');\n\n const filtersResetNode = document.createElement('button');\n filtersResetNode.setAttribute('id', 'mt-filters-reset');\n filtersResetNode.setAttribute('class', 'btn btn-default btn-xs pull-right');\n filtersResetNode.style.display = 'none';\n filtersResetNode.style.marginLeft = 5;\n filtersResetNode.innerText = '↺ Reset';\n filtersResetNode.addEventListener('click', this.reset);\n filtersHeaderNode.appendChild(filtersResetNode);\n\n const filtersTitleNode = document.createElement('h3');\n filtersTitleNode.setAttribute('class', 'panel-title');\n filtersTitleNode.appendChild(document.createTextNode('Filters'));\n filtersHeaderNode.appendChild(filtersTitleNode);\n\n this.node.appendChild(filtersHeaderNode);\n\n // -- Filters Content\n const filtersBodyNode = document.createElement('div');\n filtersBodyNode.setAttribute('id', 'mt-filters-content');\n filtersBodyNode.setAttribute('class', 'panel-body');\n\n const filtersElementsNode = document.createElement('div');\n filtersElementsNode.setAttribute('id', 'mt-filters-elements');\n filtersBodyNode.appendChild(filtersElementsNode);\n\n const filtersNewNode = document.createElement('a');\n filtersNewNode.setAttribute('id', 'mt-filters-new');\n filtersNewNode.setAttribute('href', '#');\n filtersNewNode.innerText = '+ New filter';\n filtersNewNode.addEventListener('click', this.add.bind(this));\n filtersBodyNode.appendChild(filtersNewNode);\n\n this.node.appendChild(filtersBodyNode);\n }\n\n /**\n * Add a filter\n * @param evt: Window Event Object\n */\n add(evt) {\n if (evt) evt.preventDefault();\n const possibleFilters = this.getPossibleFilters();\n\n if (possibleFilters.length === 0) {\n return;\n }\n const filterName = possibleFilters[0].key;\n this.create(filterName);\n }\n\n create(filterName, replaceNode) {\n const rowNode = this.buildRow(filterName);\n if (replaceNode) {\n replaceNode.parentNode.replaceChild(rowNode, replaceNode);\n } else {\n this.node.querySelector('#mt-filters-elements').appendChild(rowNode);\n }\n this.criteria.push(filterName);\n this.maptable.render();\n if (this.container.style.display === 'none') {\n this.toggle();\n }\n }\n\n remove(filterName) {\n const rowNode = this.node.querySelector(`[data-mt-filter-name=\"${filterName}\"]`);\n if (rowNode) rowNode.parentNode.removeChild(rowNode);\n const filterIndex = this.criteria.indexOf(filterName);\n this.criteria.splice(filterIndex, 1);\n this.maptable.render();\n }\n\n /**\n * Reset filters\n */\n reset() {\n const rowNodes = this.node.querySelectorAll('[data-mt-filter-name]');\n for (let i = 0; i < rowNodes.length; i += 1) {\n rowNodes[i].parentNode.removeChild(rowNodes[i]);\n }\n this.criteria = [];\n this.maptable.render();\n }\n\n /**\n * Export the current filters to an object\n * @returns exportedFilters: Object - key => value that contain data about the current filters\n */\n exportFilters() {\n const output = {};\n const filtersChildren = this.node.querySelector('#mt-filters-elements').childNodes;\n\n for (let i = 0; i < filtersChildren.length; i += 1) {\n const element = filtersChildren[i];\n const filterName = element.querySelector('.mt-filter-name').value;\n const columnDetails = this.maptable.columnDetails[filterName];\n const filterOutput = [columnDetails.filterMethod];\n if (columnDetails.filterMethod === 'compare') {\n const filterRangeSelect = element.querySelector('.mt-filter-range');\n filterOutput[1] = filterRangeSelect.value;\n if (filterRangeSelect.value !== 'any') {\n if (filterRangeSelect.value === 'BETWEEN') {\n const filterValueMin = element.querySelector('.mt-filter-value-min').value;\n const filterValueMax = element.querySelector('.mt-filter-value-max').value;\n if (filterValueMin !== '' && filterValueMax === '') {\n filterOutput[2] = filterValueMin;\n filterOutput[3] = filterValueMax;\n }\n } else {\n const filterValue = element.querySelector('.mt-filter-value-min').value;\n filterOutput[2] = filterValue;\n }\n }\n } else if (columnDetails.filterMethod === 'field'\n || columnDetails.filterMethod === 'dropdown') {\n filterOutput[1] = '';\n const filterValue = element.querySelector('.mt-filter-value').value;\n filterOutput[2] = filterValue;\n }\n if (filterOutput[1] !== 'any' && filterOutput[2] && filterOutput[2] !== '') {\n output[filterName] = filterOutput;\n }\n }\n return output;\n }\n\n /**\n * Set the value for the current filters\n * @param criteria - Object - same format as the exportedFilters\n */\n setFilters(criteria) {\n this.reset();\n Object.keys(criteria).forEach((filterName) => {\n this.create(filterName);\n const criterion = criteria[filterName];\n const row = document\n .querySelector(`#mt-filters-elements [data-mt-filter-name=\"${filterName}\"]`);\n if (row) {\n if (criterion[0] === 'compare') {\n row.querySelector('.mt-filter-range').value = criterion[1];\n if (criterion[1] !== 'any') {\n if (criterion[1] === 'BETWEEN') {\n row.querySelector('.mt-filter-value-min').value = criterion[2];\n row.querySelector('.mt-filter-value-max').value = criterion[3];\n } else {\n row.querySelector('.mt-filter-value-min').value = criterion[2];\n }\n }\n } else if (criterion[0] === 'field' || criterion[0] === 'dropdown') {\n row.querySelector('.mt-filter-value').value = decodeURIComponent(criterion[2]);\n }\n }\n });\n this.maptable.render();\n }\n\n /**\n * Restore state from the URL hash\n */\n restoreState(defaultCriteria) {\n if (!defaultCriteria) return;\n this.setFilters(defaultCriteria);\n }\n\n /**\n * Get a human readable description of the filters (used for the title)\n * @returns {string} Human readable description\n */\n getDescription() {\n const outputArray = [];\n\n const filtersChildren = this.node.querySelector('#mt-filters-elements').childNodes;\n\n for (let i = 0; i < filtersChildren.length; i += 1) {\n const element = filtersChildren[i];\n const filterName = element.querySelector('.mt-filter-name').value;\n\n const columnDetails = this.maptable.columnDetails[filterName];\n\n let line = '';\n\n if (columnDetails.filterMethod === 'compare') {\n const filterRangeSelect = element.querySelector('.mt-filter-range');\n if (filterRangeSelect.value !== 'any') {\n if (filterRangeSelect.value === 'BETWEEN') {\n const filterValueMin = element.querySelector('.mt-filter-value-min').value;\n const filterValueMax = element.querySelector('.mt-filter-value-max').value;\n if (filterValueMin === '' || filterValueMax === '') continue;\n line += `${columnDetails.title} is between `;\n line += `${filterValueMin} and\n ${filterValueMax}`;\n } else {\n const filterValue = element.querySelector('.mt-filter-value-min').value;\n if (filterValue === '') continue;\n line += `${columnDetails.title} is `;\n line += filterRangeSelect.options[filterRangeSelect.selectedIndex].text;\n line += `${filterValue}`;\n }\n }\n } else if (columnDetails.filterMethod === 'field'\n || columnDetails.filterMethod === 'dropdown') {\n const filterValue = element.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n const separatorWord = (columnDetails.filterMethod === 'field') ? 'contains' : 'is';\n line += `${columnDetails.title} ${separatorWord}\n ${filterValue}`;\n }\n outputArray.push(line);\n }\n return outputArray.join(', ');\n }\n\n buildRow(filterName) {\n const that = this;\n\n const possibleFilters = this.getPossibleFilters();\n\n const columnDetails = this.maptable.columnDetails[filterName];\n\n const rowNode = document.createElement('div');\n rowNode.setAttribute('class', 'mt-filter-row');\n rowNode.setAttribute('data-mt-filter-name', filterName);\n\n // Button to remove filter\n const minusButton = document.createElement('button');\n minusButton.setAttribute('class', 'btn btn-default pull-right');\n minusButton.setAttribute('data-mt-filter-btn-minus', 1);\n minusButton.innerText = '– Remove this filter';\n minusButton.addEventListener('click', () => {\n filterName = rowNode.querySelector('.mt-filter-name').value;\n this.remove(filterName);\n });\n rowNode.appendChild(minusButton);\n\n // Filters separator \"AND\"\n const filterSeparator = document.createElement('span');\n filterSeparator.setAttribute('class', 'mt-filters-and');\n filterSeparator.innerText = 'And ';\n rowNode.appendChild(filterSeparator);\n\n // Filter name select\n const filterNameSelect = document.createElement('select');\n filterNameSelect.setAttribute('class', 'mt-filter-name form-control form-control-inline');\n utils.appendOptions(filterNameSelect,\n possibleFilters.map(f => ({ text: f.title, value: f.key })));\n filterNameSelect.value = filterName;\n\n filterNameSelect.addEventListener('change', function () {\n const oldFilterName = this.parentNode.getAttribute('data-mt-filter-name');\n const newFilterName = this.value;\n that.create(newFilterName, this.parentNode);\n that.remove(oldFilterName);\n that.refresh();\n });\n rowNode.appendChild(filterNameSelect);\n\n // Filter verb\n const filterVerb = document.createElement('span');\n filterVerb.innerText = (columnDetails.filterMethod === 'field') ? ' contains ' : ' is ';\n rowNode.appendChild(filterVerb);\n\n // Filter range\n let filterRange = null;\n if (columnDetails.filterMethod !== 'field' && columnDetails.filterMethod !== 'dropdown') {\n filterRange = document.createElement('select');\n filterRange.setAttribute('class', 'mt-filter-range form-control form-control-inline');\n utils.appendOptions(filterRange, ['any', '=', '≠', '<', '>', '≤', '≥', 'BETWEEN'].map(v => ({ text: v, value: v })));\n filterRange.addEventListener('change', function () {\n that.handleRangeChange(this);\n });\n rowNode.appendChild(filterRange);\n\n // Little space:\n rowNode.appendChild(document.createTextNode(' '));\n }\n\n // Filter value\n const filterValue = document.createElement('div');\n filterValue.style.display = 'inline-block';\n filterValue.setAttribute('class', 'mt-filter-value-container');\n\n if (columnDetails.filterMethod === 'compare') {\n ['min', 'max'].forEach((val, i) => {\n const filterInput = document.createElement('input');\n filterInput.setAttribute('class',\n `form-control form-control-inline mt-filter-value-${val}`);\n filterInput.setAttribute('type', columnDetails.filterInputType);\n filterInput.addEventListener('keyup', this.maptable.render.bind(this.maptable));\n filterInput.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterInput);\n if (i === 0) {\n // AND\n const filterValueAnd = document.createElement('span');\n filterValueAnd.setAttribute('class', 'mt-filter-value-and');\n filterValueAnd.innerText = ' and ';\n filterValue.appendChild(filterValueAnd);\n }\n });\n } else if (columnDetails.filterMethod === 'field') {\n const filterInput = document.createElement('input');\n filterInput.setAttribute('class', 'form-control form-control-inline mt-filter-value');\n filterInput.setAttribute('type', 'text');\n filterInput.addEventListener('keyup', this.maptable.render.bind(this.maptable));\n filterInput.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterInput);\n } else if (columnDetails.filterMethod === 'dropdown') {\n const filterSelect = document.createElement('select');\n filterSelect.setAttribute('class', 'form-control form-control-inline mt-filter-value');\n\n const uniqueValues = d3.nest().key(d => d[filterName])\n .sortKeys(d3.ascending)\n .entries(this.maptable.rawData);\n\n utils.appendOptions(filterSelect, [{ text: 'Any', value: '' }].concat(uniqueValues.map(k => ({ text: k.key, value: k.key }))));\n\n filterSelect.addEventListener('change', this.maptable.render.bind(this.maptable));\n filterValue.appendChild(filterSelect);\n }\n\n rowNode.appendChild(filterValue);\n\n // We trigger it here to handle the value of the filter range\n if (filterRange) {\n this.handleRangeChange(filterRange);\n }\n\n return rowNode;\n }\n\n handleRangeChange(filterRange) {\n const rowNode = filterRange.parentNode;\n if (filterRange.value === 'any') {\n rowNode.querySelector('.mt-filter-value-container').style.display = 'none';\n } else {\n rowNode.querySelector('.mt-filter-value-container').style.display = 'inline-block';\n if (filterRange.value === 'BETWEEN') {\n rowNode.querySelector('.mt-filter-value-min').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-and').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-max').style.display = 'inline-block';\n } else {\n rowNode.querySelector('.mt-filter-value-min').style.display = 'inline-block';\n rowNode.querySelector('.mt-filter-value-and').style.display = 'none';\n rowNode.querySelector('.mt-filter-value-max').style.display = 'none';\n }\n }\n }\n\n getPossibleFilters(except) {\n return Object.keys(this.maptable.columnDetails)\n .map(k => utils.extendRecursive({ key: k }, this.maptable.columnDetails[k]))\n .filter(v => (this.activeColumns.indexOf(v.key) !== -1)\n && (\n (except && except === v.key)\n || (this.criteria.indexOf(v.key) === -1 && v.filterMethod && !v.isVirtual)\n ));\n }\n\n filterData() {\n const that = this;\n this.maptable.data = this.maptable.rawData.filter((d) => {\n const rowNodes = this.node.querySelectorAll('.mt-filter-row');\n let matched = true;\n for (let i = 0; i < rowNodes.length && matched; i += 1) {\n const rowNode = rowNodes[i];\n const filterName = rowNode.getAttribute('data-mt-filter-name');\n const columnDetails = that.maptable.columnDetails[filterName];\n const fmt = columnDetails.dataParse; // shortcut\n\n if (columnDetails.filterMethod === 'dropdown') {\n const filterValue = rowNode.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n if (d[filterName] !== filterValue) matched = false;\n } else if (columnDetails.filterMethod === 'field') {\n const filterValue = rowNode.querySelector('.mt-filter-value').value;\n if (filterValue === '') continue;\n if (d[filterName].toLowerCase().indexOf(filterValue.toLowerCase()) === -1) {\n matched = false;\n }\n } else if (columnDetails.filterMethod === 'compare') {\n const filterRange = rowNode.querySelector('.mt-filter-range').value;\n if (filterRange === 'BETWEEN') {\n const filterValueMin = rowNode.querySelector('.mt-filter-value-min').value;\n const filterValueMax = rowNode.querySelector('.mt-filter-value-max').value;\n if (filterValueMin === '' || filterValueMax === '') continue;\n if (fmt\n && (fmt(d[filterName]) < fmt(filterValueMin)\n || fmt(d[filterName]) > fmt(filterValueMax))\n ) {\n matched = false;\n } else if (\n parseInt(d[filterName], 10) < parseInt(filterValueMin, 10)\n || parseInt(d[filterName], 10) > parseInt(filterValueMax, 10)\n ) {\n matched = false;\n }\n } else {\n const filterValue = rowNode.querySelector('.mt-filter-value-min').value;\n if (filterValue === '') continue;\n if (fmt && !utils.rangeToBool(fmt(d[filterName]), filterRange, fmt(filterValue))) {\n matched = false;\n } else if (!fmt && !utils.rangeToBool(d[filterName], filterRange, filterValue)) {\n matched = false;\n }\n }\n }\n }\n return matched;\n });\n // save state\n if (this.options.saveState) this.maptable.saveState('filters', this.exportFilters());\n }\n\n refresh() {\n // update dropdown\n const filterNameSelects = this.node.querySelectorAll('.mt-filter-name');\n for (let i = 0; i < filterNameSelects.length; i += 1) {\n const filterNameSelect = filterNameSelects[i];\n const filterName = filterNameSelect.value;\n const possibleFilters = this.getPossibleFilters(filterName);\n filterNameSelect.innerHTML = '';\n utils.appendOptions(filterNameSelect,\n possibleFilters.map(f => ({ text: f.title, value: f.key })));\n filterNameSelect.value = filterName;\n }\n\n // Hide the first \"And\"\n if (this.node.querySelectorAll('.mt-filters-and').length > 0) {\n this.node.querySelectorAll('.mt-filters-and')[0].style.visibility = 'hidden';\n }\n\n // Check if we reached the maximum of allowed filters\n const disableNewFilter = (!this.getPossibleFilters().length);\n this.node.querySelector('#mt-filters-new').style.visibility = disableNewFilter\n ? 'hidden' : 'visible';\n }\n\n toggle() {\n if (this.container.style.display === 'none') {\n this.container.style.display = 'block';\n if (this.criteria.length === 0) {\n this.add();\n }\n } else {\n this.container.style.display = 'none';\n }\n }\n}\n","import utils from '../utils';\n\nexport default class Table {\n /**\n * Table componenet constructor\n * @param maptable: Maptable main Object\n * @param options: options communicated to the table\n * @returns {string|*}\n */\n constructor(maptable, options) {\n this.maptable = maptable;\n this.options = options;\n\n if (this.options.defaultSorting) {\n if (Array.isArray(this.options.defaultSorting) && this.options.defaultSorting.length === 2) {\n this.sorting = this.options.defaultSorting;\n } else {\n this.sorting = [this.options.defaultSorting];\n }\n this.sorting.forEach((s) => {\n if (!s.mode) s.mode = 'asc';\n });\n } else {\n this.sorting = [\n {\n key: Object.keys(this.maptable.data[0])[0],\n mode: 'asc',\n },\n ];\n }\n\n this.initialSorting = this.sorting.map(s => `${s.key},${s.mode}`).join(';');\n this.isSorting = false;\n\n this.containerSelector = maptable.options.target;\n this.container = document.querySelector(maptable.options.target);\n\n this.node = this.container.querySelector('#mt-table');\n\n if (!this.node) {\n this.node = document.createElement('div');\n this.node.setAttribute('id', 'mt-table');\n this.maptable.node.appendChild(this.node);\n }\n\n this.node = d3.select(this.node)\n .append('table')\n .attr('class', this.options.className);\n\n this.header = this.node.append('thead');\n\n this.body = this.node.append('tbody');\n\n if (this.options.show) {\n const arrayDiff = this.options.show\n .filter(i => Object.keys(this.maptable.columnDetails).indexOf(i) < 0);\n if (arrayDiff.length > 0) {\n throw new Error(`MapTable: invalid columns \"${arrayDiff.join(', ')}\"`);\n }\n this.activeColumns = this.options.show;\n } else {\n this.activeColumns = Object.keys(this.maptable.columnDetails);\n }\n\n this.header.selectAll('tr')\n .data([1])\n .enter()\n .append('tr')\n .selectAll('th')\n .data(this.activeColumns\n .map(k => utils.extendRecursive({ key: k }, this.maptable.columnDetails[k])))\n .enter()\n .append('th')\n .attr('class', (d) => {\n let output = (d.sorting) ? 'mt-table-sortable' : '';\n output += (d.nowrap) ? ' nowrap' : '';\n return output;\n })\n .attr('data-key', d => utils.sanitizeKey(d.key))\n .attr('onselectstart', 'return false;')\n .attr('unselectable', 'on')\n .attr('style', d => ((d.nowrap) ? 'white-space:nowrap;' : ''))\n .on('click', (d) => {\n if (this.isSorting) return;\n this.isSorting = true;\n if (d.sorting) {\n this.sortColumn(d.key);\n }\n this.isSorting = false;\n })\n .text(d => d.title)\n .attr('id', d => `column_header_${utils.sanitizeKey(d.key)}`);\n\n // render is triggered by MapTable\n // this.render();\n }\n\n /**\n * Restore state from the url hash\n */\n restoreState(sortingRaw) {\n if (!sortingRaw) return;\n const sortingList = sortingRaw.split(';');\n const defaultSorting = [];\n sortingList.forEach((s) => {\n const sortingData = s.split(',');\n defaultSorting.push({\n key: sortingData[0],\n mode: sortingData[1] || 'asc',\n });\n });\n this.sorting = defaultSorting;\n }\n\n /**\n * Save state into the url hash\n */\n saveState() {\n const encodedSorting = this.sorting.map(s => `${s.key},${s.mode}`).join(';');\n if (encodedSorting !== this.initialSorting) {\n this.maptable.saveState('sort', encodedSorting);\n }\n }\n\n\n render() {\n // Apply Sort\n this.applySort();\n\n\n let tableData = this.maptable.data;\n if (this.options.distinctBy) {\n tableData = d3.nest()\n .key(d => d[this.options.distinctBy])\n .entries(this.maptable.data)\n .map(g => g.values[0]);\n }\n\n // Enter\n this.body.selectAll('tr')\n .data(tableData)\n .enter()\n .append('tr');\n\n // Exit\n this.body.selectAll('tr')\n .data(tableData)\n .exit()\n .remove();\n\n // Update\n const uniqueCollapsedRows = [];\n this.body.selectAll('tr')\n .data(tableData)\n .attr('class', (row) => {\n if (this.options.rowClassName) {\n return `line ${this.options.rowClassName(row)}`;\n }\n return 'line';\n })\n .html((row) => {\n let tds = '';\n this.activeColumns.forEach((columnKey) => {\n const column = this.maptable.columnDetails[columnKey];\n tds += ' {\n this.container.querySelector(`#column_header_${utils.sanitizeKey(column.key)}`)\n .setAttribute('class', `mt-table-sortable sort_${column.mode}`);\n });\n this.maptable.data = this.maptable.data.sort((a, b) => {\n let compareBool = false;\n this.sorting.forEach((column) => {\n const d3SortMode = (column.mode === 'asc') ? d3.ascending : d3.descending;\n const columnDetails = this.maptable.columnDetails[column.key];\n let el1 = a[column.key];\n let el2 = b[column.key];\n if (columnDetails.dataParse) {\n el1 = columnDetails.dataParse.bind(this.maptable)(el1);\n el2 = columnDetails.dataParse.bind(this.maptable)(el2);\n } else if (columnDetails.virtual) {\n el2 = columnDetails.virtual.bind(this.maptable)(a);\n el2 = columnDetails.virtual.bind(this.maptable)(b);\n } else if (columnDetails.filterType === 'compare') {\n el1 = Number(el1);\n el2 = Number(el2);\n } else if (el1 instanceof String && el2 instanceof String) {\n el1 = el1.toLowerCase();\n el2 = el2.toLowerCase();\n }\n compareBool = compareBool || d3SortMode(el1, el2);\n });\n return compareBool;\n });\n }\n\n /**\n * Sort Table by a column key\n * @param columnKey: String - column key\n */\n sortColumn(key) {\n const sortIndex = this.sorting.map(d => d.key).indexOf(key);\n const sortValue = { key };\n if (sortIndex === -1) {\n sortValue.mode = 'desc';\n if (d3.event && d3.event.shiftKey) {\n this.sorting[1] = sortValue;\n } else {\n this.sorting = [sortValue];\n }\n } else {\n if (this.sorting[sortIndex].mode === 'asc') {\n this.sorting[sortIndex].mode = 'desc';\n } else {\n this.sorting[sortIndex].mode = 'asc';\n // this.sorting.splice(sortIndex, 1); // to disable sorting\n }\n if (!d3.event.shiftKey) {\n this.sorting = [this.sorting[sortIndex]];\n }\n }\n\n this.saveState();\n this.render();\n }\n}\n","import utils from './utils';\n\nimport GeoMap from './components/GeoMap';\nimport Filters from './components/Filters';\nimport Table from './components/Table';\n\nexport default class MapTable {\n constructor(target, options) {\n this.options = options;\n\n this.state = {};\n this.saveStateTimeout = {};\n this.removeStateTimeout = null;\n\n this.node = document.querySelector(target);\n this.node.setAttribute('style', 'position:relative;');\n\n if (this.options.data.type === 'json') {\n d3.json(this.options.data.path, this.loadData.bind(this));\n } else if (this.options.data.type === 'csv') {\n d3.csv(this.options.data.path, this.loadData.bind(this));\n } else if (this.options.data.type === 'tsv') {\n d3.tsv(this.options.data.path, this.loadData.bind(this));\n }\n\n if (this.options.map && this.options.map.heatmap) {\n delete this.options.map.countries;\n }\n }\n\n /**\n * Callback used when we pull the dataset\n * @param err: Error - error data if it happened\n * @param data: Object - dataset object\n */\n loadData(err, data) {\n if (err) {\n throw err;\n }\n this.rawData = data;\n\n if (this.options.data.preFilter) {\n this.rawData = this.rawData.filter(this.options.data.preFilter);\n }\n\n this.setColumnDetails();\n this.data = this.rawData.slice(); // we clone data, so that we can filter it\n // Map\n if (this.options.map) {\n // Map wrapper\n const mapWrapper = document.createElement('div');\n mapWrapper.setAttribute('class', 'mt-map-container');\n const isIE = (navigator.userAgent.indexOf('MSIE') !== -1 || navigator.appVersion.indexOf('Trident/') > 0);\n if (this.options.map.heatmap && isIE) {\n mapWrapper.innerHTML = '
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
';\n this.node.insertBefore(mapWrapper, this.node.firstChild);\n mapWrapper.querySelector('.mt-loading').style.display = 'block';\n this.options.map = false;\n this.buildComponenents();\n return;\n }\n mapWrapper.innerHTML = '
Loading...
';\n this.node.insertBefore(mapWrapper, this.node.firstChild);\n mapWrapper.querySelector('.mt-loading').style.display = 'block';\n d3.json(this.options.map.path, (errGeoMap, jsonWorld) => {\n if (errGeoMap) {\n throw errGeoMap;\n }\n this.map = new GeoMap(this, this.options.map, jsonWorld);\n\n mapWrapper.querySelector('.mt-loading').style.display = 'none';\n\n this.buildComponenents();\n });\n } else {\n this.buildComponenents();\n }\n }\n\n buildComponenents() {\n // Filters\n if (this.options.filters) {\n this.filters = new Filters(this, this.options.filters);\n }\n\n // Table\n if (this.options.table) {\n this.table = new Table(this, this.options.table);\n }\n\n // Restore state\n this.restoreState();\n window.addEventListener('hashchange', () => {\n this.restoreState();\n });\n\n // Render\n this.render();\n }\n\n /**\n * Load state from url\n * @param stateName: name of the state (either filters or zoom)\n * @param isJson: do we need to decode a json from the state?\n * @return loaded state\n */\n loadState(stateName, isJson) {\n // JSON state\n if (isJson) {\n const v = this.parseState(stateName);\n if (!v) return null;\n try {\n const parsedState = JSON.parse(v);\n this.state[stateName] = parsedState;\n } catch (e) {\n console.log(`Maptable: Invalid URL State for mt-${stateName} ${e.message}`);\n return null;\n }\n } else {\n const v = this.parseState(stateName);\n if (v) this.state[stateName] = v;\n }\n return this.state[stateName];\n }\n\n /**\n * Restore state for filters or/and map zooming and/or sorting\n */\n restoreState() {\n if (this.map) {\n this.loadState('zoom', true);\n this.map.restoreState(this.state.zoom);\n }\n\n if (this.filters) {\n this.loadState('filters', true);\n this.filters.restoreState(this.state.filters);\n }\n\n if (this.table) {\n this.loadState('sort', false);\n this.table.restoreState(this.state.sort);\n }\n }\n\n /**\n * Extract state from the url\n * @param stateName: name of the state (either filters or zoom)\n */\n parseState(stateName) {\n const params = document.location.href.replace(/%21mt/g, '!mt').split(`!mt-${stateName}=`);\n return (params[1]) ? decodeURIComponent(params[1].split('!mt')[0]) : null;\n }\n\n /**\n * Remove state\n * @param stateName: name of the state (either filters or zoom)\n */\n removeState(stateName) {\n window.clearTimeout(this.saveStateTimeout[stateName]);\n delete this.state[stateName];\n this.updateState();\n }\n\n /**\n * Save the state in this.state\n * @param stateName: name of the state (either filters or zoom)\n * @param stateData: object, contain state information\n */\n saveState(stateName, stateData) {\n window.clearTimeout(this.saveStateTimeout[stateName]);\n this.saveStateTimeout[stateName] = window.setTimeout(() => {\n this.state[stateName] = stateData;\n this.updateState();\n }, 200);\n }\n\n /**\n * Update state into the URL hash\n */\n updateState() {\n const newUrl = document.location.href.split('#')[0];\n let stateHash = '';\n Object.keys(this.state).forEach((k) => {\n if (!this.state[k]) return;\n let stateValue = this.state[k];\n if (typeof (this.state[k]) === 'object') {\n if (!Object.keys(this.state[k]).length) return;\n stateValue = JSON.stringify(this.state[k]);\n }\n stateHash += `!mt-${k}=${encodeURIComponent(stateValue)}`;\n });\n if (stateHash !== '') stateHash = `#${stateHash}`;\n if (document.location.href !== `${newUrl}${stateHash}`) {\n window.history.pushState(null, null, `${newUrl}${stateHash}`);\n }\n }\n\n render() {\n if (this.filters) {\n this.filters.filterData();\n this.filters.refresh();\n }\n\n if (this.map) {\n this.map.render();\n // On complete\n if (!this.firstExecution\n && this.options.map.onComplete\n && this.options.map.onComplete.constructor === Function\n ) {\n this.options.map.onComplete.bind(this)();\n }\n }\n\n if (this.table) {\n this.table.render();\n // On complete\n if (!this.firstExecution\n && this.options.table.onComplete\n && this.options.table.onComplete.constructor === Function\n ) {\n this.options.table.onComplete.bind(this)();\n }\n }\n\n // On complete\n if (!this.firstExecution\n && this.options.onComplete\n && this.options.onComplete.constructor === Function\n ) {\n this.options.onComplete.bind(this)();\n }\n this.firstExecution = true;\n }\n\n setColumnDetails() {\n const that = this;\n if (that.rawData.length === 0) {\n return;\n }\n const defaultColumns = {};\n\n Object.keys(that.rawData[0]).forEach((k) => {\n const patternNumber = /^[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?$/;\n const isNumber = (patternNumber.test(that.rawData[0][k]));\n defaultColumns[k] = {\n title: utils.keyToTile(k),\n filterMethod: (isNumber) ? 'compare' : 'field',\n filterInputType: (isNumber) ? 'number' : 'text',\n sorting: true,\n };\n if (isNumber) {\n defaultColumns[k].dataParse = val => parseFloat(val);\n }\n });\n that.columnDetails = utils.extendRecursive(defaultColumns, this.options.columns);\n\n // add isVirtual to columns details\n Object.keys(that.columnDetails).forEach((k) => {\n that.columnDetails[k].isVirtual = (typeof (that.columnDetails[k].virtual) === 'function');\n });\n }\n}\n","/* eslint no-unused-vars: 0 */\nimport utils from './utils';\nimport defaultOptions from './defaultOptions';\nimport MapTable from './maptable';\n\nd3.maptable = function (target) {\n let maptableObject;\n const maptable = {};\n const options = {\n target,\n columns: {},\n data: {},\n map: null,\n filters: null,\n table: null,\n };\n\n maptable.map = function (mapOptions = {}) {\n if (!topojson) {\n throw new Error('Maptable requires topojson.js');\n }\n if (typeof (mapOptions.path) !== 'string') {\n throw new Error('MapTable: map not provided');\n }\n options.map = mapOptions;\n return maptable;\n };\n\n maptable.json = function (jsonPath, preFilter) {\n options.data.type = 'json';\n options.data.path = jsonPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.csv = function (csvPath, preFilter) {\n options.data.type = 'csv';\n options.data.path = csvPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.tsv = function (tsvPath, preFilter) {\n options.data.type = 'tsv';\n options.data.path = tsvPath;\n options.data.preFilter = preFilter;\n return maptable;\n };\n\n maptable.filters = function (filtersOptions = {}) {\n options.filters = filtersOptions;\n return maptable;\n };\n\n maptable.table = function (tableOptions = {}) {\n options.table = tableOptions;\n return maptable;\n };\n\n maptable.columns = function (columns = {}) {\n options.columns = columns;\n return maptable;\n };\n\n maptable.render = function (onComplete) {\n if (typeof (target) !== 'string' || !document.querySelector(target)) {\n throw new Error('MapTable: target not found');\n }\n\n if (!options.data || !options.data.path) {\n throw new Error('MapTable: Please provide the path for your dataset json|csv|tsv');\n }\n\n if (options.map && !options.map.heatmap) options.map.heatmap = null;\n\n if (options.map && options.map.markers === false) options.map.markers = null;\n\n if (options.map && options.map.countries === false) options.map.countries = null;\n\n if (!options.filters) options.filters = null;\n options.onComplete = onComplete;\n\n const customOptions = utils.extendRecursive(defaultOptions, options);\n maptableObject = new MapTable(target, customOptions);\n\n // public functions\n return {\n render: () => maptableObject.render(),\n loadState: (stateName, isJson) => maptableObject.loadState(stateName, isJson),\n removeState: stateName => maptableObject.removeState(stateName),\n saveState: (stateName, stateData) => maptableObject.saveState(stateName, stateData),\n };\n };\n return maptable;\n};\n\nif (!d3) {\n throw new Error('Maptable requires d3.js');\n}\n\nexport default d3.maptable;\n"],"names":["appendOptions","select","options","defaultValue","forEach","f","option","document","createElement","setAttribute","value","innerText","text","appendChild","rangeToBool","el1","range","el2","parseInt","extendRecursive","dst","src","args","splice","call","arguments","toString","length","Object","keys","p","keyToTile","k","upperK","charAt","toUpperCase","slice","replace","sanitizeKey","toLowerCase","toNumber","str","Number","quantile","array","percentile","sort","a","b","index","result","Math","floor","i","fraction","uniqueValues","arr","l","indexOf","push","map","longitudeKey","latitudeKey","countryIdentifierKey","countryIdentifierType","zoom","saveState","exportSvg","exportSvgClient","ratioFromWidth","scaleHeight","scaleZoom","fitContentMargin","autoFitContent","tooltipClassName","countries","legend","attr","fill","stroke","heatmap","mask","weightByAttribute","weightByAttributeScale","circles","min","max","step","color","colorStrength","blur","borders","opacity","markers","r","title","fontSize","fontFamily","filters","table","className","collapseRowsBy","Legend","legendWidth","node","svg","append","getWidth","getHeight","buildIndice","domain","legendGradient","minNegative","maxNegative","midPercentNegative","round","midPercentPositive","indice","style","selectAll","buildScale","val","isNaN","maxValue","minValue","positionDelta","position","width","height","padding","console","warn","window","btoa","buildWatermark","d3","xhr","res","mapWatermarkDelta","mime","x","y","dataUri","responseText","pos","split","mul_table","shg_table","processImage","img","canvas","radius","blurAlphaChannel","getElementById","HTMLImageElement","w","naturalWidth","h","naturalHeight","HTMLCanvasElement","context","getContext","clearRect","drawImage","processCanvasRGBA","processCanvasRGB","getImageDataFromCanvas","top_x","top_y","imageData","getImageData","e","Error","processImageDataRGBA","putImageData","pixels","data","yp","yi","yw","r_sum","g_sum","b_sum","a_sum","r_out_sum","g_out_sum","b_out_sum","a_out_sum","r_in_sum","g_in_sum","b_in_sum","a_in_sum","pr","pg","pb","pa","rbs","div","w4","widthMinus1","heightMinus1","radiusPlus1","sumFactor","stackStart","BlurStack","stack","next","stackEnd","stackIn","stackOut","mul_sum","shg_sum","g","processImageDataRGB","image","canvasRGBA","canvasRGB","imageDataRGBA","imageDataRGB","GeoMap","maptable","jsonWorld","self","scale","transX","transY","containerSelector","target","container","querySelector","mapWrapper","existingMap","parentNode","insertBefore","removeChild","projection","geo","equirectangular","translate","rotate","precision","path","rawData","d","longitude","parseFloat","latitude","coord","zoomListener","behavior","scaleExtent","on","rescale","bind","tooltipMarkersNode","tooltipCountriesNode","layerGlobal","layerCountries","layerHeatmap","layerMarkers","watermark","Watermark","buildTitle","addExportSvgCapability","addEventListener","loadGeometries","pow","offsetWidth","deltaHeight","filterCountries","objects","geometries","filter","buildCountries","buildHeatmap","lands","topojson","merge","disableMask","maskHeatmap","datum","imgHeatmap","mesh","bordersHeatmap","enter","heatmapDataset","opts","lengthDataset","maxOpacityScale","linear","centralCircleOpacity","m","dataExtents","extent","userScale","log","canvasHeatmap","ctx","globalCompositeOperation","datumScale","getDatumScale","magnitudeScale","getMagnitudeScale","colorScale","beginPath","rect","fillStyle","closePath","colorMultiplier","aa","point","scaleOpacityDatum","circle","origin","angle","StackBlur","dataUrl","toDataURL","remove","getHeatmapData","dataCountries","feature","features","insert","legendCountry","shouldRenderLegend","aggregate","dataByCountry","nest","key","entries","geoDatum","properties","matchedCountry","uDatum","values","rollupValue","setAttrValues","countryItem","each","targetPath","attrKey","attrValue","undefined","scaleDomain","attrProperties","updateExtents","indiceChange","NaN","tooltip","activateTooltip","defaultGroupBy","dataMarkers","markerItem","markerObject","customTag","markerClassName","exit","transition","attrX","attrY","attrXDelta","attrYDelta","markerUpdate","hor","ver","ratio","deltaMarker","currentWidth","currentHeight","realHeight","realWidth","diffMarginWidth","diffMarginHeight","titleContainer","bgColor","source","html","originalTranslation","newTx","newTy","encodedTranslation","defaultZoom","decodeTranslation","event","encodeTranslation","exportedData","removeState","maxTransX","maxTransY","minTransX","minTransY","scaleAttributes","firstExecution","dataset","mode","scaleToUse","rollup","groupedData","reduce","c","validData","groupedValues","utils","base","exponent","sqrt","aggregatedValue","columnDetails","formatted","cellContent","positiveRanks","concat","v","negativeRanks","ranks","newValue","transform","useNegative","scaleFunction","scaleNegativeFunction","copy","scaledValue","empty","originalValueRaw","originalValue","updateMarkers","updateCountries","updateTitle","updateHeatmap","fitContent","onRender","constructor","Function","content","showing","total","inlineFilters","getDescription","innerHTML","tooltipNode","tooltipContent","isCountry","mouseLeft","mouseTop","tooltipDelta","mapRect","getBoundingClientRect","mousePosition","mouse","left","top","targetRect","svgXml","XMLSerializer","serializeToString","saveAs","blob","Blob","type","form","submit","exportNode","exportButton","exportForm","Filters","criteria","show","arrayDiff","join","activeColumns","filtersHeaderNode","filtersResetNode","display","marginLeft","reset","filtersTitleNode","createTextNode","filtersBodyNode","filtersElementsNode","filtersNewNode","add","evt","preventDefault","possibleFilters","getPossibleFilters","filterName","create","replaceNode","rowNode","buildRow","replaceChild","render","toggle","filterIndex","rowNodes","querySelectorAll","output","filtersChildren","childNodes","element","filterOutput","filterMethod","filterRangeSelect","filterValueMin","filterValueMax","filterValue","criterion","row","decodeURIComponent","defaultCriteria","setFilters","outputArray","line","selectedIndex","separatorWord","that","minusButton","filterSeparator","filterNameSelect","oldFilterName","getAttribute","newFilterName","refresh","filterVerb","filterRange","handleRangeChange","filterInput","filterInputType","filterValueAnd","filterSelect","sortKeys","ascending","except","isVirtual","matched","fmt","dataParse","exportFilters","filterNameSelects","visibility","disableNewFilter","Table","defaultSorting","Array","isArray","sorting","s","initialSorting","isSorting","header","body","nowrap","sortColumn","sortingRaw","sortingList","sortingData","encodedSorting","applySort","tableData","distinctBy","uniqueCollapsedRows","rowClassName","tds","columnKey","column","virtual","sortableColums","compareBool","d3SortMode","descending","filterType","String","sortIndex","sortValue","shiftKey","MapTable","state","saveStateTimeout","removeStateTimeout","json","loadData","csv","tsv","err","preFilter","setColumnDetails","isIE","navigator","userAgent","appVersion","firstChild","buildComponenents","errGeoMap","restoreState","stateName","isJson","parseState","parsedState","JSON","parse","message","loadState","params","location","href","clearTimeout","updateState","stateData","setTimeout","newUrl","stateHash","stateValue","stringify","encodeURIComponent","history","pushState","filterData","onComplete","defaultColumns","patternNumber","isNumber","test","columns","maptableObject","mapOptions","jsonPath","csvPath","tsvPath","filtersOptions","tableOptions","customOptions","defaultOptions"],"mappings":"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"} \ No newline at end of file diff --git a/dist/maptable.min.js b/dist/maptable.min.js index d595629..3d5ab0f 100644 --- a/dist/maptable.min.js +++ b/dist/maptable.min.js @@ -1,6 +1,6 @@ /** - * MapTable 1.7.1 - License MIT - Build: Wed Nov 14 2018 16:29:08 GMT-0800 (PST) + * MapTable 1.7.2 - License MIT - Build: Thu Nov 15 2018 10:28:04 GMT-0800 (PST) */ -this.d3=this.d3||{},this.d3.maptable=function(){"use strict";function t(t,e,a){e.forEach(function(e){var a=document.createElement("option");a.setAttribute("value",e.value),a.innerText=e.text,t.appendChild(a)}),t.value=a}function e(t,e,a){return"="===e?parseInt(t,10)===parseInt(a,10):"≠"===e?parseInt(t,10)!==parseInt(a,10)&&""!==t&&""!==a:">"===e?parseInt(t,10)>parseInt(a,10)&&""!==t&&""!==a:"<"===e?parseInt(t,10)=parseInt(a,10)&&""!==t&&""!==a:"≤"===e?parseInt(t,10)<=parseInt(a,10)&&""!==t&&""!==a:!0}function a(){for(var t={},e=void 0,i=[].splice.call(arguments,0),n={}.toString;i.length>0;)e=i.splice(0,1)[0],"[object Object]"===n.call(e)&&Object.keys(e).forEach(function(i){"[object Object]"===n.call(e[i])?t[i]=a(t[i]||{},e[i]):t[i]=e[i]});return t}function i(t){var e=t.charAt(0).toUpperCase()+t.slice(1);return e.replace(/_/g," ")}function n(t){return t.toLowerCase().replace(/ /g,"_").replace(/"/g,"").replace(/'/g,"")}function r(t){return t&&""!==t?Number(t.toString().replace(/[^0-9.]+|\s+/gim,"")):null}function s(t,e){t.sort(function(t,e){return t-e});var a=e/100*(t.length-1),i=void 0;if(Math.floor(a)===a)i=t[a];else{var n=Math.floor(a),r=a-n;i=t[n]+(t[n+1]-t[n])*r}return i}function o(t){if(!t)return t;for(var e=[],a=0,i=t.length;i>a;a+=1)-1===e.indexOf(t[a])&&""!==t[a]&&e.push(t[a]);return e}function l(t,e,a,i){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLImageElement&&!t instanceof HTMLImageElement)return;var n=t.naturalWidth,r=t.naturalHeight;if("string"==typeof e)var e=document.getElementById(e);else if("undefined"!=typeof HTMLCanvasElement&&!e instanceof HTMLCanvasElement)return;e.style.width=n+"px",e.style.height=r+"px",e.width=n,e.height=r;var s=e.getContext("2d");s.clearRect(0,0,n,r),s.drawImage(t,0,0),Number.isNaN(a)||1>a||(i?u(e,0,0,n,r,a):d(e,0,0,n,r,a))}function h(t,e,a,i,n){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLCanvasElement&&!t instanceof HTMLCanvasElement)return;var r,s=t.getContext("2d");try{try{r=s.getImageData(e,a,i,n)}catch(o){throw new Error("unable to access local image data: "+o)}}catch(o){throw new Error("unable to access image data: "+o)}return r}function u(t,e,a,i,n,r){if(!(Number.isNaN(r)||1>r)){r|=0;var s=h(t,e,a,i,n);s=p(s,e,a,i,n,r),t.getContext("2d").putImageData(s,e,a)}}function p(t,e,a,i,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T,q,j,F,D=t.data,H=r+r+1,W=i-1,O=n-1,I=r+1,P=I*(I+1)/2,L=new m,R=L;for(l=1;H>l;l++)if(R=R.next=new m,l==I)var B=R;R.next=L;var z=null,Y=null;d=p=0;var X=k[r],K=w[r];for(o=0;n>o;o++){for(C=E=N=A=c=f=v=g=0,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(l=1;I>l;l++)h=p+((l>W?W:l)<<2),c+=(R.r=M=D[h])*(F=I-l),f+=(R.g=T=D[h+1])*F,v+=(R.b=q=D[h+2])*F,g+=(R.a=j=D[h+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next;for(z=L,Y=B,s=0;i>s;s++)D[p+3]=j=g*X>>K,0!=j?(j=255/j,D[p]=(c*X>>K)*j,D[p+1]=(f*X>>K)*j,D[p+2]=(v*X>>K)*j):D[p]=D[p+1]=D[p+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=d+((h=s+r+1)s;s++){for(E=N=A=C=f=v=g=c=0,p=s<<2,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(u=i,l=1;r>=l;l++)p=u+s<<2,c+=(R.r=M=D[p])*(F=I-l),f+=(R.g=T=D[p+1])*F,v+=(R.b=q=D[p+2])*F,g+=(R.a=j=D[p+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next,O>l&&(u+=i);for(p=s,z=L,Y=B,o=0;n>o;o++)h=p<<2,D[h+3]=j=g*X>>K,j>0?(j=255/j,D[h]=(c*X>>K)*j,D[h+1]=(f*X>>K)*j,D[h+2]=(v*X>>K)*j):D[h]=D[h+1]=D[h+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=s+((h=o+I)r)){r|=0;var s=h(t,e,a,i,n);s=c(s,e,a,i,n,r),t.getContext("2d").putImageData(s,e,a)}}function c(t,e,a,i,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T=t.data,q=r+r+1,j=i-1,F=n-1,D=r+1,H=D*(D+1)/2,W=new m,O=W;for(l=1;q>l;l++)if(O=O.next=new m,l==D)var I=O;O.next=W;var P=null,L=null;d=p=0;var R=k[r],B=w[r];for(o=0;n>o;o++){for(x=S=C=c=f=v=0,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(l=1;D>l;l++)h=p+((l>j?j:l)<<2),c+=(O.r=E=T[h])*(M=D-l),f+=(O.g=N=T[h+1])*M,v+=(O.b=A=T[h+2])*M,x+=E,S+=N,C+=A,O=O.next;for(P=W,L=I,s=0;i>s;s++)T[p]=c*R>>B,T[p+1]=f*R>>B,T[p+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=d+((h=s+r+1)s;s++){for(S=C=x=f=v=c=0,p=s<<2,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(u=i,l=1;r>=l;l++)p=u+s<<2,c+=(O.r=E=T[p])*(M=D-l),f+=(O.g=N=T[p+1])*M,v+=(O.b=A=T[p+2])*M,x+=E,S+=N,C+=A,O=O.next,F>l&&(u+=i);for(p=s,P=W,L=I,o=0;n>o;o++)h=p<<2,T[h]=c*R>>B,T[h+1]=f*R>>B,T[h+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=s+((h=o+D).1}),s=this.path.context(a),o=this.getMagnitudeScale(r),l=d3.scale.linear().domain([1,0]).range(["#000000","#FFFFFF"]);a.beginPath(),a.rect(0,0,this.getWidth(),this.getHeight()),a.fillStyle="#ffffff",a.fill(),a.closePath();var h=function(e){var a=t.options.heatmap.circles.colorStrength,i=1+(a-1)/100;return a>1?(2-i)*e+i-1:a*e};r.forEach(function(t){var e=n(t);i.forEach(function(i){var n=h(o(i)*e);n>0&&(a.beginPath(),s(d3.geo.circle().origin([t.longitude,t.latitude]).angle(i-1e-4)()),a.fillStyle=l(n),a.fill(),a.closePath())})}),x.canvasRGBA(e.node(),0,0,this.getWidth(),this.getHeight(),this.options.heatmap.circles.blur),a.beginPath(),a.globalCompositeOperation="screen",a.rect(0,0,this.getWidth(),this.getHeight()),a.fillStyle=this.options.heatmap.circles.color,a.fill(),a.closePath();var u=e.node().toDataURL();return e.remove(),u}},{key:"updateHeatmap",value:function(){var t=this.getHeatmapData();this.imgHeatmap.attr("xlink:href",t)}},{key:"buildCountries",value:function(){this.dataCountries=topojson.feature(this.jsonWorld,this.jsonWorld.objects.countries).features,this.layerCountries.selectAll(".mt-map-country").data(this.dataCountries).enter().insert("path").attr("class","mt-map-country").attr("d",this.path),this.legendCountry={},this.shouldRenderLegend()&&(this.legendCountry.fill=new y(this))}},{key:"shouldRenderLegend",value:function(){var t=this.options.countries.attr.fill;if(!t)return!1;if(!t.legend||!t.min||!t.max)return!1;if(t.aggregate&&t.aggregate.scale){var e="function"==typeof t.aggregate.scale?t.aggregate.scale.bind(this.maptable)():t.aggregate.scale;if("linear"!==e)return!1}return!0}},{key:"updateCountries",value:function(){var t=this,e=d3.nest().key(function(e){return e[t.options.countryIdentifierKey]}).entries(this.maptable.data);this.dataCountries.forEach(function(a){a.key=a.properties[t.options.countryIdentifierType];var i=e.filter(function(t){return t.key===a.key});a.values=0===i.length?[]:i[0].values,a.attr={},a.rollupValue={}}),Object.keys(this.options.countries.attr).forEach(function(e){t.setAttrValues(e,t.options.countries.attr[e],t.dataCountries)});var a=d3.selectAll(".mt-map-country").each(function(t){var e=this;Object.keys(t.attr).forEach(function(a){d3.select(e).attr(a,t.attr[a])})});Object.keys(this.options.countries.attr).forEach(function(e){var i=t.options.countries.attr[e];if("object"===("undefined"==typeof i?"undefined":f["typeof"](i))&&i.legend){var n=d3.extent(t.dataCountries,function(t){return Number(t.attrProperties[e].value)});t.legendCountry[e].updateExtents(n),a.on("mouseover",function(a){t.legendCountry[e].indiceChange(a.attrProperties[e].value)}).on("mouseout",function(){t.legendCountry[e].indiceChange(NaN)})}}),this.options.countries&&this.options.countries.tooltip&&this.activateTooltip(a,this.tooltipCountriesNode,this.options.countries.tooltip,!0)}},{key:"updateMarkers",value:function(){var t=this,e=function(t){return t.longitude+","+t.latitude};this.dataMarkers=d3.nest().key(e).entries(this.maptable.data).filter(function(t){return 0!==t.values[0].x}),this.dataMarkers.forEach(function(t){t.attr={},t.attrProperties={}}),Object.keys(this.options.markers.attr).forEach(function(e){t.setAttrValues(e,t.options.markers.attr[e],t.dataMarkers)});var a=this.layerMarkers.selectAll(".mt-map-marker").data(this.dataMarkers),i=a.enter();i=this.options.markers.customTag?this.options.markers.customTag(i):i.append("svg:circle");var n=this.options.markers.className?this.options.markers.className:"";i.attr("class","mt-map-marker "+n),a.exit().transition().attr("r",0).attr("fill","#eee").style("opacity",0).remove();var r=this.options.markers.attrX?this.options.markers.attrX:"cx",s=this.options.markers.attrY?this.options.markers.attrY:"cy",o=this.options.markers.attrXDelta?this.options.markers.attrXDelta:0,l=this.options.markers.attrYDelta?this.options.markers.attrYDelta:0,h=a.attr(r,function(t){return t.values[0].x+o}).attr(s,function(t){return t.values[0].y+l});d3.selectAll(this.containerSelector+" .mt-map-marker").each(function(t){var e=this;Object.keys(t.attr).forEach(function(a){d3.select(e).attr(a,t.attr[a])})}),this.options.markers.tooltip&&this.activateTooltip(h,this.tooltipMarkersNode,this.options.markers.tooltip,!1),this.rescale()}},{key:"fitContent",value:function(){if(0===this.maptable.data.length)return this.transX=0,this.transY=0,this.scale=1,void this.zoomListener.translate([this.transX,this.transY]).scale(this.scale);var t=d3.extent(this.maptable.data,function(t){return t.x}),e=d3.extent(this.maptable.data,function(t){return t.y}),a=this.getWidth()/this.getHeight(),i=20+(this.options.title?30:0),n=t[1]-t[0]+i,r=e[1]-e[0]+i,s=n/a,o=r*a,l=0,h=0;o>=n?l=(o-n)/2:h=(s-r)/2,t[0]-=this.options.fitContentMargin+l,t[1]+=this.options.fitContentMargin+l,e[0]-=this.options.fitContentMargin+h,e[1]+=this.options.fitContentMargin+h,this.scale=this.getWidth()/(t[1]-t[0]),this.transX=-1*t[0]*this.scale,this.transY=-1*e[0]*this.scale,this.zoomListener.translate([this.transX,this.transY]).scale(this.scale)}},{key:"buildTitle",value:function(){var t=this.svg.append("svg").attr("width",this.getWidth()).attr("x",0).attr("y",this.getHeight()-30).attr("height",30);this.options.title.bgColor&&t.append("rect").attr("x",0).attr("y",0).attr("width",this.getWidth()).attr("height",30).attr("fill",this.options.title.bgColor),t.append("text").attr("id","mt-map-title").attr("x",20).attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).attr("y",20),this.options.title.source&&t.append("text").attr("y",20).attr("x",this.getWidth()-20).attr("text-anchor","end").attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).html(this.options.title.source())}},{key:"encodeTranslation",value:function(t){var e=t[0]/(this.scale*this.getWidth()),a=t[1]/(this.scale*this.getHeight());return[e,a]}},{key:"decodeTranslation",value:function(t){var e=t[0]*this.getWidth()*this.scale,a=t[1]*this.getHeight()*this.scale;return[e,a]}},{key:"restoreState",value:function(t){if(t&&3===t.length){this.scale=t[0];var e=this.decodeTranslation([t[1],t[2]]);this.transX=e[0],this.transY=e[1],this.zoomListener.scale(t[0]).translate(e).event(this.svg)}}},{key:"saveState",value:function(){var t=this.encodeTranslation([this.transX,this.transY]),e=[this.scale,t[0],t[1]];1!==e[0]&&0!==e[1]&&0!==e[2]?this.maptable.saveState("zoom",e):this.maptable.removeState("zoom")}},{key:"rescale",value:function(){var t=this;d3.event&&d3.event.translate&&(this.scale=d3.event.scale,this.transX=1===this.scale?0:d3.event.translate[0],this.transY=1===this.scale?0:d3.event.translate[1]);var e=0,a=0,i=this.getWidth()*(1-this.scale),n=this.getHeight()*(1-this.scale);this.transY>a?this.transY=a:this.transYe?this.transX=e:this.transXe?e:t},e[0])};else if("max"===s)e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return e.reduce(function(t,e){return e>t?e:t},e[0])};else if(-1!==s.indexOf("percentile")){var l=v.toNumber(s);e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return v.quantile(e,l)}}else"function"==typeof e.rollup&&(e.rollup=e.rollup.bind(this.maptable));n&&(-1!==n.indexOf("log")?o=d3.scale.log().base(v.toNumber(n)||10):-1!==n.indexOf("pow")?o=d3.scale.pow().exponent(v.toNumber(n)||1):"sqrt"===n&&(o=d3.scale.sqrt()))}if(e.rollup||(e.rollup=function(t){return t.length}),!e.min||!e.max)throw new Error("MapTable: You should provide values 'min' & 'max' for attr."+t);if(a.forEach(function(a){var o=e.rollup(a.values);if(a.attrProperties||(a.attrProperties={}),a.attrProperties[t]||(a.attrProperties[t]={}),a.attrProperties[t].value=o,r){a.attrProperties[t].key=r,a.attrProperties[t].mode=s,a.attrProperties[t].scale=n;var l=i.maptable.columnDetails[r];a.attrProperties[t].columnDetails=l;var h={};h[r]=o,a.attrProperties[t].formatted=l&&l.cellContent?l.cellContent.bind(i.maptable)(h):o}}),"rank"===n){var h=v.uniqueValues([0].concat(a.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return t>0}))),u=v.uniqueValues(a.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return 0>t}));h.sort(function(t,e){return t-e}),u.sort(function(t,e){return e-t}),a.forEach(function(e){if(0!==e.attrProperties[t].value){var a=e.attrProperties[t].value>=0?h:u,i=a.indexOf(Math.floor(100*e.attrProperties[t].value)/100),n=Math.round(i/a.length*100),r=e.attrProperties[t].value<0?n-2*n:n;e.attrProperties[t].value=r}})}var p=d3.extent(a,function(e){return Number(e.attrProperties[t].value)});e.transform&&(p[0]=e.transform.bind(this.maptable)(p[0],this.maptable.data),p[1]=e.transform.bind(this.maptable)(p[1],this.maptable.data));var d=e.min,c=e.max;if("minValue"===e.min&&(d=p[0]),"maxValue"===e.max&&(c=p[1]),e.maxNegative&&!e.minNegative||!e.maxNegative&&e.minNegative)throw new Error("MapTable: maxNegative or minNegative undefined. Please declare both.");var m=e.maxNegative&&e.minNegative,g=void 0,y=void 0;m?(g=o.copy().domain([0,p[1]]).range([d,c]),y=o.copy().domain([p[0],0]).range([e.maxNegative,e.minNegative])):g=o.domain(p).range([d,c]),a.forEach(function(a){var n=void 0;if(!a.values.length||Number.isNaN(a.attrProperties[t].value)){if("undefined"==typeof e.empty)throw new Error("MapTable: no empty property found for attr."+t);n=e.empty}else{var r=a.attrProperties[t].value,s=e.transform?e.transform.bind(i.maptable)(r,i.maptable.data):r;n=m&&0>s?y(s):g(s),0===s&&e.empty&&(n=e.empty)}a.attr[t]=n})}}},{key:"render",value:function(){this.options.markers&&this.updateMarkers(),this.options.countries&&this.updateCountries(),this.options.title&&this.updateTitle(),this.options.heatmap&&this.updateHeatmap(),this.options.autoFitContent&&(this.fitContent(),this.rescale()),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"updateTitle",value:function(){var t=this;if(this.options.title.content){var e=this.maptable.data.filter(function(e){return 0!==e[t.options.latitudeKey]}).length,a=this.maptable.rawData.filter(function(e){ -return 0!==e[t.options.latitudeKey]}).length,i="";this.maptable.filters&&(i=this.maptable.filters.getDescription()),this.container.querySelector("#mt-map-title").innerHTML=this.options.title.content.bind(this.maptable)(e,a,i,this.maptable.data,this.maptable.rawData,this.dataCountries)}}},{key:"activateTooltip",value:function(t,e,a,i){var n=this;t.on(i?"mousemove":"mouseover",function(t){var r=a.bind(this.maptable)(t);if(r){e.html(r).attr("style","display:block;position:fixed;");var s=void 0,o=void 0,l=e.node().offsetWidth/2;if(i){var h=n.node.getBoundingClientRect(),u=d3.mouse(n.svg.node()).map(function(t){return parseInt(t,10)});s=h.left+u[0]-l,o=h.top+u[1]+10}else{var p=this.getBoundingClientRect();s=p.left+p.width/2-l,o=p.top+p.height+2}e.attr("style","top:"+o+"px;left:"+s+"px;display:block;position:fixed;").on("mouseout",function(){e.style("display","none")})}}).on("mouseout",function(){e.style("display","none")})}},{key:"exportSvg",value:function(){var t=this.container.querySelector("#mt-map-svg"),e='\n'+(new XMLSerializer).serializeToString(t);if(this.options.exportSvgClient){if(!window.saveAs)throw new Error("MapTable: Missing FileSaver.js library");var a=new Blob([e],{type:"image/svg+xml"});window.saveAs(a,"visualization.svg")}else if(this.options.exportSvg){var i=this.node.querySelector("#mt-map-svg-form");i.querySelector('[name="data"]').value=e,i.submit()}}},{key:"addExportSvgCapability",value:function(){var t=document.createElement("div");t.setAttribute("id","mt-map-export"),this.container.querySelector("#mt-map").appendChild(t);var e=document.createElement("button");if(e.setAttribute("class","btn btn-xs btn-default"),e.innerHTML="Download",e.addEventListener("click",this.exportSvg.bind(this)),t.appendChild(e),this.options.exportSvg){var a=document.createElement("div");a.innerHTML='
',t.appendChild(a)}}}]),t}(),C=function(){function t(e,a){var i=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=a,this.criteria=[],this.options.show){var n=this.options.show.filter(function(t){return Object.keys(i.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.container=document.createElement("div"),this.maptable.node.appendChild(this.container),this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-filters"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-filters"),this.node.setAttribute("class","panel panel-default"),this.maptable.node.appendChild(this.node));var r=document.createElement("div");r.setAttribute("class","panel-heading");var s=document.createElement("button");s.setAttribute("id","mt-filters-reset"),s.setAttribute("class","btn btn-default btn-xs pull-right"),s.style.display="none",s.style.marginLeft=5,s.innerText="↺ Reset",s.addEventListener("click",this.reset),r.appendChild(s);var o=document.createElement("h3");o.setAttribute("class","panel-title"),o.appendChild(document.createTextNode("Filters")),r.appendChild(o),this.node.appendChild(r);var l=document.createElement("div");l.setAttribute("id","mt-filters-content"),l.setAttribute("class","panel-body");var h=document.createElement("div");h.setAttribute("id","mt-filters-elements"),l.appendChild(h);var u=document.createElement("a");u.setAttribute("id","mt-filters-new"),u.setAttribute("href","#"),u.innerText="+ New filter",u.addEventListener("click",this.add.bind(this)),l.appendChild(u),this.node.appendChild(l)}return f.createClass(t,[{key:"add",value:function(t){t&&t.preventDefault();var e=this.getPossibleFilters();if(0!==e.length){var a=e[0].key;this.create(a)}}},{key:"create",value:function(t,e){var a=this.buildRow(t);e?e.parentNode.replaceChild(a,e):this.node.querySelector("#mt-filters-elements").appendChild(a),this.criteria.push(t),this.maptable.render(),"none"===this.container.style.display&&this.toggle()}},{key:"remove",value:function(t){var e=this.node.querySelector('[data-mt-filter-name="'+t+'"]');e&&e.parentNode.removeChild(e);var a=this.criteria.indexOf(t);this.criteria.splice(a,1),this.maptable.render()}},{key:"reset",value:function(){for(var t=this.node.querySelectorAll("[data-mt-filter-name]"),e=0;e and\n '+h+""}else{var u=i.querySelector(".mt-filter-value-min").value;if(""===u)continue;s+=r.title+" is ",s+=o.options[o.selectedIndex].text,s+=''+u+""}}else if("field"===r.filterMethod||"dropdown"===r.filterMethod){var p=i.querySelector(".mt-filter-value").value;if(""===p)continue;var d="field"===r.filterMethod?"contains":"is";s+=r.title+" "+d+'\n '+p+""}t.push(s)}return t.join(", ")}},{key:"buildRow",value:function(t){var e=this,a=this,i=this.getPossibleFilters(),n=this.maptable.columnDetails[t],r=document.createElement("div");r.setAttribute("class","mt-filter-row"),r.setAttribute("data-mt-filter-name",t);var s=document.createElement("button");s.setAttribute("class","btn btn-default pull-right"),s.setAttribute("data-mt-filter-btn-minus",1),s.innerText="– Remove this filter",s.addEventListener("click",function(){t=r.querySelector(".mt-filter-name").value,e.remove(t)}),r.appendChild(s);var o=document.createElement("span");o.setAttribute("class","mt-filters-and"),o.innerText="And ",r.appendChild(o);var l=document.createElement("select");l.setAttribute("class","mt-filter-name form-control form-control-inline"),v.appendOptions(l,i.map(function(t){return{text:t.title,value:t.key}})),l.value=t,l.addEventListener("change",function(){var t=this.parentNode.getAttribute("data-mt-filter-name"),e=this.value;a.create(e,this.parentNode),a.remove(t),a.refresh()}),r.appendChild(l);var h=document.createElement("span");h.innerText="field"===n.filterMethod?" contains ":" is ",r.appendChild(h);var u=null;"field"!==n.filterMethod&&"dropdown"!==n.filterMethod&&(u=document.createElement("select"),u.setAttribute("class","mt-filter-range form-control form-control-inline"),v.appendOptions(u,["any","=","≠","<",">","≤","≥","BETWEEN"].map(function(t){return{text:t,value:t}})),u.addEventListener("change",function(){a.handleRangeChange(this)}),r.appendChild(u),r.appendChild(document.createTextNode(" ")));var p=document.createElement("div");if(p.style.display="inline-block",p.setAttribute("class","mt-filter-value-container"),"compare"===n.filterMethod)["min","max"].forEach(function(t,a){var i=document.createElement("input");if(i.setAttribute("class","form-control form-control-inline mt-filter-value-"+t),i.setAttribute("type",n.filterInputType),i.addEventListener("keyup",e.maptable.render.bind(e.maptable)),i.addEventListener("change",e.maptable.render.bind(e.maptable)),p.appendChild(i),0===a){var r=document.createElement("span");r.setAttribute("class","mt-filter-value-and"),r.innerText=" and ",p.appendChild(r)}});else if("field"===n.filterMethod){var d=document.createElement("input");d.setAttribute("class","form-control form-control-inline mt-filter-value"),d.setAttribute("type","text"),d.addEventListener("keyup",this.maptable.render.bind(this.maptable)),d.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(d)}else if("dropdown"===n.filterMethod){var c=document.createElement("select");c.setAttribute("class","form-control form-control-inline mt-filter-value");var m=d3.nest().key(function(e){return e[t]}).sortKeys(d3.ascending).entries(this.maptable.rawData);v.appendOptions(c,[{text:"Any",value:""}].concat(m.map(function(t){return{text:t.key,value:t.key}}))),c.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(c)}return r.appendChild(p),u&&this.handleRangeChange(u),r}},{key:"handleRangeChange",value:function(t){var e=t.parentNode;"any"===t.value?e.querySelector(".mt-filter-value-container").style.display="none":(e.querySelector(".mt-filter-value-container").style.display="inline-block","BETWEEN"===t.value?(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="inline-block",e.querySelector(".mt-filter-value-max").style.display="inline-block"):(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="none",e.querySelector(".mt-filter-value-max").style.display="none"))}},{key:"getPossibleFilters",value:function(t){var e=this;return Object.keys(this.maptable.columnDetails).map(function(t){return v.extendRecursive({key:t},e.maptable.columnDetails[t])}).filter(function(a){return-1!==e.activeColumns.indexOf(a.key)&&(t&&t===a.key||-1===e.criteria.indexOf(a.key)&&a.filterMethod&&!a.isVirtual)})}},{key:"filterData",value:function(){var t=this,e=this;this.maptable.data=this.maptable.rawData.filter(function(a){for(var i=t.node.querySelectorAll(".mt-filter-row"),n=!0,r=0;rh(m))?n=!1:(parseInt(a[o],10)parseInt(m,10))&&(n=!1)}else{var f=s.querySelector(".mt-filter-value-min").value;if(""===f)continue;h&&!v.rangeToBool(h(a[o]),d,h(f))?n=!1:h||v.rangeToBool(a[o],d,f)||(n=!1)}}}return n}),this.options.saveState&&this.maptable.saveState("filters",this.exportFilters())}},{key:"refresh",value:function(){for(var t=this.node.querySelectorAll(".mt-filter-name"),e=0;e0&&(this.node.querySelectorAll(".mt-filters-and")[0].style.visibility="hidden");var r=!this.getPossibleFilters().length;this.node.querySelector("#mt-filters-new").style.visibility=r?"hidden":"visible"}},{key:"toggle",value:function(){"none"===this.container.style.display?(this.container.style.display="block",0===this.criteria.length&&this.add()):this.container.style.display="none"}}]),t}(),E=function(){function t(e,a){var i=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=a,this.options.defaultSorting?(Array.isArray(this.options.defaultSorting)&&2===this.options.defaultSorting.length?this.sorting=this.options.defaultSorting:this.sorting=[this.options.defaultSorting],this.sorting.forEach(function(t){t.mode||(t.mode="asc")})):this.sorting=[{key:Object.keys(this.maptable.data[0])[0],mode:"asc"}],this.initialSorting=this.sorting.map(function(t){return t.key+","+t.mode}).join(";"),this.isSorting=!1,this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-table"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-table"),this.maptable.node.appendChild(this.node)),this.node=d3.select(this.node).append("table").attr("class",this.options.className),this.header=this.node.append("thead"),this.body=this.node.append("tbody"),this.options.show){var n=this.options.show.filter(function(t){return Object.keys(i.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.header.selectAll("tr").data([1]).enter().append("tr").selectAll("th").data(this.activeColumns.map(function(t){return v.extendRecursive({key:t},i.maptable.columnDetails[t])})).enter().append("th").attr("class",function(t){var e=t.sorting?"mt-table-sortable":"";return e+=t.nowrap?" nowrap":""}).attr("data-key",function(t){return v.sanitizeKey(t.key)}).attr("onselectstart","return false;").attr("unselectable","on").attr("style",function(t){return t.nowrap?"white-space:nowrap;":""}).on("click",function(t){i.isSorting||(i.isSorting=!0,t.sorting&&i.sortColumn(t.key),i.isSorting=!1)}).text(function(t){return t.title}).attr("id",function(t){return"column_header_"+v.sanitizeKey(t.key)})}return f.createClass(t,[{key:"restoreState",value:function(t){if(t){var e=t.split(";"),a=[];e.forEach(function(t){var e=t.split(",");a.push({key:e[0],mode:e[1]||"asc"})}),this.sorting=a}}},{key:"saveState",value:function(){var t=this.sorting.map(function(t){return t.key+","+t.mode}).join(";");t!==this.initialSorting&&this.maptable.saveState("sort",t)}},{key:"render",value:function(){var t=this;this.applySort();var e=this.maptable.data;this.options.distinctBy&&(e=d3.nest().key(function(e){return e[t.options.distinctBy]}).entries(this.maptable.data).map(function(t){return t.values[0]})),this.body.selectAll("tr").data(e).enter().append("tr"),this.body.selectAll("tr").data(e).exit().remove();var a=[];this.body.selectAll("tr").data(e).attr("class",function(e){return t.options.rowClassName?"line "+t.options.rowClassName(e):"line"}).html(function(e){var i="";return t.activeColumns.forEach(function(n){var r=t.maptable.columnDetails[n];i+=""}),i}),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"applySort",value:function(){for(var t=this,e=this.container.querySelectorAll(".mt-table-sortable"),a=0;a0;if(this.options.map.heatmap&&n)return i.innerHTML='
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
',this.node.insertBefore(i,this.node.firstChild),i.querySelector(".mt-loading").style.display="block",this.options.map=!1,void this.buildComponenents();i.innerHTML='
Loading...
',this.node.insertBefore(i,this.node.firstChild),i.querySelector(".mt-loading").style.display="block",d3.json(this.options.map.path,function(t,e){if(t)throw t;a.map=new S(a,a.options.map,e),i.querySelector(".mt-loading").style.display="none",a.buildComponenents()})}else this.buildComponenents()}},{key:"buildComponenents",value:function(){var t=this;this.options.filters&&(this.filters=new C(this,this.options.filters)),this.options.table&&(this.table=new E(this,this.options.table)),this.restoreState(),window.addEventListener("hashchange",function(){t.restoreState()}),this.render()}},{key:"loadState",value:function(t,e){if(e){var a=this.parseState(t);if(!a)return null;try{var i=JSON.parse(a);this.state[t]=i}catch(n){return console.log("Maptable: Invalid URL State for mt-"+t+" "+n.message),null}}else{var r=this.parseState(t);r&&(this.state[t]=r)}return this.state[t]}},{key:"restoreState",value:function(){this.map&&(this.loadState("zoom",!0),this.map.restoreState(this.state.zoom)),this.filters&&(this.loadState("filters",!0),this.filters.restoreState(this.state.filters)),this.table&&(this.loadState("sort",!1),this.table.restoreState(this.state.sort))}},{key:"parseState",value:function(t){var e=document.location.href.replace(/%21mt/g,"!mt").split("!mt-"+t+"=");return e[1]?decodeURIComponent(e[1].split("!mt")[0]):null}},{key:"removeState",value:function(t){window.clearTimeout(this.saveStateTimeout[t]),delete this.state[t],this.updateState()}},{key:"saveState",value:function(t,e){var a=this;window.clearTimeout(this.saveStateTimeout[t]),this.saveStateTimeout[t]=window.setTimeout(function(){a.state[t]=e,a.updateState()},200)}},{key:"updateState",value:function(){var t=this,e=document.location.href.split("#")[0],a="";Object.keys(this.state).forEach(function(e){if(t.state[e]){var i=t.state[e];if("object"===f["typeof"](t.state[e])){if(!Object.keys(t.state[e]).length)return;i=JSON.stringify(t.state[e])}a+="!mt-"+e+"="+encodeURIComponent(i)}}),""!==a&&(a="#"+a),document.location.href!==""+e+a&&window.history.pushState(null,null,""+e+a)}},{key:"render",value:function(){this.filters&&(this.filters.filterData(),this.filters.refresh()),this.map&&(this.map.render(),!this.firstExecution&&this.options.map.onComplete&&this.options.map.onComplete.constructor===Function&&this.options.map.onComplete.bind(this)()),this.table&&(this.table.render(),!this.firstExecution&&this.options.table.onComplete&&this.options.table.onComplete.constructor===Function&&this.options.table.onComplete.bind(this)()),!this.firstExecution&&this.options.onComplete&&this.options.onComplete.constructor===Function&&this.options.onComplete.bind(this)(),this.firstExecution=!0}},{key:"setColumnDetails",value:function(){var t=this;if(0!==t.rawData.length){var e={};Object.keys(t.rawData[0]).forEach(function(a){var i=/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/,n=i.test(t.rawData[0][a]);e[a]={title:v.keyToTile(a),filterMethod:n?"compare":"field",filterInputType:n?"number":"text",sorting:!0},n&&(e[a].dataParse=function(t){return parseFloat(t)})}),t.columnDetails=v.extendRecursive(e,this.options.columns),Object.keys(t.columnDetails).forEach(function(e){t.columnDetails[e].isVirtual="function"==typeof t.columnDetails[e].virtual})}}}]),t}();if(d3.maptable=function(t){var e=void 0,a={},i={target:t,columns:{},data:{},map:null,filters:null,table:null};return a.map=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!topojson)throw new Error("Maptable requires topojson.js");if("string"!=typeof t.path)throw new Error("MapTable: map not provided");return i.map=t,a},a.json=function(t,e){return i.data.type="json",i.data.path=t,i.data.preFilter=e,a},a.csv=function(t,e){return i.data.type="csv",i.data.path=t,i.data.preFilter=e,a},a.tsv=function(t,e){return i.data.type="tsv",i.data.path=t,i.data.preFilter=e,a},a.filters=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.filters=t,a},a.table=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.table=t,a},a.columns=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.columns=t,a},a.render=function(a){if("string"!=typeof t||!document.querySelector(t))throw new Error("MapTable: target not found");if(!i.data||!i.data.path)throw new Error("MapTable: Please provide the path for your dataset json|csv|tsv");i.map&&!i.map.heatmap&&(i.map.heatmap=null),i.map&&i.map.markers===!1&&(i.map.markers=null),i.map&&i.map.countries===!1&&(i.map.countries=null),i.filters||(i.filters=null),i.onComplete=a;var n=v.extendRecursive(g,i);return e=new N(t,n),{render:function(){return e.render()},loadState:function(t,a){return e.loadState(t,a)},removeState:function(t){return e.removeState(t)},saveState:function(t,a){return e.saveState(t,a)}}},a},!d3)throw new Error("Maptable requires d3.js");var A=d3.maptable;return A}(); \ No newline at end of file +this.d3=this.d3||{},this.d3.maptable=function(){"use strict";function t(t,e,i){e.forEach(function(e){var i=document.createElement("option");i.setAttribute("value",e.value),i.innerText=e.text,t.appendChild(i)}),t.value=i}function e(t,e,i){return"="===e?parseInt(t,10)===parseInt(i,10):"≠"===e?parseInt(t,10)!==parseInt(i,10)&&""!==t&&""!==i:">"===e?parseInt(t,10)>parseInt(i,10)&&""!==t&&""!==i:"<"===e?parseInt(t,10)=parseInt(i,10)&&""!==t&&""!==i:"≤"===e?parseInt(t,10)<=parseInt(i,10)&&""!==t&&""!==i:!0}function i(){for(var t={},e=void 0,a=[].splice.call(arguments,0),n={}.toString;a.length>0;)e=a.splice(0,1)[0],"[object Object]"===n.call(e)&&Object.keys(e).forEach(function(a){"[object Object]"===n.call(e[a])?t[a]=i(t[a]||{},e[a]):t[a]=e[a]});return t}function a(t){var e=t.charAt(0).toUpperCase()+t.slice(1);return e.replace(/_/g," ")}function n(t){return t.toLowerCase().replace(/ /g,"_").replace(/"/g,"").replace(/'/g,"")}function r(t){return t&&""!==t?Number(t.toString().replace(/[^0-9.]+|\s+/gim,"")):null}function s(t,e){t.sort(function(t,e){return t-e});var i=e/100*(t.length-1),a=void 0;if(Math.floor(i)===i)a=t[i];else{var n=Math.floor(i),r=i-n;a=t[n]+(t[n+1]-t[n])*r}return a}function o(t){if(!t)return t;for(var e=[],i=0,a=t.length;a>i;i+=1)-1===e.indexOf(t[i])&&""!==t[i]&&e.push(t[i]);return e}function l(t,e,i,a){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLImageElement&&!t instanceof HTMLImageElement)return;var n=t.naturalWidth,r=t.naturalHeight;if("string"==typeof e)var e=document.getElementById(e);else if("undefined"!=typeof HTMLCanvasElement&&!e instanceof HTMLCanvasElement)return;e.style.width=n+"px",e.style.height=r+"px",e.width=n,e.height=r;var s=e.getContext("2d");s.clearRect(0,0,n,r),s.drawImage(t,0,0),Number.isNaN(i)||1>i||(a?u(e,0,0,n,r,i):d(e,0,0,n,r,i))}function h(t,e,i,a,n){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLCanvasElement&&!t instanceof HTMLCanvasElement)return;var r,s=t.getContext("2d");try{try{r=s.getImageData(e,i,a,n)}catch(o){throw new Error("unable to access local image data: "+o)}}catch(o){throw new Error("unable to access image data: "+o)}return r}function u(t,e,i,a,n,r){if(!(Number.isNaN(r)||1>r)){r|=0;var s=h(t,e,i,a,n);s=p(s,e,i,a,n,r),t.getContext("2d").putImageData(s,e,i)}}function p(t,e,i,a,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T,q,j,F,D=t.data,H=r+r+1,W=a-1,O=n-1,I=r+1,P=I*(I+1)/2,L=new m,R=L;for(l=1;H>l;l++)if(R=R.next=new m,l==I)var B=R;R.next=L;var z=null,Y=null;d=p=0;var X=k[r],K=w[r];for(o=0;n>o;o++){for(C=E=N=A=c=f=v=g=0,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(l=1;I>l;l++)h=p+((l>W?W:l)<<2),c+=(R.r=M=D[h])*(F=I-l),f+=(R.g=T=D[h+1])*F,v+=(R.b=q=D[h+2])*F,g+=(R.a=j=D[h+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next;for(z=L,Y=B,s=0;a>s;s++)D[p+3]=j=g*X>>K,0!=j?(j=255/j,D[p]=(c*X>>K)*j,D[p+1]=(f*X>>K)*j,D[p+2]=(v*X>>K)*j):D[p]=D[p+1]=D[p+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=d+((h=s+r+1)s;s++){for(E=N=A=C=f=v=g=c=0,p=s<<2,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(u=a,l=1;r>=l;l++)p=u+s<<2,c+=(R.r=M=D[p])*(F=I-l),f+=(R.g=T=D[p+1])*F,v+=(R.b=q=D[p+2])*F,g+=(R.a=j=D[p+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next,O>l&&(u+=a);for(p=s,z=L,Y=B,o=0;n>o;o++)h=p<<2,D[h+3]=j=g*X>>K,j>0?(j=255/j,D[h]=(c*X>>K)*j,D[h+1]=(f*X>>K)*j,D[h+2]=(v*X>>K)*j):D[h]=D[h+1]=D[h+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=s+((h=o+I)r)){r|=0;var s=h(t,e,i,a,n);s=c(s,e,i,a,n,r),t.getContext("2d").putImageData(s,e,i)}}function c(t,e,i,a,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T=t.data,q=r+r+1,j=a-1,F=n-1,D=r+1,H=D*(D+1)/2,W=new m,O=W;for(l=1;q>l;l++)if(O=O.next=new m,l==D)var I=O;O.next=W;var P=null,L=null;d=p=0;var R=k[r],B=w[r];for(o=0;n>o;o++){for(x=S=C=c=f=v=0,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(l=1;D>l;l++)h=p+((l>j?j:l)<<2),c+=(O.r=E=T[h])*(M=D-l),f+=(O.g=N=T[h+1])*M,v+=(O.b=A=T[h+2])*M,x+=E,S+=N,C+=A,O=O.next;for(P=W,L=I,s=0;a>s;s++)T[p]=c*R>>B,T[p+1]=f*R>>B,T[p+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=d+((h=s+r+1)s;s++){for(S=C=x=f=v=c=0,p=s<<2,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(u=a,l=1;r>=l;l++)p=u+s<<2,c+=(O.r=E=T[p])*(M=D-l),f+=(O.g=N=T[p+1])*M,v+=(O.b=A=T[p+2])*M,x+=E,S+=N,C+=A,O=O.next,F>l&&(u+=a);for(p=s,P=W,L=I,o=0;n>o;o++)h=p<<2,T[h]=c*R>>B,T[h+1]=f*R>>B,T[h+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=s+((h=o+D).1}),s=this.path.context(i),o=this.getMagnitudeScale(r),l=d3.scale.linear().domain([1,0]).range(["#000000","#FFFFFF"]);i.beginPath(),i.rect(0,0,this.getWidth(),this.getHeight()),i.fillStyle="#ffffff",i.fill(),i.closePath();var h=function(e){var i=t.options.heatmap.circles.colorStrength,a=1+(i-1)/100;return i>1?(2-a)*e+a-1:i*e};r.forEach(function(t){var e=n(t);a.forEach(function(a){var n=h(o(a)*e);n>0&&(i.beginPath(),s(d3.geo.circle().origin([t.longitude,t.latitude]).angle(a-1e-4)()),i.fillStyle=l(n),i.fill(),i.closePath())})}),x.canvasRGBA(e.node(),0,0,this.getWidth(),this.getHeight(),this.options.heatmap.circles.blur),i.beginPath(),i.globalCompositeOperation="screen",i.rect(0,0,this.getWidth(),this.getHeight()),i.fillStyle=this.options.heatmap.circles.color,i.fill(),i.closePath();var u=e.node().toDataURL();return e.remove(),u}},{key:"updateHeatmap",value:function(){var t=this.getHeatmapData();this.imgHeatmap.attr("xlink:href",t)}},{key:"buildCountries",value:function(){this.dataCountries=topojson.feature(this.jsonWorld,this.jsonWorld.objects.countries).features,this.layerCountries.selectAll(".mt-map-country").data(this.dataCountries).enter().insert("path").attr("class","mt-map-country").attr("d",this.path),this.legendCountry={},this.shouldRenderLegend()&&(this.legendCountry.fill=new y(this))}},{key:"shouldRenderLegend",value:function(){var t=this.options.countries.attr.fill;if(!t)return!1;if(!t.legend||!t.min||!t.max)return!1;if(t.aggregate&&t.aggregate.scale){var e="function"==typeof t.aggregate.scale?t.aggregate.scale.bind(this.maptable)():t.aggregate.scale;if("linear"!==e)return!1}return!0}},{key:"updateCountries",value:function(){var t=this,e=d3.nest().key(function(e){return e[t.options.countryIdentifierKey]}).entries(this.maptable.data);this.dataCountries.forEach(function(i){i.key=i.properties[t.options.countryIdentifierType];var a=e.filter(function(t){return t.key===i.key});i.values=0===a.length?[]:a[0].values,i.attr={},i.rollupValue={}}),Object.keys(this.options.countries.attr).forEach(function(e){t.setAttrValues(e,t.options.countries.attr[e],t.dataCountries)});var i=d3.selectAll(".mt-map-country").each(function(t){var e=this;Object.keys(t.attr).forEach(function(i){d3.select(e).attr(i,t.attr[i])})});Object.keys(this.options.countries.attr).forEach(function(e){var a=t.options.countries.attr[e];if("object"===("undefined"==typeof a?"undefined":f["typeof"](a))&&a.legend&&void 0!=t.legendCountry[e]){var n=d3.extent(t.dataCountries,function(t){return Number(t.attrProperties[e].value)});t.legendCountry[e].updateExtents(n),i.on("mouseover",function(i){t.legendCountry[e].indiceChange(i.attrProperties[e].value)}).on("mouseout",function(){t.legendCountry[e].indiceChange(NaN)})}}),this.options.countries&&this.options.countries.tooltip&&this.activateTooltip(i,this.tooltipCountriesNode,this.options.countries.tooltip,!0)}},{key:"updateMarkers",value:function(){var t=this,e=function(t){return t.longitude+","+t.latitude};this.dataMarkers=d3.nest().key(e).entries(this.maptable.data).filter(function(t){return 0!==t.values[0].x}),this.dataMarkers.forEach(function(t){t.attr={},t.attrProperties={}}),Object.keys(this.options.markers.attr).forEach(function(e){t.setAttrValues(e,t.options.markers.attr[e],t.dataMarkers)});var i=this.layerMarkers.selectAll(".mt-map-marker").data(this.dataMarkers),a=i.enter();a=this.options.markers.customTag?this.options.markers.customTag(a):a.append("svg:circle");var n=this.options.markers.className?this.options.markers.className:"";a.attr("class","mt-map-marker "+n),i.exit().transition().attr("r",0).attr("fill","#eee").style("opacity",0).remove();var r=this.options.markers.attrX?this.options.markers.attrX:"cx",s=this.options.markers.attrY?this.options.markers.attrY:"cy",o=this.options.markers.attrXDelta?this.options.markers.attrXDelta:0,l=this.options.markers.attrYDelta?this.options.markers.attrYDelta:0,h=i.attr(r,function(t){return t.values[0].x+o}).attr(s,function(t){return t.values[0].y+l});d3.selectAll(this.containerSelector+" .mt-map-marker").each(function(t){var e=this;Object.keys(t.attr).forEach(function(i){d3.select(e).attr(i,t.attr[i])})}),this.options.markers.tooltip&&this.activateTooltip(h,this.tooltipMarkersNode,this.options.markers.tooltip,!1),this.rescale()}},{key:"fitContent",value:function(){if(0===this.maptable.data.length)return this.transX=0,this.transY=0,this.scale=1,void this.zoomListener.translate([this.transX,this.transY]).scale(this.scale);var t=d3.extent(this.maptable.data,function(t){return t.x}),e=d3.extent(this.maptable.data,function(t){return t.y}),i=this.getWidth()/this.getHeight(),a=20+(this.options.title?30:0),n=t[1]-t[0]+a,r=e[1]-e[0]+a,s=n/i,o=r*i,l=0,h=0;o>=n?l=(o-n)/2:h=(s-r)/2,t[0]-=this.options.fitContentMargin+l,t[1]+=this.options.fitContentMargin+l,e[0]-=this.options.fitContentMargin+h,e[1]+=this.options.fitContentMargin+h,this.scale=this.getWidth()/(t[1]-t[0]),this.transX=-1*t[0]*this.scale,this.transY=-1*e[0]*this.scale,this.zoomListener.translate([this.transX,this.transY]).scale(this.scale)}},{key:"buildTitle",value:function(){var t=this.svg.append("svg").attr("width",this.getWidth()).attr("x",0).attr("y",this.getHeight()-30).attr("height",30);this.options.title.bgColor&&t.append("rect").attr("x",0).attr("y",0).attr("width",this.getWidth()).attr("height",30).attr("fill",this.options.title.bgColor),t.append("text").attr("id","mt-map-title").attr("x",20).attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).attr("y",20),this.options.title.source&&t.append("text").attr("y",20).attr("x",this.getWidth()-20).attr("text-anchor","end").attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).html(this.options.title.source())}},{key:"encodeTranslation",value:function(t){var e=t[0]/(this.scale*this.getWidth()),i=t[1]/(this.scale*this.getHeight());return[e,i]}},{key:"decodeTranslation",value:function(t){var e=t[0]*this.getWidth()*this.scale,i=t[1]*this.getHeight()*this.scale;return[e,i]}},{key:"restoreState",value:function(t){if(t&&3===t.length){this.scale=t[0];var e=this.decodeTranslation([t[1],t[2]]);this.transX=e[0],this.transY=e[1],this.zoomListener.scale(t[0]).translate(e).event(this.svg)}}},{key:"saveState",value:function(){var t=this.encodeTranslation([this.transX,this.transY]),e=[this.scale,t[0],t[1]];1!==e[0]&&0!==e[1]&&0!==e[2]?this.maptable.saveState("zoom",e):this.maptable.removeState("zoom")}},{key:"rescale",value:function(){var t=this;d3.event&&d3.event.translate&&(this.scale=d3.event.scale,this.transX=1===this.scale?0:d3.event.translate[0],this.transY=1===this.scale?0:d3.event.translate[1]);var e=0,i=0,a=this.getWidth()*(1-this.scale),n=this.getHeight()*(1-this.scale);this.transY>i?this.transY=i:this.transYe?this.transX=e:this.transXe?e:t},e[0])};else if("max"===s)e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return e.reduce(function(t,e){return e>t?e:t},e[0])};else if(-1!==s.indexOf("percentile")){var l=v.toNumber(s);e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return v.quantile(e,l)}}else"function"==typeof e.rollup&&(e.rollup=e.rollup.bind(this.maptable));n&&(-1!==n.indexOf("log")?o=d3.scale.log().base(v.toNumber(n)||10):-1!==n.indexOf("pow")?o=d3.scale.pow().exponent(v.toNumber(n)||1):"sqrt"===n&&(o=d3.scale.sqrt()))}if(e.rollup||(e.rollup=function(t){return t.length}),!e.min||!e.max)throw new Error("MapTable: You should provide values 'min' & 'max' for attr."+t);if(i.forEach(function(i){var o=e.rollup(i.values);if(i.attrProperties||(i.attrProperties={}),i.attrProperties[t]||(i.attrProperties[t]={}),i.attrProperties[t].value=o,r){i.attrProperties[t].key=r,i.attrProperties[t].mode=s,i.attrProperties[t].scale=n;var l=a.maptable.columnDetails[r];i.attrProperties[t].columnDetails=l;var h={};h[r]=o,i.attrProperties[t].formatted=l&&l.cellContent?l.cellContent.bind(a.maptable)(h):o}}),"rank"===n){var h=v.uniqueValues([0].concat(i.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return t>0}))),u=v.uniqueValues(i.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return 0>t}));h.sort(function(t,e){return t-e}),u.sort(function(t,e){return e-t}),i.forEach(function(e){if(0!==e.attrProperties[t].value){var i=e.attrProperties[t].value>=0?h:u,a=i.indexOf(Math.floor(100*e.attrProperties[t].value)/100),n=Math.round(a/i.length*100),r=e.attrProperties[t].value<0?n-2*n:n;e.attrProperties[t].value=r}})}var p=d3.extent(i,function(e){return Number(e.attrProperties[t].value)});e.transform&&(p[0]=e.transform.bind(this.maptable)(p[0],this.maptable.data),p[1]=e.transform.bind(this.maptable)(p[1],this.maptable.data));var d=e.min,c=e.max;if("minValue"===e.min&&(d=p[0]),"maxValue"===e.max&&(c=p[1]),e.maxNegative&&!e.minNegative||!e.maxNegative&&e.minNegative)throw new Error("MapTable: maxNegative or minNegative undefined. Please declare both.");var m=e.maxNegative&&e.minNegative,g=void 0,y=void 0;m?(g=o.copy().domain([0,p[1]]).range([d,c]),y=o.copy().domain([p[0],0]).range([e.maxNegative,e.minNegative])):g=o.domain(p).range([d,c]),i.forEach(function(i){var n=void 0;if(!i.values.length||Number.isNaN(i.attrProperties[t].value)){if("undefined"==typeof e.empty)throw new Error("MapTable: no empty property found for attr."+t);n=e.empty}else{var r=i.attrProperties[t].value,s=e.transform?e.transform.bind(a.maptable)(r,a.maptable.data):r;n=m&&0>s?y(s):g(s),0===s&&e.empty&&(n=e.empty)}i.attr[t]=n})}}},{key:"render",value:function(){this.options.markers&&this.updateMarkers(),this.options.countries&&this.updateCountries(),this.options.title&&this.updateTitle(),this.options.heatmap&&this.updateHeatmap(),this.options.autoFitContent&&(this.fitContent(),this.rescale()),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"updateTitle",value:function(){var t=this;if(this.options.title.content){var e=this.maptable.data.filter(function(e){return 0!==e[t.options.latitudeKey]}).length,i=this.maptable.rawData.filter(function(e){ +return 0!==e[t.options.latitudeKey]}).length,a="";this.maptable.filters&&(a=this.maptable.filters.getDescription()),this.container.querySelector("#mt-map-title").innerHTML=this.options.title.content.bind(this.maptable)(e,i,a,this.maptable.data,this.maptable.rawData,this.dataCountries)}}},{key:"activateTooltip",value:function(t,e,i,a){var n=this;t.on(a?"mousemove":"mouseover",function(t){var r=i.bind(this.maptable)(t);if(r){e.html(r).attr("style","display:block;position:fixed;");var s=void 0,o=void 0,l=e.node().offsetWidth/2;if(a){var h=n.node.getBoundingClientRect(),u=d3.mouse(n.svg.node()).map(function(t){return parseInt(t,10)});s=h.left+u[0]-l,o=h.top+u[1]+10}else{var p=this.getBoundingClientRect();s=p.left+p.width/2-l,o=p.top+p.height+2}e.attr("style","top:"+o+"px;left:"+s+"px;display:block;position:fixed;").on("mouseout",function(){e.style("display","none")})}}).on("mouseout",function(){e.style("display","none")})}},{key:"exportSvg",value:function(){var t=this.container.querySelector("#mt-map-svg"),e='\n'+(new XMLSerializer).serializeToString(t);if(this.options.exportSvgClient){if(!window.saveAs)throw new Error("MapTable: Missing FileSaver.js library");var i=new Blob([e],{type:"image/svg+xml"});window.saveAs(i,"visualization.svg")}else if(this.options.exportSvg){var a=this.node.querySelector("#mt-map-svg-form");a.querySelector('[name="data"]').value=e,a.submit()}}},{key:"addExportSvgCapability",value:function(){var t=document.createElement("div");t.setAttribute("id","mt-map-export"),this.container.querySelector("#mt-map").appendChild(t);var e=document.createElement("button");if(e.setAttribute("class","btn btn-xs btn-default"),e.innerHTML="Download",e.addEventListener("click",this.exportSvg.bind(this)),t.appendChild(e),this.options.exportSvg){var i=document.createElement("div");i.innerHTML='
',t.appendChild(i)}}}]),t}(),C=function(){function t(e,i){var a=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=i,this.criteria=[],this.options.show){var n=this.options.show.filter(function(t){return Object.keys(a.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.container=document.createElement("div"),this.maptable.node.appendChild(this.container),this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-filters"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-filters"),this.node.setAttribute("class","panel panel-default"),this.maptable.node.appendChild(this.node));var r=document.createElement("div");r.setAttribute("class","panel-heading");var s=document.createElement("button");s.setAttribute("id","mt-filters-reset"),s.setAttribute("class","btn btn-default btn-xs pull-right"),s.style.display="none",s.style.marginLeft=5,s.innerText="↺ Reset",s.addEventListener("click",this.reset),r.appendChild(s);var o=document.createElement("h3");o.setAttribute("class","panel-title"),o.appendChild(document.createTextNode("Filters")),r.appendChild(o),this.node.appendChild(r);var l=document.createElement("div");l.setAttribute("id","mt-filters-content"),l.setAttribute("class","panel-body");var h=document.createElement("div");h.setAttribute("id","mt-filters-elements"),l.appendChild(h);var u=document.createElement("a");u.setAttribute("id","mt-filters-new"),u.setAttribute("href","#"),u.innerText="+ New filter",u.addEventListener("click",this.add.bind(this)),l.appendChild(u),this.node.appendChild(l)}return f.createClass(t,[{key:"add",value:function(t){t&&t.preventDefault();var e=this.getPossibleFilters();if(0!==e.length){var i=e[0].key;this.create(i)}}},{key:"create",value:function(t,e){var i=this.buildRow(t);e?e.parentNode.replaceChild(i,e):this.node.querySelector("#mt-filters-elements").appendChild(i),this.criteria.push(t),this.maptable.render(),"none"===this.container.style.display&&this.toggle()}},{key:"remove",value:function(t){var e=this.node.querySelector('[data-mt-filter-name="'+t+'"]');e&&e.parentNode.removeChild(e);var i=this.criteria.indexOf(t);this.criteria.splice(i,1),this.maptable.render()}},{key:"reset",value:function(){for(var t=this.node.querySelectorAll("[data-mt-filter-name]"),e=0;e and\n '+h+""}else{var u=a.querySelector(".mt-filter-value-min").value;if(""===u)continue;s+=r.title+" is ",s+=o.options[o.selectedIndex].text,s+=''+u+""}}else if("field"===r.filterMethod||"dropdown"===r.filterMethod){var p=a.querySelector(".mt-filter-value").value;if(""===p)continue;var d="field"===r.filterMethod?"contains":"is";s+=r.title+" "+d+'\n '+p+""}t.push(s)}return t.join(", ")}},{key:"buildRow",value:function(t){var e=this,i=this,a=this.getPossibleFilters(),n=this.maptable.columnDetails[t],r=document.createElement("div");r.setAttribute("class","mt-filter-row"),r.setAttribute("data-mt-filter-name",t);var s=document.createElement("button");s.setAttribute("class","btn btn-default pull-right"),s.setAttribute("data-mt-filter-btn-minus",1),s.innerText="– Remove this filter",s.addEventListener("click",function(){t=r.querySelector(".mt-filter-name").value,e.remove(t)}),r.appendChild(s);var o=document.createElement("span");o.setAttribute("class","mt-filters-and"),o.innerText="And ",r.appendChild(o);var l=document.createElement("select");l.setAttribute("class","mt-filter-name form-control form-control-inline"),v.appendOptions(l,a.map(function(t){return{text:t.title,value:t.key}})),l.value=t,l.addEventListener("change",function(){var t=this.parentNode.getAttribute("data-mt-filter-name"),e=this.value;i.create(e,this.parentNode),i.remove(t),i.refresh()}),r.appendChild(l);var h=document.createElement("span");h.innerText="field"===n.filterMethod?" contains ":" is ",r.appendChild(h);var u=null;"field"!==n.filterMethod&&"dropdown"!==n.filterMethod&&(u=document.createElement("select"),u.setAttribute("class","mt-filter-range form-control form-control-inline"),v.appendOptions(u,["any","=","≠","<",">","≤","≥","BETWEEN"].map(function(t){return{text:t,value:t}})),u.addEventListener("change",function(){i.handleRangeChange(this)}),r.appendChild(u),r.appendChild(document.createTextNode(" ")));var p=document.createElement("div");if(p.style.display="inline-block",p.setAttribute("class","mt-filter-value-container"),"compare"===n.filterMethod)["min","max"].forEach(function(t,i){var a=document.createElement("input");if(a.setAttribute("class","form-control form-control-inline mt-filter-value-"+t),a.setAttribute("type",n.filterInputType),a.addEventListener("keyup",e.maptable.render.bind(e.maptable)),a.addEventListener("change",e.maptable.render.bind(e.maptable)),p.appendChild(a),0===i){var r=document.createElement("span");r.setAttribute("class","mt-filter-value-and"),r.innerText=" and ",p.appendChild(r)}});else if("field"===n.filterMethod){var d=document.createElement("input");d.setAttribute("class","form-control form-control-inline mt-filter-value"),d.setAttribute("type","text"),d.addEventListener("keyup",this.maptable.render.bind(this.maptable)),d.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(d)}else if("dropdown"===n.filterMethod){var c=document.createElement("select");c.setAttribute("class","form-control form-control-inline mt-filter-value");var m=d3.nest().key(function(e){return e[t]}).sortKeys(d3.ascending).entries(this.maptable.rawData);v.appendOptions(c,[{text:"Any",value:""}].concat(m.map(function(t){return{text:t.key,value:t.key}}))),c.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(c)}return r.appendChild(p),u&&this.handleRangeChange(u),r}},{key:"handleRangeChange",value:function(t){var e=t.parentNode;"any"===t.value?e.querySelector(".mt-filter-value-container").style.display="none":(e.querySelector(".mt-filter-value-container").style.display="inline-block","BETWEEN"===t.value?(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="inline-block",e.querySelector(".mt-filter-value-max").style.display="inline-block"):(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="none",e.querySelector(".mt-filter-value-max").style.display="none"))}},{key:"getPossibleFilters",value:function(t){var e=this;return Object.keys(this.maptable.columnDetails).map(function(t){return v.extendRecursive({key:t},e.maptable.columnDetails[t])}).filter(function(i){return-1!==e.activeColumns.indexOf(i.key)&&(t&&t===i.key||-1===e.criteria.indexOf(i.key)&&i.filterMethod&&!i.isVirtual)})}},{key:"filterData",value:function(){var t=this,e=this;this.maptable.data=this.maptable.rawData.filter(function(i){for(var a=t.node.querySelectorAll(".mt-filter-row"),n=!0,r=0;rh(m))?n=!1:(parseInt(i[o],10)parseInt(m,10))&&(n=!1)}else{var f=s.querySelector(".mt-filter-value-min").value;if(""===f)continue;h&&!v.rangeToBool(h(i[o]),d,h(f))?n=!1:h||v.rangeToBool(i[o],d,f)||(n=!1)}}}return n}),this.options.saveState&&this.maptable.saveState("filters",this.exportFilters())}},{key:"refresh",value:function(){for(var t=this.node.querySelectorAll(".mt-filter-name"),e=0;e0&&(this.node.querySelectorAll(".mt-filters-and")[0].style.visibility="hidden");var r=!this.getPossibleFilters().length;this.node.querySelector("#mt-filters-new").style.visibility=r?"hidden":"visible"}},{key:"toggle",value:function(){"none"===this.container.style.display?(this.container.style.display="block",0===this.criteria.length&&this.add()):this.container.style.display="none"}}]),t}(),E=function(){function t(e,i){var a=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=i,this.options.defaultSorting?(Array.isArray(this.options.defaultSorting)&&2===this.options.defaultSorting.length?this.sorting=this.options.defaultSorting:this.sorting=[this.options.defaultSorting],this.sorting.forEach(function(t){t.mode||(t.mode="asc")})):this.sorting=[{key:Object.keys(this.maptable.data[0])[0],mode:"asc"}],this.initialSorting=this.sorting.map(function(t){return t.key+","+t.mode}).join(";"),this.isSorting=!1,this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-table"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-table"),this.maptable.node.appendChild(this.node)),this.node=d3.select(this.node).append("table").attr("class",this.options.className),this.header=this.node.append("thead"),this.body=this.node.append("tbody"),this.options.show){var n=this.options.show.filter(function(t){return Object.keys(a.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.header.selectAll("tr").data([1]).enter().append("tr").selectAll("th").data(this.activeColumns.map(function(t){return v.extendRecursive({key:t},a.maptable.columnDetails[t])})).enter().append("th").attr("class",function(t){var e=t.sorting?"mt-table-sortable":"";return e+=t.nowrap?" nowrap":""}).attr("data-key",function(t){return v.sanitizeKey(t.key)}).attr("onselectstart","return false;").attr("unselectable","on").attr("style",function(t){return t.nowrap?"white-space:nowrap;":""}).on("click",function(t){a.isSorting||(a.isSorting=!0,t.sorting&&a.sortColumn(t.key),a.isSorting=!1)}).text(function(t){return t.title}).attr("id",function(t){return"column_header_"+v.sanitizeKey(t.key)})}return f.createClass(t,[{key:"restoreState",value:function(t){if(t){var e=t.split(";"),i=[];e.forEach(function(t){var e=t.split(",");i.push({key:e[0],mode:e[1]||"asc"})}),this.sorting=i}}},{key:"saveState",value:function(){var t=this.sorting.map(function(t){return t.key+","+t.mode}).join(";");t!==this.initialSorting&&this.maptable.saveState("sort",t)}},{key:"render",value:function(){var t=this;this.applySort();var e=this.maptable.data;this.options.distinctBy&&(e=d3.nest().key(function(e){return e[t.options.distinctBy]}).entries(this.maptable.data).map(function(t){return t.values[0]})),this.body.selectAll("tr").data(e).enter().append("tr"),this.body.selectAll("tr").data(e).exit().remove();var i=[];this.body.selectAll("tr").data(e).attr("class",function(e){return t.options.rowClassName?"line "+t.options.rowClassName(e):"line"}).html(function(e){var a="";return t.activeColumns.forEach(function(n){var r=t.maptable.columnDetails[n];a+=""}),a}),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"applySort",value:function(){for(var t=this,e=this.container.querySelectorAll(".mt-table-sortable"),i=0;i0;if(this.options.map.heatmap&&n)return a.innerHTML='
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
',this.node.insertBefore(a,this.node.firstChild),a.querySelector(".mt-loading").style.display="block",this.options.map=!1,void this.buildComponenents();a.innerHTML='
Loading...
',this.node.insertBefore(a,this.node.firstChild),a.querySelector(".mt-loading").style.display="block",d3.json(this.options.map.path,function(t,e){if(t)throw t;i.map=new S(i,i.options.map,e),a.querySelector(".mt-loading").style.display="none",i.buildComponenents()})}else this.buildComponenents()}},{key:"buildComponenents",value:function(){var t=this;this.options.filters&&(this.filters=new C(this,this.options.filters)),this.options.table&&(this.table=new E(this,this.options.table)),this.restoreState(),window.addEventListener("hashchange",function(){t.restoreState()}),this.render()}},{key:"loadState",value:function(t,e){if(e){var i=this.parseState(t);if(!i)return null;try{var a=JSON.parse(i);this.state[t]=a}catch(n){return console.log("Maptable: Invalid URL State for mt-"+t+" "+n.message),null}}else{var r=this.parseState(t);r&&(this.state[t]=r)}return this.state[t]}},{key:"restoreState",value:function(){this.map&&(this.loadState("zoom",!0),this.map.restoreState(this.state.zoom)),this.filters&&(this.loadState("filters",!0),this.filters.restoreState(this.state.filters)),this.table&&(this.loadState("sort",!1),this.table.restoreState(this.state.sort))}},{key:"parseState",value:function(t){var e=document.location.href.replace(/%21mt/g,"!mt").split("!mt-"+t+"=");return e[1]?decodeURIComponent(e[1].split("!mt")[0]):null}},{key:"removeState",value:function(t){window.clearTimeout(this.saveStateTimeout[t]),delete this.state[t],this.updateState()}},{key:"saveState",value:function(t,e){var i=this;window.clearTimeout(this.saveStateTimeout[t]),this.saveStateTimeout[t]=window.setTimeout(function(){i.state[t]=e,i.updateState()},200)}},{key:"updateState",value:function(){var t=this,e=document.location.href.split("#")[0],i="";Object.keys(this.state).forEach(function(e){if(t.state[e]){var a=t.state[e];if("object"===f["typeof"](t.state[e])){if(!Object.keys(t.state[e]).length)return;a=JSON.stringify(t.state[e])}i+="!mt-"+e+"="+encodeURIComponent(a)}}),""!==i&&(i="#"+i),document.location.href!==""+e+i&&window.history.pushState(null,null,""+e+i)}},{key:"render",value:function(){this.filters&&(this.filters.filterData(),this.filters.refresh()),this.map&&(this.map.render(),!this.firstExecution&&this.options.map.onComplete&&this.options.map.onComplete.constructor===Function&&this.options.map.onComplete.bind(this)()),this.table&&(this.table.render(),!this.firstExecution&&this.options.table.onComplete&&this.options.table.onComplete.constructor===Function&&this.options.table.onComplete.bind(this)()),!this.firstExecution&&this.options.onComplete&&this.options.onComplete.constructor===Function&&this.options.onComplete.bind(this)(),this.firstExecution=!0}},{key:"setColumnDetails",value:function(){var t=this;if(0!==t.rawData.length){var e={};Object.keys(t.rawData[0]).forEach(function(i){var a=/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/,n=a.test(t.rawData[0][i]);e[i]={title:v.keyToTile(i),filterMethod:n?"compare":"field",filterInputType:n?"number":"text",sorting:!0},n&&(e[i].dataParse=function(t){return parseFloat(t)})}),t.columnDetails=v.extendRecursive(e,this.options.columns),Object.keys(t.columnDetails).forEach(function(e){t.columnDetails[e].isVirtual="function"==typeof t.columnDetails[e].virtual})}}}]),t}();if(d3.maptable=function(t){var e=void 0,i={},a={target:t,columns:{},data:{},map:null,filters:null,table:null};return i.map=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!topojson)throw new Error("Maptable requires topojson.js");if("string"!=typeof t.path)throw new Error("MapTable: map not provided");return a.map=t,i},i.json=function(t,e){return a.data.type="json",a.data.path=t,a.data.preFilter=e,i},i.csv=function(t,e){return a.data.type="csv",a.data.path=t,a.data.preFilter=e,i},i.tsv=function(t,e){return a.data.type="tsv",a.data.path=t,a.data.preFilter=e,i},i.filters=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.filters=t,i},i.table=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.table=t,i},i.columns=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.columns=t,i},i.render=function(i){if("string"!=typeof t||!document.querySelector(t))throw new Error("MapTable: target not found");if(!a.data||!a.data.path)throw new Error("MapTable: Please provide the path for your dataset json|csv|tsv");a.map&&!a.map.heatmap&&(a.map.heatmap=null),a.map&&a.map.markers===!1&&(a.map.markers=null),a.map&&a.map.countries===!1&&(a.map.countries=null),a.filters||(a.filters=null),a.onComplete=i;var n=v.extendRecursive(g,a);return e=new N(t,n),{render:function(){return e.render()},loadState:function(t,i){return e.loadState(t,i)},removeState:function(t){return e.removeState(t)},saveState:function(t,i){return e.saveState(t,i)}}},i},!d3)throw new Error("Maptable requires d3.js");var A=d3.maptable;return A}(); \ No newline at end of file diff --git a/docs/maptable.js b/docs/maptable.js index 66880e6..3d466e8 100644 --- a/docs/maptable.js +++ b/docs/maptable.js @@ -1291,7 +1291,7 @@ this.d3.maptable = (function () { // Update Legend Object.keys(this.options.countries.attr).forEach(function (attrKey) { var attrValue = _this4.options.countries.attr[attrKey]; - if ((typeof attrValue === 'undefined' ? 'undefined' : babelHelpers.typeof(attrValue)) === 'object' && attrValue.legend) { + if ((typeof attrValue === 'undefined' ? 'undefined' : babelHelpers.typeof(attrValue)) === 'object' && attrValue.legend && _this4.legendCountry[attrKey] != undefined) { var scaleDomain = d3.extent(_this4.dataCountries, function (d) { return Number(d.attrProperties[attrKey].value); }); @@ -2656,7 +2656,7 @@ this.d3.maptable = (function () { }).indexOf(key); var sortValue = { key: key }; if (sortIndex === -1) { - sortValue.mode = 'asc'; + sortValue.mode = 'desc'; if (d3.event && d3.event.shiftKey) { this.sorting[1] = sortValue; } else { diff --git a/docs/maptable.min.js b/docs/maptable.min.js index d595629..3d5ab0f 100644 --- a/docs/maptable.min.js +++ b/docs/maptable.min.js @@ -1,6 +1,6 @@ /** - * MapTable 1.7.1 - License MIT - Build: Wed Nov 14 2018 16:29:08 GMT-0800 (PST) + * MapTable 1.7.2 - License MIT - Build: Thu Nov 15 2018 10:28:04 GMT-0800 (PST) */ -this.d3=this.d3||{},this.d3.maptable=function(){"use strict";function t(t,e,a){e.forEach(function(e){var a=document.createElement("option");a.setAttribute("value",e.value),a.innerText=e.text,t.appendChild(a)}),t.value=a}function e(t,e,a){return"="===e?parseInt(t,10)===parseInt(a,10):"≠"===e?parseInt(t,10)!==parseInt(a,10)&&""!==t&&""!==a:">"===e?parseInt(t,10)>parseInt(a,10)&&""!==t&&""!==a:"<"===e?parseInt(t,10)=parseInt(a,10)&&""!==t&&""!==a:"≤"===e?parseInt(t,10)<=parseInt(a,10)&&""!==t&&""!==a:!0}function a(){for(var t={},e=void 0,i=[].splice.call(arguments,0),n={}.toString;i.length>0;)e=i.splice(0,1)[0],"[object Object]"===n.call(e)&&Object.keys(e).forEach(function(i){"[object Object]"===n.call(e[i])?t[i]=a(t[i]||{},e[i]):t[i]=e[i]});return t}function i(t){var e=t.charAt(0).toUpperCase()+t.slice(1);return e.replace(/_/g," ")}function n(t){return t.toLowerCase().replace(/ /g,"_").replace(/"/g,"").replace(/'/g,"")}function r(t){return t&&""!==t?Number(t.toString().replace(/[^0-9.]+|\s+/gim,"")):null}function s(t,e){t.sort(function(t,e){return t-e});var a=e/100*(t.length-1),i=void 0;if(Math.floor(a)===a)i=t[a];else{var n=Math.floor(a),r=a-n;i=t[n]+(t[n+1]-t[n])*r}return i}function o(t){if(!t)return t;for(var e=[],a=0,i=t.length;i>a;a+=1)-1===e.indexOf(t[a])&&""!==t[a]&&e.push(t[a]);return e}function l(t,e,a,i){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLImageElement&&!t instanceof HTMLImageElement)return;var n=t.naturalWidth,r=t.naturalHeight;if("string"==typeof e)var e=document.getElementById(e);else if("undefined"!=typeof HTMLCanvasElement&&!e instanceof HTMLCanvasElement)return;e.style.width=n+"px",e.style.height=r+"px",e.width=n,e.height=r;var s=e.getContext("2d");s.clearRect(0,0,n,r),s.drawImage(t,0,0),Number.isNaN(a)||1>a||(i?u(e,0,0,n,r,a):d(e,0,0,n,r,a))}function h(t,e,a,i,n){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLCanvasElement&&!t instanceof HTMLCanvasElement)return;var r,s=t.getContext("2d");try{try{r=s.getImageData(e,a,i,n)}catch(o){throw new Error("unable to access local image data: "+o)}}catch(o){throw new Error("unable to access image data: "+o)}return r}function u(t,e,a,i,n,r){if(!(Number.isNaN(r)||1>r)){r|=0;var s=h(t,e,a,i,n);s=p(s,e,a,i,n,r),t.getContext("2d").putImageData(s,e,a)}}function p(t,e,a,i,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T,q,j,F,D=t.data,H=r+r+1,W=i-1,O=n-1,I=r+1,P=I*(I+1)/2,L=new m,R=L;for(l=1;H>l;l++)if(R=R.next=new m,l==I)var B=R;R.next=L;var z=null,Y=null;d=p=0;var X=k[r],K=w[r];for(o=0;n>o;o++){for(C=E=N=A=c=f=v=g=0,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(l=1;I>l;l++)h=p+((l>W?W:l)<<2),c+=(R.r=M=D[h])*(F=I-l),f+=(R.g=T=D[h+1])*F,v+=(R.b=q=D[h+2])*F,g+=(R.a=j=D[h+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next;for(z=L,Y=B,s=0;i>s;s++)D[p+3]=j=g*X>>K,0!=j?(j=255/j,D[p]=(c*X>>K)*j,D[p+1]=(f*X>>K)*j,D[p+2]=(v*X>>K)*j):D[p]=D[p+1]=D[p+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=d+((h=s+r+1)s;s++){for(E=N=A=C=f=v=g=c=0,p=s<<2,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(u=i,l=1;r>=l;l++)p=u+s<<2,c+=(R.r=M=D[p])*(F=I-l),f+=(R.g=T=D[p+1])*F,v+=(R.b=q=D[p+2])*F,g+=(R.a=j=D[p+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next,O>l&&(u+=i);for(p=s,z=L,Y=B,o=0;n>o;o++)h=p<<2,D[h+3]=j=g*X>>K,j>0?(j=255/j,D[h]=(c*X>>K)*j,D[h+1]=(f*X>>K)*j,D[h+2]=(v*X>>K)*j):D[h]=D[h+1]=D[h+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=s+((h=o+I)r)){r|=0;var s=h(t,e,a,i,n);s=c(s,e,a,i,n,r),t.getContext("2d").putImageData(s,e,a)}}function c(t,e,a,i,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T=t.data,q=r+r+1,j=i-1,F=n-1,D=r+1,H=D*(D+1)/2,W=new m,O=W;for(l=1;q>l;l++)if(O=O.next=new m,l==D)var I=O;O.next=W;var P=null,L=null;d=p=0;var R=k[r],B=w[r];for(o=0;n>o;o++){for(x=S=C=c=f=v=0,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(l=1;D>l;l++)h=p+((l>j?j:l)<<2),c+=(O.r=E=T[h])*(M=D-l),f+=(O.g=N=T[h+1])*M,v+=(O.b=A=T[h+2])*M,x+=E,S+=N,C+=A,O=O.next;for(P=W,L=I,s=0;i>s;s++)T[p]=c*R>>B,T[p+1]=f*R>>B,T[p+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=d+((h=s+r+1)s;s++){for(S=C=x=f=v=c=0,p=s<<2,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(u=i,l=1;r>=l;l++)p=u+s<<2,c+=(O.r=E=T[p])*(M=D-l),f+=(O.g=N=T[p+1])*M,v+=(O.b=A=T[p+2])*M,x+=E,S+=N,C+=A,O=O.next,F>l&&(u+=i);for(p=s,P=W,L=I,o=0;n>o;o++)h=p<<2,T[h]=c*R>>B,T[h+1]=f*R>>B,T[h+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=s+((h=o+D).1}),s=this.path.context(a),o=this.getMagnitudeScale(r),l=d3.scale.linear().domain([1,0]).range(["#000000","#FFFFFF"]);a.beginPath(),a.rect(0,0,this.getWidth(),this.getHeight()),a.fillStyle="#ffffff",a.fill(),a.closePath();var h=function(e){var a=t.options.heatmap.circles.colorStrength,i=1+(a-1)/100;return a>1?(2-i)*e+i-1:a*e};r.forEach(function(t){var e=n(t);i.forEach(function(i){var n=h(o(i)*e);n>0&&(a.beginPath(),s(d3.geo.circle().origin([t.longitude,t.latitude]).angle(i-1e-4)()),a.fillStyle=l(n),a.fill(),a.closePath())})}),x.canvasRGBA(e.node(),0,0,this.getWidth(),this.getHeight(),this.options.heatmap.circles.blur),a.beginPath(),a.globalCompositeOperation="screen",a.rect(0,0,this.getWidth(),this.getHeight()),a.fillStyle=this.options.heatmap.circles.color,a.fill(),a.closePath();var u=e.node().toDataURL();return e.remove(),u}},{key:"updateHeatmap",value:function(){var t=this.getHeatmapData();this.imgHeatmap.attr("xlink:href",t)}},{key:"buildCountries",value:function(){this.dataCountries=topojson.feature(this.jsonWorld,this.jsonWorld.objects.countries).features,this.layerCountries.selectAll(".mt-map-country").data(this.dataCountries).enter().insert("path").attr("class","mt-map-country").attr("d",this.path),this.legendCountry={},this.shouldRenderLegend()&&(this.legendCountry.fill=new y(this))}},{key:"shouldRenderLegend",value:function(){var t=this.options.countries.attr.fill;if(!t)return!1;if(!t.legend||!t.min||!t.max)return!1;if(t.aggregate&&t.aggregate.scale){var e="function"==typeof t.aggregate.scale?t.aggregate.scale.bind(this.maptable)():t.aggregate.scale;if("linear"!==e)return!1}return!0}},{key:"updateCountries",value:function(){var t=this,e=d3.nest().key(function(e){return e[t.options.countryIdentifierKey]}).entries(this.maptable.data);this.dataCountries.forEach(function(a){a.key=a.properties[t.options.countryIdentifierType];var i=e.filter(function(t){return t.key===a.key});a.values=0===i.length?[]:i[0].values,a.attr={},a.rollupValue={}}),Object.keys(this.options.countries.attr).forEach(function(e){t.setAttrValues(e,t.options.countries.attr[e],t.dataCountries)});var a=d3.selectAll(".mt-map-country").each(function(t){var e=this;Object.keys(t.attr).forEach(function(a){d3.select(e).attr(a,t.attr[a])})});Object.keys(this.options.countries.attr).forEach(function(e){var i=t.options.countries.attr[e];if("object"===("undefined"==typeof i?"undefined":f["typeof"](i))&&i.legend){var n=d3.extent(t.dataCountries,function(t){return Number(t.attrProperties[e].value)});t.legendCountry[e].updateExtents(n),a.on("mouseover",function(a){t.legendCountry[e].indiceChange(a.attrProperties[e].value)}).on("mouseout",function(){t.legendCountry[e].indiceChange(NaN)})}}),this.options.countries&&this.options.countries.tooltip&&this.activateTooltip(a,this.tooltipCountriesNode,this.options.countries.tooltip,!0)}},{key:"updateMarkers",value:function(){var t=this,e=function(t){return t.longitude+","+t.latitude};this.dataMarkers=d3.nest().key(e).entries(this.maptable.data).filter(function(t){return 0!==t.values[0].x}),this.dataMarkers.forEach(function(t){t.attr={},t.attrProperties={}}),Object.keys(this.options.markers.attr).forEach(function(e){t.setAttrValues(e,t.options.markers.attr[e],t.dataMarkers)});var a=this.layerMarkers.selectAll(".mt-map-marker").data(this.dataMarkers),i=a.enter();i=this.options.markers.customTag?this.options.markers.customTag(i):i.append("svg:circle");var n=this.options.markers.className?this.options.markers.className:"";i.attr("class","mt-map-marker "+n),a.exit().transition().attr("r",0).attr("fill","#eee").style("opacity",0).remove();var r=this.options.markers.attrX?this.options.markers.attrX:"cx",s=this.options.markers.attrY?this.options.markers.attrY:"cy",o=this.options.markers.attrXDelta?this.options.markers.attrXDelta:0,l=this.options.markers.attrYDelta?this.options.markers.attrYDelta:0,h=a.attr(r,function(t){return t.values[0].x+o}).attr(s,function(t){return t.values[0].y+l});d3.selectAll(this.containerSelector+" .mt-map-marker").each(function(t){var e=this;Object.keys(t.attr).forEach(function(a){d3.select(e).attr(a,t.attr[a])})}),this.options.markers.tooltip&&this.activateTooltip(h,this.tooltipMarkersNode,this.options.markers.tooltip,!1),this.rescale()}},{key:"fitContent",value:function(){if(0===this.maptable.data.length)return this.transX=0,this.transY=0,this.scale=1,void this.zoomListener.translate([this.transX,this.transY]).scale(this.scale);var t=d3.extent(this.maptable.data,function(t){return t.x}),e=d3.extent(this.maptable.data,function(t){return t.y}),a=this.getWidth()/this.getHeight(),i=20+(this.options.title?30:0),n=t[1]-t[0]+i,r=e[1]-e[0]+i,s=n/a,o=r*a,l=0,h=0;o>=n?l=(o-n)/2:h=(s-r)/2,t[0]-=this.options.fitContentMargin+l,t[1]+=this.options.fitContentMargin+l,e[0]-=this.options.fitContentMargin+h,e[1]+=this.options.fitContentMargin+h,this.scale=this.getWidth()/(t[1]-t[0]),this.transX=-1*t[0]*this.scale,this.transY=-1*e[0]*this.scale,this.zoomListener.translate([this.transX,this.transY]).scale(this.scale)}},{key:"buildTitle",value:function(){var t=this.svg.append("svg").attr("width",this.getWidth()).attr("x",0).attr("y",this.getHeight()-30).attr("height",30);this.options.title.bgColor&&t.append("rect").attr("x",0).attr("y",0).attr("width",this.getWidth()).attr("height",30).attr("fill",this.options.title.bgColor),t.append("text").attr("id","mt-map-title").attr("x",20).attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).attr("y",20),this.options.title.source&&t.append("text").attr("y",20).attr("x",this.getWidth()-20).attr("text-anchor","end").attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).html(this.options.title.source())}},{key:"encodeTranslation",value:function(t){var e=t[0]/(this.scale*this.getWidth()),a=t[1]/(this.scale*this.getHeight());return[e,a]}},{key:"decodeTranslation",value:function(t){var e=t[0]*this.getWidth()*this.scale,a=t[1]*this.getHeight()*this.scale;return[e,a]}},{key:"restoreState",value:function(t){if(t&&3===t.length){this.scale=t[0];var e=this.decodeTranslation([t[1],t[2]]);this.transX=e[0],this.transY=e[1],this.zoomListener.scale(t[0]).translate(e).event(this.svg)}}},{key:"saveState",value:function(){var t=this.encodeTranslation([this.transX,this.transY]),e=[this.scale,t[0],t[1]];1!==e[0]&&0!==e[1]&&0!==e[2]?this.maptable.saveState("zoom",e):this.maptable.removeState("zoom")}},{key:"rescale",value:function(){var t=this;d3.event&&d3.event.translate&&(this.scale=d3.event.scale,this.transX=1===this.scale?0:d3.event.translate[0],this.transY=1===this.scale?0:d3.event.translate[1]);var e=0,a=0,i=this.getWidth()*(1-this.scale),n=this.getHeight()*(1-this.scale);this.transY>a?this.transY=a:this.transYe?this.transX=e:this.transXe?e:t},e[0])};else if("max"===s)e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return e.reduce(function(t,e){return e>t?e:t},e[0])};else if(-1!==s.indexOf("percentile")){var l=v.toNumber(s);e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return v.quantile(e,l)}}else"function"==typeof e.rollup&&(e.rollup=e.rollup.bind(this.maptable));n&&(-1!==n.indexOf("log")?o=d3.scale.log().base(v.toNumber(n)||10):-1!==n.indexOf("pow")?o=d3.scale.pow().exponent(v.toNumber(n)||1):"sqrt"===n&&(o=d3.scale.sqrt()))}if(e.rollup||(e.rollup=function(t){return t.length}),!e.min||!e.max)throw new Error("MapTable: You should provide values 'min' & 'max' for attr."+t);if(a.forEach(function(a){var o=e.rollup(a.values);if(a.attrProperties||(a.attrProperties={}),a.attrProperties[t]||(a.attrProperties[t]={}),a.attrProperties[t].value=o,r){a.attrProperties[t].key=r,a.attrProperties[t].mode=s,a.attrProperties[t].scale=n;var l=i.maptable.columnDetails[r];a.attrProperties[t].columnDetails=l;var h={};h[r]=o,a.attrProperties[t].formatted=l&&l.cellContent?l.cellContent.bind(i.maptable)(h):o}}),"rank"===n){var h=v.uniqueValues([0].concat(a.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return t>0}))),u=v.uniqueValues(a.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return 0>t}));h.sort(function(t,e){return t-e}),u.sort(function(t,e){return e-t}),a.forEach(function(e){if(0!==e.attrProperties[t].value){var a=e.attrProperties[t].value>=0?h:u,i=a.indexOf(Math.floor(100*e.attrProperties[t].value)/100),n=Math.round(i/a.length*100),r=e.attrProperties[t].value<0?n-2*n:n;e.attrProperties[t].value=r}})}var p=d3.extent(a,function(e){return Number(e.attrProperties[t].value)});e.transform&&(p[0]=e.transform.bind(this.maptable)(p[0],this.maptable.data),p[1]=e.transform.bind(this.maptable)(p[1],this.maptable.data));var d=e.min,c=e.max;if("minValue"===e.min&&(d=p[0]),"maxValue"===e.max&&(c=p[1]),e.maxNegative&&!e.minNegative||!e.maxNegative&&e.minNegative)throw new Error("MapTable: maxNegative or minNegative undefined. Please declare both.");var m=e.maxNegative&&e.minNegative,g=void 0,y=void 0;m?(g=o.copy().domain([0,p[1]]).range([d,c]),y=o.copy().domain([p[0],0]).range([e.maxNegative,e.minNegative])):g=o.domain(p).range([d,c]),a.forEach(function(a){var n=void 0;if(!a.values.length||Number.isNaN(a.attrProperties[t].value)){if("undefined"==typeof e.empty)throw new Error("MapTable: no empty property found for attr."+t);n=e.empty}else{var r=a.attrProperties[t].value,s=e.transform?e.transform.bind(i.maptable)(r,i.maptable.data):r;n=m&&0>s?y(s):g(s),0===s&&e.empty&&(n=e.empty)}a.attr[t]=n})}}},{key:"render",value:function(){this.options.markers&&this.updateMarkers(),this.options.countries&&this.updateCountries(),this.options.title&&this.updateTitle(),this.options.heatmap&&this.updateHeatmap(),this.options.autoFitContent&&(this.fitContent(),this.rescale()),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"updateTitle",value:function(){var t=this;if(this.options.title.content){var e=this.maptable.data.filter(function(e){return 0!==e[t.options.latitudeKey]}).length,a=this.maptable.rawData.filter(function(e){ -return 0!==e[t.options.latitudeKey]}).length,i="";this.maptable.filters&&(i=this.maptable.filters.getDescription()),this.container.querySelector("#mt-map-title").innerHTML=this.options.title.content.bind(this.maptable)(e,a,i,this.maptable.data,this.maptable.rawData,this.dataCountries)}}},{key:"activateTooltip",value:function(t,e,a,i){var n=this;t.on(i?"mousemove":"mouseover",function(t){var r=a.bind(this.maptable)(t);if(r){e.html(r).attr("style","display:block;position:fixed;");var s=void 0,o=void 0,l=e.node().offsetWidth/2;if(i){var h=n.node.getBoundingClientRect(),u=d3.mouse(n.svg.node()).map(function(t){return parseInt(t,10)});s=h.left+u[0]-l,o=h.top+u[1]+10}else{var p=this.getBoundingClientRect();s=p.left+p.width/2-l,o=p.top+p.height+2}e.attr("style","top:"+o+"px;left:"+s+"px;display:block;position:fixed;").on("mouseout",function(){e.style("display","none")})}}).on("mouseout",function(){e.style("display","none")})}},{key:"exportSvg",value:function(){var t=this.container.querySelector("#mt-map-svg"),e='\n'+(new XMLSerializer).serializeToString(t);if(this.options.exportSvgClient){if(!window.saveAs)throw new Error("MapTable: Missing FileSaver.js library");var a=new Blob([e],{type:"image/svg+xml"});window.saveAs(a,"visualization.svg")}else if(this.options.exportSvg){var i=this.node.querySelector("#mt-map-svg-form");i.querySelector('[name="data"]').value=e,i.submit()}}},{key:"addExportSvgCapability",value:function(){var t=document.createElement("div");t.setAttribute("id","mt-map-export"),this.container.querySelector("#mt-map").appendChild(t);var e=document.createElement("button");if(e.setAttribute("class","btn btn-xs btn-default"),e.innerHTML="Download",e.addEventListener("click",this.exportSvg.bind(this)),t.appendChild(e),this.options.exportSvg){var a=document.createElement("div");a.innerHTML='
',t.appendChild(a)}}}]),t}(),C=function(){function t(e,a){var i=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=a,this.criteria=[],this.options.show){var n=this.options.show.filter(function(t){return Object.keys(i.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.container=document.createElement("div"),this.maptable.node.appendChild(this.container),this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-filters"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-filters"),this.node.setAttribute("class","panel panel-default"),this.maptable.node.appendChild(this.node));var r=document.createElement("div");r.setAttribute("class","panel-heading");var s=document.createElement("button");s.setAttribute("id","mt-filters-reset"),s.setAttribute("class","btn btn-default btn-xs pull-right"),s.style.display="none",s.style.marginLeft=5,s.innerText="↺ Reset",s.addEventListener("click",this.reset),r.appendChild(s);var o=document.createElement("h3");o.setAttribute("class","panel-title"),o.appendChild(document.createTextNode("Filters")),r.appendChild(o),this.node.appendChild(r);var l=document.createElement("div");l.setAttribute("id","mt-filters-content"),l.setAttribute("class","panel-body");var h=document.createElement("div");h.setAttribute("id","mt-filters-elements"),l.appendChild(h);var u=document.createElement("a");u.setAttribute("id","mt-filters-new"),u.setAttribute("href","#"),u.innerText="+ New filter",u.addEventListener("click",this.add.bind(this)),l.appendChild(u),this.node.appendChild(l)}return f.createClass(t,[{key:"add",value:function(t){t&&t.preventDefault();var e=this.getPossibleFilters();if(0!==e.length){var a=e[0].key;this.create(a)}}},{key:"create",value:function(t,e){var a=this.buildRow(t);e?e.parentNode.replaceChild(a,e):this.node.querySelector("#mt-filters-elements").appendChild(a),this.criteria.push(t),this.maptable.render(),"none"===this.container.style.display&&this.toggle()}},{key:"remove",value:function(t){var e=this.node.querySelector('[data-mt-filter-name="'+t+'"]');e&&e.parentNode.removeChild(e);var a=this.criteria.indexOf(t);this.criteria.splice(a,1),this.maptable.render()}},{key:"reset",value:function(){for(var t=this.node.querySelectorAll("[data-mt-filter-name]"),e=0;e and\n '+h+""}else{var u=i.querySelector(".mt-filter-value-min").value;if(""===u)continue;s+=r.title+" is ",s+=o.options[o.selectedIndex].text,s+=''+u+""}}else if("field"===r.filterMethod||"dropdown"===r.filterMethod){var p=i.querySelector(".mt-filter-value").value;if(""===p)continue;var d="field"===r.filterMethod?"contains":"is";s+=r.title+" "+d+'\n '+p+""}t.push(s)}return t.join(", ")}},{key:"buildRow",value:function(t){var e=this,a=this,i=this.getPossibleFilters(),n=this.maptable.columnDetails[t],r=document.createElement("div");r.setAttribute("class","mt-filter-row"),r.setAttribute("data-mt-filter-name",t);var s=document.createElement("button");s.setAttribute("class","btn btn-default pull-right"),s.setAttribute("data-mt-filter-btn-minus",1),s.innerText="– Remove this filter",s.addEventListener("click",function(){t=r.querySelector(".mt-filter-name").value,e.remove(t)}),r.appendChild(s);var o=document.createElement("span");o.setAttribute("class","mt-filters-and"),o.innerText="And ",r.appendChild(o);var l=document.createElement("select");l.setAttribute("class","mt-filter-name form-control form-control-inline"),v.appendOptions(l,i.map(function(t){return{text:t.title,value:t.key}})),l.value=t,l.addEventListener("change",function(){var t=this.parentNode.getAttribute("data-mt-filter-name"),e=this.value;a.create(e,this.parentNode),a.remove(t),a.refresh()}),r.appendChild(l);var h=document.createElement("span");h.innerText="field"===n.filterMethod?" contains ":" is ",r.appendChild(h);var u=null;"field"!==n.filterMethod&&"dropdown"!==n.filterMethod&&(u=document.createElement("select"),u.setAttribute("class","mt-filter-range form-control form-control-inline"),v.appendOptions(u,["any","=","≠","<",">","≤","≥","BETWEEN"].map(function(t){return{text:t,value:t}})),u.addEventListener("change",function(){a.handleRangeChange(this)}),r.appendChild(u),r.appendChild(document.createTextNode(" ")));var p=document.createElement("div");if(p.style.display="inline-block",p.setAttribute("class","mt-filter-value-container"),"compare"===n.filterMethod)["min","max"].forEach(function(t,a){var i=document.createElement("input");if(i.setAttribute("class","form-control form-control-inline mt-filter-value-"+t),i.setAttribute("type",n.filterInputType),i.addEventListener("keyup",e.maptable.render.bind(e.maptable)),i.addEventListener("change",e.maptable.render.bind(e.maptable)),p.appendChild(i),0===a){var r=document.createElement("span");r.setAttribute("class","mt-filter-value-and"),r.innerText=" and ",p.appendChild(r)}});else if("field"===n.filterMethod){var d=document.createElement("input");d.setAttribute("class","form-control form-control-inline mt-filter-value"),d.setAttribute("type","text"),d.addEventListener("keyup",this.maptable.render.bind(this.maptable)),d.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(d)}else if("dropdown"===n.filterMethod){var c=document.createElement("select");c.setAttribute("class","form-control form-control-inline mt-filter-value");var m=d3.nest().key(function(e){return e[t]}).sortKeys(d3.ascending).entries(this.maptable.rawData);v.appendOptions(c,[{text:"Any",value:""}].concat(m.map(function(t){return{text:t.key,value:t.key}}))),c.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(c)}return r.appendChild(p),u&&this.handleRangeChange(u),r}},{key:"handleRangeChange",value:function(t){var e=t.parentNode;"any"===t.value?e.querySelector(".mt-filter-value-container").style.display="none":(e.querySelector(".mt-filter-value-container").style.display="inline-block","BETWEEN"===t.value?(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="inline-block",e.querySelector(".mt-filter-value-max").style.display="inline-block"):(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="none",e.querySelector(".mt-filter-value-max").style.display="none"))}},{key:"getPossibleFilters",value:function(t){var e=this;return Object.keys(this.maptable.columnDetails).map(function(t){return v.extendRecursive({key:t},e.maptable.columnDetails[t])}).filter(function(a){return-1!==e.activeColumns.indexOf(a.key)&&(t&&t===a.key||-1===e.criteria.indexOf(a.key)&&a.filterMethod&&!a.isVirtual)})}},{key:"filterData",value:function(){var t=this,e=this;this.maptable.data=this.maptable.rawData.filter(function(a){for(var i=t.node.querySelectorAll(".mt-filter-row"),n=!0,r=0;rh(m))?n=!1:(parseInt(a[o],10)parseInt(m,10))&&(n=!1)}else{var f=s.querySelector(".mt-filter-value-min").value;if(""===f)continue;h&&!v.rangeToBool(h(a[o]),d,h(f))?n=!1:h||v.rangeToBool(a[o],d,f)||(n=!1)}}}return n}),this.options.saveState&&this.maptable.saveState("filters",this.exportFilters())}},{key:"refresh",value:function(){for(var t=this.node.querySelectorAll(".mt-filter-name"),e=0;e0&&(this.node.querySelectorAll(".mt-filters-and")[0].style.visibility="hidden");var r=!this.getPossibleFilters().length;this.node.querySelector("#mt-filters-new").style.visibility=r?"hidden":"visible"}},{key:"toggle",value:function(){"none"===this.container.style.display?(this.container.style.display="block",0===this.criteria.length&&this.add()):this.container.style.display="none"}}]),t}(),E=function(){function t(e,a){var i=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=a,this.options.defaultSorting?(Array.isArray(this.options.defaultSorting)&&2===this.options.defaultSorting.length?this.sorting=this.options.defaultSorting:this.sorting=[this.options.defaultSorting],this.sorting.forEach(function(t){t.mode||(t.mode="asc")})):this.sorting=[{key:Object.keys(this.maptable.data[0])[0],mode:"asc"}],this.initialSorting=this.sorting.map(function(t){return t.key+","+t.mode}).join(";"),this.isSorting=!1,this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-table"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-table"),this.maptable.node.appendChild(this.node)),this.node=d3.select(this.node).append("table").attr("class",this.options.className),this.header=this.node.append("thead"),this.body=this.node.append("tbody"),this.options.show){var n=this.options.show.filter(function(t){return Object.keys(i.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.header.selectAll("tr").data([1]).enter().append("tr").selectAll("th").data(this.activeColumns.map(function(t){return v.extendRecursive({key:t},i.maptable.columnDetails[t])})).enter().append("th").attr("class",function(t){var e=t.sorting?"mt-table-sortable":"";return e+=t.nowrap?" nowrap":""}).attr("data-key",function(t){return v.sanitizeKey(t.key)}).attr("onselectstart","return false;").attr("unselectable","on").attr("style",function(t){return t.nowrap?"white-space:nowrap;":""}).on("click",function(t){i.isSorting||(i.isSorting=!0,t.sorting&&i.sortColumn(t.key),i.isSorting=!1)}).text(function(t){return t.title}).attr("id",function(t){return"column_header_"+v.sanitizeKey(t.key)})}return f.createClass(t,[{key:"restoreState",value:function(t){if(t){var e=t.split(";"),a=[];e.forEach(function(t){var e=t.split(",");a.push({key:e[0],mode:e[1]||"asc"})}),this.sorting=a}}},{key:"saveState",value:function(){var t=this.sorting.map(function(t){return t.key+","+t.mode}).join(";");t!==this.initialSorting&&this.maptable.saveState("sort",t)}},{key:"render",value:function(){var t=this;this.applySort();var e=this.maptable.data;this.options.distinctBy&&(e=d3.nest().key(function(e){return e[t.options.distinctBy]}).entries(this.maptable.data).map(function(t){return t.values[0]})),this.body.selectAll("tr").data(e).enter().append("tr"),this.body.selectAll("tr").data(e).exit().remove();var a=[];this.body.selectAll("tr").data(e).attr("class",function(e){return t.options.rowClassName?"line "+t.options.rowClassName(e):"line"}).html(function(e){var i="";return t.activeColumns.forEach(function(n){var r=t.maptable.columnDetails[n];i+=""}),i}),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"applySort",value:function(){for(var t=this,e=this.container.querySelectorAll(".mt-table-sortable"),a=0;a0;if(this.options.map.heatmap&&n)return i.innerHTML='
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
',this.node.insertBefore(i,this.node.firstChild),i.querySelector(".mt-loading").style.display="block",this.options.map=!1,void this.buildComponenents();i.innerHTML='
Loading...
',this.node.insertBefore(i,this.node.firstChild),i.querySelector(".mt-loading").style.display="block",d3.json(this.options.map.path,function(t,e){if(t)throw t;a.map=new S(a,a.options.map,e),i.querySelector(".mt-loading").style.display="none",a.buildComponenents()})}else this.buildComponenents()}},{key:"buildComponenents",value:function(){var t=this;this.options.filters&&(this.filters=new C(this,this.options.filters)),this.options.table&&(this.table=new E(this,this.options.table)),this.restoreState(),window.addEventListener("hashchange",function(){t.restoreState()}),this.render()}},{key:"loadState",value:function(t,e){if(e){var a=this.parseState(t);if(!a)return null;try{var i=JSON.parse(a);this.state[t]=i}catch(n){return console.log("Maptable: Invalid URL State for mt-"+t+" "+n.message),null}}else{var r=this.parseState(t);r&&(this.state[t]=r)}return this.state[t]}},{key:"restoreState",value:function(){this.map&&(this.loadState("zoom",!0),this.map.restoreState(this.state.zoom)),this.filters&&(this.loadState("filters",!0),this.filters.restoreState(this.state.filters)),this.table&&(this.loadState("sort",!1),this.table.restoreState(this.state.sort))}},{key:"parseState",value:function(t){var e=document.location.href.replace(/%21mt/g,"!mt").split("!mt-"+t+"=");return e[1]?decodeURIComponent(e[1].split("!mt")[0]):null}},{key:"removeState",value:function(t){window.clearTimeout(this.saveStateTimeout[t]),delete this.state[t],this.updateState()}},{key:"saveState",value:function(t,e){var a=this;window.clearTimeout(this.saveStateTimeout[t]),this.saveStateTimeout[t]=window.setTimeout(function(){a.state[t]=e,a.updateState()},200)}},{key:"updateState",value:function(){var t=this,e=document.location.href.split("#")[0],a="";Object.keys(this.state).forEach(function(e){if(t.state[e]){var i=t.state[e];if("object"===f["typeof"](t.state[e])){if(!Object.keys(t.state[e]).length)return;i=JSON.stringify(t.state[e])}a+="!mt-"+e+"="+encodeURIComponent(i)}}),""!==a&&(a="#"+a),document.location.href!==""+e+a&&window.history.pushState(null,null,""+e+a)}},{key:"render",value:function(){this.filters&&(this.filters.filterData(),this.filters.refresh()),this.map&&(this.map.render(),!this.firstExecution&&this.options.map.onComplete&&this.options.map.onComplete.constructor===Function&&this.options.map.onComplete.bind(this)()),this.table&&(this.table.render(),!this.firstExecution&&this.options.table.onComplete&&this.options.table.onComplete.constructor===Function&&this.options.table.onComplete.bind(this)()),!this.firstExecution&&this.options.onComplete&&this.options.onComplete.constructor===Function&&this.options.onComplete.bind(this)(),this.firstExecution=!0}},{key:"setColumnDetails",value:function(){var t=this;if(0!==t.rawData.length){var e={};Object.keys(t.rawData[0]).forEach(function(a){var i=/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/,n=i.test(t.rawData[0][a]);e[a]={title:v.keyToTile(a),filterMethod:n?"compare":"field",filterInputType:n?"number":"text",sorting:!0},n&&(e[a].dataParse=function(t){return parseFloat(t)})}),t.columnDetails=v.extendRecursive(e,this.options.columns),Object.keys(t.columnDetails).forEach(function(e){t.columnDetails[e].isVirtual="function"==typeof t.columnDetails[e].virtual})}}}]),t}();if(d3.maptable=function(t){var e=void 0,a={},i={target:t,columns:{},data:{},map:null,filters:null,table:null};return a.map=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!topojson)throw new Error("Maptable requires topojson.js");if("string"!=typeof t.path)throw new Error("MapTable: map not provided");return i.map=t,a},a.json=function(t,e){return i.data.type="json",i.data.path=t,i.data.preFilter=e,a},a.csv=function(t,e){return i.data.type="csv",i.data.path=t,i.data.preFilter=e,a},a.tsv=function(t,e){return i.data.type="tsv",i.data.path=t,i.data.preFilter=e,a},a.filters=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.filters=t,a},a.table=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.table=t,a},a.columns=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return i.columns=t,a},a.render=function(a){if("string"!=typeof t||!document.querySelector(t))throw new Error("MapTable: target not found");if(!i.data||!i.data.path)throw new Error("MapTable: Please provide the path for your dataset json|csv|tsv");i.map&&!i.map.heatmap&&(i.map.heatmap=null),i.map&&i.map.markers===!1&&(i.map.markers=null),i.map&&i.map.countries===!1&&(i.map.countries=null),i.filters||(i.filters=null),i.onComplete=a;var n=v.extendRecursive(g,i);return e=new N(t,n),{render:function(){return e.render()},loadState:function(t,a){return e.loadState(t,a)},removeState:function(t){return e.removeState(t)},saveState:function(t,a){return e.saveState(t,a)}}},a},!d3)throw new Error("Maptable requires d3.js");var A=d3.maptable;return A}(); \ No newline at end of file +this.d3=this.d3||{},this.d3.maptable=function(){"use strict";function t(t,e,i){e.forEach(function(e){var i=document.createElement("option");i.setAttribute("value",e.value),i.innerText=e.text,t.appendChild(i)}),t.value=i}function e(t,e,i){return"="===e?parseInt(t,10)===parseInt(i,10):"≠"===e?parseInt(t,10)!==parseInt(i,10)&&""!==t&&""!==i:">"===e?parseInt(t,10)>parseInt(i,10)&&""!==t&&""!==i:"<"===e?parseInt(t,10)=parseInt(i,10)&&""!==t&&""!==i:"≤"===e?parseInt(t,10)<=parseInt(i,10)&&""!==t&&""!==i:!0}function i(){for(var t={},e=void 0,a=[].splice.call(arguments,0),n={}.toString;a.length>0;)e=a.splice(0,1)[0],"[object Object]"===n.call(e)&&Object.keys(e).forEach(function(a){"[object Object]"===n.call(e[a])?t[a]=i(t[a]||{},e[a]):t[a]=e[a]});return t}function a(t){var e=t.charAt(0).toUpperCase()+t.slice(1);return e.replace(/_/g," ")}function n(t){return t.toLowerCase().replace(/ /g,"_").replace(/"/g,"").replace(/'/g,"")}function r(t){return t&&""!==t?Number(t.toString().replace(/[^0-9.]+|\s+/gim,"")):null}function s(t,e){t.sort(function(t,e){return t-e});var i=e/100*(t.length-1),a=void 0;if(Math.floor(i)===i)a=t[i];else{var n=Math.floor(i),r=i-n;a=t[n]+(t[n+1]-t[n])*r}return a}function o(t){if(!t)return t;for(var e=[],i=0,a=t.length;a>i;i+=1)-1===e.indexOf(t[i])&&""!==t[i]&&e.push(t[i]);return e}function l(t,e,i,a){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLImageElement&&!t instanceof HTMLImageElement)return;var n=t.naturalWidth,r=t.naturalHeight;if("string"==typeof e)var e=document.getElementById(e);else if("undefined"!=typeof HTMLCanvasElement&&!e instanceof HTMLCanvasElement)return;e.style.width=n+"px",e.style.height=r+"px",e.width=n,e.height=r;var s=e.getContext("2d");s.clearRect(0,0,n,r),s.drawImage(t,0,0),Number.isNaN(i)||1>i||(a?u(e,0,0,n,r,i):d(e,0,0,n,r,i))}function h(t,e,i,a,n){if("string"==typeof t)var t=document.getElementById(t);else if("undefined"!=typeof HTMLCanvasElement&&!t instanceof HTMLCanvasElement)return;var r,s=t.getContext("2d");try{try{r=s.getImageData(e,i,a,n)}catch(o){throw new Error("unable to access local image data: "+o)}}catch(o){throw new Error("unable to access image data: "+o)}return r}function u(t,e,i,a,n,r){if(!(Number.isNaN(r)||1>r)){r|=0;var s=h(t,e,i,a,n);s=p(s,e,i,a,n,r),t.getContext("2d").putImageData(s,e,i)}}function p(t,e,i,a,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T,q,j,F,D=t.data,H=r+r+1,W=a-1,O=n-1,I=r+1,P=I*(I+1)/2,L=new m,R=L;for(l=1;H>l;l++)if(R=R.next=new m,l==I)var B=R;R.next=L;var z=null,Y=null;d=p=0;var X=k[r],K=w[r];for(o=0;n>o;o++){for(C=E=N=A=c=f=v=g=0,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(l=1;I>l;l++)h=p+((l>W?W:l)<<2),c+=(R.r=M=D[h])*(F=I-l),f+=(R.g=T=D[h+1])*F,v+=(R.b=q=D[h+2])*F,g+=(R.a=j=D[h+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next;for(z=L,Y=B,s=0;a>s;s++)D[p+3]=j=g*X>>K,0!=j?(j=255/j,D[p]=(c*X>>K)*j,D[p+1]=(f*X>>K)*j,D[p+2]=(v*X>>K)*j):D[p]=D[p+1]=D[p+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=d+((h=s+r+1)s;s++){for(E=N=A=C=f=v=g=c=0,p=s<<2,y=I*(M=D[p]),b=I*(T=D[p+1]),x=I*(q=D[p+2]),S=I*(j=D[p+3]),c+=P*M,f+=P*T,v+=P*q,g+=P*j,R=L,l=0;I>l;l++)R.r=M,R.g=T,R.b=q,R.a=j,R=R.next;for(u=a,l=1;r>=l;l++)p=u+s<<2,c+=(R.r=M=D[p])*(F=I-l),f+=(R.g=T=D[p+1])*F,v+=(R.b=q=D[p+2])*F,g+=(R.a=j=D[p+3])*F,C+=M,E+=T,N+=q,A+=j,R=R.next,O>l&&(u+=a);for(p=s,z=L,Y=B,o=0;n>o;o++)h=p<<2,D[h+3]=j=g*X>>K,j>0?(j=255/j,D[h]=(c*X>>K)*j,D[h+1]=(f*X>>K)*j,D[h+2]=(v*X>>K)*j):D[h]=D[h+1]=D[h+2]=0,c-=y,f-=b,v-=x,g-=S,y-=z.r,b-=z.g,x-=z.b,S-=z.a,h=s+((h=o+I)r)){r|=0;var s=h(t,e,i,a,n);s=c(s,e,i,a,n,r),t.getContext("2d").putImageData(s,e,i)}}function c(t,e,i,a,n,r){var s,o,l,h,u,p,d,c,f,v,g,y,b,x,S,C,E,N,A,M,T=t.data,q=r+r+1,j=a-1,F=n-1,D=r+1,H=D*(D+1)/2,W=new m,O=W;for(l=1;q>l;l++)if(O=O.next=new m,l==D)var I=O;O.next=W;var P=null,L=null;d=p=0;var R=k[r],B=w[r];for(o=0;n>o;o++){for(x=S=C=c=f=v=0,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(l=1;D>l;l++)h=p+((l>j?j:l)<<2),c+=(O.r=E=T[h])*(M=D-l),f+=(O.g=N=T[h+1])*M,v+=(O.b=A=T[h+2])*M,x+=E,S+=N,C+=A,O=O.next;for(P=W,L=I,s=0;a>s;s++)T[p]=c*R>>B,T[p+1]=f*R>>B,T[p+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=d+((h=s+r+1)s;s++){for(S=C=x=f=v=c=0,p=s<<2,g=D*(E=T[p]),y=D*(N=T[p+1]),b=D*(A=T[p+2]),c+=H*E,f+=H*N,v+=H*A,O=W,l=0;D>l;l++)O.r=E,O.g=N,O.b=A,O=O.next;for(u=a,l=1;r>=l;l++)p=u+s<<2,c+=(O.r=E=T[p])*(M=D-l),f+=(O.g=N=T[p+1])*M,v+=(O.b=A=T[p+2])*M,x+=E,S+=N,C+=A,O=O.next,F>l&&(u+=a);for(p=s,P=W,L=I,o=0;n>o;o++)h=p<<2,T[h]=c*R>>B,T[h+1]=f*R>>B,T[h+2]=v*R>>B,c-=g,f-=y,v-=b,g-=P.r,y-=P.g,b-=P.b,h=s+((h=o+D).1}),s=this.path.context(i),o=this.getMagnitudeScale(r),l=d3.scale.linear().domain([1,0]).range(["#000000","#FFFFFF"]);i.beginPath(),i.rect(0,0,this.getWidth(),this.getHeight()),i.fillStyle="#ffffff",i.fill(),i.closePath();var h=function(e){var i=t.options.heatmap.circles.colorStrength,a=1+(i-1)/100;return i>1?(2-a)*e+a-1:i*e};r.forEach(function(t){var e=n(t);a.forEach(function(a){var n=h(o(a)*e);n>0&&(i.beginPath(),s(d3.geo.circle().origin([t.longitude,t.latitude]).angle(a-1e-4)()),i.fillStyle=l(n),i.fill(),i.closePath())})}),x.canvasRGBA(e.node(),0,0,this.getWidth(),this.getHeight(),this.options.heatmap.circles.blur),i.beginPath(),i.globalCompositeOperation="screen",i.rect(0,0,this.getWidth(),this.getHeight()),i.fillStyle=this.options.heatmap.circles.color,i.fill(),i.closePath();var u=e.node().toDataURL();return e.remove(),u}},{key:"updateHeatmap",value:function(){var t=this.getHeatmapData();this.imgHeatmap.attr("xlink:href",t)}},{key:"buildCountries",value:function(){this.dataCountries=topojson.feature(this.jsonWorld,this.jsonWorld.objects.countries).features,this.layerCountries.selectAll(".mt-map-country").data(this.dataCountries).enter().insert("path").attr("class","mt-map-country").attr("d",this.path),this.legendCountry={},this.shouldRenderLegend()&&(this.legendCountry.fill=new y(this))}},{key:"shouldRenderLegend",value:function(){var t=this.options.countries.attr.fill;if(!t)return!1;if(!t.legend||!t.min||!t.max)return!1;if(t.aggregate&&t.aggregate.scale){var e="function"==typeof t.aggregate.scale?t.aggregate.scale.bind(this.maptable)():t.aggregate.scale;if("linear"!==e)return!1}return!0}},{key:"updateCountries",value:function(){var t=this,e=d3.nest().key(function(e){return e[t.options.countryIdentifierKey]}).entries(this.maptable.data);this.dataCountries.forEach(function(i){i.key=i.properties[t.options.countryIdentifierType];var a=e.filter(function(t){return t.key===i.key});i.values=0===a.length?[]:a[0].values,i.attr={},i.rollupValue={}}),Object.keys(this.options.countries.attr).forEach(function(e){t.setAttrValues(e,t.options.countries.attr[e],t.dataCountries)});var i=d3.selectAll(".mt-map-country").each(function(t){var e=this;Object.keys(t.attr).forEach(function(i){d3.select(e).attr(i,t.attr[i])})});Object.keys(this.options.countries.attr).forEach(function(e){var a=t.options.countries.attr[e];if("object"===("undefined"==typeof a?"undefined":f["typeof"](a))&&a.legend&&void 0!=t.legendCountry[e]){var n=d3.extent(t.dataCountries,function(t){return Number(t.attrProperties[e].value)});t.legendCountry[e].updateExtents(n),i.on("mouseover",function(i){t.legendCountry[e].indiceChange(i.attrProperties[e].value)}).on("mouseout",function(){t.legendCountry[e].indiceChange(NaN)})}}),this.options.countries&&this.options.countries.tooltip&&this.activateTooltip(i,this.tooltipCountriesNode,this.options.countries.tooltip,!0)}},{key:"updateMarkers",value:function(){var t=this,e=function(t){return t.longitude+","+t.latitude};this.dataMarkers=d3.nest().key(e).entries(this.maptable.data).filter(function(t){return 0!==t.values[0].x}),this.dataMarkers.forEach(function(t){t.attr={},t.attrProperties={}}),Object.keys(this.options.markers.attr).forEach(function(e){t.setAttrValues(e,t.options.markers.attr[e],t.dataMarkers)});var i=this.layerMarkers.selectAll(".mt-map-marker").data(this.dataMarkers),a=i.enter();a=this.options.markers.customTag?this.options.markers.customTag(a):a.append("svg:circle");var n=this.options.markers.className?this.options.markers.className:"";a.attr("class","mt-map-marker "+n),i.exit().transition().attr("r",0).attr("fill","#eee").style("opacity",0).remove();var r=this.options.markers.attrX?this.options.markers.attrX:"cx",s=this.options.markers.attrY?this.options.markers.attrY:"cy",o=this.options.markers.attrXDelta?this.options.markers.attrXDelta:0,l=this.options.markers.attrYDelta?this.options.markers.attrYDelta:0,h=i.attr(r,function(t){return t.values[0].x+o}).attr(s,function(t){return t.values[0].y+l});d3.selectAll(this.containerSelector+" .mt-map-marker").each(function(t){var e=this;Object.keys(t.attr).forEach(function(i){d3.select(e).attr(i,t.attr[i])})}),this.options.markers.tooltip&&this.activateTooltip(h,this.tooltipMarkersNode,this.options.markers.tooltip,!1),this.rescale()}},{key:"fitContent",value:function(){if(0===this.maptable.data.length)return this.transX=0,this.transY=0,this.scale=1,void this.zoomListener.translate([this.transX,this.transY]).scale(this.scale);var t=d3.extent(this.maptable.data,function(t){return t.x}),e=d3.extent(this.maptable.data,function(t){return t.y}),i=this.getWidth()/this.getHeight(),a=20+(this.options.title?30:0),n=t[1]-t[0]+a,r=e[1]-e[0]+a,s=n/i,o=r*i,l=0,h=0;o>=n?l=(o-n)/2:h=(s-r)/2,t[0]-=this.options.fitContentMargin+l,t[1]+=this.options.fitContentMargin+l,e[0]-=this.options.fitContentMargin+h,e[1]+=this.options.fitContentMargin+h,this.scale=this.getWidth()/(t[1]-t[0]),this.transX=-1*t[0]*this.scale,this.transY=-1*e[0]*this.scale,this.zoomListener.translate([this.transX,this.transY]).scale(this.scale)}},{key:"buildTitle",value:function(){var t=this.svg.append("svg").attr("width",this.getWidth()).attr("x",0).attr("y",this.getHeight()-30).attr("height",30);this.options.title.bgColor&&t.append("rect").attr("x",0).attr("y",0).attr("width",this.getWidth()).attr("height",30).attr("fill",this.options.title.bgColor),t.append("text").attr("id","mt-map-title").attr("x",20).attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).attr("y",20),this.options.title.source&&t.append("text").attr("y",20).attr("x",this.getWidth()-20).attr("text-anchor","end").attr("font-size",this.options.title.fontSize).attr("font-family",this.options.title.fontFamily).html(this.options.title.source())}},{key:"encodeTranslation",value:function(t){var e=t[0]/(this.scale*this.getWidth()),i=t[1]/(this.scale*this.getHeight());return[e,i]}},{key:"decodeTranslation",value:function(t){var e=t[0]*this.getWidth()*this.scale,i=t[1]*this.getHeight()*this.scale;return[e,i]}},{key:"restoreState",value:function(t){if(t&&3===t.length){this.scale=t[0];var e=this.decodeTranslation([t[1],t[2]]);this.transX=e[0],this.transY=e[1],this.zoomListener.scale(t[0]).translate(e).event(this.svg)}}},{key:"saveState",value:function(){var t=this.encodeTranslation([this.transX,this.transY]),e=[this.scale,t[0],t[1]];1!==e[0]&&0!==e[1]&&0!==e[2]?this.maptable.saveState("zoom",e):this.maptable.removeState("zoom")}},{key:"rescale",value:function(){var t=this;d3.event&&d3.event.translate&&(this.scale=d3.event.scale,this.transX=1===this.scale?0:d3.event.translate[0],this.transY=1===this.scale?0:d3.event.translate[1]);var e=0,i=0,a=this.getWidth()*(1-this.scale),n=this.getHeight()*(1-this.scale);this.transY>i?this.transY=i:this.transYe?this.transX=e:this.transXe?e:t},e[0])};else if("max"===s)e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return e.reduce(function(t,e){return e>t?e:t},e[0])};else if(-1!==s.indexOf("percentile")){var l=v.toNumber(s);e.rollup=function(t){if(!t.length)return 0;var e=t.map(function(t){return Number(t[r])});return v.quantile(e,l)}}else"function"==typeof e.rollup&&(e.rollup=e.rollup.bind(this.maptable));n&&(-1!==n.indexOf("log")?o=d3.scale.log().base(v.toNumber(n)||10):-1!==n.indexOf("pow")?o=d3.scale.pow().exponent(v.toNumber(n)||1):"sqrt"===n&&(o=d3.scale.sqrt()))}if(e.rollup||(e.rollup=function(t){return t.length}),!e.min||!e.max)throw new Error("MapTable: You should provide values 'min' & 'max' for attr."+t);if(i.forEach(function(i){var o=e.rollup(i.values);if(i.attrProperties||(i.attrProperties={}),i.attrProperties[t]||(i.attrProperties[t]={}),i.attrProperties[t].value=o,r){i.attrProperties[t].key=r,i.attrProperties[t].mode=s,i.attrProperties[t].scale=n;var l=a.maptable.columnDetails[r];i.attrProperties[t].columnDetails=l;var h={};h[r]=o,i.attrProperties[t].formatted=l&&l.cellContent?l.cellContent.bind(a.maptable)(h):o}}),"rank"===n){var h=v.uniqueValues([0].concat(i.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return t>0}))),u=v.uniqueValues(i.map(function(e){return Math.floor(100*e.attrProperties[t].value)/100}).filter(function(t){return 0>t}));h.sort(function(t,e){return t-e}),u.sort(function(t,e){return e-t}),i.forEach(function(e){if(0!==e.attrProperties[t].value){var i=e.attrProperties[t].value>=0?h:u,a=i.indexOf(Math.floor(100*e.attrProperties[t].value)/100),n=Math.round(a/i.length*100),r=e.attrProperties[t].value<0?n-2*n:n;e.attrProperties[t].value=r}})}var p=d3.extent(i,function(e){return Number(e.attrProperties[t].value)});e.transform&&(p[0]=e.transform.bind(this.maptable)(p[0],this.maptable.data),p[1]=e.transform.bind(this.maptable)(p[1],this.maptable.data));var d=e.min,c=e.max;if("minValue"===e.min&&(d=p[0]),"maxValue"===e.max&&(c=p[1]),e.maxNegative&&!e.minNegative||!e.maxNegative&&e.minNegative)throw new Error("MapTable: maxNegative or minNegative undefined. Please declare both.");var m=e.maxNegative&&e.minNegative,g=void 0,y=void 0;m?(g=o.copy().domain([0,p[1]]).range([d,c]),y=o.copy().domain([p[0],0]).range([e.maxNegative,e.minNegative])):g=o.domain(p).range([d,c]),i.forEach(function(i){var n=void 0;if(!i.values.length||Number.isNaN(i.attrProperties[t].value)){if("undefined"==typeof e.empty)throw new Error("MapTable: no empty property found for attr."+t);n=e.empty}else{var r=i.attrProperties[t].value,s=e.transform?e.transform.bind(a.maptable)(r,a.maptable.data):r;n=m&&0>s?y(s):g(s),0===s&&e.empty&&(n=e.empty)}i.attr[t]=n})}}},{key:"render",value:function(){this.options.markers&&this.updateMarkers(),this.options.countries&&this.updateCountries(),this.options.title&&this.updateTitle(),this.options.heatmap&&this.updateHeatmap(),this.options.autoFitContent&&(this.fitContent(),this.rescale()),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"updateTitle",value:function(){var t=this;if(this.options.title.content){var e=this.maptable.data.filter(function(e){return 0!==e[t.options.latitudeKey]}).length,i=this.maptable.rawData.filter(function(e){ +return 0!==e[t.options.latitudeKey]}).length,a="";this.maptable.filters&&(a=this.maptable.filters.getDescription()),this.container.querySelector("#mt-map-title").innerHTML=this.options.title.content.bind(this.maptable)(e,i,a,this.maptable.data,this.maptable.rawData,this.dataCountries)}}},{key:"activateTooltip",value:function(t,e,i,a){var n=this;t.on(a?"mousemove":"mouseover",function(t){var r=i.bind(this.maptable)(t);if(r){e.html(r).attr("style","display:block;position:fixed;");var s=void 0,o=void 0,l=e.node().offsetWidth/2;if(a){var h=n.node.getBoundingClientRect(),u=d3.mouse(n.svg.node()).map(function(t){return parseInt(t,10)});s=h.left+u[0]-l,o=h.top+u[1]+10}else{var p=this.getBoundingClientRect();s=p.left+p.width/2-l,o=p.top+p.height+2}e.attr("style","top:"+o+"px;left:"+s+"px;display:block;position:fixed;").on("mouseout",function(){e.style("display","none")})}}).on("mouseout",function(){e.style("display","none")})}},{key:"exportSvg",value:function(){var t=this.container.querySelector("#mt-map-svg"),e='\n'+(new XMLSerializer).serializeToString(t);if(this.options.exportSvgClient){if(!window.saveAs)throw new Error("MapTable: Missing FileSaver.js library");var i=new Blob([e],{type:"image/svg+xml"});window.saveAs(i,"visualization.svg")}else if(this.options.exportSvg){var a=this.node.querySelector("#mt-map-svg-form");a.querySelector('[name="data"]').value=e,a.submit()}}},{key:"addExportSvgCapability",value:function(){var t=document.createElement("div");t.setAttribute("id","mt-map-export"),this.container.querySelector("#mt-map").appendChild(t);var e=document.createElement("button");if(e.setAttribute("class","btn btn-xs btn-default"),e.innerHTML="Download",e.addEventListener("click",this.exportSvg.bind(this)),t.appendChild(e),this.options.exportSvg){var i=document.createElement("div");i.innerHTML='
',t.appendChild(i)}}}]),t}(),C=function(){function t(e,i){var a=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=i,this.criteria=[],this.options.show){var n=this.options.show.filter(function(t){return Object.keys(a.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.container=document.createElement("div"),this.maptable.node.appendChild(this.container),this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-filters"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-filters"),this.node.setAttribute("class","panel panel-default"),this.maptable.node.appendChild(this.node));var r=document.createElement("div");r.setAttribute("class","panel-heading");var s=document.createElement("button");s.setAttribute("id","mt-filters-reset"),s.setAttribute("class","btn btn-default btn-xs pull-right"),s.style.display="none",s.style.marginLeft=5,s.innerText="↺ Reset",s.addEventListener("click",this.reset),r.appendChild(s);var o=document.createElement("h3");o.setAttribute("class","panel-title"),o.appendChild(document.createTextNode("Filters")),r.appendChild(o),this.node.appendChild(r);var l=document.createElement("div");l.setAttribute("id","mt-filters-content"),l.setAttribute("class","panel-body");var h=document.createElement("div");h.setAttribute("id","mt-filters-elements"),l.appendChild(h);var u=document.createElement("a");u.setAttribute("id","mt-filters-new"),u.setAttribute("href","#"),u.innerText="+ New filter",u.addEventListener("click",this.add.bind(this)),l.appendChild(u),this.node.appendChild(l)}return f.createClass(t,[{key:"add",value:function(t){t&&t.preventDefault();var e=this.getPossibleFilters();if(0!==e.length){var i=e[0].key;this.create(i)}}},{key:"create",value:function(t,e){var i=this.buildRow(t);e?e.parentNode.replaceChild(i,e):this.node.querySelector("#mt-filters-elements").appendChild(i),this.criteria.push(t),this.maptable.render(),"none"===this.container.style.display&&this.toggle()}},{key:"remove",value:function(t){var e=this.node.querySelector('[data-mt-filter-name="'+t+'"]');e&&e.parentNode.removeChild(e);var i=this.criteria.indexOf(t);this.criteria.splice(i,1),this.maptable.render()}},{key:"reset",value:function(){for(var t=this.node.querySelectorAll("[data-mt-filter-name]"),e=0;e and\n '+h+""}else{var u=a.querySelector(".mt-filter-value-min").value;if(""===u)continue;s+=r.title+" is ",s+=o.options[o.selectedIndex].text,s+=''+u+""}}else if("field"===r.filterMethod||"dropdown"===r.filterMethod){var p=a.querySelector(".mt-filter-value").value;if(""===p)continue;var d="field"===r.filterMethod?"contains":"is";s+=r.title+" "+d+'\n '+p+""}t.push(s)}return t.join(", ")}},{key:"buildRow",value:function(t){var e=this,i=this,a=this.getPossibleFilters(),n=this.maptable.columnDetails[t],r=document.createElement("div");r.setAttribute("class","mt-filter-row"),r.setAttribute("data-mt-filter-name",t);var s=document.createElement("button");s.setAttribute("class","btn btn-default pull-right"),s.setAttribute("data-mt-filter-btn-minus",1),s.innerText="– Remove this filter",s.addEventListener("click",function(){t=r.querySelector(".mt-filter-name").value,e.remove(t)}),r.appendChild(s);var o=document.createElement("span");o.setAttribute("class","mt-filters-and"),o.innerText="And ",r.appendChild(o);var l=document.createElement("select");l.setAttribute("class","mt-filter-name form-control form-control-inline"),v.appendOptions(l,a.map(function(t){return{text:t.title,value:t.key}})),l.value=t,l.addEventListener("change",function(){var t=this.parentNode.getAttribute("data-mt-filter-name"),e=this.value;i.create(e,this.parentNode),i.remove(t),i.refresh()}),r.appendChild(l);var h=document.createElement("span");h.innerText="field"===n.filterMethod?" contains ":" is ",r.appendChild(h);var u=null;"field"!==n.filterMethod&&"dropdown"!==n.filterMethod&&(u=document.createElement("select"),u.setAttribute("class","mt-filter-range form-control form-control-inline"),v.appendOptions(u,["any","=","≠","<",">","≤","≥","BETWEEN"].map(function(t){return{text:t,value:t}})),u.addEventListener("change",function(){i.handleRangeChange(this)}),r.appendChild(u),r.appendChild(document.createTextNode(" ")));var p=document.createElement("div");if(p.style.display="inline-block",p.setAttribute("class","mt-filter-value-container"),"compare"===n.filterMethod)["min","max"].forEach(function(t,i){var a=document.createElement("input");if(a.setAttribute("class","form-control form-control-inline mt-filter-value-"+t),a.setAttribute("type",n.filterInputType),a.addEventListener("keyup",e.maptable.render.bind(e.maptable)),a.addEventListener("change",e.maptable.render.bind(e.maptable)),p.appendChild(a),0===i){var r=document.createElement("span");r.setAttribute("class","mt-filter-value-and"),r.innerText=" and ",p.appendChild(r)}});else if("field"===n.filterMethod){var d=document.createElement("input");d.setAttribute("class","form-control form-control-inline mt-filter-value"),d.setAttribute("type","text"),d.addEventListener("keyup",this.maptable.render.bind(this.maptable)),d.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(d)}else if("dropdown"===n.filterMethod){var c=document.createElement("select");c.setAttribute("class","form-control form-control-inline mt-filter-value");var m=d3.nest().key(function(e){return e[t]}).sortKeys(d3.ascending).entries(this.maptable.rawData);v.appendOptions(c,[{text:"Any",value:""}].concat(m.map(function(t){return{text:t.key,value:t.key}}))),c.addEventListener("change",this.maptable.render.bind(this.maptable)),p.appendChild(c)}return r.appendChild(p),u&&this.handleRangeChange(u),r}},{key:"handleRangeChange",value:function(t){var e=t.parentNode;"any"===t.value?e.querySelector(".mt-filter-value-container").style.display="none":(e.querySelector(".mt-filter-value-container").style.display="inline-block","BETWEEN"===t.value?(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="inline-block",e.querySelector(".mt-filter-value-max").style.display="inline-block"):(e.querySelector(".mt-filter-value-min").style.display="inline-block",e.querySelector(".mt-filter-value-and").style.display="none",e.querySelector(".mt-filter-value-max").style.display="none"))}},{key:"getPossibleFilters",value:function(t){var e=this;return Object.keys(this.maptable.columnDetails).map(function(t){return v.extendRecursive({key:t},e.maptable.columnDetails[t])}).filter(function(i){return-1!==e.activeColumns.indexOf(i.key)&&(t&&t===i.key||-1===e.criteria.indexOf(i.key)&&i.filterMethod&&!i.isVirtual)})}},{key:"filterData",value:function(){var t=this,e=this;this.maptable.data=this.maptable.rawData.filter(function(i){for(var a=t.node.querySelectorAll(".mt-filter-row"),n=!0,r=0;rh(m))?n=!1:(parseInt(i[o],10)parseInt(m,10))&&(n=!1)}else{var f=s.querySelector(".mt-filter-value-min").value;if(""===f)continue;h&&!v.rangeToBool(h(i[o]),d,h(f))?n=!1:h||v.rangeToBool(i[o],d,f)||(n=!1)}}}return n}),this.options.saveState&&this.maptable.saveState("filters",this.exportFilters())}},{key:"refresh",value:function(){for(var t=this.node.querySelectorAll(".mt-filter-name"),e=0;e0&&(this.node.querySelectorAll(".mt-filters-and")[0].style.visibility="hidden");var r=!this.getPossibleFilters().length;this.node.querySelector("#mt-filters-new").style.visibility=r?"hidden":"visible"}},{key:"toggle",value:function(){"none"===this.container.style.display?(this.container.style.display="block",0===this.criteria.length&&this.add()):this.container.style.display="none"}}]),t}(),E=function(){function t(e,i){var a=this;if(f.classCallCheck(this,t),this.maptable=e,this.options=i,this.options.defaultSorting?(Array.isArray(this.options.defaultSorting)&&2===this.options.defaultSorting.length?this.sorting=this.options.defaultSorting:this.sorting=[this.options.defaultSorting],this.sorting.forEach(function(t){t.mode||(t.mode="asc")})):this.sorting=[{key:Object.keys(this.maptable.data[0])[0],mode:"asc"}],this.initialSorting=this.sorting.map(function(t){return t.key+","+t.mode}).join(";"),this.isSorting=!1,this.containerSelector=e.options.target,this.container=document.querySelector(e.options.target),this.node=this.container.querySelector("#mt-table"),this.node||(this.node=document.createElement("div"),this.node.setAttribute("id","mt-table"),this.maptable.node.appendChild(this.node)),this.node=d3.select(this.node).append("table").attr("class",this.options.className),this.header=this.node.append("thead"),this.body=this.node.append("tbody"),this.options.show){var n=this.options.show.filter(function(t){return Object.keys(a.maptable.columnDetails).indexOf(t)<0});if(n.length>0)throw new Error('MapTable: invalid columns "'+n.join(", ")+'"');this.activeColumns=this.options.show}else this.activeColumns=Object.keys(this.maptable.columnDetails);this.header.selectAll("tr").data([1]).enter().append("tr").selectAll("th").data(this.activeColumns.map(function(t){return v.extendRecursive({key:t},a.maptable.columnDetails[t])})).enter().append("th").attr("class",function(t){var e=t.sorting?"mt-table-sortable":"";return e+=t.nowrap?" nowrap":""}).attr("data-key",function(t){return v.sanitizeKey(t.key)}).attr("onselectstart","return false;").attr("unselectable","on").attr("style",function(t){return t.nowrap?"white-space:nowrap;":""}).on("click",function(t){a.isSorting||(a.isSorting=!0,t.sorting&&a.sortColumn(t.key),a.isSorting=!1)}).text(function(t){return t.title}).attr("id",function(t){return"column_header_"+v.sanitizeKey(t.key)})}return f.createClass(t,[{key:"restoreState",value:function(t){if(t){var e=t.split(";"),i=[];e.forEach(function(t){var e=t.split(",");i.push({key:e[0],mode:e[1]||"asc"})}),this.sorting=i}}},{key:"saveState",value:function(){var t=this.sorting.map(function(t){return t.key+","+t.mode}).join(";");t!==this.initialSorting&&this.maptable.saveState("sort",t)}},{key:"render",value:function(){var t=this;this.applySort();var e=this.maptable.data;this.options.distinctBy&&(e=d3.nest().key(function(e){return e[t.options.distinctBy]}).entries(this.maptable.data).map(function(t){return t.values[0]})),this.body.selectAll("tr").data(e).enter().append("tr"),this.body.selectAll("tr").data(e).exit().remove();var i=[];this.body.selectAll("tr").data(e).attr("class",function(e){return t.options.rowClassName?"line "+t.options.rowClassName(e):"line"}).html(function(e){var a="";return t.activeColumns.forEach(function(n){var r=t.maptable.columnDetails[n];a+=""}),a}),this.options.onRender&&this.options.onRender.constructor===Function&&this.options.onRender.bind(this.maptable)()}},{key:"applySort",value:function(){for(var t=this,e=this.container.querySelectorAll(".mt-table-sortable"),i=0;i0;if(this.options.map.heatmap&&n)return a.innerHTML='
The heatmap feature is not supported with Internet Explorer.
Please use another modern browser to see this map.
',this.node.insertBefore(a,this.node.firstChild),a.querySelector(".mt-loading").style.display="block",this.options.map=!1,void this.buildComponenents();a.innerHTML='
Loading...
',this.node.insertBefore(a,this.node.firstChild),a.querySelector(".mt-loading").style.display="block",d3.json(this.options.map.path,function(t,e){if(t)throw t;i.map=new S(i,i.options.map,e),a.querySelector(".mt-loading").style.display="none",i.buildComponenents()})}else this.buildComponenents()}},{key:"buildComponenents",value:function(){var t=this;this.options.filters&&(this.filters=new C(this,this.options.filters)),this.options.table&&(this.table=new E(this,this.options.table)),this.restoreState(),window.addEventListener("hashchange",function(){t.restoreState()}),this.render()}},{key:"loadState",value:function(t,e){if(e){var i=this.parseState(t);if(!i)return null;try{var a=JSON.parse(i);this.state[t]=a}catch(n){return console.log("Maptable: Invalid URL State for mt-"+t+" "+n.message),null}}else{var r=this.parseState(t);r&&(this.state[t]=r)}return this.state[t]}},{key:"restoreState",value:function(){this.map&&(this.loadState("zoom",!0),this.map.restoreState(this.state.zoom)),this.filters&&(this.loadState("filters",!0),this.filters.restoreState(this.state.filters)),this.table&&(this.loadState("sort",!1),this.table.restoreState(this.state.sort))}},{key:"parseState",value:function(t){var e=document.location.href.replace(/%21mt/g,"!mt").split("!mt-"+t+"=");return e[1]?decodeURIComponent(e[1].split("!mt")[0]):null}},{key:"removeState",value:function(t){window.clearTimeout(this.saveStateTimeout[t]),delete this.state[t],this.updateState()}},{key:"saveState",value:function(t,e){var i=this;window.clearTimeout(this.saveStateTimeout[t]),this.saveStateTimeout[t]=window.setTimeout(function(){i.state[t]=e,i.updateState()},200)}},{key:"updateState",value:function(){var t=this,e=document.location.href.split("#")[0],i="";Object.keys(this.state).forEach(function(e){if(t.state[e]){var a=t.state[e];if("object"===f["typeof"](t.state[e])){if(!Object.keys(t.state[e]).length)return;a=JSON.stringify(t.state[e])}i+="!mt-"+e+"="+encodeURIComponent(a)}}),""!==i&&(i="#"+i),document.location.href!==""+e+i&&window.history.pushState(null,null,""+e+i)}},{key:"render",value:function(){this.filters&&(this.filters.filterData(),this.filters.refresh()),this.map&&(this.map.render(),!this.firstExecution&&this.options.map.onComplete&&this.options.map.onComplete.constructor===Function&&this.options.map.onComplete.bind(this)()),this.table&&(this.table.render(),!this.firstExecution&&this.options.table.onComplete&&this.options.table.onComplete.constructor===Function&&this.options.table.onComplete.bind(this)()),!this.firstExecution&&this.options.onComplete&&this.options.onComplete.constructor===Function&&this.options.onComplete.bind(this)(),this.firstExecution=!0}},{key:"setColumnDetails",value:function(){var t=this;if(0!==t.rawData.length){var e={};Object.keys(t.rawData[0]).forEach(function(i){var a=/^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$/,n=a.test(t.rawData[0][i]);e[i]={title:v.keyToTile(i),filterMethod:n?"compare":"field",filterInputType:n?"number":"text",sorting:!0},n&&(e[i].dataParse=function(t){return parseFloat(t)})}),t.columnDetails=v.extendRecursive(e,this.options.columns),Object.keys(t.columnDetails).forEach(function(e){t.columnDetails[e].isVirtual="function"==typeof t.columnDetails[e].virtual})}}}]),t}();if(d3.maptable=function(t){var e=void 0,i={},a={target:t,columns:{},data:{},map:null,filters:null,table:null};return i.map=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!topojson)throw new Error("Maptable requires topojson.js");if("string"!=typeof t.path)throw new Error("MapTable: map not provided");return a.map=t,i},i.json=function(t,e){return a.data.type="json",a.data.path=t,a.data.preFilter=e,i},i.csv=function(t,e){return a.data.type="csv",a.data.path=t,a.data.preFilter=e,i},i.tsv=function(t,e){return a.data.type="tsv",a.data.path=t,a.data.preFilter=e,i},i.filters=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.filters=t,i},i.table=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.table=t,i},i.columns=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return a.columns=t,i},i.render=function(i){if("string"!=typeof t||!document.querySelector(t))throw new Error("MapTable: target not found");if(!a.data||!a.data.path)throw new Error("MapTable: Please provide the path for your dataset json|csv|tsv");a.map&&!a.map.heatmap&&(a.map.heatmap=null),a.map&&a.map.markers===!1&&(a.map.markers=null),a.map&&a.map.countries===!1&&(a.map.countries=null),a.filters||(a.filters=null),a.onComplete=i;var n=v.extendRecursive(g,a);return e=new N(t,n),{render:function(){return e.render()},loadState:function(t,i){return e.loadState(t,i)},removeState:function(t){return e.removeState(t)},saveState:function(t,i){return e.saveState(t,i)}}},i},!d3)throw new Error("Maptable requires d3.js");var A=d3.maptable;return A}(); \ No newline at end of file diff --git a/package.json b/package.json index 9d41790..11b4df8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "maptable", - "version": "1.7.1", + "version": "1.7.2", "description": "Visualization tool that transforms data to Map or/and Table (with filters)", "main": "dist/maptable.min.js", "homepage": "https://github.com/Packet-Clearing-House/maptable",