diff --git a/README.md b/README.md index 32959eb..6f0f582 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ + + +

diff --git a/docs/assets/js/index.js b/docs/assets/js/index.js index d9a9900..897abbd 100755 --- a/docs/assets/js/index.js +++ b/docs/assets/js/index.js @@ -50,12 +50,13 @@ lineCompositeChart.parent.addEventListener('data-select', (e) => { // ================================================================================ -let args = { +let customColors = ['purple', 'magenta', 'light-blue']; +let typeChartArgs = { title: "My Awesome Chart", data: typeData, type: 'axis-mixed', height: 250, - colors: ['purple', 'magenta', 'light-blue'], + colors: customColors, maxLegendPoints: 6, maxSlices: 10, @@ -66,7 +67,7 @@ let args = { } }; -let aggrChart = new Chart("#chart-aggr", args); +let aggrChart = new Chart("#chart-aggr", typeChartArgs); Array.prototype.slice.call( document.querySelectorAll('.aggr-type-buttons button') @@ -74,9 +75,14 @@ Array.prototype.slice.call( el.addEventListener('click', (e) => { let btn = e.target; let type = btn.getAttribute('data-type'); - args.type = type; + typeChartArgs.type = type; + if(type !== 'axis-mixed') { + typeChartArgs.colors = undefined; + } else { + typeChartArgs.colors = customColors; + } - let newChart = aggrChart.getDifferentChart(type); + let newChart = new Chart("#chart-aggr", typeChartArgs); if(newChart){ aggrChart = newChart; } diff --git a/docs/assets/js/index.min.js b/docs/assets/js/index.min.js index e00aff0..77f7641 100644 --- a/docs/assets/js/index.min.js +++ b/docs/assets/js/index.min.js @@ -49,12 +49,6 @@ var HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001 // Universal constants -/** - * Returns the value of a number upto 2 decimal places. - * @param {Number} d Any number - */ - - /** * Returns whether or not two given arrays are equal. * @param {Array} arr1 First array @@ -123,6 +117,7 @@ var MONTH_NAMES_SHORT = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", +// https://stackoverflow.com/a/11252167/6495043 function clone(date) { @@ -163,8 +158,6 @@ function addDays(date, numberOfDays) { date.setDate(date.getDate() + numberOfDays); } -// Composite Chart -// ================================================================================ var reportCountList = [152, 222, 199, 287, 534, 709, 1179, 1256, 1632, 1856, 1850]; var lineCompositeData = { @@ -345,12 +338,13 @@ lineCompositeChart.parent.addEventListener('data-select', function (e) { // ================================================================================ -var args = { +var customColors = ['purple', 'magenta', 'light-blue']; +var typeChartArgs = { title: "My Awesome Chart", data: typeData, type: 'axis-mixed', height: 250, - colors: ['purple', 'magenta', 'light-blue'], + colors: customColors, maxLegendPoints: 6, maxSlices: 10, @@ -365,15 +359,20 @@ var args = { } }; -var aggrChart = new Chart("#chart-aggr", args); +var aggrChart = new Chart("#chart-aggr", typeChartArgs); Array.prototype.slice.call(document.querySelectorAll('.aggr-type-buttons button')).map(function (el) { el.addEventListener('click', function (e) { var btn = e.target; var type = btn.getAttribute('data-type'); - args.type = type; + typeChartArgs.type = type; + if (type !== 'axis-mixed') { + typeChartArgs.colors = undefined; + } else { + typeChartArgs.colors = customColors; + } - var newChart = aggrChart.getDifferentChart(type); + var newChart = new Chart("#chart-aggr", typeChartArgs); if (newChart) { aggrChart = newChart; } diff --git a/docs/assets/js/index.min.js.map b/docs/assets/js/index.min.js.map index a7b01d0..6053b2d 100644 --- a/docs/assets/js/index.min.js.map +++ b/docs/assets/js/index.min.js.map @@ -1 +1 @@ -{"version":3,"file":"index.min.js","sources":["../../../src/js/utils/constants.js","../../../src/js/utils/helpers.js","../../../src/js/utils/date-utils.js","data.js","index.js"],"sourcesContent":["export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_CHART_TOP_MARGIN = 10;\nexport const BASE_CHART_LEFT_MARGIN = 20;\nexport const BASE_CHART_RIGHT_MARGIN = 20;\n\nexport const Y_AXIS_LEFT_MARGIN = 60;\nexport const Y_AXIS_RIGHT_MARGIN = 40;\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.01;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_LEFT_MARGIN = 50;\nexport const HEATMAP_TOP_MARGIN = 25;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { SEC_IN_DAY, MONTH_NAMES_SHORT, clone, timestampToMidnight, timestampSec, addDays } from '../../../src/js/utils/date-utils';\nimport { getRandomBias } from '../../../src/js/utils/helpers';\n\n// Composite Chart\n// ================================================================================\nconst reportCountList = [152, 222, 199, 287, 534, 709,\n\t1179, 1256, 1632, 1856, 1850];\n\nexport const lineCompositeData = {\n\tlabels: [\"2007\", \"2008\", \"2009\", \"2010\", \"2011\", \"2012\",\n\t\t\"2013\", \"2014\", \"2015\", \"2016\", \"2017\"],\n\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Average 100 reports/month\",\n\t\t\tvalue: 1200,\n\t\t}\n\t],\n\n\tdatasets: [{\n\t\t\"name\": \"Events\",\n\t\t\"values\": reportCountList\n\t}]\n};\n\n\nexport const fireball_5_25 = [\n\t[4, 0, 3, 1, 1, 2, 1, 1, 1, 0, 1, 1],\n\t[2, 3, 3, 2, 1, 3, 0, 1, 2, 7, 10, 4],\n\t[5, 6, 2, 4, 0, 1, 4, 3, 0, 2, 0, 1],\n\t[0, 2, 6, 2, 1, 1, 2, 3, 6, 3, 7, 8],\n\t[6, 8, 7, 7, 4, 5, 6, 5, 22, 12, 10, 11],\n\t[7, 10, 11, 7, 3, 2, 7, 7, 11, 15, 22, 20],\n\t[13, 16, 21, 18, 19, 17, 12, 17, 31, 28, 25, 29],\n\t[24, 14, 21, 14, 11, 15, 19, 21, 41, 22, 32, 18],\n\t[31, 20, 30, 22, 14, 17, 21, 35, 27, 50, 117, 24],\n\t[32, 24, 21, 27, 11, 27, 43, 37, 44, 40, 48, 32],\n\t[31, 38, 36, 26, 23, 23, 25, 29, 26, 47, 61, 50],\n];\nexport const fireball_2_5 = [\n\t[22, 6, 6, 9, 7, 8, 6, 14, 19, 10, 8, 20],\n\t[11, 13, 12, 8, 9, 11, 9, 13, 10, 22, 40, 24],\n\t[20, 13, 13, 19, 13, 10, 14, 13, 20, 18, 5, 9],\n\t[7, 13, 16, 19, 12, 11, 21, 27, 27, 24, 33, 33],\n\t[38, 25, 28, 22, 31, 21, 35, 42, 37, 32, 46, 53],\n\t[50, 33, 36, 34, 35, 28, 27, 52, 58, 59, 75, 69],\n\t[54, 67, 67, 45, 66, 51, 38, 64, 90, 113, 116, 87],\n\t[84, 52, 56, 51, 55, 46, 50, 87, 114, 83, 152, 93],\n\t[73, 58, 59, 63, 56, 51, 83, 140, 103, 115, 265, 89],\n\t[106, 95, 94, 71, 77, 75, 99, 136, 129, 154, 168, 156],\n\t[81, 102, 95, 72, 58, 91, 89, 122, 124, 135, 183, 171],\n];\nexport const fireballOver25 = [\n\t// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2],\n\t[3, 2, 1, 3, 2, 0, 2, 2, 2, 3, 0, 1],\n\t[2, 3, 5, 2, 1, 3, 0, 2, 3, 5, 1, 4],\n\t[7, 4, 6, 1, 9, 2, 2, 2, 20, 9, 4, 9],\n\t[5, 6, 1, 2, 5, 4, 5, 5, 16, 9, 14, 9],\n\t[5, 4, 7, 5, 1, 5, 3, 3, 5, 7, 22, 2],\n\t[5, 13, 11, 6, 1, 7, 9, 8, 14, 17, 16, 3],\n\t[8, 9, 8, 6, 4, 8, 5, 6, 14, 11, 21, 12]\n];\n\nexport const barCompositeData = {\n\tlabels: MONTH_NAMES_SHORT,\n\tdatasets: [\n\t\t{\n\t\t\tname: \"Over 25 reports\",\n\t\t\tvalues: fireballOver25[9],\n\t\t},\n\t\t{\n\t\t\tname: \"5 to 25 reports\",\n\t\t\tvalues: fireball_5_25[9],\n\t\t},\n\t\t{\n\t\t\tname: \"2 to 5 reports\",\n\t\t\tvalues: fireball_2_5[9]\n\t\t}\n\t]\n};\n\n// Demo Chart multitype Chart\n// ================================================================================\nexport const typeData = {\n\tlabels: [\"12am-3am\", \"3am-6am\", \"6am-9am\", \"9am-12pm\",\n\t\t\"12pm-3pm\", \"3pm-6pm\", \"6pm-9pm\", \"9pm-12am\"],\n\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Marker\",\n\t\t\tvalue: 43,\n\t\t\t// type: 'dashed'\n\t\t}\n\t],\n\n\tyRegions: [\n\t\t{\n\t\t\tlabel: \"Region\",\n\t\t\tstart: -10,\n\t\t\tend: 50\n\t\t},\n\t],\n\n\tdatasets: [\n\t\t{\n\t\t\tname: \"Some Data\",\n\t\t\tvalues: [18, 40, 30, 35, 8, 52, 17, -4],\n\t\t\taxisPosition: 'right',\n\t\t\tchartType: 'bar'\n\t\t},\n\t\t{\n\t\t\tname: \"Another Set\",\n\t\t\tvalues: [30, 50, -10, 15, 18, 32, 27, 14],\n\t\t\taxisPosition: 'right',\n\t\t\tchartType: 'bar'\n\t\t},\n\t\t{\n\t\t\tname: \"Yet Another\",\n\t\t\tvalues: [15, 20, -3, -15, 58, 12, -17, 37],\n\t\t\tchartType: 'line'\n\t\t}\n\t]\n};\n\nexport const trendsData = {\n\tlabels: [1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,\n\t\t1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,\n\t\t1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n\t\t1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,\n\t\t2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016] ,\n\tdatasets: [\n\t\t{\n\t\t\tvalues: [132.9, 150.0, 149.4, 148.0, 94.4, 97.6, 54.1, 49.2, 22.5, 18.4,\n\t\t\t\t39.3, 131.0, 220.1, 218.9, 198.9, 162.4, 91.0, 60.5, 20.6, 14.8,\n\t\t\t\t33.9, 123.0, 211.1, 191.8, 203.3, 133.0, 76.1, 44.9, 25.1, 11.6,\n\t\t\t\t28.9, 88.3, 136.3, 173.9, 170.4, 163.6, 99.3, 65.3, 45.8, 24.7,\n\t\t\t\t12.6, 4.2, 4.8, 24.9, 80.8, 84.5, 94.0, 113.3, 69.8, 39.8]\n\t\t}\n\t]\n};\n\nexport const moonData = {\n\tnames: [\"Ganymede\", \"Callisto\", \"Io\", \"Europa\"],\n\tmasses: [14819000, 10759000, 8931900, 4800000],\n\tdistances: [1070.412, 1882.709, 421.700, 671.034],\n\tdiameters: [5262.4, 4820.6, 3637.4, 3121.6],\n};\n\n// const jupiterMoons = {\n// \t'Ganymede': {\n// \t\tmass: '14819000 x 10^16 kg',\n// \t\t'semi-major-axis': '1070412 km',\n// \t\t'diameter': '5262.4 km'\n// \t},\n// \t'Callisto': {\n// \t\tmass: '10759000 x 10^16 kg',\n// \t\t'semi-major-axis': '1882709 km',\n// \t\t'diameter': '4820.6 km'\n// \t},\n// \t'Io': {\n// \t\tmass: '8931900 x 10^16 kg',\n// \t\t'semi-major-axis': '421700 km',\n// \t\t'diameter': '3637.4 km'\n// \t},\n// \t'Europa': {\n// \t\tmass: '4800000 x 10^16 kg',\n// \t\t'semi-major-axis': '671034 km',\n// \t\t'diameter': '3121.6 km'\n// \t},\n// };\n\n// ================================================================================\n\nlet today = new Date();\nlet start = clone(today);\naddDays(start, 4);\nlet end = clone(start);\nstart.setFullYear( start.getFullYear() - 2 );\nend.setFullYear( end.getFullYear() - 1 );\n\nexport let dataPoints = {};\n\nlet startTs = timestampSec(start);\nlet endTs = timestampSec(end);\n\nstartTs = timestampToMidnight(startTs);\nendTs = timestampToMidnight(endTs, true);\n\nwhile (startTs < endTs) {\n\tdataPoints[parseInt(startTs)] = Math.floor(getRandomBias(0, 5, 0.2, 1));\n\tstartTs += SEC_IN_DAY;\n}\n\nexport const heatmapData = {\n\tdataPoints: dataPoints,\n\tstart: start,\n\tend: end\n};\n","import { shuffle } from '../../../src/js/utils/helpers';\nimport { HEATMAP_COLORS_YELLOW, HEATMAP_COLORS_BLUE } from '../../../src/js/utils/constants';\nimport { fireballOver25, fireball_2_5, fireball_5_25, lineCompositeData,\n\tbarCompositeData, typeData, trendsData, moonData, heatmapData } from './data';\n\n// ================================================================================\n\nlet c1 = document.querySelector(\"#chart-composite-1\");\nlet c2 = document.querySelector(\"#chart-composite-2\");\n\nlet Chart = frappe.Chart; // eslint-disable-line no-undef\n\nlet lineCompositeChart = new Chart (c1, {\n\ttitle: \"Fireball/Bolide Events - Yearly (reported)\",\n\tdata: lineCompositeData,\n\ttype: 'line',\n\theight: 190,\n\tcolors: ['green'],\n\tisNavigable: 1,\n\tvaluesOverPoints: 1,\n\n\tlineOptions: {\n\t\tdotSize: 8\n\t},\n\t// yAxisMode: 'tick'\n\t// regionFill: 1\n});\n\nlet barCompositeChart = new Chart (c2, {\n\tdata: barCompositeData,\n\ttype: 'bar',\n\theight: 190,\n\tcolors: ['violet', 'light-blue', '#46a9f9'],\n\tvaluesOverPoints: 1,\n\taxisOptions: {\n\t\txAxisMode: 'tick'\n\t},\n\tbarOptions: {\n\t\tstacked: 1\n\t},\n\n});\n\nlineCompositeChart.parent.addEventListener('data-select', (e) => {\n\tlet i = e.index;\n\tbarCompositeChart.updateDatasets([\n\t\tfireballOver25[i], fireball_5_25[i], fireball_2_5[i]\n\t]);\n});\n\n// ================================================================================\n\nlet args = {\n\ttitle: \"My Awesome Chart\",\n\tdata: typeData,\n\ttype: 'axis-mixed',\n\theight: 250,\n\tcolors: ['purple', 'magenta', 'light-blue'],\n\n\tmaxLegendPoints: 6,\n\tmaxSlices: 10,\n\n\ttooltipOptions: {\n\t\tformatTooltipX: d => (d + '').toUpperCase(),\n\t\tformatTooltipY: d => d + ' pts',\n\t}\n};\n\nlet aggrChart = new Chart(\"#chart-aggr\", args);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.aggr-type-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet type = btn.getAttribute('data-type');\n\t\targs.type = type;\n\n\t\tlet newChart = aggrChart.getDifferentChart(type);\n\t\tif(newChart){\n\t\t\taggrChart = newChart;\n\t\t}\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-aggr').addEventListener('click', () => {\n\taggrChart.export();\n});\n\n// Update values chart\n// ================================================================================\nlet updateDataAllLabels = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\", \"Tue\",\n\t\"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\",\n\t\"Sat\", \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\"];\n\nlet getRandom = () => Math.floor(Math.random() * 75 - 15);\nlet updateDataAllValues = Array.from({length: 30}, getRandom);\n\n// We're gonna be shuffling this\nlet updateDataAllIndices = updateDataAllLabels.map((d,i) => i);\n\nlet getUpdateData = (source_array, length=10) => {\n\tlet indices = updateDataAllIndices.slice(0, length);\n\treturn indices.map((index) => source_array[index]);\n};\n\nlet updateData = {\n\tlabels: getUpdateData(updateDataAllLabels),\n\tdatasets: [{\n\t\t\"values\": getUpdateData(updateDataAllValues)\n\t}],\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Altitude\",\n\t\t\tvalue: 25,\n\t\t\ttype: 'dashed'\n\t\t}\n\t],\n\tyRegions: [\n\t\t{\n\t\t\tlabel: \"Range\",\n\t\t\tstart: 10,\n\t\t\tend: 45\n\t\t},\n\t],\n};\n\nlet updateChart = new Chart(\"#chart-update\", {\n\tdata: updateData,\n\ttype: 'line',\n\theight: 250,\n\tcolors: ['#ff6c03'],\n\tlineOptions: {\n\t\t// hideLine: 1,\n\t\tregionFill: 1\n\t},\n});\n\nlet chartUpdateButtons = document.querySelector('.chart-update-buttons');\n\nchartUpdateButtons.querySelector('[data-update=\"random\"]').addEventListener(\"click\", () => {\n\tshuffle(updateDataAllIndices);\n\tlet value = getRandom();\n\tlet start = getRandom();\n\tlet end = getRandom();\n\tlet data = {\n\t\tlabels: updateDataAllLabels.slice(0, 10),\n\t\tdatasets: [{values: getUpdateData(updateDataAllValues)}],\n\t\tyMarkers: [\n\t\t\t{\n\t\t\t\tlabel: \"Altitude\",\n\t\t\t\tvalue: value,\n\t\t\t\ttype: 'dashed'\n\t\t\t}\n\t\t],\n\t\tyRegions: [\n\t\t\t{\n\t\t\t\tlabel: \"Range\",\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t},\n\t\t],\n\t};\n\tupdateChart.update(data);\n});\n\nchartUpdateButtons.querySelector('[data-update=\"add\"]').addEventListener(\"click\", () => {\n\tlet index = updateChart.state.datasetLength; // last index to add\n\tif(index >= updateDataAllIndices.length) return;\n\tupdateChart.addDataPoint(\n\t\tupdateDataAllLabels[index], [updateDataAllValues[index]]\n\t);\n});\n\nchartUpdateButtons.querySelector('[data-update=\"remove\"]').addEventListener(\"click\", () => {\n\tupdateChart.removeDataPoint();\n});\n\ndocument.querySelector('.export-update').addEventListener('click', () => {\n\tupdateChart.export();\n});\n\n// Trends Chart\n// ================================================================================\n\nlet plotChartArgs = {\n\ttitle: \"Mean Total Sunspot Count - Yearly\",\n\tdata: trendsData,\n\ttype: 'line',\n\theight: 250,\n\tcolors: ['#238e38'],\n\tlineOptions: {\n\t\thideDots: 1,\n\t\theatline: 1,\n\t},\n\taxisOptions: {\n\t\txAxisMode: 'tick',\n\t\tyAxisMode: 'span',\n\t\txIsSeries: 1\n\t}\n};\n\nlet trendsChart = new Chart(\"#chart-trends\", plotChartArgs);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.chart-plot-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet type = btn.getAttribute('data-type');\n\t\tlet config = {};\n\t\tconfig[type] = 1;\n\n\t\tif(['regionFill', 'heatline'].includes(type)) {\n\t\t\tconfig.hideDots = 1;\n\t\t}\n\n\t\t// plotChartArgs.init = false;\n\t\tplotChartArgs.lineOptions = config;\n\n\t\tnew Chart(\"#chart-trends\", plotChartArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-trends').addEventListener('click', () => {\n\ttrendsChart.export();\n});\n\n\n// Event chart\n// ================================================================================\n\n\n\nlet eventsData = {\n\tlabels: [\"Ganymede\", \"Callisto\", \"Io\", \"Europa\"],\n\tdatasets: [\n\t\t{\n\t\t\t\"values\": moonData.distances,\n\t\t\t\"formatted\": moonData.distances.map(d => d*1000 + \" km\")\n\t\t}\n\t]\n};\n\nlet eventsChart = new Chart(\"#chart-events\", {\n\ttitle: \"Jupiter's Moons: Semi-major Axis (1000 km)\",\n\tdata: eventsData,\n\ttype: 'bar',\n\theight: 250,\n\tcolors: ['grey'],\n\tisNavigable: 1,\n});\n\nlet dataDiv = document.querySelector('.chart-events-data');\n\neventsChart.parent.addEventListener('data-select', (e) => {\n\tlet name = moonData.names[e.index];\n\tdataDiv.querySelector('.moon-name').innerHTML = name;\n\tdataDiv.querySelector('.semi-major-axis').innerHTML = moonData.distances[e.index] * 1000;\n\tdataDiv.querySelector('.mass').innerHTML = moonData.masses[e.index];\n\tdataDiv.querySelector('.diameter').innerHTML = moonData.diameters[e.index];\n\tdataDiv.querySelector('img').src = \"./assets/img/\" + name.toLowerCase() + \".jpg\";\n});\n\n// Heatmap\n// ================================================================================\n\nlet heatmapArgs = {\n\ttitle: \"Monthly Distribution\",\n\tdata: heatmapData,\n\ttype: 'heatmap',\n\theight: 115,\n\tdiscreteDomains: 1,\n\tcolors: HEATMAP_COLORS_BLUE,\n\tlegendScale: [0, 1, 2, 4, 5]\n};\nlet heatmapChart = new Chart(\"#chart-heatmap\", heatmapArgs);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.heatmap-mode-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet mode = btn.getAttribute('data-mode');\n\t\tlet discreteDomains = 0;\n\n\t\tif(mode === 'discrete') {\n\t\t\tdiscreteDomains = 1;\n\t\t}\n\n\t\tlet colors = [];\n\t\tlet colors_mode = document\n\t\t\t.querySelector('.heatmap-color-buttons .active')\n\t\t\t.getAttribute('data-color');\n\t\tif(colors_mode === 'halloween') {\n\t\t\tcolors = HEATMAP_COLORS_YELLOW;\n\t\t} else if (colors_mode === 'blue') {\n\t\t\tcolors = HEATMAP_COLORS_BLUE;\n\t\t}\n\n\t\theatmapArgs.discreteDomains = discreteDomains;\n\t\theatmapArgs.colors = colors;\n\t\tnew Chart(\"#chart-heatmap\", heatmapArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.heatmap-color-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet colors_mode = btn.getAttribute('data-color');\n\t\tlet colors = [];\n\n\t\tif(colors_mode === 'halloween') {\n\t\t\tcolors = HEATMAP_COLORS_YELLOW;\n\t\t} else if (colors_mode === 'blue') {\n\t\t\tcolors = HEATMAP_COLORS_BLUE;\n\t\t}\n\n\t\tlet discreteDomains = 1;\n\n\t\tlet view_mode = document\n\t\t\t.querySelector('.heatmap-mode-buttons .active')\n\t\t\t.getAttribute('data-mode');\n\t\tif(view_mode === 'continuous') {\n\t\t\tdiscreteDomains = 0;\n\t\t}\n\n\t\theatmapArgs.discreteDomains = discreteDomains;\n\t\theatmapArgs.colors = colors;\n\t\tnew Chart(\"#chart-heatmap\", heatmapArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-heatmap').addEventListener('click', () => {\n\theatmapChart.export();\n});\n"],"names":["HEATMAP_COLORS_BLUE","HEATMAP_COLORS_YELLOW","shuffle","array","i","length","j","Math","floor","random","getRandomBias","min","max","bias","influence","range","biasValue","rnd","mix","NO_OF_MILLIS","SEC_IN_DAY","MONTH_NAMES_SHORT","clone","date","Date","getTime","timestampSec","timestampToMidnight","timestamp","roundAhead","midnightTs","addDays","numberOfDays","setDate","getDate","reportCountList","lineCompositeData","fireball_5_25","fireball_2_5","fireballOver25","barCompositeData","typeData","trendsData","moonData","today","start","end","setFullYear","getFullYear","dataPoints","startTs","endTs","parseInt","heatmapData","c1","document","querySelector","c2","Chart","frappe","lineCompositeChart","barCompositeChart","parent","addEventListener","e","index","updateDatasets","args","d","toUpperCase","aggrChart","Array","prototype","slice","call","querySelectorAll","map","btn","target","type","getAttribute","newChart","getDifferentChart","parentNode","classList","remove","add","export","updateDataAllLabels","getRandom","updateDataAllValues","from","updateDataAllIndices","getUpdateData","source_array","indices","updateData","updateChart","chartUpdateButtons","value","data","values","update","state","datasetLength","addDataPoint","removeDataPoint","plotChartArgs","trendsChart","config","includes","hideDots","lineOptions","eventsData","distances","eventsChart","dataDiv","name","names","innerHTML","masses","diameters","src","toLowerCase","heatmapArgs","heatmapChart","mode","discreteDomains","colors","colors_mode","view_mode"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.min.js","sources":["../../../src/js/utils/constants.js","../../../src/js/utils/helpers.js","../../../src/js/utils/date-utils.js","data.js","index.js"],"sourcesContent":["export const ALL_CHART_TYPES = ['line', 'scatter', 'bar', 'percentage', 'heatmap', 'pie'];\n\nexport const COMPATIBLE_CHARTS = {\n\tbar: ['line', 'scatter', 'percentage', 'pie'],\n\tline: ['scatter', 'bar', 'percentage', 'pie'],\n\tpie: ['line', 'scatter', 'percentage', 'bar'],\n\tpercentage: ['bar', 'line', 'scatter', 'pie'],\n\theatmap: []\n};\n\nexport const DATA_COLOR_DIVISIONS = {\n\tbar: 'datasets',\n\tline: 'datasets',\n\tpie: 'labels',\n\tpercentage: 'labels',\n\theatmap: HEATMAP_DISTRIBUTION_SIZE\n};\n\nexport const BASE_CHART_TOP_MARGIN = 10;\nexport const BASE_CHART_LEFT_MARGIN = 20;\nexport const BASE_CHART_RIGHT_MARGIN = 20;\n\nexport const Y_AXIS_LEFT_MARGIN = 60;\nexport const Y_AXIS_RIGHT_MARGIN = 40;\n\nexport const INIT_CHART_UPDATE_TIMEOUT = 700;\nexport const CHART_POST_ANIMATE_TIMEOUT = 400;\n\nexport const DEFAULT_AXIS_CHART_TYPE = 'line';\nexport const AXIS_DATASET_CHART_TYPES = ['line', 'bar'];\n\nexport const AXIS_LEGEND_BAR_SIZE = 100;\n\nexport const BAR_CHART_SPACE_RATIO = 0.5;\nexport const MIN_BAR_PERCENT_HEIGHT = 0.01;\n\nexport const LINE_CHART_DOT_SIZE = 4;\nexport const DOT_OVERLAY_SIZE_INCR = 4;\n\nexport const PERCENTAGE_BAR_DEFAULT_HEIGHT = 20;\nexport const PERCENTAGE_BAR_DEFAULT_DEPTH = 2;\n\n// Fixed 5-color theme,\n// More colors are difficult to parse visually\nexport const HEATMAP_DISTRIBUTION_SIZE = 5;\n\nexport const HEATMAP_LEFT_MARGIN = 50;\nexport const HEATMAP_TOP_MARGIN = 25;\n\nexport const HEATMAP_SQUARE_SIZE = 10;\nexport const HEATMAP_GUTTER_SIZE = 2;\n\nexport const DEFAULT_CHAR_WIDTH = 7;\n\nexport const TOOLTIP_POINTER_TRIANGLE_HEIGHT = 5;\n\nconst DEFAULT_CHART_COLORS = ['light-blue', 'blue', 'violet', 'red', 'orange',\n\t'yellow', 'green', 'light-green', 'purple', 'magenta', 'light-grey', 'dark-grey'];\nconst HEATMAP_COLORS_GREEN = ['#ebedf0', '#c6e48b', '#7bc96f', '#239a3b', '#196127'];\nexport const HEATMAP_COLORS_BLUE = ['#ebedf0', '#c0ddf9', '#73b3f3', '#3886e1', '#17459e'];\nexport const HEATMAP_COLORS_YELLOW = ['#ebedf0', '#fdf436', '#ffc700', '#ff9100', '#06001c'];\n\nexport const DEFAULT_COLORS = {\n\tbar: DEFAULT_CHART_COLORS,\n\tline: DEFAULT_CHART_COLORS,\n\tpie: DEFAULT_CHART_COLORS,\n\tpercentage: DEFAULT_CHART_COLORS,\n\theatmap: HEATMAP_COLORS_GREEN\n};\n\n// Universal constants\nexport const ANGLE_RATIO = Math.PI / 180;\nexport const FULL_ANGLE = 360;\n","import { ANGLE_RATIO } from './constants';\n\n/**\n * Returns the value of a number upto 2 decimal places.\n * @param {Number} d Any number\n */\nexport function floatTwo(d) {\n\treturn parseFloat(d.toFixed(2));\n}\n\n/**\n * Returns whether or not two given arrays are equal.\n * @param {Array} arr1 First array\n * @param {Array} arr2 Second array\n */\nexport function arraysEqual(arr1, arr2) {\n\tif(arr1.length !== arr2.length) return false;\n\tlet areEqual = true;\n\tarr1.map((d, i) => {\n\t\tif(arr2[i] !== d) areEqual = false;\n\t});\n\treturn areEqual;\n}\n\n/**\n * Shuffles array in place. ES6 version\n * @param {Array} array An array containing the items.\n */\nexport function shuffle(array) {\n\t// Awesomeness: https://bost.ocks.org/mike/shuffle/\n\t// https://stackoverflow.com/a/2450976/6495043\n\t// https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array?noredirect=1&lq=1\n\n\tfor (let i = array.length - 1; i > 0; i--) {\n\t\tlet j = Math.floor(Math.random() * (i + 1));\n\t\t[array[i], array[j]] = [array[j], array[i]];\n\t}\n\n\treturn array;\n}\n\n/**\n * Fill an array with extra points\n * @param {Array} array Array\n * @param {Number} count number of filler elements\n * @param {Object} element element to fill with\n * @param {Boolean} start fill at start?\n */\nexport function fillArray(array, count, element, start=false) {\n\tif(!element) {\n\t\telement = start ? array[0] : array[array.length - 1];\n\t}\n\tlet fillerArray = new Array(Math.abs(count)).fill(element);\n\tarray = start ? fillerArray.concat(array) : array.concat(fillerArray);\n\treturn array;\n}\n\n/**\n * Returns pixel width of string.\n * @param {String} string\n * @param {Number} charWidth Width of single char in pixels\n */\nexport function getStringWidth(string, charWidth) {\n\treturn (string+\"\").length * charWidth;\n}\n\nexport function bindChange(obj, getFn, setFn) {\n\treturn new Proxy(obj, {\n\t\tset: function(target, prop, value) {\n\t\t\tsetFn();\n\t\t\treturn Reflect.set(target, prop, value);\n\t\t},\n\t\tget: function(target, prop) {\n\t\t\tgetFn();\n\t\t\treturn Reflect.get(target, prop);\n\t\t}\n\t});\n}\n\n// https://stackoverflow.com/a/29325222\nexport function getRandomBias(min, max, bias, influence) {\n\tconst range = max - min;\n\tconst biasValue = range * bias + min;\n\tvar rnd = Math.random() * range + min,\t\t// random in range\n\t\tmix = Math.random() * influence;\t\t// random mixer\n\treturn rnd * (1 - mix) + biasValue * mix;\t// mix full range and bias\n}\n\nexport function getPositionByAngle(angle, radius) {\n\treturn {\n\t\tx: Math.sin(angle * ANGLE_RATIO) * radius,\n\t\ty: Math.cos(angle * ANGLE_RATIO) * radius,\n\t};\n}\n","// Playing around with dates\n\nexport const NO_OF_YEAR_MONTHS = 12;\nexport const NO_OF_DAYS_IN_WEEK = 7;\nexport const DAYS_IN_YEAR = 375;\nexport const NO_OF_MILLIS = 1000;\nexport const SEC_IN_DAY = 86400;\n\nexport const MONTH_NAMES = [\"January\", \"February\", \"March\", \"April\", \"May\",\n\t\"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\nexport const MONTH_NAMES_SHORT = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\n\t\"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n\nexport const DAY_NAMES_SHORT = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\nexport const DAY_NAMES = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\",\n\t\"Thursday\", \"Friday\", \"Saturday\"];\n\n// https://stackoverflow.com/a/11252167/6495043\nfunction treatAsUtc(date) {\n\tlet result = new Date(date);\n\tresult.setMinutes(result.getMinutes() - result.getTimezoneOffset());\n\treturn result;\n}\n\nexport function getYyyyMmDd(date) {\n\tlet dd = date.getDate();\n\tlet mm = date.getMonth() + 1; // getMonth() is zero-based\n\treturn [\n\t\tdate.getFullYear(),\n\t\t(mm>9 ? '' : '0') + mm,\n\t\t(dd>9 ? '' : '0') + dd\n\t].join('-');\n}\n\nexport function clone(date) {\n\treturn new Date(date.getTime());\n}\n\nexport function timestampSec(date) {\n\treturn date.getTime()/NO_OF_MILLIS;\n}\n\nexport function timestampToMidnight(timestamp, roundAhead = false) {\n\tlet midnightTs = Math.floor(timestamp - (timestamp % SEC_IN_DAY));\n\tif(roundAhead) {\n\t\treturn midnightTs + SEC_IN_DAY;\n\t}\n\treturn midnightTs;\n}\n\n// export function getMonthsBetween(startDate, endDate) {}\n\nexport function getWeeksBetween(startDate, endDate) {\n\tlet weekStartDate = setDayToSunday(startDate);\n\treturn Math.ceil(getDaysBetween(weekStartDate, endDate) / NO_OF_DAYS_IN_WEEK);\n}\n\nexport function getDaysBetween(startDate, endDate) {\n\tlet millisecondsPerDay = SEC_IN_DAY * NO_OF_MILLIS;\n\treturn (treatAsUtc(endDate) - treatAsUtc(startDate)) / millisecondsPerDay;\n}\n\nexport function areInSameMonth(startDate, endDate) {\n\treturn startDate.getMonth() === endDate.getMonth()\n\t\t&& startDate.getFullYear() === endDate.getFullYear();\n}\n\nexport function getMonthName(i, short=false) {\n\tlet monthName = MONTH_NAMES[i];\n\treturn short ? monthName.slice(0, 3) : monthName;\n}\n\nexport function getLastDateInMonth (month, year) {\n\treturn new Date(year, month + 1, 0); // 0: last day in previous month\n}\n\n// mutates\nexport function setDayToSunday(date) {\n\tlet newDate = clone(date);\n\tconst day = newDate.getDay();\n\tif(day !== 0) {\n\t\taddDays(newDate, (-1) * day);\n\t}\n\treturn newDate;\n}\n\n// mutates\nexport function addDays(date, numberOfDays) {\n\tdate.setDate(date.getDate() + numberOfDays);\n}\n","import { SEC_IN_DAY, MONTH_NAMES_SHORT, clone, timestampToMidnight, timestampSec, addDays } from '../../../src/js/utils/date-utils';\nimport { getRandomBias } from '../../../src/js/utils/helpers';\n\n// Composite Chart\n// ================================================================================\nconst reportCountList = [152, 222, 199, 287, 534, 709,\n\t1179, 1256, 1632, 1856, 1850];\n\nexport const lineCompositeData = {\n\tlabels: [\"2007\", \"2008\", \"2009\", \"2010\", \"2011\", \"2012\",\n\t\t\"2013\", \"2014\", \"2015\", \"2016\", \"2017\"],\n\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Average 100 reports/month\",\n\t\t\tvalue: 1200,\n\t\t}\n\t],\n\n\tdatasets: [{\n\t\t\"name\": \"Events\",\n\t\t\"values\": reportCountList\n\t}]\n};\n\n\nexport const fireball_5_25 = [\n\t[4, 0, 3, 1, 1, 2, 1, 1, 1, 0, 1, 1],\n\t[2, 3, 3, 2, 1, 3, 0, 1, 2, 7, 10, 4],\n\t[5, 6, 2, 4, 0, 1, 4, 3, 0, 2, 0, 1],\n\t[0, 2, 6, 2, 1, 1, 2, 3, 6, 3, 7, 8],\n\t[6, 8, 7, 7, 4, 5, 6, 5, 22, 12, 10, 11],\n\t[7, 10, 11, 7, 3, 2, 7, 7, 11, 15, 22, 20],\n\t[13, 16, 21, 18, 19, 17, 12, 17, 31, 28, 25, 29],\n\t[24, 14, 21, 14, 11, 15, 19, 21, 41, 22, 32, 18],\n\t[31, 20, 30, 22, 14, 17, 21, 35, 27, 50, 117, 24],\n\t[32, 24, 21, 27, 11, 27, 43, 37, 44, 40, 48, 32],\n\t[31, 38, 36, 26, 23, 23, 25, 29, 26, 47, 61, 50],\n];\nexport const fireball_2_5 = [\n\t[22, 6, 6, 9, 7, 8, 6, 14, 19, 10, 8, 20],\n\t[11, 13, 12, 8, 9, 11, 9, 13, 10, 22, 40, 24],\n\t[20, 13, 13, 19, 13, 10, 14, 13, 20, 18, 5, 9],\n\t[7, 13, 16, 19, 12, 11, 21, 27, 27, 24, 33, 33],\n\t[38, 25, 28, 22, 31, 21, 35, 42, 37, 32, 46, 53],\n\t[50, 33, 36, 34, 35, 28, 27, 52, 58, 59, 75, 69],\n\t[54, 67, 67, 45, 66, 51, 38, 64, 90, 113, 116, 87],\n\t[84, 52, 56, 51, 55, 46, 50, 87, 114, 83, 152, 93],\n\t[73, 58, 59, 63, 56, 51, 83, 140, 103, 115, 265, 89],\n\t[106, 95, 94, 71, 77, 75, 99, 136, 129, 154, 168, 156],\n\t[81, 102, 95, 72, 58, 91, 89, 122, 124, 135, 183, 171],\n];\nexport const fireballOver25 = [\n\t// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0],\n\t[1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0],\n\t[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2],\n\t[3, 2, 1, 3, 2, 0, 2, 2, 2, 3, 0, 1],\n\t[2, 3, 5, 2, 1, 3, 0, 2, 3, 5, 1, 4],\n\t[7, 4, 6, 1, 9, 2, 2, 2, 20, 9, 4, 9],\n\t[5, 6, 1, 2, 5, 4, 5, 5, 16, 9, 14, 9],\n\t[5, 4, 7, 5, 1, 5, 3, 3, 5, 7, 22, 2],\n\t[5, 13, 11, 6, 1, 7, 9, 8, 14, 17, 16, 3],\n\t[8, 9, 8, 6, 4, 8, 5, 6, 14, 11, 21, 12]\n];\n\nexport const barCompositeData = {\n\tlabels: MONTH_NAMES_SHORT,\n\tdatasets: [\n\t\t{\n\t\t\tname: \"Over 25 reports\",\n\t\t\tvalues: fireballOver25[9],\n\t\t},\n\t\t{\n\t\t\tname: \"5 to 25 reports\",\n\t\t\tvalues: fireball_5_25[9],\n\t\t},\n\t\t{\n\t\t\tname: \"2 to 5 reports\",\n\t\t\tvalues: fireball_2_5[9]\n\t\t}\n\t]\n};\n\n// Demo Chart multitype Chart\n// ================================================================================\nexport const typeData = {\n\tlabels: [\"12am-3am\", \"3am-6am\", \"6am-9am\", \"9am-12pm\",\n\t\t\"12pm-3pm\", \"3pm-6pm\", \"6pm-9pm\", \"9pm-12am\"],\n\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Marker\",\n\t\t\tvalue: 43,\n\t\t\t// type: 'dashed'\n\t\t}\n\t],\n\n\tyRegions: [\n\t\t{\n\t\t\tlabel: \"Region\",\n\t\t\tstart: -10,\n\t\t\tend: 50\n\t\t},\n\t],\n\n\tdatasets: [\n\t\t{\n\t\t\tname: \"Some Data\",\n\t\t\tvalues: [18, 40, 30, 35, 8, 52, 17, -4],\n\t\t\taxisPosition: 'right',\n\t\t\tchartType: 'bar'\n\t\t},\n\t\t{\n\t\t\tname: \"Another Set\",\n\t\t\tvalues: [30, 50, -10, 15, 18, 32, 27, 14],\n\t\t\taxisPosition: 'right',\n\t\t\tchartType: 'bar'\n\t\t},\n\t\t{\n\t\t\tname: \"Yet Another\",\n\t\t\tvalues: [15, 20, -3, -15, 58, 12, -17, 37],\n\t\t\tchartType: 'line'\n\t\t}\n\t]\n};\n\nexport const trendsData = {\n\tlabels: [1967, 1968, 1969, 1970, 1971, 1972, 1973, 1974, 1975, 1976,\n\t\t1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986,\n\t\t1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,\n\t\t1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,\n\t\t2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016] ,\n\tdatasets: [\n\t\t{\n\t\t\tvalues: [132.9, 150.0, 149.4, 148.0, 94.4, 97.6, 54.1, 49.2, 22.5, 18.4,\n\t\t\t\t39.3, 131.0, 220.1, 218.9, 198.9, 162.4, 91.0, 60.5, 20.6, 14.8,\n\t\t\t\t33.9, 123.0, 211.1, 191.8, 203.3, 133.0, 76.1, 44.9, 25.1, 11.6,\n\t\t\t\t28.9, 88.3, 136.3, 173.9, 170.4, 163.6, 99.3, 65.3, 45.8, 24.7,\n\t\t\t\t12.6, 4.2, 4.8, 24.9, 80.8, 84.5, 94.0, 113.3, 69.8, 39.8]\n\t\t}\n\t]\n};\n\nexport const moonData = {\n\tnames: [\"Ganymede\", \"Callisto\", \"Io\", \"Europa\"],\n\tmasses: [14819000, 10759000, 8931900, 4800000],\n\tdistances: [1070.412, 1882.709, 421.700, 671.034],\n\tdiameters: [5262.4, 4820.6, 3637.4, 3121.6],\n};\n\n// const jupiterMoons = {\n// \t'Ganymede': {\n// \t\tmass: '14819000 x 10^16 kg',\n// \t\t'semi-major-axis': '1070412 km',\n// \t\t'diameter': '5262.4 km'\n// \t},\n// \t'Callisto': {\n// \t\tmass: '10759000 x 10^16 kg',\n// \t\t'semi-major-axis': '1882709 km',\n// \t\t'diameter': '4820.6 km'\n// \t},\n// \t'Io': {\n// \t\tmass: '8931900 x 10^16 kg',\n// \t\t'semi-major-axis': '421700 km',\n// \t\t'diameter': '3637.4 km'\n// \t},\n// \t'Europa': {\n// \t\tmass: '4800000 x 10^16 kg',\n// \t\t'semi-major-axis': '671034 km',\n// \t\t'diameter': '3121.6 km'\n// \t},\n// };\n\n// ================================================================================\n\nlet today = new Date();\nlet start = clone(today);\naddDays(start, 4);\nlet end = clone(start);\nstart.setFullYear( start.getFullYear() - 2 );\nend.setFullYear( end.getFullYear() - 1 );\n\nexport let dataPoints = {};\n\nlet startTs = timestampSec(start);\nlet endTs = timestampSec(end);\n\nstartTs = timestampToMidnight(startTs);\nendTs = timestampToMidnight(endTs, true);\n\nwhile (startTs < endTs) {\n\tdataPoints[parseInt(startTs)] = Math.floor(getRandomBias(0, 5, 0.2, 1));\n\tstartTs += SEC_IN_DAY;\n}\n\nexport const heatmapData = {\n\tdataPoints: dataPoints,\n\tstart: start,\n\tend: end\n};\n","import { shuffle } from '../../../src/js/utils/helpers';\nimport { HEATMAP_COLORS_YELLOW, HEATMAP_COLORS_BLUE } from '../../../src/js/utils/constants';\nimport { fireballOver25, fireball_2_5, fireball_5_25, lineCompositeData,\n\tbarCompositeData, typeData, trendsData, moonData, heatmapData } from './data';\n\n// ================================================================================\n\nlet c1 = document.querySelector(\"#chart-composite-1\");\nlet c2 = document.querySelector(\"#chart-composite-2\");\n\nlet Chart = frappe.Chart; // eslint-disable-line no-undef\n\nlet lineCompositeChart = new Chart (c1, {\n\ttitle: \"Fireball/Bolide Events - Yearly (reported)\",\n\tdata: lineCompositeData,\n\ttype: 'line',\n\theight: 190,\n\tcolors: ['green'],\n\tisNavigable: 1,\n\tvaluesOverPoints: 1,\n\n\tlineOptions: {\n\t\tdotSize: 8\n\t},\n\t// yAxisMode: 'tick'\n\t// regionFill: 1\n});\n\nlet barCompositeChart = new Chart (c2, {\n\tdata: barCompositeData,\n\ttype: 'bar',\n\theight: 190,\n\tcolors: ['violet', 'light-blue', '#46a9f9'],\n\tvaluesOverPoints: 1,\n\taxisOptions: {\n\t\txAxisMode: 'tick'\n\t},\n\tbarOptions: {\n\t\tstacked: 1\n\t},\n\n});\n\nlineCompositeChart.parent.addEventListener('data-select', (e) => {\n\tlet i = e.index;\n\tbarCompositeChart.updateDatasets([\n\t\tfireballOver25[i], fireball_5_25[i], fireball_2_5[i]\n\t]);\n});\n\n// ================================================================================\n\nlet customColors = ['purple', 'magenta', 'light-blue'];\nlet typeChartArgs = {\n\ttitle: \"My Awesome Chart\",\n\tdata: typeData,\n\ttype: 'axis-mixed',\n\theight: 250,\n\tcolors: customColors,\n\n\tmaxLegendPoints: 6,\n\tmaxSlices: 10,\n\n\ttooltipOptions: {\n\t\tformatTooltipX: d => (d + '').toUpperCase(),\n\t\tformatTooltipY: d => d + ' pts',\n\t}\n};\n\nlet aggrChart = new Chart(\"#chart-aggr\", typeChartArgs);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.aggr-type-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet type = btn.getAttribute('data-type');\n\t\ttypeChartArgs.type = type;\n\t\tif(type !== 'axis-mixed') {\n\t\t\ttypeChartArgs.colors = undefined;\n\t\t} else {\n\t\t\ttypeChartArgs.colors = customColors;\n\t\t}\n\n\t\tlet newChart = new Chart(\"#chart-aggr\", typeChartArgs);\n\t\tif(newChart){\n\t\t\taggrChart = newChart;\n\t\t}\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-aggr').addEventListener('click', () => {\n\taggrChart.export();\n});\n\n// Update values chart\n// ================================================================================\nlet updateDataAllLabels = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\", \"Tue\",\n\t\"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\",\n\t\"Sat\", \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Mon\"];\n\nlet getRandom = () => Math.floor(Math.random() * 75 - 15);\nlet updateDataAllValues = Array.from({length: 30}, getRandom);\n\n// We're gonna be shuffling this\nlet updateDataAllIndices = updateDataAllLabels.map((d,i) => i);\n\nlet getUpdateData = (source_array, length=10) => {\n\tlet indices = updateDataAllIndices.slice(0, length);\n\treturn indices.map((index) => source_array[index]);\n};\n\nlet updateData = {\n\tlabels: getUpdateData(updateDataAllLabels),\n\tdatasets: [{\n\t\t\"values\": getUpdateData(updateDataAllValues)\n\t}],\n\tyMarkers: [\n\t\t{\n\t\t\tlabel: \"Altitude\",\n\t\t\tvalue: 25,\n\t\t\ttype: 'dashed'\n\t\t}\n\t],\n\tyRegions: [\n\t\t{\n\t\t\tlabel: \"Range\",\n\t\t\tstart: 10,\n\t\t\tend: 45\n\t\t},\n\t],\n};\n\nlet updateChart = new Chart(\"#chart-update\", {\n\tdata: updateData,\n\ttype: 'line',\n\theight: 250,\n\tcolors: ['#ff6c03'],\n\tlineOptions: {\n\t\t// hideLine: 1,\n\t\tregionFill: 1\n\t},\n});\n\nlet chartUpdateButtons = document.querySelector('.chart-update-buttons');\n\nchartUpdateButtons.querySelector('[data-update=\"random\"]').addEventListener(\"click\", () => {\n\tshuffle(updateDataAllIndices);\n\tlet value = getRandom();\n\tlet start = getRandom();\n\tlet end = getRandom();\n\tlet data = {\n\t\tlabels: updateDataAllLabels.slice(0, 10),\n\t\tdatasets: [{values: getUpdateData(updateDataAllValues)}],\n\t\tyMarkers: [\n\t\t\t{\n\t\t\t\tlabel: \"Altitude\",\n\t\t\t\tvalue: value,\n\t\t\t\ttype: 'dashed'\n\t\t\t}\n\t\t],\n\t\tyRegions: [\n\t\t\t{\n\t\t\t\tlabel: \"Range\",\n\t\t\t\tstart: start,\n\t\t\t\tend: end\n\t\t\t},\n\t\t],\n\t};\n\tupdateChart.update(data);\n});\n\nchartUpdateButtons.querySelector('[data-update=\"add\"]').addEventListener(\"click\", () => {\n\tlet index = updateChart.state.datasetLength; // last index to add\n\tif(index >= updateDataAllIndices.length) return;\n\tupdateChart.addDataPoint(\n\t\tupdateDataAllLabels[index], [updateDataAllValues[index]]\n\t);\n});\n\nchartUpdateButtons.querySelector('[data-update=\"remove\"]').addEventListener(\"click\", () => {\n\tupdateChart.removeDataPoint();\n});\n\ndocument.querySelector('.export-update').addEventListener('click', () => {\n\tupdateChart.export();\n});\n\n// Trends Chart\n// ================================================================================\n\nlet plotChartArgs = {\n\ttitle: \"Mean Total Sunspot Count - Yearly\",\n\tdata: trendsData,\n\ttype: 'line',\n\theight: 250,\n\tcolors: ['#238e38'],\n\tlineOptions: {\n\t\thideDots: 1,\n\t\theatline: 1,\n\t},\n\taxisOptions: {\n\t\txAxisMode: 'tick',\n\t\tyAxisMode: 'span',\n\t\txIsSeries: 1\n\t}\n};\n\nlet trendsChart = new Chart(\"#chart-trends\", plotChartArgs);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.chart-plot-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet type = btn.getAttribute('data-type');\n\t\tlet config = {};\n\t\tconfig[type] = 1;\n\n\t\tif(['regionFill', 'heatline'].includes(type)) {\n\t\t\tconfig.hideDots = 1;\n\t\t}\n\n\t\t// plotChartArgs.init = false;\n\t\tplotChartArgs.lineOptions = config;\n\n\t\tnew Chart(\"#chart-trends\", plotChartArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-trends').addEventListener('click', () => {\n\ttrendsChart.export();\n});\n\n\n// Event chart\n// ================================================================================\n\n\n\nlet eventsData = {\n\tlabels: [\"Ganymede\", \"Callisto\", \"Io\", \"Europa\"],\n\tdatasets: [\n\t\t{\n\t\t\t\"values\": moonData.distances,\n\t\t\t\"formatted\": moonData.distances.map(d => d*1000 + \" km\")\n\t\t}\n\t]\n};\n\nlet eventsChart = new Chart(\"#chart-events\", {\n\ttitle: \"Jupiter's Moons: Semi-major Axis (1000 km)\",\n\tdata: eventsData,\n\ttype: 'bar',\n\theight: 250,\n\tcolors: ['grey'],\n\tisNavigable: 1,\n});\n\nlet dataDiv = document.querySelector('.chart-events-data');\n\neventsChart.parent.addEventListener('data-select', (e) => {\n\tlet name = moonData.names[e.index];\n\tdataDiv.querySelector('.moon-name').innerHTML = name;\n\tdataDiv.querySelector('.semi-major-axis').innerHTML = moonData.distances[e.index] * 1000;\n\tdataDiv.querySelector('.mass').innerHTML = moonData.masses[e.index];\n\tdataDiv.querySelector('.diameter').innerHTML = moonData.diameters[e.index];\n\tdataDiv.querySelector('img').src = \"./assets/img/\" + name.toLowerCase() + \".jpg\";\n});\n\n// Heatmap\n// ================================================================================\n\nlet heatmapArgs = {\n\ttitle: \"Monthly Distribution\",\n\tdata: heatmapData,\n\ttype: 'heatmap',\n\theight: 115,\n\tdiscreteDomains: 1,\n\tcolors: HEATMAP_COLORS_BLUE,\n\tlegendScale: [0, 1, 2, 4, 5]\n};\nlet heatmapChart = new Chart(\"#chart-heatmap\", heatmapArgs);\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.heatmap-mode-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet mode = btn.getAttribute('data-mode');\n\t\tlet discreteDomains = 0;\n\n\t\tif(mode === 'discrete') {\n\t\t\tdiscreteDomains = 1;\n\t\t}\n\n\t\tlet colors = [];\n\t\tlet colors_mode = document\n\t\t\t.querySelector('.heatmap-color-buttons .active')\n\t\t\t.getAttribute('data-color');\n\t\tif(colors_mode === 'halloween') {\n\t\t\tcolors = HEATMAP_COLORS_YELLOW;\n\t\t} else if (colors_mode === 'blue') {\n\t\t\tcolors = HEATMAP_COLORS_BLUE;\n\t\t}\n\n\t\theatmapArgs.discreteDomains = discreteDomains;\n\t\theatmapArgs.colors = colors;\n\t\tnew Chart(\"#chart-heatmap\", heatmapArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\nArray.prototype.slice.call(\n\tdocument.querySelectorAll('.heatmap-color-buttons button')\n).map(el => {\n\tel.addEventListener('click', (e) => {\n\t\tlet btn = e.target;\n\t\tlet colors_mode = btn.getAttribute('data-color');\n\t\tlet colors = [];\n\n\t\tif(colors_mode === 'halloween') {\n\t\t\tcolors = HEATMAP_COLORS_YELLOW;\n\t\t} else if (colors_mode === 'blue') {\n\t\t\tcolors = HEATMAP_COLORS_BLUE;\n\t\t}\n\n\t\tlet discreteDomains = 1;\n\n\t\tlet view_mode = document\n\t\t\t.querySelector('.heatmap-mode-buttons .active')\n\t\t\t.getAttribute('data-mode');\n\t\tif(view_mode === 'continuous') {\n\t\t\tdiscreteDomains = 0;\n\t\t}\n\n\t\theatmapArgs.discreteDomains = discreteDomains;\n\t\theatmapArgs.colors = colors;\n\t\tnew Chart(\"#chart-heatmap\", heatmapArgs);\n\n\t\tArray.prototype.slice.call(\n\t\t\tbtn.parentNode.querySelectorAll('button')).map(el => {\n\t\t\tel.classList.remove('active');\n\t\t});\n\t\tbtn.classList.add('active');\n\t});\n});\n\ndocument.querySelector('.export-heatmap').addEventListener('click', () => {\n\theatmapChart.export();\n});\n"],"names":["HEATMAP_COLORS_BLUE","HEATMAP_COLORS_YELLOW","shuffle","array","i","length","j","Math","floor","random","getRandomBias","min","max","bias","influence","range","biasValue","rnd","mix","NO_OF_MILLIS","SEC_IN_DAY","MONTH_NAMES_SHORT","clone","date","Date","getTime","timestampSec","timestampToMidnight","timestamp","roundAhead","midnightTs","addDays","numberOfDays","setDate","getDate","reportCountList","lineCompositeData","fireball_5_25","fireball_2_5","fireballOver25","barCompositeData","typeData","trendsData","moonData","today","start","end","setFullYear","getFullYear","dataPoints","startTs","endTs","parseInt","heatmapData","c1","document","querySelector","c2","Chart","frappe","lineCompositeChart","barCompositeChart","parent","addEventListener","e","index","updateDatasets","customColors","typeChartArgs","d","toUpperCase","aggrChart","Array","prototype","slice","call","querySelectorAll","map","btn","target","type","getAttribute","colors","undefined","newChart","parentNode","classList","remove","add","export","updateDataAllLabels","getRandom","updateDataAllValues","from","updateDataAllIndices","getUpdateData","source_array","indices","updateData","updateChart","chartUpdateButtons","value","data","values","update","state","datasetLength","addDataPoint","removeDataPoint","plotChartArgs","trendsChart","config","includes","hideDots","lineOptions","eventsData","distances","eventsChart","dataDiv","name","names","innerHTML","masses","diameters","src","toLowerCase","heatmapArgs","heatmapChart","mode","discreteDomains","colors_mode","view_mode"],"mappings":"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"} \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index fa6be3f..eb5e87c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -289,6 +289,9 @@ chart.removeDataPoint(index) chart.updateDataset(datasetValues, index) + // Exporting + chart.export(); +