diff --git a/.travis.yml b/.travis.yml index cdb70857d..2e66dc7b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: node_js node_js: - - "5.6" - - "4.3" + - "5.10" before_install: - "export CHROME_BIN=/usr/bin/google-chrome" diff --git a/docs/00-Getting-Started.md b/docs/00-Getting-Started.md index b8d5ec40b..82d2349d2 100644 --- a/docs/00-Getting-Started.md +++ b/docs/00-Getting-Started.md @@ -145,13 +145,13 @@ position | String | 'top' | Position of the legend. Options are 'top' or 'bottom fullWidth | Boolean | true | Marks that this box should take the full width of the canvas (pushing down other boxes) onClick | Function | `function(event, legendItem) {}` | A callback that is called when a click is registered on top of a label item labels |-|-|- -*labels*boxWidth | Number | 40 | Width of coloured box -*labels*fontSize | Number | 12 | Font size -*labels*fontStyle | String | "normal" | -*labels*fontColor | Color | "#666" | -*labels*fontFamily | String | "Helvetica Neue" | -*labels*padding | Number | 10 | Padding between rows of colored boxes -*labels*generateLabels: | Function | `function(data) { }` | Generates legend items for each thing in the legend. Default implementation returns the text + styling for the color box. Styles that can be returned are `fillStyle`, `strokeStyle`, `lineCap`, `lineDash`, `lineDashOffset`, `lineWidth`, `lineJoin`. Return a `hidden` attribute to indicate that the label refers to something that is not visible. A strikethrough style will be given to the text in this case. +*labels*.boxWidth | Number | 40 | Width of coloured box +*labels*.fontSize | Number | 12 | Font size +*labels*.fontStyle | String | "normal" | +*labels*.fontColor | Color | "#666" | +*labels*.fontFamily | String | "Helvetica Neue" | +*labels*.padding | Number | 10 | Padding between rows of colored boxes +*labels*.generateLabels: | Function | `function(data) { }` | Generates legend items for each thing in the legend. Default implementation returns the text + styling for the color box. Styles that can be returned are `fillStyle`, `strokeStyle`, `lineCap`, `lineDash`, `lineDashOffset`, `lineWidth`, `lineJoin`. Return a `hidden` attribute to indicate that the label refers to something that is not visible. A strikethrough style will be given to the text in this case. The global options for tooltips are defined in `Chart.defaults.global.tooltips`. diff --git a/docs/02-Line-Chart.md b/docs/02-Line-Chart.md index 6cdcd419c..50aefb8fa 100644 --- a/docs/02-Line-Chart.md +++ b/docs/02-Line-Chart.md @@ -39,13 +39,15 @@ var data = { // Boolean - if true fill the area under the line fill: false, + // Tension - bezier curve tension of the line. Set to 0 to draw straight lines connecting points + // Used to be called "tension" but was renamed for consistency. The old option name continues to work for compatibility. + lineTension: 0.1, + // String - the color to fill the area under the line with if fill is true - backgroundColor: "rgba(220,220,220,0.2)", + backgroundColor: "rgba(75,192,192,0.4)", - // The properties below allow an array to be specified to change the value of the item at the given index - - // String or array - Line color - borderColor: "rgba(220,220,220,1)", + // String - Line color + borderColor: "rgba(75,192,192,1)", // String - cap style of the line. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap borderCapStyle: 'butt', @@ -59,32 +61,37 @@ var data = { // String - line join style. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin borderJoinStyle: 'miter', - // String or array - Point stroke color - pointBorderColor: "rgba(220,220,220,1)", + // The properties below allow an array to be specified to change the value of the item at the given index - // String or array - Point fill color + // String or Array - Point stroke color + pointBorderColor: "rgba(75,192,192,1)", + + // String or Array - Point fill color pointBackgroundColor: "#fff", - // Number or array - Stroke width of point border + // Number or Array - Stroke width of point border pointBorderWidth: 1, - // Number or array - Radius of point when hovered + // Number or Array - Radius of point when hovered pointHoverRadius: 5, - // String or array - point background color when hovered - pointHoverBackgroundColor: "rgba(220,220,220,1)", + // String or Array - point background color when hovered + pointHoverBackgroundColor: "rgba(75,192,192,1)", - // Point border color when hovered + // String or Array - Point border color when hovered pointHoverBorderColor: "rgba(220,220,220,1)", - // Number or array - border width of point when hovered + // Number or Array - border width of point when hovered pointHoverBorderWidth: 2, - // Tension - bezier curve tension of the line. Set to 0 to draw straight Wlines connecting points - tension: 0.1, + // Number or Array - the pixel size of the point shape. Can be set to 0 to not render a circle over the point + // Used to be called "radius" but was renamed for consistency. The old option name continues to work for compatibility. + pointRadius: 1, - // Number - the pixel size of the point shape. Can be set to 0 to not render a circle over the point - radius: 1, + // Number or Array - the pixel size of the non-displayed point that reacts to mouse hover events + // + // Used to be called "hitRadius" but was renamed for consistency. The old option name continues to work for compatibility. + pointHitRadius: 10, // The actual data data: [65, 59, 80, 81, 56, 55, 40], @@ -95,14 +102,14 @@ var data = { { label: "My Second dataset", fill: false, - backgroundColor: "rgba(220,220,220,0.2)", - borderColor: "rgba(220,220,220,1)", - pointBorderColor: "rgba(220,220,220,1)", + backgroundColor: "rgba(255,205,86,0.4)", + borderColor: "rgba(255,205,86,1)", + pointBorderColor: "rgba(255,205,86,1)", pointBackgroundColor: "#fff", pointBorderWidth: 1, pointHoverRadius: 5, - pointHoverBackgroundColor: "rgba(220,220,220,1)", - pointHoverBorderColor: "rgba(220,220,220,1)", + pointHoverBackgroundColor: "rgba(255,205,86,1)", + pointHoverBorderColor: "rgba(255,205,86,1)", pointHoverBorderWidth: 2, data: [28, 48, 40, 19, 86, 27, 90] } @@ -119,7 +126,7 @@ The label key on each dataset is optional, and can be used when generating a sca These are the customisation options specific to Line charts. These options are merged with the [global chart configuration options](#getting-started-global-chart-configuration), and form the options of the chart. -The default options for line chart are defined in `Chart.defaults.Line`. +The default options for line chart are defined in `Chart.defaults.line`. Name | Type | Default | Description --- | --- | --- | --- @@ -135,7 +142,7 @@ scales | - | - | - type | String | "category" | As defined in ["Category"](#scales-category-scale). id | String | "x-axis-1" | Id of the axis so that data can bind to it. | | | - *scales*.yAxes | Array | `[{type:"linear","id":"y-axis-1"}]` | Defines all of the x axes used in the chart. See the [scale documentation](#getting-started-scales) for details on the available options. + *scales*.yAxes | Array | `[{type:"linear","id":"y-axis-1"}]` | Defines all of the y axes used in the chart. See the [scale documentation](#getting-started-scales) for details on the available options. *Options for yAxes* | | | type | String | "linear" | As defined in ["Linear"](#scales-linear-scale). id | String | "y-axis-1" | Id of the axis so that data can bind to it. diff --git a/docs/03-Bar-Chart.md b/docs/03-Bar-Chart.md index d59a63715..3c2948204 100644 --- a/docs/03-Bar-Chart.md +++ b/docs/03-Bar-Chart.md @@ -32,19 +32,19 @@ var data = { // The properties below allow an array to be specified to change the value of the item at the given index // String or array - the bar color - backgroundColor: "rgba(220,220,220,0.2)", + backgroundColor: "rgba(255,99,132,0.2)", // String or array - bar stroke color - borderColor: "rgba(220,220,220,1)", + borderColor: "rgba(255,99,132,1)", // Number or array - bar border width borderWidth: 1, // String or array - fill color when hovered - hoverBackgroundColor: "rgba(220,220,220,0.2)", + hoverBackgroundColor: "rgba(255,99,132,0.4)", // String or array - border color when hovered - hoverBorderColor: "rgba(220,220,220,1)", + hoverBorderColor: "rgba(255,99,132,1)", // The actual data data: [65, 59, 80, 81, 56, 55, 40], @@ -54,11 +54,11 @@ var data = { }, { label: "My Second dataset", - backgroundColor: "rgba(220,220,220,0.2)", - borderColor: "rgba(220,220,220,1)", + backgroundColor: "rgba(54,162,235,0.2)", + borderColor: "rgba(54,162,235,1)", borderWidth: 1, - hoverBackgroundColor: "rgba(220,220,220,0.2)", - hoverBorderColor: "rgba(220,220,220,1)", + hoverBackgroundColor: "rgba(54,162,235,0.4)", + hoverBorderColor: "rgba(54,162,235,1)", data: [28, 48, 40, 19, 86, 27, 90] } ] @@ -73,7 +73,7 @@ The label key on each dataset is optional, and can be used when generating a sca These are the customisation options specific to Bar charts. These options are merged with the [global chart configuration options](#getting-started-global-chart-configuration), and form the options of the chart. -The default options for bar chart are defined in `Chart.defaults.Bar`. +The default options for bar chart are defined in `Chart.defaults.bar`. Name | Type | Default | Description --- |:---:| --- | --- @@ -128,7 +128,7 @@ new Chart(ctx, { // for both x and y axes. ``` -We can also change these defaults values for each Bar type that is created, this object is available at `Chart.defaults.Bar`. +We can also change these defaults values for each Bar type that is created, this object is available at `Chart.defaults.bar`. #### barPercentage vs categoryPercentage diff --git a/docs/04-Radar-Chart.md b/docs/04-Radar-Chart.md index 939a69e55..cdf04f395 100644 --- a/docs/04-Radar-Chart.md +++ b/docs/04-Radar-Chart.md @@ -29,22 +29,22 @@ var data = { datasets: [ { label: "My First dataset", - backgroundColor: "rgba(220,220,220,0.2)", - borderColor: "rgba(220,220,220,1)", - pointBackgroundColor: "rgba(220,220,220,1)", + backgroundColor: "rgba(179,181,198,0.2)", + borderColor: "rgba(179,181,198,1)", + pointBackgroundColor: "rgba(179,181,198,1)", pointBorderColor: "#fff", pointHoverBackgroundColor: "#fff", - pointHoverBorderColor: "rgba(220,220,220,1)", + pointHoverBorderColor: "rgba(179,181,198,1)", data: [65, 59, 90, 81, 56, 55, 40] }, { label: "My Second dataset", - backgroundColor: "rgba(151,187,205,0.2)", - borderColor: "rgba(151,187,205,1)", - pointBackgroundColor: "rgba(151,187,205,1)", + backgroundColor: "rgba(255,99,132,0.2)", + borderColor: "rgba(255,99,132,1)", + pointBackgroundColor: "rgba(255,99,132,1)", pointBorderColor: "#fff", pointHoverBackgroundColor: "#fff", - pointHoverBorderColor: "rgba(151,187,205,1)", + pointHoverBorderColor: "rgba(255,99,132,1)", data: [28, 48, 40, 19, 96, 27, 100] } ] diff --git a/docs/05-Polar-Area-Chart.md b/docs/05-Polar-Area-Chart.md index fb2a44a3a..c3d696d87 100644 --- a/docs/05-Polar-Area-Chart.md +++ b/docs/05-Polar-Area-Chart.md @@ -27,18 +27,18 @@ new Chart(ctx, { var data = { datasets: [{ data: [ - 10, - 32, - 53, - 14, - 22, + 11, + 16, + 7, + 3, + 14 ], backgroundColor: [ - "#F7464A", - "#46BFBD", - "#FDB45C", - "#949FB1", - "#4D5360", + "#FF6384", + "#4BC0C0", + "#FFCE56", + "#E7E9ED", + "#36A2EB" ], label: 'My dataset' // for legend }], @@ -47,7 +47,7 @@ var data = { "Green", "Yellow", "Grey", - "Dark Grey" + "Blue" ] }; ``` diff --git a/docs/06-Pie-Doughnut-Chart.md b/docs/06-Pie-Doughnut-Chart.md index 64fd9b8a4..4252a7b48 100644 --- a/docs/06-Pie-Doughnut-Chart.md +++ b/docs/06-Pie-Doughnut-Chart.md @@ -7,7 +7,7 @@ Pie and doughnut charts are probably the most commonly used chart there are. The They are excellent at showing the relational proportions between data. -Pie and doughnut charts are effectively the same class in Chart.js, but have one different default value - their `percentageInnerCutout`. This equates what percentage of the inner should be cut out. This defaults to `0` for pie charts, and `50` for doughnuts. +Pie and doughnut charts are effectively the same class in Chart.js, but have one different default value - their `cutoutPercentage`. This equates what percentage of the inner should be cut out. This defaults to `0` for pie charts, and `50` for doughnuts. They are also registered under two aliases in the `Chart` core. Other than their different default value, and different alias, they are exactly the same. @@ -24,15 +24,17 @@ They are also registered under two aliases in the `Chart` core. Other than their ```javascript // For a pie chart -var myPieChart = new Chart(ctx[0],{ - type:'pie', +var myPieChart = new Chart(ctx,{ + type: 'pie', data: data, options: options }); +``` +```javascript // And for a doughnut chart -var myDoughnutChart = new Chart(ctx[1], { - type:'doughnut', +var myDoughnutChart = new Chart(ctx, { + type: 'doughnut', data: data, options: options }); @@ -51,20 +53,20 @@ var data = { { data: [300, 50, 100], backgroundColor: [ - "#F7464A", - "#46BFBD", - "#FDB45C" + "#FF6384", + "#36A2EB", + "#FFCE56" ], hoverBackgroundColor: [ - "#FF5A5E", - "#5AD3D1", - "#FFC870" + "#FF6384", + "#36A2EB", + "#FFCE56" ] }] }; ``` -For a pie chart, you must pass in an array of objects with a value and an optional color property. The value attribute should be a number, Chart.js will total all of the numbers and calculate the relative proportion of each. The color attribute should be a string. Similar to CSS, for this string you can use HEX notation, RGB, RGBA or HSL. +For a pie chart, datasets need to contain an array of data points. The data points should be a number, Chart.js will total all of the numbers and calculate the relative proportion of each. You can also add an array of background colors. The color attributes should be a string. Similar to CSS, for this string you can use HEX notation, RGB, RGBA or HSL. ### Chart options @@ -98,4 +100,4 @@ new Chart(ctx,{ // and the Doughnut chart defaults but this particular instance will have `animateScale` set to `true`. ``` -We can also change these default values for each Doughnut type that is created, this object is available at `Chart.defaults.doughnut`. Pie charts also have a clone of these defaults available to change at `Chart.defaults.pie`, with the only difference being `percentageInnerCutout` being set to 0. \ No newline at end of file +We can also change these default values for each Doughnut type that is created, this object is available at `Chart.defaults.doughnut`. Pie charts also have a clone of these defaults available to change at `Chart.defaults.pie`, with the only difference being `cutoutPercentage` being set to 0. \ No newline at end of file diff --git a/docs/07-Advanced.md b/docs/07-Advanced.md index 706f54b2d..4bedca3e0 100644 --- a/docs/07-Advanced.md +++ b/docs/07-Advanced.md @@ -143,7 +143,7 @@ var myPieChart = new Chart(ctx, { // Otherwise, tooltip will be an object with all tooltip properties like: - // tooltip.caretHeight + // tooltip.caretSize // tooltip.caretPadding // tooltip.chart // tooltip.cornerRadius @@ -390,6 +390,10 @@ Plugins should derive from Chart.PluginBase and implement the following interfac beforeUpdate: function(chartInstance) { }, afterUpdate: function(chartInstance) { }, + // This is called at the start of a render. It is only called once, even if the animation will run for a number of frames. Use beforeDraw or afterDraw + // to do something on each animation frame + beforeRender: function(chartInstance) { }, + // Easing is for animation beforeDraw: function(chartInstance, easing) { }, afterDraw: function(chartInstance, easing) { } diff --git a/docs/08-Notes.md b/docs/08-Notes.md index 8ba5a59dd..638a22e51 100644 --- a/docs/08-Notes.md +++ b/docs/08-Notes.md @@ -4,25 +4,11 @@ anchor: notes --- ### Browser support -Browser support for the canvas element is available in all modern & major mobile browsers (caniuse.com/canvas). -For IE8 & below, I would recommend using the polyfill ExplorerCanvas - available at https://code.google.com/p/explorercanvas/. It falls back to Internet explorer's format VML when canvas support is not available. Example use: +Chart.js offers support for all browsers where canvas is supported. -```html -
- - -``` +Browser support for the canvas element is available in all modern & major mobile browsers (http://caniuse.com/#feat=canvas). -Usually I would recommend feature detection to choose whether or not to load a polyfill, rather than IE conditional comments, however in this case, VML is a Microsoft proprietary format, so it will only work in IE. - -Some important points to note in my experience using ExplorerCanvas as a fallback. - -- Initialise charts on load rather than DOMContentReady when using the library, as sometimes a race condition will occur, and it will result in an error when trying to get the 2d context of a canvas. -- New VML DOM elements are being created for each animation frame and there is no hardware acceleration. As a result animation is usually slow and jerky, with flashing text. It is a good idea to dynamically turn off animation based on canvas support. I recommend using the excellent Modernizr to do this. -- When declaring fonts, the library explorercanvas requires the font name to be in single quotes inside the string. For example, instead of your scaleFontFamily property being simply "Arial", explorercanvas support, use "'Arial'" instead. Chart.js does this for default values. ### Bugs & issues diff --git a/gulpfile.js b/gulpfile.js index 5b64a1920..aed4b55fa 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -7,6 +7,7 @@ var gulp = require('gulp'), connect = require('gulp-connect'), replace = require('gulp-replace'), htmlv = require('gulp-html-validator'), + insert = require('gulp-insert'), inquirer = require('inquirer'), semver = require('semver'), exec = require('child_process').exec, @@ -23,6 +24,16 @@ var srcDir = './src/'; var outDir = './dist/'; var testDir = './test/'; +var header = "/*!\n\ + * Chart.js\n\ + * http://chartjs.org/\n\ + * Version: {{ version }}\n\ + *\n\ + * Copyright 2016 Nick Downie\n\ + * Released under the MIT license\n\ + * https://github.com/nnnick/Chart.js/blob/master/LICENSE.md\n\ + */\n"; + var preTestFiles = [ './node_modules/moment/min/moment.min.js', ]; @@ -54,9 +65,10 @@ gulp.task('default', ['build', 'watch']); function buildTask() { - var bundled = browserify('./src/Chart.js') + var bundled = browserify('./src/chart.js') .bundle() .pipe(source('Chart.bundle.js')) + .pipe(insert.prepend(header)) .pipe(streamify(replace('{{ version }}', package.version))) .pipe(gulp.dest(outDir)) .pipe(streamify(uglify({ @@ -65,10 +77,11 @@ function buildTask() { .pipe(streamify(concat('Chart.bundle.min.js'))) .pipe(gulp.dest(outDir)); - var nonBundled = browserify('./src/Chart.js') + var nonBundled = browserify('./src/chart.js') .ignore('moment') .bundle() .pipe(source('Chart.js')) + .pipe(insert.prepend(header)) .pipe(streamify(replace('{{ version }}', package.version))) .pipe(gulp.dest(outDir)) .pipe(streamify(uglify({ diff --git a/package.json b/package.json index c8830d93e..6a57df061 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "gulp-concat": "~2.1.x", "gulp-connect": "~2.0.5", "gulp-html-validator": "^0.0.2", + "gulp-insert": "~0.5.0", "gulp-jshint": "~1.5.1", "gulp-karma": "0.0.4", "gulp-replace": "^0.4.0", diff --git a/samples/different-point-sizes.html b/samples/different-point-sizes.html new file mode 100644 index 000000000..926eecfba --- /dev/null +++ b/samples/different-point-sizes.html @@ -0,0 +1,154 @@ + + + + +