1 line
No EOL
17 KiB
Text
1 line
No EOL
17 KiB
Text
{"version":3,"sources":["angular-chart.min.js"],"names":["factory","define","amd","exports","module","require","angular","Chart","ChartJsProvider","options","ChartJs","getOptions","type","typeOptions","extend","this","setOptions","customOptions","$get","ChartJsFactory","canUpdateChart","newVal","oldVal","length","Array","isArray","reduce","sum","carry","val","createChart","scope","elem","data","getColour","getRandomColour","colours","getColours","cvs","ctx","getContext","getDataSets","labels","series","getData","chart","$emit","forEach","action","getEventHandler","legend","setLegend","evt","atEvent","getPointsAtEvent","getBarsAtEvent","getSegmentsAtEvent","activePoints","call","$apply","copy","defaults","global","push","map","convertColour","colour","hexToRgb","substr","getRandomInt","fillColor","rgba","strokeColor","pointColor","pointStrokeColor","pointHighlightFill","pointHighlightStroke","min","max","Math","floor","random","alpha","concat","join","hex","bigint","parseInt","r","g","b","datasets","item","i","label","value","color","highlight","$parent","parent","$oldLegend","find","generateLegend","replaceWith","append","updateChart","values","dataset","points","bars","dataItem","j","segments","segment","update","isEmpty","Object","keys","restrict","chartType","click","hover","link","resetChart","equals","destroy","container","document","createElement","className","appendChild","window","G_vmlCanvasManager","initElement","$watch","$on","responsive","multiTooltipTemplate","provider","directive"],"mappings":"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","file":"angular-chart.min.js","sourcesContent":["(function (factory) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'chart.js'], factory);\n } else if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory(require('angular'), require('chart.js'));\n } else {\n // Browser globals\n factory(angular, Chart);\n }\n}(function (angular, Chart) {\n 'use strict';\n\n Chart.defaults.global.responsive = true;\n Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n\n Chart.defaults.global.colours = [\n '#97BBCD', // blue\n '#DCDCDC', // light grey\n '#F7464A', // red\n '#46BFBD', // green\n '#FDB45C', // yellow\n '#949FB1', // grey\n '#4D5360' // dark grey\n ];\n\n angular.module('chart.js', [])\n .provider('ChartJs', ChartJsProvider)\n .factory('ChartJsFactory', ['ChartJs', ChartJsFactory])\n .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])\n .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Line'); }])\n .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Bar'); }])\n .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Radar'); }])\n .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Doughnut'); }])\n .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('Pie'); }])\n .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('PolarArea'); }]);\n\n /**\n * Wrapper for chart.js\n * Allows configuring chart js using the provider\n *\n * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {\n * ChartJsProvider.setOptions({ responsive: true });\n * ChartJsProvider.setOptions('Line', { responsive: false });\n * })))\n */\n function ChartJsProvider () {\n var options = {};\n var ChartJs = {\n Chart: Chart,\n getOptions: function (type) {\n var typeOptions = type && options[type] || {};\n return angular.extend({}, options, typeOptions);\n }\n };\n\n /**\n * Allow to set global options during configuration\n */\n this.setOptions = function (type, customOptions) {\n // If no type was specified set option for the global object\n if (! customOptions) {\n customOptions = type;\n options = angular.extend(options, customOptions);\n return;\n }\n // Set options for the specific chart\n options[type] = angular.extend(options[type] || {}, customOptions);\n };\n\n this.$get = function () {\n return ChartJs;\n };\n }\n\n function ChartJsFactory (ChartJs) {\n return function chart (type) {\n return {\n restrict: 'CA',\n scope: {\n data: '=',\n labels: '=',\n options: '=',\n series: '=',\n colours: '=?',\n getColour: '=?',\n chartType: '=',\n legend: '@',\n click: '=',\n hover: '='\n },\n link: function (scope, elem/*, attrs */) {\n var chart, container = document.createElement('div');\n container.className = 'chart-container';\n elem.replaceWith(container);\n container.appendChild(elem[0]);\n\n if (typeof window.G_vmlCanvasManager === 'object' && window.G_vmlCanvasManager !== null) {\n if (typeof window.G_vmlCanvasManager.initElement === 'function') {\n window.G_vmlCanvasManager.initElement(elem[0]);\n }\n }\n\n // Order of setting \"watch\" matter\n\n scope.$watch('data', function (newVal, oldVal) {\n if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) return;\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n if (chart) {\n if (canUpdateChart(newVal, oldVal)) return updateChart(chart, newVal, scope);\n chart.destroy();\n }\n\n chart = createChart(chartType, scope, elem);\n }, true);\n\n scope.$watch('series', resetChart, true);\n scope.$watch('labels', resetChart, true);\n scope.$watch('options', resetChart, true);\n scope.$watch('colours', resetChart, true);\n\n scope.$watch('chartType', function (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n if (chart) chart.destroy();\n chart = createChart(newVal, scope, elem);\n });\n\n scope.$on('$destroy', function () {\n if (chart) chart.destroy();\n });\n\n function resetChart (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n // chart.update() doesn't work for series and labels\n // so we have to re-create the chart entirely\n if (chart) chart.destroy();\n\n chart = createChart(chartType, scope, elem);\n }\n }\n };\n };\n\n function canUpdateChart (newVal, oldVal) {\n if (newVal && oldVal && newVal.length && oldVal.length) {\n return Array.isArray(newVal[0]) ?\n newVal.length === oldVal.length && newVal[0].length === oldVal[0].length :\n oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;\n }\n return false;\n }\n\n function sum (carry, val) {\n return carry + val;\n }\n\n function createChart (type, scope, elem) {\n if (! scope.data || ! scope.data.length) return;\n scope.getColour = typeof scope.getColour === 'function' ? scope.getColour : getRandomColour;\n scope.colours = getColours(type, scope);\n var cvs = elem[0], ctx = cvs.getContext('2d');\n var data = Array.isArray(scope.data[0]) ?\n getDataSets(scope.labels, scope.data, scope.series || [], scope.colours) :\n getData(scope.labels, scope.data, scope.colours);\n var options = angular.extend({}, ChartJs.getOptions(type), scope.options);\n var chart = new ChartJs.Chart(ctx)[type](data, options);\n scope.$emit('create', chart);\n\n ['hover', 'click'].forEach(function (action) {\n if (scope[action]) cvs[action === 'click' ? 'onclick' : 'onmousemove'] = getEventHandler(scope, chart, action);\n });\n if (scope.legend && scope.legend !== 'false') setLegend(elem, chart);\n return chart;\n }\n\n function getEventHandler (scope, chart, action) {\n return function (evt) {\n var atEvent = chart.getPointsAtEvent || chart.getBarsAtEvent || chart.getSegmentsAtEvent;\n if (atEvent) {\n var activePoints = atEvent.call(chart, evt);\n scope[action](activePoints, evt);\n scope.$apply();\n }\n };\n }\n\n function getColours (type, scope) {\n var colours = angular.copy(scope.colours ||\n ChartJs.getOptions(type).colours ||\n Chart.defaults.global.colours\n );\n while (colours.length < scope.data.length) {\n colours.push(scope.getColour());\n }\n return colours.map(convertColour);\n }\n\n function convertColour (colour) {\n if (typeof colour === 'object' && colour !== null) return colour;\n if (typeof colour === 'string' && colour[0] === '#') return getColour(hexToRgb(colour.substr(1)));\n return getRandomColour();\n }\n\n function getRandomColour () {\n var colour = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n return getColour(colour);\n }\n\n function getColour (colour) {\n return {\n fillColor: rgba(colour, 0.2),\n strokeColor: rgba(colour, 1),\n pointColor: rgba(colour, 1),\n pointStrokeColor: '#fff',\n pointHighlightFill: '#fff',\n pointHighlightStroke: rgba(colour, 0.8)\n };\n }\n\n function getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n function rgba (colour, alpha) {\n return 'rgba(' + colour.concat(alpha).join(',') + ')';\n }\n\n // Credit: http://stackoverflow.com/a/11508164/1190235\n function hexToRgb (hex) {\n var bigint = parseInt(hex, 16),\n r = (bigint >> 16) & 255,\n g = (bigint >> 8) & 255,\n b = bigint & 255;\n\n return [r, g, b];\n }\n\n function getDataSets (labels, data, series, colours) {\n return {\n labels: labels,\n datasets: data.map(function (item, i) {\n return angular.extend({}, colours[i], {\n label: series[i],\n data: item\n });\n })\n };\n }\n\n function getData (labels, data, colours) {\n return labels.map(function (label, i) {\n return angular.extend({}, colours[i], {\n label: label,\n value: data[i],\n color: colours[i].strokeColor,\n highlight: colours[i].pointHighlightStroke\n });\n });\n }\n\n function setLegend (elem, chart) {\n var $parent = elem.parent(),\n $oldLegend = $parent.find('chart-legend'),\n legend = '<chart-legend>' + chart.generateLegend() + '</chart-legend>';\n if ($oldLegend.length) $oldLegend.replaceWith(legend);\n else $parent.append(legend);\n }\n\n function updateChart (chart, values, scope) {\n if (Array.isArray(scope.data[0])) {\n chart.datasets.forEach(function (dataset, i) {\n (dataset.points || dataset.bars).forEach(function (dataItem, j) {\n dataItem.value = values[i][j];\n });\n });\n } else {\n chart.segments.forEach(function (segment, i) {\n segment.value = values[i];\n });\n }\n chart.update();\n scope.$emit('update', chart);\n }\n\n function isEmpty (value) {\n return ! value ||\n (Array.isArray(value) && ! value.length) ||\n (typeof value === 'object' && ! Object.keys(value).length);\n }\n\n }\n}));\n"],"sourceRoot":"/source/"} |