From 9405240aa55c67578673530b44c8f206d0fcb7ed Mon Sep 17 00:00:00 2001 From: Jerome Touffe-Blin Date: Sat, 24 Sep 2016 13:05:53 +1000 Subject: [PATCH] 1.0.3 --- bower.json | 2 +- dist/angular-chart.js | 12 +++++++----- dist/angular-chart.js.tar.gz | Bin 9229 -> 9279 bytes dist/angular-chart.min.js | 4 ++-- dist/angular-chart.min.js.map | 2 +- examples/charts.html | 2 +- package.json | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bower.json b/bower.json index a5378626..50c2df9b 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "angular-chart.js", - "version": "1.0.2", + "version": "1.0.3", "main": [ "./dist/angular-chart.js" ], diff --git a/dist/angular-chart.js b/dist/angular-chart.js index 2368304d..da920953 100644 --- a/dist/angular-chart.js +++ b/dist/angular-chart.js @@ -1,7 +1,7 @@ /*! * angular-chart.js - An angular.js wrapper for Chart.js * http://jtblin.github.io/angular-chart.js/ - * Version: 1.0.2 + * Version: 1.0.3 * * Copyright 2016 Jerome Touffe-Blin * Released under the BSD-2-Clause license @@ -87,11 +87,13 @@ // If no type was specified set option for the global object if (! customOptions) { customOptions = type; - options = angular.extend(options, customOptions); - return; + options = angular.merge(options, customOptions); + } else { + // Set options for the specific chart + options[type] = angular.merge(options[type] || {}, customOptions); } - // Set options for the specific chart - options[type] = angular.extend(options[type] || {}, customOptions); + + angular.merge(ChartJs.Chart.defaults, options); }; this.$get = function () { diff --git a/dist/angular-chart.js.tar.gz b/dist/angular-chart.js.tar.gz index 0e003c99c3fb1a9cfd47943004b3f3fb2e6b9517..b260957117098aec31337346bf4c5a83b649d88c 100644 GIT binary patch literal 9279 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 literal 9229 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 diff --git a/dist/angular-chart.min.js b/dist/angular-chart.min.js index 354535c5..83188fee 100644 --- a/dist/angular-chart.min.js +++ b/dist/angular-chart.min.js @@ -1,11 +1,11 @@ /*! * angular-chart.js - An angular.js wrapper for Chart.js * http://jtblin.github.io/angular-chart.js/ - * Version: 1.0.2 + * Version: 1.0.3 * * Copyright 2016 Jerome Touffe-Blin * Released under the BSD-2-Clause license * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE */ -!function(t){"use strict";if("object"==typeof exports)module.exports=t("undefined"!=typeof angular?angular:require("angular"),"undefined"!=typeof Chart?Chart:require("chart.js"));else if("function"==typeof define&&define.amd)define(["angular","chart"],t);else{if("undefined"==typeof angular||"undefined"==typeof Chart)throw new Error("Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/");t(angular,Chart)}}(function(t,r){"use strict";function a(){var a={responsive:!0},e={Chart:r,getOptions:function(r){var e=r&&a[r]||{};return t.extend({},a,e)}};this.setOptions=function(r,e){return e?void(a[r]=t.extend(a[r]||{},e)):(e=r,void(a=t.extend(a,e)))},this.$get=function(){return e}}function e(a,e){function o(t,r,e){var n=w(t,r);if(p(r)&&$(t,r,e,n)){var o=e[0],c=o.getContext("2d");r.chartGetColor=C(r);var i=y(t,r);F(r),r.chart=new a.Chart(c,{type:t,data:i,options:n}),r.$emit("chart-create",r.chart),D(o,r)}}function c(t,r){return!!(t&&r&&t.length&&r.length)&&(Array.isArray(t[0])?t.length===r.length&&t.every(function(t,a){return t.length===r[a].length}):r.reduce(i,0)>0&&t.length===r.length)}function i(t,r){return t+r}function u(r,a,e){var n=null;return function(o){var c=r.chart.getElementsAtEvent||r.chart.getPointsAtEvent;if(c){var i=c.call(r.chart,o);e!==!1&&t.equals(n,i)!==!1||(n=i,r[a](i,o))}}}function h(e,n){for(var o=t.copy(n.chartColors||a.getOptions(e).chartColors||r.defaults.global.colors),c=o.length>16&255,e=r>>8&255,n=255&r;return[a,e,n]}function p(t){return t.chartData&&t.chartData.length}function C(t){return"function"==typeof t.chartGetColor?t.chartGetColor:s}function y(t,r){var a=h(t,r);return Array.isArray(r.chartData[0])?b(r.chartLabels,r.chartData,r.chartSeries||[],a,r.chartDatasetOverride):m(r.chartLabels,r.chartData,a,r.chartDatasetOverride)}function b(r,a,e,n,o){return{labels:r,datasets:a.map(function(r,a){var c=t.extend({},n[a],{label:e[a],data:r});return o&&o.length>=a&&t.merge(c,o[a]),c})}}function m(r,a,e,n){var o={labels:r,datasets:[{data:a,backgroundColor:e.map(function(t){return t.pointBackgroundColor}),hoverBackgroundColor:e.map(function(t){return t.backgroundColor})}]};return n&&t.merge(o.datasets[0],n),o}function w(r,e){return t.extend({},a.getOptions(r),e.chartOptions)}function D(r,a){r.onclick=a.chartClick?u(a,"chartClick",!1):t.noop,r.onmousemove=a.chartHover?u(a,"chartHover",!0):t.noop}function B(t,r){Array.isArray(r.chartData[0])?r.chart.data.datasets.forEach(function(r,a){r.data=t[a]}):r.chart.data.datasets[0].data=t,r.chart.update(),r.$emit("chart-update",r.chart)}function A(t){return!t||Array.isArray(t)&&!t.length||"object"==typeof t&&!Object.keys(t).length}function $(t,r,a,n){return!n.responsive||0!==a[0].clientHeight||(e(function(){o(t,r,a)},50,!1),!1)}function F(t){t.chart&&(t.chart.destroy(),t.$emit("chart-destroy",t.chart))}return function(r){return{restrict:"CA",scope:{chartGetColor:"=?",chartType:"=",chartData:"=?",chartLabels:"=?",chartOptions:"=?",chartSeries:"=?",chartColors:"=?",chartClick:"=?",chartHover:"=?",chartDatasetOverride:"=?"},link:function(a,e){function i(t,n){if(!t||!t.length||Array.isArray(t[0])&&!t[0].length)return void F(a);var i=r||a.chartType;if(i)return a.chart&&c(t,n)?B(t,a):void o(i,a,e)}function u(n,c){if(!A(n)&&!t.equals(n,c)){var i=r||a.chartType;i&&o(i,a,e)}}function h(r,n){A(r)||t.equals(r,n)||o(r,a,e)}n&&window.G_vmlCanvasManager.initElement(e[0]),a.$watch("chartData",i,!0),a.$watch("chartSeries",u,!0),a.$watch("chartLabels",u,!0),a.$watch("chartOptions",u,!0),a.$watch("chartColors",u,!0),a.$watch("chartDatasetOverride",u,!0),a.$watch("chartType",h,!1),a.$on("$destroy",function(){F(a)}),a.$on("$resize",function(){a.chart&&a.chart.resize()})}}}}r.defaults.global.multiTooltipTemplate="<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>",r.defaults.global.tooltips.mode="label",r.defaults.global.elements.line.borderWidth=2,r.defaults.global.elements.rectangle.borderWidth=2,r.defaults.global.legend.display=!1,r.defaults.global.colors=["#97BBCD","#DCDCDC","#F7464A","#46BFBD","#FDB45C","#949FB1","#4D5360"];var n="object"==typeof window.G_vmlCanvasManager&&null!==window.G_vmlCanvasManager&&"function"==typeof window.G_vmlCanvasManager.initElement;return n&&(r.defaults.global.animation=!1),t.module("chart.js",[]).provider("ChartJs",a).factory("ChartJsFactory",["ChartJs","$timeout",e]).directive("chartBase",["ChartJsFactory",function(t){return new t}]).directive("chartLine",["ChartJsFactory",function(t){return new t("line")}]).directive("chartBar",["ChartJsFactory",function(t){return new t("bar")}]).directive("chartHorizontalBar",["ChartJsFactory",function(t){return new t("horizontalBar")}]).directive("chartRadar",["ChartJsFactory",function(t){return new t("radar")}]).directive("chartDoughnut",["ChartJsFactory",function(t){return new t("doughnut")}]).directive("chartPie",["ChartJsFactory",function(t){return new t("pie")}]).directive("chartPolarArea",["ChartJsFactory",function(t){return new t("polarArea")}]).directive("chartBubble",["ChartJsFactory",function(t){return new t("bubble")}]).name}); +!function(t){"use strict";if("object"==typeof exports)module.exports=t("undefined"!=typeof angular?angular:require("angular"),"undefined"!=typeof Chart?Chart:require("chart.js"));else if("function"==typeof define&&define.amd)define(["angular","chart"],t);else{if("undefined"==typeof angular||"undefined"==typeof Chart)throw new Error("Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/");t(angular,Chart)}}(function(t,r){"use strict";function a(){var a={responsive:!0},e={Chart:r,getOptions:function(r){var e=r&&a[r]||{};return t.extend({},a,e)}};this.setOptions=function(r,n){n?a[r]=t.merge(a[r]||{},n):(n=r,a=t.merge(a,n)),t.merge(e.Chart.defaults,a)},this.$get=function(){return e}}function e(a,e){function o(t,r,e){var n=w(t,r);if(v(r)&&$(t,r,e,n)){var o=e[0],c=o.getContext("2d");r.chartGetColor=C(r);var i=y(t,r);F(r),r.chart=new a.Chart(c,{type:t,data:i,options:n}),r.$emit("chart-create",r.chart),D(o,r)}}function c(t,r){return!!(t&&r&&t.length&&r.length)&&(Array.isArray(t[0])?t.length===r.length&&t.every(function(t,a){return t.length===r[a].length}):r.reduce(i,0)>0&&t.length===r.length)}function i(t,r){return t+r}function u(r,a,e){var n=null;return function(o){var c=r.chart.getElementsAtEvent||r.chart.getPointsAtEvent;if(c){var i=c.call(r.chart,o);e!==!1&&t.equals(n,i)!==!1||(n=i,r[a](i,o))}}}function h(e,n){for(var o=t.copy(n.chartColors||a.getOptions(e).chartColors||r.defaults.global.colors),c=o.length>16&255,e=r>>8&255,n=255&r;return[a,e,n]}function v(t){return t.chartData&&t.chartData.length}function C(t){return"function"==typeof t.chartGetColor?t.chartGetColor:s}function y(t,r){var a=h(t,r);return Array.isArray(r.chartData[0])?b(r.chartLabels,r.chartData,r.chartSeries||[],a,r.chartDatasetOverride):m(r.chartLabels,r.chartData,a,r.chartDatasetOverride)}function b(r,a,e,n,o){return{labels:r,datasets:a.map(function(r,a){var c=t.extend({},n[a],{label:e[a],data:r});return o&&o.length>=a&&t.merge(c,o[a]),c})}}function m(r,a,e,n){var o={labels:r,datasets:[{data:a,backgroundColor:e.map(function(t){return t.pointBackgroundColor}),hoverBackgroundColor:e.map(function(t){return t.backgroundColor})}]};return n&&t.merge(o.datasets[0],n),o}function w(r,e){return t.extend({},a.getOptions(r),e.chartOptions)}function D(r,a){r.onclick=a.chartClick?u(a,"chartClick",!1):t.noop,r.onmousemove=a.chartHover?u(a,"chartHover",!0):t.noop}function B(t,r){Array.isArray(r.chartData[0])?r.chart.data.datasets.forEach(function(r,a){r.data=t[a]}):r.chart.data.datasets[0].data=t,r.chart.update(),r.$emit("chart-update",r.chart)}function A(t){return!t||Array.isArray(t)&&!t.length||"object"==typeof t&&!Object.keys(t).length}function $(t,r,a,n){return!n.responsive||0!==a[0].clientHeight||(e(function(){o(t,r,a)},50,!1),!1)}function F(t){t.chart&&(t.chart.destroy(),t.$emit("chart-destroy",t.chart))}return function(r){return{restrict:"CA",scope:{chartGetColor:"=?",chartType:"=",chartData:"=?",chartLabels:"=?",chartOptions:"=?",chartSeries:"=?",chartColors:"=?",chartClick:"=?",chartHover:"=?",chartDatasetOverride:"=?"},link:function(a,e){function i(t,n){if(!t||!t.length||Array.isArray(t[0])&&!t[0].length)return void F(a);var i=r||a.chartType;if(i)return a.chart&&c(t,n)?B(t,a):void o(i,a,e)}function u(n,c){if(!A(n)&&!t.equals(n,c)){var i=r||a.chartType;i&&o(i,a,e)}}function h(r,n){A(r)||t.equals(r,n)||o(r,a,e)}n&&window.G_vmlCanvasManager.initElement(e[0]),a.$watch("chartData",i,!0),a.$watch("chartSeries",u,!0),a.$watch("chartLabels",u,!0),a.$watch("chartOptions",u,!0),a.$watch("chartColors",u,!0),a.$watch("chartDatasetOverride",u,!0),a.$watch("chartType",h,!1),a.$on("$destroy",function(){F(a)}),a.$on("$resize",function(){a.chart&&a.chart.resize()})}}}}r.defaults.global.multiTooltipTemplate="<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>",r.defaults.global.tooltips.mode="label",r.defaults.global.elements.line.borderWidth=2,r.defaults.global.elements.rectangle.borderWidth=2,r.defaults.global.legend.display=!1,r.defaults.global.colors=["#97BBCD","#DCDCDC","#F7464A","#46BFBD","#FDB45C","#949FB1","#4D5360"];var n="object"==typeof window.G_vmlCanvasManager&&null!==window.G_vmlCanvasManager&&"function"==typeof window.G_vmlCanvasManager.initElement;return n&&(r.defaults.global.animation=!1),t.module("chart.js",[]).provider("ChartJs",a).factory("ChartJsFactory",["ChartJs","$timeout",e]).directive("chartBase",["ChartJsFactory",function(t){return new t}]).directive("chartLine",["ChartJsFactory",function(t){return new t("line")}]).directive("chartBar",["ChartJsFactory",function(t){return new t("bar")}]).directive("chartHorizontalBar",["ChartJsFactory",function(t){return new t("horizontalBar")}]).directive("chartRadar",["ChartJsFactory",function(t){return new t("radar")}]).directive("chartDoughnut",["ChartJsFactory",function(t){return new t("doughnut")}]).directive("chartPie",["ChartJsFactory",function(t){return new t("pie")}]).directive("chartPolarArea",["ChartJsFactory",function(t){return new t("polarArea")}]).directive("chartBubble",["ChartJsFactory",function(t){return new t("bubble")}]).name}); //# sourceMappingURL=angular-chart.min.js.map diff --git a/dist/angular-chart.min.js.map b/dist/angular-chart.min.js.map index c4831f3e..4406fa63 100644 --- a/dist/angular-chart.min.js.map +++ b/dist/angular-chart.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["angular-chart.js"],"names":["factory","exports","module","angular","require","Chart","define","amd","Error","ChartJsProvider","options","responsive","ChartJs","getOptions","type","typeOptions","extend","this","setOptions","customOptions","$get","ChartJsFactory","$timeout","createChart","scope","elem","getChartOptions","hasData","canDisplay","cvs","ctx","getContext","chartGetColor","getChartColorFn","data","getChartData","destroyChart","chart","$emit","bindEvents","canUpdateChart","newVal","oldVal","length","Array","isArray","every","element","index","reduce","sum","carry","val","getEventHandler","action","triggerOnlyOnChange","lastState","evt","atEvent","getElementsAtEvent","getPointsAtEvent","activePoints","call","equals","getColors","colors","copy","chartColors","defaults","global","notEnoughColors","chartData","push","map","convertColor","color","getColor","hexToRgb","substr","getRandomColor","getRandomInt","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","min","max","Math","floor","random","alpha","useExcanvas","join","concat","hex","bigint","parseInt","r","g","b","getDataSets","chartLabels","chartSeries","chartDatasetOverride","getData","labels","series","datasetOverride","datasets","item","i","dataset","label","merge","hoverBackgroundColor","chartOptions","onclick","chartClick","noop","onmousemove","chartHover","updateChart","values","forEach","update","isEmpty","value","Object","keys","clientHeight","destroy","restrict","chartType","link","watchData","watchOther","watchType","window","G_vmlCanvasManager","initElement","$watch","$on","resize","multiTooltipTemplate","tooltips","mode","elements","line","borderWidth","rectangle","legend","display","animation","provider","directive","name"],"mappings":"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","file":"angular-chart.min.js","sourcesContent":["(function (factory) {\n 'use strict';\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory(\n typeof angular !== 'undefined' ? angular : require('angular'),\n typeof Chart !== 'undefined' ? Chart : require('chart.js'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'chart'], factory);\n } else {\n // Browser globals\n if (typeof angular === 'undefined' || typeof Chart === 'undefined')\n throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');\n factory(angular, Chart);\n }\n}(function (angular, Chart) {\n 'use strict';\n\n Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n Chart.defaults.global.tooltips.mode = 'label';\n Chart.defaults.global.elements.line.borderWidth = 2;\n Chart.defaults.global.elements.rectangle.borderWidth = 2;\n Chart.defaults.global.legend.display = false;\n Chart.defaults.global.colors = [\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 var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&\n window.G_vmlCanvasManager !== null &&\n typeof window.G_vmlCanvasManager.initElement === 'function';\n\n if (useExcanvas) Chart.defaults.global.animation = false;\n\n return angular.module('chart.js', [])\n .provider('ChartJs', ChartJsProvider)\n .factory('ChartJsFactory', ['ChartJs', '$timeout', 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('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])\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 .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])\n .name;\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: false });\n * ChartJsProvider.setOptions('Line', { responsive: true });\n * })))\n */\n function ChartJsProvider () {\n var options = { responsive: true };\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, $timeout) {\n return function chart (type) {\n return {\n restrict: 'CA',\n scope: {\n chartGetColor: '=?',\n chartType: '=',\n chartData: '=?',\n chartLabels: '=?',\n chartOptions: '=?',\n chartSeries: '=?',\n chartColors: '=?',\n chartClick: '=?',\n chartHover: '=?',\n chartDatasetOverride: '=?'\n },\n link: function (scope, elem/*, attrs */) {\n if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);\n\n // Order of setting \"watch\" matter\n scope.$watch('chartData', watchData, true);\n scope.$watch('chartSeries', watchOther, true);\n scope.$watch('chartLabels', watchOther, true);\n scope.$watch('chartOptions', watchOther, true);\n scope.$watch('chartColors', watchOther, true);\n scope.$watch('chartDatasetOverride', watchOther, true);\n scope.$watch('chartType', watchType, false);\n\n scope.$on('$destroy', function () {\n destroyChart(scope);\n });\n\n scope.$on('$resize', function () {\n if (scope.chart) scope.chart.resize();\n });\n\n function watchData (newVal, oldVal) {\n if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {\n destroyChart(scope);\n return;\n }\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n if (scope.chart && canUpdateChart(newVal, oldVal))\n return updateChart(newVal, scope);\n\n createChart(chartType, scope, elem);\n }\n\n function watchOther (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 createChart(chartType, scope, elem);\n }\n\n function watchType (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n createChart(newVal, scope, elem);\n }\n }\n };\n };\n\n function createChart (type, scope, elem) {\n var options = getChartOptions(type, scope);\n if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;\n\n var cvs = elem[0];\n var ctx = cvs.getContext('2d');\n\n scope.chartGetColor = getChartColorFn(scope);\n var data = getChartData(type, scope);\n\n // Destroy old chart if it exists to avoid ghost charts issue\n // https://github.com/jtblin/angular-chart.js/issues/187\n destroyChart(scope);\n\n scope.chart = new ChartJs.Chart(ctx, {\n type: type,\n data: data,\n options: options\n });\n scope.$emit('chart-create', scope.chart);\n bindEvents(cvs, scope);\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.every(function (element, index) {\n return element.length === oldVal[index].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 getEventHandler (scope, action, triggerOnlyOnChange) {\n var lastState = null;\n return function (evt) {\n var atEvent = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;\n if (atEvent) {\n var activePoints = atEvent.call(scope.chart, evt);\n if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {\n lastState = activePoints;\n scope[action](activePoints, evt);\n }\n }\n };\n }\n\n function getColors (type, scope) {\n var colors = angular.copy(scope.chartColors ||\n ChartJs.getOptions(type).chartColors ||\n Chart.defaults.global.colors\n );\n var notEnoughColors = colors.length < scope.chartData.length;\n while (colors.length < scope.chartData.length) {\n colors.push(scope.chartGetColor());\n }\n // mutate colors in this case as we don't want\n // the colors to change on each refresh\n if (notEnoughColors) scope.chartColors = colors;\n return colors.map(convertColor);\n }\n\n function convertColor (color) {\n if (typeof color === 'object' && color !== null) return color;\n if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\n return getRandomColor();\n }\n\n function getRandomColor () {\n var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n return getColor(color);\n }\n\n function getColor (color) {\n return {\n backgroundColor: rgba(color, 0.2),\n pointBackgroundColor: rgba(color, 1),\n pointHoverBackgroundColor: rgba(color, 0.8),\n borderColor: rgba(color, 1),\n pointBorderColor: '#fff',\n pointHoverBorderColor: rgba(color, 1)\n };\n }\n\n function getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n function rgba (color, alpha) {\n // rgba not supported by IE8\n return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.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 hasData (scope) {\n return scope.chartData && scope.chartData.length;\n }\n\n function getChartColorFn (scope) {\n return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;\n }\n\n function getChartData (type, scope) {\n var colors = getColors(type, scope);\n return Array.isArray(scope.chartData[0]) ?\n getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :\n getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);\n }\n\n function getDataSets (labels, data, series, colors, datasetOverride) {\n return {\n labels: labels,\n datasets: data.map(function (item, i) {\n var dataset = angular.extend({}, colors[i], {\n label: series[i],\n data: item\n });\n if (datasetOverride && datasetOverride.length >= i) {\n angular.merge(dataset, datasetOverride[i]);\n }\n return dataset;\n })\n };\n }\n\n function getData (labels, data, colors, datasetOverride) {\n var dataset = {\n labels: labels,\n datasets: [{\n data: data,\n backgroundColor: colors.map(function (color) {\n return color.pointBackgroundColor;\n }),\n hoverBackgroundColor: colors.map(function (color) {\n return color.backgroundColor;\n })\n }]\n };\n if (datasetOverride) {\n angular.merge(dataset.datasets[0], datasetOverride);\n }\n return dataset;\n }\n\n function getChartOptions (type, scope) {\n return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);\n }\n\n function bindEvents (cvs, scope) {\n cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;\n cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;\n }\n\n function updateChart (values, scope) {\n if (Array.isArray(scope.chartData[0])) {\n scope.chart.data.datasets.forEach(function (dataset, i) {\n dataset.data = values[i];\n });\n } else {\n scope.chart.data.datasets[0].data = values;\n }\n\n scope.chart.update();\n scope.$emit('chart-update', scope.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 function canDisplay (type, scope, elem, options) {\n // TODO: check parent?\n if (options.responsive && elem[0].clientHeight === 0) {\n $timeout(function () {\n createChart(type, scope, elem);\n }, 50, false);\n return false;\n }\n return true;\n }\n\n function destroyChart(scope) {\n if(! scope.chart) return;\n scope.chart.destroy();\n scope.$emit('chart-destroy', scope.chart);\n }\n }\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["angular-chart.js"],"names":["factory","exports","module","angular","require","Chart","define","amd","Error","ChartJsProvider","options","responsive","ChartJs","getOptions","type","typeOptions","extend","this","setOptions","customOptions","merge","defaults","$get","ChartJsFactory","$timeout","createChart","scope","elem","getChartOptions","hasData","canDisplay","cvs","ctx","getContext","chartGetColor","getChartColorFn","data","getChartData","destroyChart","chart","$emit","bindEvents","canUpdateChart","newVal","oldVal","length","Array","isArray","every","element","index","reduce","sum","carry","val","getEventHandler","action","triggerOnlyOnChange","lastState","evt","atEvent","getElementsAtEvent","getPointsAtEvent","activePoints","call","equals","getColors","colors","copy","chartColors","global","notEnoughColors","chartData","push","map","convertColor","color","getColor","hexToRgb","substr","getRandomColor","getRandomInt","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","min","max","Math","floor","random","alpha","useExcanvas","join","concat","hex","bigint","parseInt","r","g","b","getDataSets","chartLabels","chartSeries","chartDatasetOverride","getData","labels","series","datasetOverride","datasets","item","i","dataset","label","hoverBackgroundColor","chartOptions","onclick","chartClick","noop","onmousemove","chartHover","updateChart","values","forEach","update","isEmpty","value","Object","keys","clientHeight","destroy","restrict","chartType","link","watchData","watchOther","watchType","window","G_vmlCanvasManager","initElement","$watch","$on","resize","multiTooltipTemplate","tooltips","mode","elements","line","borderWidth","rectangle","legend","display","animation","provider","directive","name"],"mappings":"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","file":"angular-chart.min.js","sourcesContent":["(function (factory) {\n 'use strict';\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory(\n typeof angular !== 'undefined' ? angular : require('angular'),\n typeof Chart !== 'undefined' ? Chart : require('chart.js'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'chart'], factory);\n } else {\n // Browser globals\n if (typeof angular === 'undefined' || typeof Chart === 'undefined')\n throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');\n factory(angular, Chart);\n }\n}(function (angular, Chart) {\n 'use strict';\n\n Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n Chart.defaults.global.tooltips.mode = 'label';\n Chart.defaults.global.elements.line.borderWidth = 2;\n Chart.defaults.global.elements.rectangle.borderWidth = 2;\n Chart.defaults.global.legend.display = false;\n Chart.defaults.global.colors = [\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 var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&\n window.G_vmlCanvasManager !== null &&\n typeof window.G_vmlCanvasManager.initElement === 'function';\n\n if (useExcanvas) Chart.defaults.global.animation = false;\n\n return angular.module('chart.js', [])\n .provider('ChartJs', ChartJsProvider)\n .factory('ChartJsFactory', ['ChartJs', '$timeout', 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('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])\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 .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])\n .name;\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: false });\n * ChartJsProvider.setOptions('Line', { responsive: true });\n * })))\n */\n function ChartJsProvider () {\n var options = { responsive: true };\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.merge(options, customOptions);\n } else {\n // Set options for the specific chart\n options[type] = angular.merge(options[type] || {}, customOptions);\n }\n\n angular.merge(ChartJs.Chart.defaults, options);\n };\n\n this.$get = function () {\n return ChartJs;\n };\n }\n\n function ChartJsFactory (ChartJs, $timeout) {\n return function chart (type) {\n return {\n restrict: 'CA',\n scope: {\n chartGetColor: '=?',\n chartType: '=',\n chartData: '=?',\n chartLabels: '=?',\n chartOptions: '=?',\n chartSeries: '=?',\n chartColors: '=?',\n chartClick: '=?',\n chartHover: '=?',\n chartDatasetOverride: '=?'\n },\n link: function (scope, elem/*, attrs */) {\n if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);\n\n // Order of setting \"watch\" matter\n scope.$watch('chartData', watchData, true);\n scope.$watch('chartSeries', watchOther, true);\n scope.$watch('chartLabels', watchOther, true);\n scope.$watch('chartOptions', watchOther, true);\n scope.$watch('chartColors', watchOther, true);\n scope.$watch('chartDatasetOverride', watchOther, true);\n scope.$watch('chartType', watchType, false);\n\n scope.$on('$destroy', function () {\n destroyChart(scope);\n });\n\n scope.$on('$resize', function () {\n if (scope.chart) scope.chart.resize();\n });\n\n function watchData (newVal, oldVal) {\n if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {\n destroyChart(scope);\n return;\n }\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n if (scope.chart && canUpdateChart(newVal, oldVal))\n return updateChart(newVal, scope);\n\n createChart(chartType, scope, elem);\n }\n\n function watchOther (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 createChart(chartType, scope, elem);\n }\n\n function watchType (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n createChart(newVal, scope, elem);\n }\n }\n };\n };\n\n function createChart (type, scope, elem) {\n var options = getChartOptions(type, scope);\n if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;\n\n var cvs = elem[0];\n var ctx = cvs.getContext('2d');\n\n scope.chartGetColor = getChartColorFn(scope);\n var data = getChartData(type, scope);\n\n // Destroy old chart if it exists to avoid ghost charts issue\n // https://github.com/jtblin/angular-chart.js/issues/187\n destroyChart(scope);\n\n scope.chart = new ChartJs.Chart(ctx, {\n type: type,\n data: data,\n options: options\n });\n scope.$emit('chart-create', scope.chart);\n bindEvents(cvs, scope);\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.every(function (element, index) {\n return element.length === oldVal[index].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 getEventHandler (scope, action, triggerOnlyOnChange) {\n var lastState = null;\n return function (evt) {\n var atEvent = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;\n if (atEvent) {\n var activePoints = atEvent.call(scope.chart, evt);\n if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {\n lastState = activePoints;\n scope[action](activePoints, evt);\n }\n }\n };\n }\n\n function getColors (type, scope) {\n var colors = angular.copy(scope.chartColors ||\n ChartJs.getOptions(type).chartColors ||\n Chart.defaults.global.colors\n );\n var notEnoughColors = colors.length < scope.chartData.length;\n while (colors.length < scope.chartData.length) {\n colors.push(scope.chartGetColor());\n }\n // mutate colors in this case as we don't want\n // the colors to change on each refresh\n if (notEnoughColors) scope.chartColors = colors;\n return colors.map(convertColor);\n }\n\n function convertColor (color) {\n if (typeof color === 'object' && color !== null) return color;\n if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\n return getRandomColor();\n }\n\n function getRandomColor () {\n var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n return getColor(color);\n }\n\n function getColor (color) {\n return {\n backgroundColor: rgba(color, 0.2),\n pointBackgroundColor: rgba(color, 1),\n pointHoverBackgroundColor: rgba(color, 0.8),\n borderColor: rgba(color, 1),\n pointBorderColor: '#fff',\n pointHoverBorderColor: rgba(color, 1)\n };\n }\n\n function getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n function rgba (color, alpha) {\n // rgba not supported by IE8\n return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.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 hasData (scope) {\n return scope.chartData && scope.chartData.length;\n }\n\n function getChartColorFn (scope) {\n return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;\n }\n\n function getChartData (type, scope) {\n var colors = getColors(type, scope);\n return Array.isArray(scope.chartData[0]) ?\n getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :\n getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);\n }\n\n function getDataSets (labels, data, series, colors, datasetOverride) {\n return {\n labels: labels,\n datasets: data.map(function (item, i) {\n var dataset = angular.extend({}, colors[i], {\n label: series[i],\n data: item\n });\n if (datasetOverride && datasetOverride.length >= i) {\n angular.merge(dataset, datasetOverride[i]);\n }\n return dataset;\n })\n };\n }\n\n function getData (labels, data, colors, datasetOverride) {\n var dataset = {\n labels: labels,\n datasets: [{\n data: data,\n backgroundColor: colors.map(function (color) {\n return color.pointBackgroundColor;\n }),\n hoverBackgroundColor: colors.map(function (color) {\n return color.backgroundColor;\n })\n }]\n };\n if (datasetOverride) {\n angular.merge(dataset.datasets[0], datasetOverride);\n }\n return dataset;\n }\n\n function getChartOptions (type, scope) {\n return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);\n }\n\n function bindEvents (cvs, scope) {\n cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;\n cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;\n }\n\n function updateChart (values, scope) {\n if (Array.isArray(scope.chartData[0])) {\n scope.chart.data.datasets.forEach(function (dataset, i) {\n dataset.data = values[i];\n });\n } else {\n scope.chart.data.datasets[0].data = values;\n }\n\n scope.chart.update();\n scope.$emit('chart-update', scope.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 function canDisplay (type, scope, elem, options) {\n // TODO: check parent?\n if (options.responsive && elem[0].clientHeight === 0) {\n $timeout(function () {\n createChart(type, scope, elem);\n }, 50, false);\n return false;\n }\n return true;\n }\n\n function destroyChart(scope) {\n if(! scope.chart) return;\n scope.chart.destroy();\n scope.$emit('chart-destroy', scope.chart);\n }\n }\n}));\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/examples/charts.html b/examples/charts.html index ecc21af6..6af4e83b 100644 --- a/examples/charts.html +++ b/examples/charts.html @@ -95,7 +95,7 @@

Code on Github - Download (1.0.2) + Download (1.0.3)

diff --git a/package.json b/package.json index e2739248..eb3b9ff7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-chart.js", - "version": "1.0.2", + "version": "1.0.3", "description": "An angular.js wrapper for Chart.js", "homepage": "http://jtblin.github.io/angular-chart.js/", "main": "dist/angular-chart.js",