Comparar commits

..

377 Commits

Autor SHA1 Mensagem Data
etimberg a62537a800 bump and build for 1.1.1 release 2016-04-05 18:27:27 -04:00
Evert Timberg 4495b63d0a Merge pull request #2220 from TAGraves/master
Fixed a bug with calculating the canvas width and height
2016-04-05 09:47:25 -04:00
Tommy Graves 75ce567d05 Fixed a bug with calculating the canvas width and height
A previous commit removing a workaround for an old Firefox bug left part
of that workaround in, and it was preventing the expected behavior of
the canvas size being equal to the offsetWidth and offsetHeight of the
canvas prior to instantiation of Chart.JS
2016-04-05 08:28:46 -04:00
Evert Timberg ae103c3d0f Merge pull request #2218 from eemikula/master
Change legendTemplates to use separate spans for text and icon.
2016-04-04 19:49:03 -04:00
Eric Mikula 1ccb100739 Change legendTemplates to use separate spans for text and icon.
This addresses the issue in #2192 without entirely reverting #886. Note that it still may cause confusing behavior for some legends: Specifically, the example on chartjs.org styles ".doughnut-legend li span" with a fixed width, and therefore both of the new spans will be impacted by this styling. However, now two spans are generated instead. %name%-legend-icon is used for the color icon, and %name%-legend-text can be used for styling the text. This should be described in release notes.
2016-04-04 18:22:25 -04:00
Evert Timberg 09efe9e6e2 Merge pull request #2214 from eemikula/master
Changing object type check to prevent errors when undefined. Fixes #2213
2016-04-03 15:33:12 -04:00
Eric Mikula 31b883f815 Changing object type check to prevent errors when undefined. Fixes #2213 2016-04-03 15:19:21 -04:00
Nick Downie ef923dfe28 Update package + built files to 1.1.0 version 2016-04-01 17:03:30 +01:00
etimberg 3f73433831 Fixes #2185
Undoes the merge of #1334
2016-03-29 19:41:13 -04:00
Evert Timberg d7117bc792 Add title of license to license file. Fixes #2097 2016-03-13 10:20:24 -04:00
Evert Timberg cf767f71a2 Merge pull request #2093 from aaron-em/angleLineInterval
Add angleLineInterval option
2016-03-13 10:09:43 -04:00
Aaron Miller 668b532fbe Add angleLineInterval option to radar chart 2016-03-13 09:59:19 -04:00
Evert Timberg 6507f5c087 Merge pull request #2118 from davidcochrum/master
Fix multi-dataset bar highlighting and bar highlight color logic
2016-03-11 13:29:30 -05:00
David Cochrum 131b18059a Update Chart.js 2016-03-11 12:21:45 -05:00
David Cochrum 48c082b04a Fix multi-dataset bar highlighting and bar highlight color logic 2016-03-11 12:19:12 -05:00
David Cochrum cf47543243 Fix multi-dataset bar highlighting and bar highlight color logic 2016-03-11 12:16:43 -05:00
Evert Timberg 3f2119526d Fix #2102 2016-03-06 19:03:03 -05:00
Evert Timberg d17c76ea1a Merge pull request #2090 from aaron-em/patch-1
Mention that 1.x is feature-complete
2016-03-02 16:24:35 -05:00
Aaron Miller af3bcd5cfe Mention that 1.x is feature-complete
It'll help would-be contributors (such as myself, see #2058) avoid creating PRs that won't be accepted.
2016-03-02 16:20:23 -05:00
Evert Timberg ea0d93c970 Merge pull request #1070 from mackuba/stop_animations
Stop animations when destroying a chart
2016-02-27 15:46:05 -05:00
Evert Timberg 43606d1faa Merge pull request #1334 from thePanz/patch-2
Fix error in generateLegend() function
2016-02-20 13:29:32 -05:00
William Entriken 6009b00f74 Merge pull request #1886 from coolbombom/patch-4
having differnt colors in one dataset
2016-02-20 13:11:16 -05:00
Derek Perkins 8d6209271b Add link to slack invite 2016-02-19 21:21:26 -07:00
Evert Timberg 57753b8280 update to new gulp and new uglify version. 2016-02-15 19:22:55 -05:00
Evert Timberg 111ada730c Fix typo in docs. Fixes #1042 2016-02-15 16:42:23 -05:00
Evert Timberg 4aa274d5b2 Default multiTooltipTemplate now shows the dataset label + updated built files. Fixes #612 2016-02-15 14:43:34 -05:00
Evert Timberg 4f4f804a71 Use a named define to fix #768 2016-02-15 14:38:11 -05:00
Evert Timberg d4917afba9 Update git ignore to make it easier to switch between branches. Add code climate config here as well. 2016-02-14 15:15:17 -05:00
etimberg 37883689ad Fixes #1144 with an update to the docs to indicate that labels are required for each point 2016-02-07 19:58:15 -05:00
etimberg cf0b550a80 Check to ensure dom node exists when calculating size. Fixes #919 2016-02-07 19:23:54 -05:00
coolbombom 3f658555ba I will try again!
had a bad effect on color that was not array .... fully tested now, is working in my solution!
2016-01-11 12:48:09 +01:00
coolbombom 1f1e6b4e44 minor update, missed a small detail sorry!!!
missed a small detail, resolved in an error, sorry!
2016-01-11 12:17:08 +01:00
coolbombom 3ac54b8790 having differnt colors in one dataset
Hi updated the bar chart so the bars can have different colors in one dataset!

cheers
c_bb
2016-01-11 12:02:32 +01:00
Evert Timberg 126e318fef Update built files 2016-01-09 10:59:52 -05:00
Evert Timberg 1d3cb8ec41 Merge pull request #1875 from michaelarnauts/master
Ignore null values when calculating scale
2016-01-09 09:40:07 -05:00
Michaël Arnauts 57bd8c7715 Ignore null values when calculating scale 2016-01-09 12:04:29 +01:00
Evert Timberg 104143672b Merge pull request #1874 from Parent5446/patch-1
Added documentation about tooltip templates
2016-01-08 23:49:32 -05:00
Tyler Romeo c5f141306f Added documentation about tooltip templates
It can be a little unclear what the actual format for tooltip templates are. Added information concerning how the tooltip templates are evaluated, and what context, i.e., variables, is available inside of them.
2016-01-08 20:02:45 -08:00
Evert Timberg 299c4b3ae1 Update readme for latest v2 beta release 2016-01-01 12:56:08 -05:00
Evert Timberg cea557849a Merge pull request #1844 from zachpanz88/patch-2
Bump copyright year in license
2015-12-31 16:41:26 -05:00
Zach Panzarino 12a35b5d7b Bump copyright year in license 2015-12-31 15:41:36 -05:00
etimberg cfa6eb1289 Update built files 2015-12-27 12:10:07 -05:00
Evert Timberg 92d4d989f5 Merge pull request #1834 from damiansilbergleithcunniff/issue-1764-default-pie-chart-colors
Issue 1764: Add default colors for Pie Charts
2015-12-27 12:08:33 -05:00
Damian Silbergleith Cunniff cebbca67d1 Choose a "better" set of 12 default colors/highlight colors for pie charts 2015-12-27 09:14:15 -07:00
Damian Silbergleith Cunniff c47e4c1da1 Change reference to index to prevent running off the end of the array 2015-12-26 15:36:15 -07:00
Damian Silbergleith Cunniff b06344563d spaces -> tabs 2015-12-26 10:04:29 -07:00
Damian Silbergleith Cunniff 77185993df fix spaces -> tabs 2015-12-26 10:01:06 -07:00
Damian Silbergleith Cunniff fd2344dd5f Update the docs to reflect the new feature 2015-12-26 09:47:59 -07:00
Damian Silbergleith Cunniff e949edacf5 Update the pie chart to use the default color/highlight if none is specified 2015-12-26 09:41:31 -07:00
Damian Silbergleith Cunniff a868a2f61e Add default global values for Color and Highlight color 2015-12-26 09:34:43 -07:00
Evert Timberg ee6aabaffc Merge pull request #1302 from jantimon/master
More robust in-between arc calculation see #1301
2015-12-25 17:44:26 -05:00
Evert Timberg 69695235ac Merge pull request #1771 from ryoon/recent-firefox
Remove Firefox workaround
2015-12-25 13:39:21 -05:00
Evert Timberg 5cdd7a0893 Merge pull request #1141 from kirkstrobeck/gulp-watch
Add livereload to Gulp  task
2015-12-24 23:17:29 -05:00
Evert Timberg f63debe2c7 Merge pull request #1040 from dima117/master
fix multiTooltip appearance with empty title
2015-12-24 21:50:18 -05:00
William Entriken 3c6a736413 Merge pull request #1192 from kkirsche/patch-1
Remove moot `version` property from bower.json
2015-12-21 16:05:38 -05:00
Ryo ONODERA e94bd460a7 Remove Firefox workaround
The workaround for older Firefox should be removed, because latest
supported Firefox 38.4.0/42.0 do not require it.
And it has side effect like #1198 or my problem on Kintone on cybozu.com.
2015-12-12 09:00:12 +09:00
Evert Timberg 4297672424 Merge pull request #1092 from tannerlinsley/negative-arcs-fix
Only draw positive radius arcs Fixes #592
2015-11-16 21:17:46 -05:00
William Entriken 07aa9473f1 Typo: consistent capitalization 2015-11-16 18:11:22 -05:00
Jake 2e9c3d3109 Merge pull request #1621 from jakesyl/add-composer
Add Composer file
2015-11-08 14:37:41 -05:00
Jake a5e382ab8a add composer file
add composer file
2015-11-05 13:36:04 -05:00
Jake 4476c698c5 Merge pull request #1589 from zachpanz88/patch-1
Change license link
2015-11-04 13:07:25 -05:00
Evert Timberg 257da76b4c Merge pull request #1190 from Nek-/patch-1
Added ignore section
2015-11-01 17:16:22 -05:00
Evert Timberg a169e5ad41 Merge pull request #1262 from mattclegg/master
Call onAnimationComplete when reached last frame
2015-11-01 17:11:24 -05:00
Zach Panzarino 682545e1e3 Change license link
The link to the license now points to the direct license that applies for chart.js, rather than a generic MIT license
2015-10-28 21:22:41 -04:00
Tanner Linsley 69e886ad5b Update README.md 2015-10-26 12:44:48 -06:00
Tanner Linsley 249ca0cef7 Update README.md 2015-10-26 12:43:50 -06:00
Tanner Linsley f1a3fb2361 Merge pull request #1577 from yanarchy/patch-1
Add npm info to getting started doc.
2015-10-26 12:42:54 -06:00
Yan Fan b87106c181 Add npm info to getting started doc. 2015-10-26 11:41:01 -07:00
Tanner Linsley b4856d2e24 Update README.md 2015-10-24 18:07:26 -06:00
Tanner Linsley a68c53cf1e Update README.md 2015-10-24 18:06:59 -06:00
Tanner Linsley 891bd63ac7 Update README.md 2015-10-24 18:06:36 -06:00
Tanner Linsley 70b437b41a Update README.md 2015-10-24 18:05:24 -06:00
Tanner Linsley 07b1758c2e Update README.md 2015-10-24 17:56:28 -06:00
Tanner Linsley 55235ef03c Update README.md 2015-10-24 17:55:34 -06:00
Tanner Linsley dfdd865508 Update README.md 2015-10-24 17:43:51 -06:00
Tanner Linsley c11145bb2d Update README.md 2015-10-24 17:37:18 -06:00
Tanner Linsley 9c39d47bc7 Update README.md 2015-10-24 17:26:10 -06:00
Tanner Linsley 0510ba4139 Update README.md 2015-09-30 12:06:26 -06:00
Tanner Linsley 85e6d1ae71 Added Current 2.0 release to Readme 2015-09-30 11:59:09 -06:00
Tanner Linsley 322abd4361 Merge pull request #1476 from nnnick/v1.0-readme-update
Update v1.x readme to reflect release status
2015-09-24 22:34:00 -06:00
Tanner Linsley f992ddd0d7 Update README.md 2015-09-24 22:33:05 -06:00
Tanner Linsley 407eb846d0 Update v1.x readme to reflect release status 2015-09-21 14:28:10 -06:00
Evert Timberg dd4a67e85c Merge pull request #1067 from rvaidya/master
Added a scaleBackgroundColors configuration option for radar charts, to...
2015-09-17 17:28:00 -04:00
Evert Timberg 7fcd4dcae8 Merge pull request #1450 from nlzet/fix-legend-template-doc
Fix span closed before appending the label
2015-09-14 18:44:04 -04:00
NLZ13 8481811110 Fix span closed before appending the label 2015-09-13 00:33:51 +02:00
Evert Timberg c38e852b61 Merge pull request #1449 from bgvianyc/master
adding template language reference to docs
2015-09-12 11:10:40 -04:00
Barry Gitarts b601e2c2a1 adding template language reference to docs 2015-09-12 09:02:26 -04:00
Evert Timberg b41ba24fff Merge pull request #1439 from bengesoff/patch-2
fixed very small typo
2015-09-04 13:49:49 -04:00
Ben Gesoff 8983929f18 fixed very small typo
wrong it's
2015-09-04 17:08:58 +01:00
Tanner Linsley 2fff73f9e3 Merge pull request #1397 from coolbombom/patch-3
Fix scale error before animation complete
2015-08-28 16:29:30 -06:00
Tanner Linsley 1ae2884a04 Merge pull request #1402 from hrniels/tooltip
Added tooltipTitleTemplate option.
2015-08-28 16:28:11 -06:00
Evert Timberg 2b9a575d4d Merge pull request #1389 from ericjperry/fix/datasetStroke
The datasetStroke option has been fixed for line graphs
2015-08-22 09:39:20 -04:00
Evert Timberg 41fb914952 Merge pull request #1390 from internalfx/patch-1
Closes #1309
2015-08-22 09:38:03 -04:00
Nils Asmussen a14309d95f Added tooltipTitleTemplate option. 2015-08-22 13:47:01 +02:00
coolbombom 80ba5aa1c5 error thrown
error thrown (TypeError: this.scale is undefined) if destroy is called before animation is complete, this update fix this error!
2015-08-21 10:53:52 +02:00
Internalfx ac5bf729c5 Closes #1309
Doughnut.addData() broken for index of 0 #1309
2015-08-18 18:39:11 -07:00
Eric Perry 3f77eb83b2 The datasetStroke option has been fixed for line graphs 2015-08-18 17:56:19 -04:00
Evert Timberg ac360b8dd1 Merge pull request #1382 from bengesoff/patch-1
fixed two typos
2015-08-18 10:42:11 -04:00
Ben Gesoff c276c3a974 fixed two typos
wrong it's
2015-08-17 16:37:01 +01:00
Ema Panz d7ee18372a Fix error in generateLegend() function 2015-07-25 17:32:58 +02:00
Tanner Linsley 43f19359a9 Merge pull request #1308 from eunicekokor/patch-1
Update 00-Getting-Started.md
2015-07-22 11:32:08 -06:00
Evert Timberg f56a7db8fc Merge pull request #1181 from paulmasson/master
Update CDN link
2015-07-18 08:01:29 -04:00
eunice 804fcea46a Update 00-Getting-Started.md
Closes a small issue I found while going through the documentation https://github.com/nnnick/Chart.js/issues/1307
2015-07-13 17:45:27 -07:00
Jan Nicklas 0bb3a9b024 Fix typo 2015-07-10 11:53:35 +02:00
Jan Nicklas 961fd11098 More robust in-between arc calculation see #1301 2015-07-10 11:47:48 +02:00
Evert Timberg 66cf8ab787 Merge pull request #1268 from klaemo/patch-1
add license to package.json
2015-07-01 09:04:44 -04:00
Clemens Stolle 79b02bcf26 add license to package.json
just to be a good npm citizen :)
2015-07-01 11:03:00 +02:00
mattclegg d5f1738a3f Merge branch 'master' of github.com:nnnick/Chart.js
# By Amir E. Aharoni
# Via Amir E. Aharoni (1) and Evert Timberg (1)
* 'master' of github.com:nnnick/Chart.js:
  Fix the spelling of "separate"
2015-06-30 11:13:37 +01:00
mattclegg f7e3962087 Call onAnimationComplete when reached last frame 2015-06-30 11:13:30 +01:00
Evert Timberg 1367a234ee Merge pull request #1241 from amire80/spelling
Fix the spelling of "separate"
2015-06-22 18:12:38 -04:00
Amir E. Aharoni 02616b9f17 Fix the spelling of "separate" 2015-06-23 01:01:59 +03:00
Kevin Kirsche 3d389d7c09 Remove moot version property from bower.json
Per bower/bower.json-spec@a325da3
2015-06-10 18:25:22 -04:00
Maxime Veber 28d30b4f5b Added ignore section 2015-06-10 22:32:23 +02:00
paulmasson d1cccd3546 Update CDN link 2015-06-08 16:45:47 -07:00
kirkstrobeck 8db79ae365 nnnick/Chart.js#1140: Watch sample folder 2015-05-27 18:28:45 -07:00
kirkstrobeck 8ef3aaa87d Add livereload to Gulp task 2015-05-27 18:07:01 -07:00
Evert Timberg e093fdf572 Merge pull request #1127 from leighquince/fix/radar-datasetfill-option
fix for radar chart ignoring datasetFill option
2015-05-20 17:54:17 -04:00
Leigh Quince 73b0d587ba fix for radar chart ignoring datasetFill option 2015-05-20 21:53:30 +02:00
Evert Timberg 2ce4291e98 Merge pull request #1122 from ismeta/fix-span-tag
Fixes #886 - Close span tags properly in legend generation template.
2015-05-16 08:37:38 -04:00
Vanessa Ung 598a6f3485 Fixes #886 - Close span tags properly in legend generation template. 2015-05-16 15:31:56 +10:00
Tanner Linsley b8691c9581 Revert "Merge pull request #856 from tannerlinsley/editable-chart-config"
This reverts commit a8063de6b8, reversing
changes made to 7f513b87ee.
2015-05-11 18:57:14 -06:00
Evert Timberg 4e3dd8ae3f Merge pull request #1066 from tannerlinsley/add-stacked-area
Add StackedArea chart type to community extensions
2015-05-06 20:31:27 -04:00
Evert Timberg cc57b9e581 Merge pull request #1098 from WouterSioen/fix-typo
Fix typo
2015-05-05 14:39:35 -04:00
Wouter Sioen aad966820e Fix a typo: segment vs segement
Fix typo in PolarArea

Update 04-Polar-Area-Chart.md
2015-05-05 16:31:00 +02:00
William Entriken 5443886ec3 Merge pull request #1068 from nnnick/animation-refactory
Animation refactory
2015-05-04 15:55:59 -04:00
William Entriken a8063de6b8 Merge pull request #856 from tannerlinsley/editable-chart-config
Data now editable right from chart config
2015-05-04 15:28:03 -04:00
Tanner Linsley 1df2b37bc5 Only draw positive radius arcs Fixes #592 2015-04-30 15:49:52 -06:00
William Entriken 7f513b87ee Merge pull request #952 from msmiley/patch-1
add datasetLabel for multiTooltip on dynamically-added points
2015-04-24 16:32:24 -04:00
William Entriken a3d4bc0bfe Merge pull request #851 from jtblin/master
Fix #507 - calculate container width and heigh without padding
2015-04-24 10:28:29 -04:00
Evert Timberg b5692c8534 Merge pull request #1069 from mackuba/fix_endpoint
Prevent taking vertical space for X labels more than once
2015-04-17 06:33:42 -04:00
Kuba Suder 66f7f96d4b stop animations when destroying a chart
otherwise the animation keeps updating the chart for some time after it
was supposed to be destroyed, and when the canvas might have been
already reused for a new chart
2015-04-16 22:41:53 +02:00
Kuba Suder 2e311896ad prevent taking vertical space for x labels more than once
calculateXLabelRotation() subtracts space needed for x labels from
this.endPoint, but if this block is called more than once then the space
is subtracted more than once and the chart gets smaller and smaller with
every iteration
2015-04-16 22:23:17 +02:00
Tanner Linsley 8cc5be1212 Revert changes to build 2015-04-16 13:57:27 -06:00
William Entriken b0a780822a Merge pull request #1025 from pijey/feature/offsetgridlines-linechart
Add offsetGridLines option to Line charts
2015-04-16 15:27:43 -04:00
William Entriken a932442d26 Merge branch 'chasd00-piechart-redraw-after-zero-segment-values' 2015-04-16 15:17:36 -04:00
William Entriken 889c9de779 Merge #756 Fixes #661 2015-04-16 15:17:28 -04:00
Rahul Vaidya d91c4a14e9 Decouple radar chart background colors from angle line drawing so they can be passed separately. 2015-04-16 11:36:49 -07:00
Rahul Vaidya 9eedf9adb6 For radar chart background colors, don't recalculate center offset multiple times. Verify that background color count is same as axes count. 2015-04-16 11:26:21 -07:00
Rahul Vaidya 7045fdbb5a Added a scaleBackgroundColors configuration option for Radial charts, to add a background color for each axis in the chart. 2015-04-16 09:22:31 -07:00
Tanner Linsley e69aa04918 Add StackedArea chart type to community extensions 2015-04-16 00:50:08 -06:00
Nick Downie c7f52f516c Derped HTML attributes. 2015-04-13 16:35:14 +01:00
Nick Downie 8c641d21d8 Merge pull request #1062 from dima117/patch-1
Update 06-Advanced.md
2015-04-13 16:32:41 +01:00
dima117 9605409838 Update 06-Advanced.md
https://github.com/nnnick/Chart.js/issues/1060
2015-04-13 15:39:44 +03:00
Evert Timberg 604d6bd4e3 Merge pull request #677 from rylanhalteman/fix-yLabel-padding
add 10 to yLabelWidth on set, rather than on use
2015-04-12 08:06:23 -04:00
Tanner Linsley 14f4fae786 Only start digest on first request. Cleanup 2015-04-12 00:05:31 -06:00
Evert Timberg c476db0dd7 Use findNextWhere correctly. 2015-04-11 23:05:05 -04:00
Evert Timberg 0a5f92a854 Remove the minAnimationSteps option since we did not end up needing it. 2015-04-11 21:11:49 -04:00
Evert Timberg b1cbf04f25 Remove the unused lastTimeRun from the animation service 2015-04-11 20:47:35 -04:00
Tanner Linsley 70b8bf106c Always execute last frame 2015-04-11 18:42:11 -06:00
Tanner Linsley 99bf85e913 Merge remote-tracking branch 'origin/animation-refactory' into animation-refactory
Conflicts:
	src/Chart.Core.js
2015-04-11 18:37:01 -06:00
Tanner Linsley e0c208be58 Frame Dropper 2015-04-11 18:34:06 -06:00
Evert Timberg 26eca23706 Implement cancel animation frame in the animation service 2015-04-11 20:17:46 -04:00
Evert Timberg 98253fea5d Fix some bugs in the animation stuff 2015-04-11 20:08:17 -04:00
Evert Timberg 9a13dd78fc Fix a typo 2015-04-11 19:42:54 -04:00
Evert Timberg 3e59438646 Integrate animation service with chart 2015-04-11 19:33:20 -04:00
Tanner Linsley 7a6f2b4f06 Src changes... derrrr 2015-04-11 17:30:06 -06:00
Tanner Linsley a417dd00c5 Merge pull request #1058 from tannerlinsley/animation-refactory
Chart.AnimationService
2015-04-11 17:23:59 -06:00
Tanner Linsley eee5af5924 Chart.AnimationService 2015-04-11 17:19:29 -06:00
Evert Timberg d3579334b2 Add an option to control the minimum number of animation steps. 2015-04-11 19:17:30 -04:00
Evert Timberg 0b8fd966ff Chart animations will now use the animation service provided in Chart.animationService. 2015-04-11 19:02:50 -04:00
Evert Timberg 972bc5636d Merge pull request #711 from cmweiss/master
Default color for Doughnut/Pie
2015-04-09 11:25:45 -04:00
dima117 ca7a39232a fix multiTooltip appearance with empty title
https://github.com/nnnick/Chart.js/issues/1039
2015-04-03 22:19:34 +03:00
Evert Timberg 44ed661e3b Merge pull request #1036 from dima117/master
helpers.generateLabels throws exception #1035
2015-04-01 18:04:12 -04:00
dima117 4009dbd6a0 helpers.generateLabels throws "labelTemplateString is not defined" exception #1035 2015-03-31 22:06:41 +03:00
pijey 2677360f4b Add offsetGridLines option to Line charts 2015-03-25 11:51:56 +01:00
Evert Timberg e461788b2b Merge pull request #1022 from GitGal/master
Added possible animation effects to getting started guide
2015-03-24 19:17:06 -04:00
GitGal f7ed97a33e Update 00-Getting-Started.md
Move Possible effects list above animationEasing
2015-03-24 18:17:41 +01:00
gitgal fc0434b3da add all possible easing animations to 00-Getting-Started.md 2015-03-24 18:07:35 +01:00
Nick Downie 1408c68205 Merge pull request #1005 from zymiboxpay/master
fix custom build bug
2015-03-18 11:38:15 +00:00
zymiboxpay 53bc8e769f fix custom build bug 2015-03-18 16:26:17 +08:00
Evert Timberg b5f73e2087 Merge pull request #1002 from nnnick/fix/issue927
fixes #927
2015-03-17 10:59:49 -04:00
William Entriken cb113c6452 fixes #927 2015-03-17 10:12:01 -04:00
William Entriken 8e5f1d9667 Merge pull request #575 from msrocka/master
fix #570: getDecimalPlaces throws error
2015-03-17 09:28:54 -04:00
William Entriken 47d23601b1 Fix CodeClimate issues 2015-03-16 19:14:36 -04:00
William Entriken 212d513746 Merge pull request #999 from mbrevda/unattachedElement
Properly size unattached canvas
2015-03-16 10:22:39 -04:00
Moshe Brevda 3e6883bdc0 Use default canvas size if one cannot be intelligently procured 2015-03-16 13:58:09 +02:00
Nick Downie 930b16a0af Versioned release files 2015-03-10 11:04:30 +00:00
Nick Downie 78d9627e4d Bump bower/package versions 2015-03-10 11:03:30 +00:00
Nick Downie 785f0b64b7 Merge pull request #983 from nnnick/release/v1.0.2
Release 1.0.2
2015-03-09 18:41:53 +00:00
Nick Downie d2b73bdc5b Release 1.0.2 2015-03-09 18:37:37 +00:00
Nick Downie 4b120ccbe9 Merge pull request #982 from nnnick/fix/automatic-chart-size-src
Target src files from #142
2015-03-09 17:20:29 +00:00
Nick Downie 1fd52e702c Merge pull request #981 from nnnick/fix/cancel-anim-frame
Ensure cancelAnimFrame has no function context
2015-03-09 17:16:15 +00:00
Nick Downie de564326b0 Target src files from #142 2015-03-09 17:14:09 +00:00
Nick Downie 154ce016cc Ensure cancelAnimFrame has no function context 2015-03-09 17:05:20 +00:00
Evert Timberg 5d8df20b0d Merge pull request #962 from steaks/removeUnecessaryComment
Removed an unnecessary comment
2015-03-02 11:39:28 -05:00
Steven Wexler 24248120a9 Removed an unnecessary comment 2015-03-01 20:31:44 -05:00
Jake 019e985c8f Merge pull request #898 from etimberg/fix/line_chart_single_label
Fix a divide by 0 error when there is only 1 label
2015-02-24 15:00:53 -05:00
Mike Smiley ff493738a2 add datasetLabel for multiTooltip on dynamically-added points 2015-02-24 14:19:01 -05:00
Nick Downie 5ea265983e Merge pull request #931 from jtibble/master
Removed trailing comma
2015-02-11 00:09:58 +00:00
John Tibble c09cac1cdd Removed trailing comma
Automated scan at my place of employment caught this trailing comma
2015-02-10 16:13:03 -05:00
William Entriken afd2631728 Merge pull request #917 from nnnick/fix-915
Fixes #915
2015-02-04 11:51:14 -05:00
William Entriken 4b09072c2a Fixes #915 2015-02-03 14:09:17 -05:00
William Entriken b865fd317a Fixes #901 2015-02-02 16:56:43 -05:00
Christopher Weiss bb6237a15e Accidentally left in Array.prototype.map. 2015-01-30 11:12:08 -05:00
Christopher Weiss b8b7c85c5e Using helper.each instead of Array.prototype.map 2015-01-30 11:01:44 -05:00
Jake 5ec66308e4 Update .travis.yml 2015-01-29 21:43:02 -05:00
William Entriken 9c6a7397b5 Merge pull request #867 from bendxn/master
Doughnut charts handling negative values
2015-01-29 16:54:45 -05:00
Evert Timberg 87b7f8070a Merge pull request #889 from bjornarg/cancelanimframe-fix
Fix issue with "Illegal invocation" in cancelAnimFrame.
2015-01-28 17:55:47 -05:00
Jake 2d28075cde ADD GH PR guidelines 2015-01-28 14:22:28 -05:00
Evert Timberg 2e0211320b Fix a divide by 0 error when there is only 1 label 2015-01-27 18:31:03 -05:00
William Entriken 8244dd1271 Merge pull request #551 from mparramont/patch-1
Fix global config multiTooltipTemplate comment
2015-01-27 14:04:10 -05:00
William Entriken 654e02763f Merge pull request #553 from johnheroy/master
Documentation: change lineColor to strokeColor for the first 3 example charts
2015-01-27 14:03:13 -05:00
William Entriken 0c1c9824b2 Merge pull request #694 from spmjs/master
Add spm support
2015-01-27 13:48:47 -05:00
William Entriken 63b14dde15 Clean up PR process 2015-01-27 13:35:30 -05:00
Bjørnar Grip Fjær 6f6f80e6d7 Fix issue with "Illegal invocation" in cancelAnimFrame. 2015-01-27 19:14:00 +01:00
Ben Dixon 13396c72b3 Merge remote-tracking branch 'upstream/master' 2015-01-26 18:49:17 -06:00
Evert Timberg a5550cef6b Merge pull request #142 from JonRowe/automatically_size_chart
Automatically size charts based upon the canvas size.
2015-01-26 18:55:49 -05:00
Christopher Weiss 0f49be56a4 Update 05-Pie-Doughnut-Chart.md 2015-01-26 16:33:24 -05:00
Christopher Weiss b9776736d4 Removed custom hue(), using hsl() 2015-01-26 16:28:11 -05:00
Jon Rowe 9ab36291a9 force calculated width/heights back to context, for firefox compatibility 2015-01-26 20:15:04 +11:00
Jon Rowe 657e53c117 make charts dependent on calculated width 2015-01-26 20:15:04 +11:00
Evert Timberg dc2ebab883 Merge pull request #890 from jakesyl/master
Update CONTRIBUTING.md
2015-01-25 21:29:22 -05:00
Jake 82571710c6 Update CONTRIBUTING.md 2015-01-25 20:48:33 -05:00
William Entriken 06adbb0c54 Merge pull request #703 from etimberg/fix/polar_area_update
Ensure that scales for polar area graphs are regenerated on updates.
2015-01-23 15:15:58 -05:00
Ben Dixon d051dfe47f handling negative values in doughnut charts 2015-01-15 13:40:08 -06:00
Ben Dixon 06b02e9c33 Revert "doughnut charts handling negative values"
This reverts commit 8b3a98f242.
2015-01-15 13:38:20 -06:00
Ben Dixon 8b3a98f242 doughnut charts handling negative values 2015-01-15 13:31:54 -06:00
Tanner Linsley 026611110a Updated Samples
Samples now include a “Randomize Data” button which utilizes the latest
changes.
2015-01-08 10:13:14 -07:00
William Entriken 092b011f9b formatting 2015-01-08 09:40:54 -05:00
William Entriken 8a027f49a4 typo 2015-01-08 09:39:49 -05:00
Tanner Linsley 359e94151c Data editable from chart config 2015-01-07 21:45:50 -07:00
Nick Downie 02f858b264 1.0.1 release builds 2015-01-07 22:49:33 +00:00
Nick Downie bdb49e6396 Merge pull request #611 from fntneves/feature/toggle-grid-lines
Add option to toggle grid vertical/horizontal lines
2015-01-07 22:44:59 +00:00
Nick Downie 05dbcd3a72 Merge pull request #840 from tannerlinsley/master
External Tooltips, Documentation and Samples
2015-01-07 22:44:02 +00:00
Tanner Linsley 64de3eb711 externalTooltips now labeled customTooltips 2015-01-06 22:53:30 -07:00
Evert Timberg 854cebc59c Merge pull request #855 from nnnick/fix/reset-canvas
Restore original canvas context when destroying
2015-01-06 19:17:01 -05:00
Nick Downie 74c9ef50c2 Space between status badges 2015-01-07 00:07:06 +00:00
Nick Downie 85f3755f9a Restore original canvas context when destroying 2015-01-06 23:44:51 +00:00
Jake 7aa867cf24 Merge pull request #850 from jakesyl/master
Increment Copyright Year
2015-01-04 17:14:15 -05:00
Jake 5d4e7cebea Update Chart.Core.js 2015-01-04 17:12:58 -05:00
William Entriken ed3e47f560 Merge pull request #846 from nnnick/fix/ci-builds
Fix Travis builds
2015-01-03 23:00:53 -05:00
Nick Downie d48979526f Merge pull request #842 from nnnick/fix/contributing-guidelines
Rewrite contributing guidelines
2015-01-03 17:26:21 +00:00
Nick Downie 329ad3cdce Remove checking .min file in CI 2015-01-03 17:19:28 +00:00
Nick Downie 84e859b6c5 Remove email notifications 2015-01-03 15:49:58 +00:00
Nick Downie 81d4f97abc Remove unnecessary semicolons 2015-01-03 15:40:47 +00:00
Nick Downie 2e4bb1899f Fix mixed whitespace 2015-01-03 15:40:33 +00:00
Nick Downie c9878b8434 Add Stack Overflow tag link to README 2015-01-03 15:30:58 +00:00
Jake 453310a338 Merge pull request #844 from jakesyl/master
move build status next to code climate button
2015-01-02 22:57:33 -05:00
Jake 9af5d0c9d6 move build status next to code climate 2015-01-02 22:56:58 -05:00
Nick Downie 7626dcf14e Link to contributing guide from readme 2015-01-01 23:49:10 +00:00
Nick Downie b4df89fcd1 Bump copyright year in license 2015-01-01 23:46:02 +00:00
Nick Downie 8c41c5c1b7 Rewrite contributing guidelines 2015-01-01 23:45:52 +00:00
William Entriken cfc4599a30 Add Travis CI support 2015-01-01 12:57:21 -05:00
Tanner Linsley 8c1e9588a1 External Tooltips, Documentation, and Samples 2014-12-30 13:05:11 -07:00
Jake 70c3672963 Merge pull request #841 from jakesyl/codeclimate
Move Code Climate Badge
2014-12-30 14:25:23 -05:00
Jake f4a5f67f7c Move Code Climate Badge 2014-12-30 14:24:55 -05:00
Jake 80e972c351 Delete dev instruction
@nnnick will rewrite this
2014-12-30 14:03:40 -05:00
Jake d320ce6eaf Merge pull request #750 from CAYdenberg/nnnick
Added link to CAYdenberg/Chart.js
2014-12-29 17:21:59 -05:00
Jake 7e97aa3300 Update CONTRIBUTING.md 2014-12-29 16:18:44 -05:00
Jake 102c069d74 Update CONTRIBUTING.md 2014-12-29 15:56:52 -05:00
Jake d8353c2b9a Update CONTRIBUTING.md 2014-12-29 15:55:17 -05:00
Nick Downie 932908532c Merge pull request #650 from fulldecent/patch-2
[CONTROVERSIAL] Update scope: new chart types are off topic
2014-12-29 20:42:54 +00:00
William Entriken 718dcd1a2b Merge pull request #5 from fulldecent/origin/patch-2
Origin/patch 2
2014-12-29 15:41:39 -05:00
William Entriken f81d6f45e1 Update readme about where to put new chart types 2014-12-29 15:40:09 -05:00
William Entriken 8522d4e60e Update to have new chart types in external repos 2014-12-29 15:38:03 -05:00
Jake 211850add2 Merge pull request #810 from Winnetou/patch-1
Minor typos
2014-12-29 15:12:33 -05:00
Derek Perkins aa96a3f33a Merge pull request #834 from jakesyl/patch-1
Add Code Climate Integration
2014-12-29 13:09:43 -07:00
Jake ac05a62000 Add Code Climate Integration 2014-12-28 22:18:55 -05:00
Mieszko f18b7ebd57 Minor typos 2014-12-09 11:11:49 +01:00
chad a7712e8c71 prevent divide by zero error when calculating a circumference 2014-11-13 11:36:13 -06:00
Casey Ydenberg 71bf3c8ee5 Added link to CAYdenberg/Chart.js 2014-11-11 15:11:30 -07:00
Jerome Touffe-Blin 1900c3b0f3 Fix #507 - calculate container width and heigh without padding 2014-10-25 13:21:52 +11:00
Christopher Weiss 73faf3413b Update Chart.Doughnut.js 2014-10-21 13:32:45 -04:00
Christopher Weiss fdc9be3e23 Correction in algorithm. 2014-10-21 13:28:45 -04:00
Christopher Weiss 7e21cb4e04 Pointed to core and doughnut. 2014-10-21 10:19:58 -04:00
Christopher Weiss 8984e8c2c4 Create doughnut.color.html
To test the new version of doughnut.
2014-10-21 10:16:30 -04:00
Christopher Weiss 686ea49953 Hue uses switch & fixed other problems. 2014-10-21 10:08:54 -04:00
Christopher Weiss ae9eaa95c7 hue() complete but undebugged. 2014-10-20 22:18:50 -04:00
Christopher Weiss e21147cbb9 Prototype for hue() & default fillColor to use it. 2014-10-20 21:49:41 -04:00
Evert Timberg 98c1ac439d Ensure that scales for polar area graphs are regenerated on updates. 2014-10-19 20:04:21 -04:00
chencheng 337511110c Add spm support 2014-10-15 17:28:50 +08:00
Rylan Halteman 5ab5e8400a add 10 to yLabelWidth on set, rather than on use 2014-10-08 11:36:39 -04:00
William Entriken 7eabb70130 Add strict language to README. 2014-10-01 12:18:47 -04:00
William Entriken ae65fde3e9 [CONTROVERSIAL] Update scope: new chart types are off topic 2014-09-26 12:37:51 -04:00
John Heroy 27a121c6b2 Change 'strokeColor' to 'fillColor' on 02-Bar-Chart.md 2014-09-25 09:49:20 -07:00
Nick Downie 1cfa42bc24 Merge pull request #627 from fulldecent/patch-2
Separate CONTRIBUTING.md, see https://github.com/blog/1184-contributing-...
2014-09-17 15:04:30 +01:00
William Entriken 401ff95867 move contributing to CONTRIBUTING.md, helps with NEW ISSUES 2014-09-15 12:16:31 -04:00
William Entriken ccc85c80d1 Separate CONTRIBUTING.md, see https://github.com/blog/1184-contributing-guidelines 2014-09-15 12:15:34 -04:00
Nick Downie 61b525a645 Merge pull request #606 from fulldecent/patch-1
Use canonical docs url
2014-09-10 16:32:57 +01:00
Francisco Neves a406fdae58 Update docs for toggle Horizontal/Vertical Lines feature 2014-09-08 17:49:19 +01:00
Francisco Neves a3daf1ca24 Add option to toggle grid vertical/horizontal lines 2014-09-08 16:10:45 +01:00
William Entriken 2ef91b1c78 Use canonical docs url 2014-09-04 13:48:37 -04:00
msrocka 5282c63ec3 fix #570: getDecimalPlaces throws error 2014-08-25 13:29:22 +02:00
Nick Downie 0a59a3c4df Merge pull request #560 from chandruxp/master
Fix for Almond AMD
2014-08-20 22:47:21 +01:00
chandruxp 47cf4f4814 Fix for Almond AMD 2014-08-20 15:20:46 -04:00
John Heroy e6cbd9dc7f Change lineColor to strokeColor in legendTemplate for Line, Bar, and Radar charts 2014-08-19 22:42:39 +08:00
Miguel Parramon f825a31ce4 Fix global config multiTooltipTemplate comment 2014-08-19 13:19:37 +02:00
chandruxp 53c4cd5ce1 Fix for Almond AMD 2014-08-18 18:52:50 -04:00
Nick Downie 8b840ce56b Pre-release version bump to beta.4 2014-08-17 23:21:11 +01:00
Nick Downie 7eec283d70 Merge pull request #435 from nnnick/fix/sparse-datasets
Resolve issues with sparse datasets & solve bezier capping to scale bounds
2014-08-17 23:18:42 +01:00
Nick Downie 10a9ef46cb Add in extra bezier debug point 2014-08-17 23:14:30 +01:00
Nick Downie 179d80a93b Cap bezier handles inside the scale 2014-08-17 22:32:36 +01:00
Nick Downie 48f10196f6 Use null checking for which points to draw/bezier 2014-08-03 19:20:31 +01:00
Nick Downie bd25b5c7fd New methods for array finding 2014-08-03 19:19:54 +01:00
Nick Downie 09c0f3308c Whitespace cleanup 2014-08-03 16:39:04 +01:00
Nick Downie 30777e4a87 Merge branch 'master' into fix/sparse-datasets
Conflicts:
	Chart.min.js
2014-08-03 16:05:34 +01:00
Nick Downie 14e72759ee Merge pull request #331 from kara/patch-1
Update copyright year in license to 2014
2014-07-27 23:27:32 +01:00
Nick Downie d47e600f1a Docs note on maintain aspect ratio option 2014-07-27 23:12:03 +01:00
Nick Downie 5bd10297fb Update built output 2014-07-27 23:03:32 +01:00
Nick Downie 55a115179e Fix reference error when tagging a release 2014-07-27 23:02:30 +01:00
Nick Downie 92e73bd28a Merge pull request #490 from nnnick/feature/version-bump
Create a task to bump + write version numbers
2014-07-27 22:59:14 +01:00
Nick Downie ebc955f562 Merge pull request #431 from Mardaneus86/patch-1
Missing draw method in Writing new chart types
2014-07-27 22:58:55 +01:00
Nick Downie 5683c11ebd Merge pull request #438 from Miosss/templateEnchanceme
Alternative scale templating. Passing function as template.
2014-07-27 22:58:06 +01:00
Nick Downie 61467e107f Merge pull request #443 from andyburke/aspectratios
Allow for responsive chart to take up its entire container.
2014-07-27 22:57:29 +01:00
Nick Downie adf6f3abb2 Create a task to bump + write version numbers
Also run `gulp release` to tag the latest release.
2014-07-27 21:41:49 +01:00
Nick Downie 22c50b0aba Merge pull request #460 from ooflorent/fix/npm-package
Add main in package.json
2014-07-17 10:02:01 +01:00
Florent Cailhol edb245b649 Add main file 2014-07-17 09:42:16 +02:00
Andy Burke 16cf465575 Add a small amount to docs. 2014-07-10 17:47:02 -07:00
Andy Burke 997a216b50 Allow for responsive charts to take up entire container by setting responsive: true and maintainAspectRatio: false. 2014-07-10 17:45:17 -07:00
Miosss d193951dc5 Alternative templating, cleanup.
Just added brackets.
2014-07-10 13:13:38 +02:00
Miosss c37c58ad39 Alternative scale templating. Passing function as template.
Allows to choose template mechanism - processing function or original micro templating.
2014-07-09 14:57:08 +02:00
Nick Downie 529d582f03 Built output 2014-07-08 23:13:29 +01:00
Nick Downie aa7975e4f7 Allow radar charts sparse data 2014-07-08 22:59:50 +01:00
Nick Downie fdfa9912e8 Refactor logic into shared Element method 2014-07-08 22:44:55 +01:00
Nick Downie 2f59921f7a Make a start on sparse data for line charts 2014-07-08 22:40:32 +01:00
Nick Downie e25fd5e37c Create null value bars, and hide if not numeric 2014-07-08 22:27:39 +01:00
Nick Downie 5d0171e8ed Check MultiTooltip elements are numeric 2014-07-08 22:19:36 +01:00
Nick Downie 55fc0cfd49 Change package.json name to lowercase 2014-07-08 21:45:56 +01:00
Tim Klingeleers cdfdc3c3e2 Missing draw method in Writing new chart types
Added the draw method to "Writing new chart types". If you use the template without the draw method, you get an undefined error because Chart.Type.prototype.render calls this.draw() on line 808 in Chart.Core.js.
2014-07-08 13:15:23 +02:00
Nick Downie ef5081184f Community chart types / extensions list 2014-07-06 22:59:57 +01:00
Nick Downie 02e535cdad Update bower & package.json with version bump
Forget this literally every time…
2014-07-02 21:51:31 +01:00
Nick Downie 3e1b120cbe Build latest output files for new version 2014-07-02 21:42:10 +01:00
Nick Downie 95844701bd Mention not committing built files in README.md 2014-07-02 21:39:44 +01:00
Nick Downie 403b6751ab Change case of README file 2014-07-02 21:38:14 +01:00
Nick Downie 2b81ac832a Merge pull request #415 from nnnick/fix/radar-chart-scale-updates
Reflow the Radar before updating to update scale
2014-07-02 21:36:51 +01:00
Nick Downie 3f9e5ab7a2 Merge pull request #414 from nnnick/feature/dataset-label-tooltip
Add datasetLabel to elements for tooltip templates
2014-07-02 21:36:39 +01:00
Nick Downie 23deaa9307 Merge pull request #413 from nnnick/fix/sparse-dataset-tooltip
Prevent spare datasets from breaking MultiTooltips
2014-07-02 21:36:28 +01:00
Nick Downie 2183d09b58 Merge pull request #409 from BrettBukowski/commonjs
Add support for CommonJS module definition
2014-07-02 21:36:17 +01:00
Nick Downie ea9d144c71 Reflow the Radar before updating to update scale 2014-07-02 21:28:59 +01:00
Nick Downie 7a23131366 Add datasetLabel to elements for tooltip templates 2014-07-02 21:27:03 +01:00
Nick Downie d7632efe65 Prevent spare datasets from breaking MultiTooltips 2014-07-02 21:09:04 +01:00
Brett Bukowski 477e09f1d4 Add support for CommonJS module definition 2014-07-01 15:39:28 -06:00
Nick Downie 641fc02212 1.0.1-beta Update for bower/package.json 2014-07-01 11:02:28 +01:00
Nick Downie a55fdaad57 Merge pull request #402 from nnnick/fix/point-dot-option
Fix option for pointDot not being obeyed
2014-06-30 22:12:27 +01:00
Nick Downie d006558e69 Merge pull request #392 from jbrooksuk/doc-update
Make javascript JavaScript and Github GitHub
2014-06-30 22:02:33 +01:00
Nick Downie 29ae3200a7 Default display of chart point to true 2014-06-30 21:54:24 +01:00
Nick Downie 38d1b87e1c Adhere to pointDot option in config
- Added `display` property on Point classes, to determine whether the
draw sequence should run or not.
2014-06-30 20:24:47 +01:00
James Brooks e139ab8596 Make javascript JavaScript and Github GitHub 2014-06-30 11:50:35 +01:00
Nick Downie 28dd492460 Extending chart types docs typo error 2014-06-30 10:04:01 +01:00
Nick Downie f13f99b7d7 Merge pull request #388 from nnnick/v1-dev
Version 1.0.0-beta release
2014-06-29 19:18:23 +01:00
Nick Downie 8533c27031 Update readme 2014-06-29 18:37:39 +01:00
Nick Downie 0e5f4ec32f Bump bower version 2014-06-29 18:37:29 +01:00
Nick Downie e24efd23a2 Add build sequence + dev dependencies 2014-06-29 18:37:07 +01:00
Nick Downie 10227f852b Add src & built library files 2014-06-29 18:36:25 +01:00
Nick Downie 94f22b656e Add in new chart samples 2014-06-29 18:36:04 +01:00
Nick Downie dc6d5bc934 Add new docs as markdown files 2014-06-29 18:35:49 +01:00
Nick Downie a04082dba1 Remove site from repo 2014-06-29 17:38:59 +01:00
Nick Downie be2f31a351 Change to bower.json 2014-06-29 17:35:35 +01:00
Nick Downie 7d240eee9d Update ignored files 2014-06-29 17:34:56 +01:00
Kara 0a6c892766 Update copyright year in license to include 2014 2014-03-09 16:30:27 -07:00
Kara 51032692f3 Update copyright year in license to 2014 2014-03-09 16:19:18 -07:00
Nick Downie 8f025f33c0 Updated ETA 2013-10-16 23:28:41 +01:00
Nick Downie dffb2cd6ee Update on refactor progress 2013-09-09 00:29:33 +01:00
Nick Downie 58657d65cb Quick note about upcoming refactor 2013-07-18 23:58:31 +01:00
Nick Downie 8d587de970 Quick note about upcoming refactor 2013-07-18 23:57:14 +01:00
Nick Downie bf2489425b Merge pull request #139 from ilyakatz/patch-1
spelling changed for competition
2013-06-14 16:21:53 -07:00
Ilya 72c0131d49 spelling changed for competition 2013-06-13 00:18:12 -03:00
Nick Downie abb3c14c00 Competition details
Challenge post are running a competition and offering some great
prizes. Details are in the readme.
2013-06-11 22:41:50 +01:00
Nick Downie ac55046c31 Merge pull request #126 from Ider/master
Correct default scaleShowLabels value in document
2013-06-05 15:16:04 -07:00
Ider 0638674145 Correct default scaleShowLabels value to match js file setting
default scaleShowLabels value for Line and Bar is true in js file, but
it is false in document page.
Correct document page to match the value to reduce the confuse
2013-05-30 19:58:31 -07:00
Nick Downie 2e08396255 Merge pull request #75 from epeli/patch-1
Explicit global definition
2013-04-15 10:20:28 -07:00
Esa-Matti Suuronen 624fbfd474 Explicit global definition
Some script bundlers such as Browserify compile a wrapper function over the modules. If var-statement is used to define the global it will be hidden inside it. Use window-global to define Chart global explicitly.
2013-04-13 11:55:36 +03:00
Nick Downie 4a94b44a77 Version bump 2013-04-12 21:26:33 +01:00
Nick Downie 7a55a1614c 0.2 Update
- Fixes hard coded scales now longer not one step out of sync
2013-04-12 21:20:44 +01:00
Nick Downie 75f4d21968 There are too many versions of Chart.js 2013-03-25 19:50:18 +00:00
Nick Downie 19e32556e8 Fix for broken radar rotation 2013-03-25 19:38:08 +00:00
Nick Downie d30edc1b8d Cleared up folder structure 2013-03-25 19:25:57 +00:00
Nick Downie 7033042fae Added index site as well 2013-03-25 19:18:58 +00:00
Nick Downie 2acdfbfca8 Merge pull request #33 from robocoder/license-patch
add license text and header
2013-03-25 12:03:41 -07:00
Nick Downie 552de1f21c Added docs site to the project
Font's probably won't be server from typekit.
2013-03-25 19:01:46 +00:00
Anthon Pang 9453a670cd add license text and header 2013-03-20 00:09:51 -04:00
Nick Downie 26962ce2b6 Back online! 2013-03-19 16:22:03 +00:00
nnnick 1513be49cf Merge pull request #19 from fizerkhan/master
Added file for Bower package
2013-03-18 13:08:02 -07:00
Fizer Khan 18e094be9a Added Bower package support. 2013-03-18 21:59:20 +05:30
Nick Downie 4acc88e339 Added a license to the readme.
Also updated the online documentation with the license.
2013-03-18 07:40:28 +00:00
Nick Downie 1ee31e3708 Using an html tag in md was silly. 2013-03-17 23:59:08 +00:00
Nick Downie a9dcf88378 First commit. Version 0.1
Examples of the six charts that can be created, and the Chart.js
library.
2013-03-17 23:57:50 +00:00
56 arquivos alterados com 8786 adições e 3421 exclusões
+19
Ver Arquivo
@@ -0,0 +1,19 @@
---
engines:
duplication:
enabled: true
config:
languages:
- javascript
eslint:
enabled: true
fixme:
enabled: true
ratings:
paths:
- "**.js"
exclude_paths:
- dist/
- node_modules/
- test/
- coverage/
+1
Ver Arquivo
@@ -0,0 +1 @@
**/*{.,-}min.js
+213
Ver Arquivo
@@ -0,0 +1,213 @@
ecmaFeatures:
modules: true
jsx: true
env:
amd: true
browser: true
es6: true
jquery: true
node: true
# http://eslint.org/docs/rules/
rules:
# Possible Errors
comma-dangle: [2, never]
no-cond-assign: 2
no-console: 0
no-constant-condition: 2
no-control-regex: 2
no-debugger: 2
no-dupe-args: 2
no-dupe-keys: 2
no-duplicate-case: 2
no-empty: 2
no-empty-character-class: 2
no-ex-assign: 2
no-extra-boolean-cast: 2
no-extra-parens: 0
no-extra-semi: 2
no-func-assign: 2
no-inner-declarations: [2, functions]
no-invalid-regexp: 2
no-irregular-whitespace: 2
no-negated-in-lhs: 2
no-obj-calls: 2
no-regex-spaces: 2
no-sparse-arrays: 2
no-unexpected-multiline: 2
no-unreachable: 2
use-isnan: 2
valid-jsdoc: 0
valid-typeof: 2
# Best Practices
accessor-pairs: 2
block-scoped-var: 0
complexity: [2, 6]
consistent-return: 0
curly: 0
default-case: 0
dot-location: 0
dot-notation: 0
eqeqeq: 2
guard-for-in: 2
no-alert: 2
no-caller: 2
no-case-declarations: 2
no-div-regex: 2
no-else-return: 0
no-empty-label: 2
no-empty-pattern: 2
no-eq-null: 2
no-eval: 2
no-extend-native: 2
no-extra-bind: 2
no-fallthrough: 2
no-floating-decimal: 0
no-implicit-coercion: 0
no-implied-eval: 2
no-invalid-this: 0
no-iterator: 2
no-labels: 0
no-lone-blocks: 2
no-loop-func: 2
no-magic-number: 0
no-multi-spaces: 0
no-multi-str: 0
no-native-reassign: 2
no-new-func: 2
no-new-wrappers: 2
no-new: 2
no-octal-escape: 2
no-octal: 2
no-proto: 2
no-redeclare: 2
no-return-assign: 2
no-script-url: 2
no-self-compare: 2
no-sequences: 0
no-throw-literal: 0
no-unused-expressions: 2
no-useless-call: 2
no-useless-concat: 2
no-void: 2
no-warning-comments: 0
no-with: 2
radix: 2
vars-on-top: 0
wrap-iife: 2
yoda: 0
# Strict
strict: 0
# Variables
init-declarations: 0
no-catch-shadow: 2
no-delete-var: 2
no-label-var: 2
no-shadow-restricted-names: 2
no-shadow: 0
no-undef-init: 2
no-undef: 0
no-undefined: 0
no-unused-vars: 0
no-use-before-define: 0
# Node.js and CommonJS
callback-return: 2
global-require: 2
handle-callback-err: 2
no-mixed-requires: 0
no-new-require: 0
no-path-concat: 2
no-process-exit: 2
no-restricted-modules: 0
no-sync: 0
# Stylistic Issues
array-bracket-spacing: 0
block-spacing: 0
brace-style: 0
camelcase: 0
comma-spacing: 0
comma-style: 0
computed-property-spacing: 0
consistent-this: 0
eol-last: 0
func-names: 0
func-style: 0
id-length: 0
id-match: 0
indent: 0
jsx-quotes: 0
key-spacing: 0
linebreak-style: 0
lines-around-comment: 0
max-depth: 0
max-len: 0
max-nested-callbacks: 0
max-params: 0
max-statements: [2, 30]
new-cap: 0
new-parens: 0
newline-after-var: 0
no-array-constructor: 0
no-bitwise: 0
no-continue: 0
no-inline-comments: 0
no-lonely-if: 0
no-mixed-spaces-and-tabs: 0
no-multiple-empty-lines: 0
no-negated-condition: 0
no-nested-ternary: 0
no-new-object: 0
no-plusplus: 0
no-restricted-syntax: 0
no-spaced-func: 0
no-ternary: 0
no-trailing-spaces: 0
no-underscore-dangle: 0
no-unneeded-ternary: 0
object-curly-spacing: 0
one-var: 0
operator-assignment: 0
operator-linebreak: 0
padded-blocks: 0
quote-props: 0
quotes: 0
require-jsdoc: 0
semi-spacing: 0
semi: 0
sort-vars: 0
space-after-keywords: 0
space-before-blocks: 0
space-before-function-paren: 0
space-before-keywords: 0
space-in-parens: 0
space-infix-ops: 0
space-return-throw-case: 0
space-unary-ops: 0
spaced-comment: 0
wrap-regex: 0
# ECMAScript 6
arrow-body-style: 0
arrow-parens: 0
arrow-spacing: 0
constructor-super: 0
generator-star-spacing: 0
no-arrow-condition: 0
no-class-assign: 0
no-const-assign: 0
no-dupe-class-members: 0
no-this-before-super: 0
no-var: 0
object-shorthand: 0
prefer-arrow-callback: 0
prefer-const: 0
prefer-reflect: 0
prefer-spread: 0
prefer-template: 0
require-yield: 0
+10 -4
Ver Arquivo
@@ -1,4 +1,10 @@
_site
node_modules
coverage
Gemfile.lock
.DS_Store
node_modules/*
custom/*
coverage/*
docs/index.md
.settings/
+13 -5
Ver Arquivo
@@ -1,5 +1,13 @@
sudo: false
language: ruby
script: "bundle exec jekyll build"
rvm:
- 2.1.0
language: node_js
node_js:
- "0.11"
- "0.10"
before_script:
- npm install
script:
- gulp test
notifications:
slack: chartjs:pcfCZR6ugg5TEcaLtmIfQYuA
-1
Ver Arquivo
@@ -1 +0,0 @@
www.chartjs.org
+57
Ver Arquivo
@@ -0,0 +1,57 @@
Contributing to Chart.js
========================
Contributions to Chart.js are welcome and encouraged, but please have a look through the guidelines in this document before raising an issue, or writing code for the project.
Using issues
------------
The [issue tracker](https://github.com/nnnick/Chart.js/issues) is the preferred channel for reporting bugs, requesting new features and submitting pull requests.
If you're suggesting a new chart type, please take a look at [writing new chart types](https://github.com/nnnick/Chart.js/blob/master/docs/06-Advanced.md#writing-new-chart-types) in the documentation, and some of the [community extensions](https://github.com/nnnick/Chart.js/blob/master/docs/06-Advanced.md#community-extensions) that have been created already.
To keep the library lightweight for everyone, it's unlikely we'll add many more chart types to the core of Chart.js, but issues are a good medium to design and spec out how new chart types could work and look.
Please do not use issues for support requests. For help using Chart.js, please take a look at the [`chartjs`](http://stackoverflow.com/questions/tagged/chartjs) tag on Stack Overflow.
Reporting bugs
--------------
Well structured, detailed bug reports are hugely valuable for the project.
Guidlines for reporting bugs:
- Check the issue search to see if it has already been reported
- Isolate the problem to a simple test case
- Provide a demonstration of the problem on [JS Bin](http://jsbin.com) or similar
Please provide any additional details associated with the bug, if it's browser or screen density specific, or only happens with a certain configuration or data.
Pull requests
-------------
Clear, concise pull requests are excellent at continuing the project's community driven growth. But please review [these guidelines](https://github.com/blog/1943-how-to-write-the-perfect-pull-request) and the guidelines below before starting work on the project.
Be advised that **Chart.js 1.0.2 is in feature-complete status**. Pull requests adding new features to the 1.x branch will be disregarded.
Guidlines:
- Please create an issue first:
- For bugs, we can discuss the fixing approach
- For enhancements, we can discuss if it is within the project scope and avoid duplicate effort
- Please make changes to the files in [`/src`](https://github.com/nnnick/Chart.js/tree/master/src), not `Chart.js` or `Chart.min.js` in the repo root directory, this avoids merge conflicts
- Tabs for indentation, not spaces please
- If adding new functionality, please also update the relevant `.md` file in [`/docs`](https://github.com/nnnick/Chart.js/tree/master/docs)
- Please make your commits in logical sections with clear commit messages
Joining the project
-------------
- Active committers and contributors are invited to introduce yourself and request commit access to this project. Please send an email to hello@nickdownie.com or file an issue.
License
-------
By contributing your code, you agree to license your contribution under the [MIT license](https://github.com/nnnick/Chart.js/blob/master/LICENSE.md).
externo
+3736
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+11
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
-3
Ver Arquivo
@@ -1,3 +0,0 @@
source 'https://rubygems.org'
gem 'github-pages', group: :jekyll_plugins
+8
Ver Arquivo
@@ -0,0 +1,8 @@
The MIT License (MIT)
Copyright (c) 2013-2016 Nick Downie
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+56 -16
Ver Arquivo
@@ -1,21 +1,61 @@
About this branch
=================
[![](http://tannerlinsley.com/memes/chartjs.gif)](http://www.chartjs.org/docs/)
This branch provides documentation for the Chart.js project. It is set up to
provide the hosting for <http://www.chartjs.org/>
# Chart.js
Running and building locally
============================
[![Build Status](https://travis-ci.org/nnnick/Chart.js.svg?branch=master)](https://travis-ci.org/nnnick/Chart.js) [![Code Climate](https://codeclimate.com/github/nnnick/Chart.js/badges/gpa.svg)](https://codeclimate.com/github/nnnick/Chart.js) [![Chart.js on Slack](https://img.shields.io/badge/slack-Chart.js-blue.svg)](https://chartjs-slack-automation.herokuapp.com/)
The documentation is written using Markdown and Jekyll. See GitHub's Jekyll
documentation at <https://help.github.com/articles/using-jekyll-with-pages/> and
see GitHub's `pages-gem` at <https://github.com/github/pages-gem> regarding how
to set up the identical build environment locally.
Syncing
=======
*Simple HTML5 Charts using the canvas element* [chartjs.org](http://www.chartjs.org)
The contents of the `master` branch's `docs` directory should be copied to this
`gh-pages` branch's `_doc-parts` directory. Please submit a pull request to do
this whenever updating the `master` branch, unless the `master `branch is
preparing to make an alpha release.
## v1.0.2 Stable
- NPM: `npm install chart.js --save`
- Bower: `bower install Chart.js --save`
- CDN: https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js
- Zip: [Download](https://github.com/nnnick/Chart.js/archive/master.zip)
[Examples](https://github.com/nnnick/Chart.js/tree/master/samples) | [Documentation](http://www.chartjs.org/docs/)
## v2.0 Beta
- Release: [2.0.0-beta](https://github.com/nnnick/Chart.js/releases/tag/2.0.0-beta)
- Zip: [Download](https://github.com/nnnick/Chart.js/archive/2.0.0-beta2.zip)
Documentation for v2.0 is currently located [here](http://nnnick.github.io/Chart.js/docs-v2/).
## v2.0 Bleeding-Edge
- Branch: [v2.0-dev](https://github.com/nnnick/Chart.js/tree/v2.0-dev)
- Zip: [Download](https://github.com/nnnick/Chart.js/archive/v2.0-dev.zip)
The next generation and release of Chart.js (v2.0) has been well under way this year and we are very close to releasing some amazing new features including, but not limited to:
- Rewritten, optimized, and unit-tested
- New and improved scales (log, time, linear, category, multiple scales)
- Improved Tooltips and tooltip callbacks for customization
- Improved responsiveness and resizing
- Powerful support for adding, removing, changing, and updating data on the fly
- Animations for everything, including all elements, colors and tooltips
- Powerful customization when you need it. Automatic and dynamic when you don't.
- Excellent support for modern frameworks and modular build systems.
- Even more extensible via new element controllers, core scale classes, combo chart support, and hook systems
- Bug fixes, stability improvements, etc.
#####Contributing to 2.0
Submit PR's to the v2.0-dev branch.
#####Building and Testing
`gulp build`, `gulp test`, `gulp watch --test`
#####v1.x Status: Feature Complete
v1.x is now considered feature complete. PR's for bug fixes are still extremely welcome. Any open PR's for v1.x features will need to be reconsidered, refactored and resubmitted for v2.x (if the feature has not already been implemented). For questions on new features refer to the docs in the v2.0-dev branch
## Bugs, Issues and Contributing
Before submitting an issue or a pull request to the project, please take a moment to look over the [contributing guidelines](https://github.com/nnnick/Chart.js/blob/master/CONTRIBUTING.md) first.
For support using Chart.js, please post questions with the [`chartjs` tag on Stack Overflow](http://stackoverflow.com/questions/tagged/chartjs).
## License
Chart.js is available under the [MIT license](https://github.com/nnnick/Chart.js/blob/master/LICENSE.md).
-15
Ver Arquivo
@@ -1,15 +0,0 @@
# Base URL to work with github pages
baseurl: /Chart.js
repository: nnnick/Chart.js
# Collections of files
collections:
doc-parts:
output: false
doc-parts-v2:
output: false
markdown: kramdown
future: true
-247
Ver Arquivo
@@ -1,247 +0,0 @@
---
title: Getting started
anchor: getting-started
---
### Download Chart.js
To download a zip, go to the [Chart.js on Github](https://github.com/nnnick/Chart.js)
To install via npm / bower:
```bash
npm install chart.js --save
```
```bash
bower install Chart.js --save
```
CDN: https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.0.0/Chart.js
### Install Chart.js
To import Chart.js using an old-school script tag:
```html
<script src="Chart.js"></script>
<script>
var myChart = new Chart({...})
</script>
```
To import Chart.js using an awesome module loader:
```javascript
// Using CommonJS
var Chart = require('chart.js')
var myChart = new Chart({...})
// ES6
import Chart from 'chart.js'
let myChart = new Chart({...})
// Using requirejs
require(['path/to/Chartjs'], function(Chart){
var myChart = new Chart({...})
})
```
### Creating a Chart
To create a chart, we need to instantiate the `Chart` class. To do this, we need to pass in the node, jQuery instance, or 2d context of the canvas of where we want to draw the chart. Here's an example.
```html
<canvas id="myChart" width="400" height="400"></canvas>
```
```javascript
// Any of the following formats may be used
var ctx = document.getElementById("myChart");
var ctx = document.getElementById("myChart").getContext("2d");
var ctx = $("#myChart");
```
Once you have the element or context, you're ready to instantiate a pre-defined chart-type or create your own!
The following example instantiates a bar chart showing the number of votes for different colors and the y-axis starting at 0.
```html
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3]
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
```
It's that easy to get started using Chart.js! From here you can explore the many options that can help you customise your charts with scales, tooltips, labels, colors, custom actions, and much more.
### Global chart configuration
This concept was introduced in Chart.js 1.0 to keep configuration DRY, and allow for changing options globally across chart types, avoiding the need to specify options for each instance, or the default for a particular chart type.
Chart.js merges configurations and options in a few places with the global defaults using chart type defaults and scales defaults. This way you can be as specific as you want in your individual chart configs, or change the defaults for Chart.js as a whole.
The global options are defined in `Chart.defaults.global`.
Name | Type | Default | Description
--- | --- | --- | ---
responsive | Boolean | true | Resizes when the canvas container does.
responsiveAnimationDuration | Number | 0 | Duration in milliseconds it takes to animate to new size after a resize event.
maintainAspectRatio | Boolean | true | Maintain the original canvas aspect ratio `(width / height)` when resizing
events | Array[String] | `["mousemove", "mouseout", "click", "touchstart", "touchmove", "touchend"]` | Events that the chart should listen to for tooltips and hovering
hover |-|-|-
*hover*.onHover | Function | null | Called when any of the events fire. Called in the context of the chart and passed an array of active elements (bars, points, etc)
*hover*.mode | String | 'single' | Sets which elements hover. Acceptable options are `'single'`, `'label'`, or `'dataset'`. `single` highlights the closest element. `label` highlights elements in all datasets at the same `X` value. `dataset` highlights the closest dataset.
*hover*.animationDuration | Number | 400 | Duration in milliseconds it takes to animate hover style changes
onClick | Function | null | Called if the event is of type 'mouseup' or 'click'. Called in the context of the chart and passed an array of active elements
defaultColor | Color | 'rgba(0,0,0,0.1)' |
defaultFontColor | Color | '#666' | Default font color for all text
defaultFontFamily | String | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" | Default font family for all text
defaultFontSize | Number | 12 | Default font size (in px) for text. Does not apply to radialLinear scale point labels
defaultFontStyle | String | 'normal' | Default font style. Does not apply to tooltip title or footer. Does not apply to chart title
legendCallback | Function | ` function (chart) { }` | Function to generate a legend. Receives the chart object to generate a legend from. Default implementation returns an HTML string.
The global options for the chart title is defined in `Chart.defaults.global.title`
Name | Type | Default | Description
--- | --- | --- | ---
display | Boolean | true | Show the title block
position | String | 'top' | Position of the title. 'top' or 'bottom' are allowed
fullWidth | Boolean | true | Marks that this box should take the full width of the canvas (pushing down other boxes)
fontColor | Color | '#666' | Text color
fontFamily | String | 'Helvetica Neue' |
fontSize | Number | 12 |
fontStyle | String | 'bold' |
padding | Number | 10 | Number of pixels to add above and below the title text
text | String | '' | Title text
The global options for the chart legend is defined in `Chart.defaults.global.legend`
Name | Type | Default | Description
--- | --- | --- | ---
display | Boolean | true | Is the legend displayed
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.
The global options for tooltips are defined in `Chart.defaults.global.tooltips`.
Name | Type | Default | Description
--- |:---:| --- | ---
enabled | Boolean | true |
custom | | null |
mode | String | 'single' | Sets which elements appear in the tooltip. Acceptable options are `'single'` or `'label'`. `single` highlights the closest element. `label` highlights elements in all datasets at the same `X` value.
backgroundColor | Color | 'rgba(0,0,0,0.8)' | Background color of the tooltip
| | |
Label | | | There are three labels you can control. `title`, `body`, `footer` the star (\*) represents one of these three. *(i.e. titleFontFamily, footerSpacing)*
\*FontFamily | String | "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif" |
\*FontSize | Number | 12 |
\*FontStyle | String | title - "bold", body - "normal", footer - "bold" |
\*Spacing | Number | 2 |
\*Color | Color | "#fff" |
\*Align | String | "left" | text alignment. See [MDN Canvas Documentation](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/textAlign)
titleMarginBottom | Number | 6 | Margin to add on bottom of title section
footerMarginTop | Number | 6 | Margin to add before drawing the footer
xPadding | Number | 6 | Padding to add on left and right of tooltip
yPadding | Number | 6 | Padding to add on top and bottom of tooltip
caretSize | Number | 5 | Size, in px, of the tooltip arrow
cornerRadius | Number | 6 | Radius of tooltip corner curves
multiKeyBackground | Color | "#fff" | Color to draw behind the colored boxes when multiple items are in the tooltip
| | |
callbacks | - | - | V2.0 introduces callback functions as a replacement for the template engine in v1. The tooltip has the following callbacks for providing text. For all functions, 'this' will be the tooltip object create from the Chart.Tooltip constructor
**Callback Functions** | | | All functions are called with the same arguments
xLabel | String or Array[Strings] | | This is the xDataValue for each item to be displayed in the tooltip
yLabel | String or Array[Strings] | | This is the yDataValue for each item to be displayed in the tooltip
index | Number | | Data index.
data | Object | | Data object passed to chart.
`return`| String or Array[Strings] | | All functions must return either a string or an array of strings. Arrays of strings are treated as multiple lines of text.
| | |
*callbacks*.beforeTitle | Function | none | Text to render before the title
*callbacks*.title | Function | `function(tooltipItems, data) { //Pick first xLabel }` | Text to render as the title
*callbacks*.afterTitle | Function | none | Text to render after the ttiel
*callbacks*.beforeBody | Function | none | Text to render before the body section
*callbacks*.beforeLabel | Function | none | Text to render before an individual label
*callbacks*.label | Function | `function(tooltipItem, data) { // Returns "datasetLabel: tooltipItem.yLabel" }` | Text to render as label
*callbacks*.afterLabel | Function | none | Text to render after an individual label
*callbacks*.afterBody | Function | none | Text to render after the body section
*callbacks*.beforeFooter | Function | none | Text to render before the footer section
*callbacks*.footer | Function | none | Text to render as the footer
*callbacks*.afterFooter | Function | none | Text to render after the footer section
The global options for animations are defined in `Chart.defaults.global.animation`.
Name | Type | Default | Description
--- |:---:| --- | ---
duration | Number | 1000 | The number of milliseconds an animation takes.
easing | String | "easeOutQuart" | Easing function to use.
onProgress | Function | none | Callback called on each step of an animation. Passed a single argument, an object, containing the chart instance and an object with details of the animation.
onComplete | Function | none | Callback called at the end of an animation. Passed the same arguments as `onProgress`
The global options for elements are defined in `Chart.defaults.global.elements`.
Name | Type | Default | Description
--- |:---:| --- | ---
arc | - | - | -
*arc*.backgroundColor | Color | `Chart.defaults.global.defaultColor` | Default fill color for arcs
*arc*.borderColor | Color | "#fff" | Default stroke color for arcs
*arc*.borderWidth | Number | 2 | Default stroke width for arcs
line | - | - | -
*line*.tension | Number | 0.4 | Default bezier curve tension. Set to `0` for no bezier curves.
*line*.backgroundColor | Color | `Chart.defaults.global.defaultColor` | Default line fill color
*line*.borderWidth | Number | 3 | Default line stroke width
*line*.borderColor | Color | `Chart.defaults.global.defaultColor` | Default line stroke color
*line*.borderCapStyle | String | 'butt' | Default line cap style. See [MDN](https://developer.mozilla.org/en/docs/Web/API/CanvasRenderingContext2D/lineCap)
*line*.borderDash | Array | `[]` | Default line dash. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash)
*line*.borderDashOffset | Number | 0.0 | Default line dash offset. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset)
*line*.borderJoinStyle | String | 'miter' | Default line join style. See [MDN](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin)
*line*.fill | Boolean | true |
point | - | - | -
*point*.radius | Number | 3 | Default point radius
*point*.pointStyle | String | 'circle' | Default point style
*point*.backgroundColor | Color | `Chart.defaults.global.defaultColor` | Default point fill color
*point*.borderWidth | Number | 1 | Default point stroke width
*point*.borderColor | Color | `Chart.defaults.global.defaultColor` | Default point stroke color
*point*.hitRadius | Number | 1 | Extra radius added to point radius for hit detection
*point*.hoverRadius | Number | 4 | Default point radius when hovered
*point*.hoverBorderWidth | Number | 1 | Default stroke width when hovered
rectangle | - | - | -
*rectangle*.backgroundColor | Color | `Chart.defaults.global.defaultColor` | Default bar fill color
*rectangle*.borderWidth | Number | 0 | Default bar stroke width
*rectangle*.borderColor | Color | `Chart.defaults.global.defaultColor` | Default bar stroke color
*rectangle*.borderSkipped | String | 'bottom' | Default skipped (excluded) border for rectangle. Can be one of `bottom`, `left`, `top`, `right`
If for example, you wanted all charts created to be responsive, and resize when the browser window does, the following setting can be changed:
```javascript
Chart.defaults.global.responsive = true;
```
Now, every time we create a chart, `options.responsive` will be `true`.
-297
Ver Arquivo
@@ -1,297 +0,0 @@
---
title: Scales
anchor: scales
---
Scales in v2.0 of Chart.js are significantly more powerful, but also different than those of v1.0.
* Multiple x & y axes are now supported.
* A built-in label auto-skip feature now detects would-be overlapping ticks and labels and removes every nth label to keep things displaying normally.
* Scale titles are now supported
* New scale types can be extended without writing an entirely new chart type
Every scale extends a core scale class with the following options:
Name | Type | Default | Description
--- |:---:| --- | ---
type | String | Chart specific. | Type of scale being employed. Custom scales can be created and registered with a string key. Options: ["category"](#scales-category-scale), ["linear"](#scales-linear-scale), ["logarithmic"](#scales-logarithmic-scale), ["time"](#scales-time-scale), ["radialLinear"](#scales-radial-linear-scale)
display | Boolean | true | If true, show the scale including gridlines, ticks, and labels. Overrides *gridLines.display*, *scaleLabel.display*, and *ticks.display*.
beforeUpdate | Function | undefined | Callback called before the update process starts. Passed a single argument, the scale instance.
beforeSetDimensions | Function | undefined | Callback that runs before dimensions are set. Passed a single argument, the scale instance.
afterSetDimensions | Function | undefined | Callback that runs after dimensions are set. Passed a single argument, the scale instance.
beforeDataLimits | Function | undefined | Callback that runs before data limits are determined. Passed a single argument, the scale instance.
afterDataLimits | Function | undefined | Callback that runs after data limits are determined. Passed a single argument, the scale instance.
beforeBuildTicks | Function | undefined | Callback that runs before ticks are created. Passed a single argument, the scale instance.
afterBuildTicks | Function | undefined | Callback that runs after ticks are created. Useful for filtering ticks. Passed a single argument, the scale instance.
beforeTickToLabelConversion | Function | undefined | Callback that runs before ticks are converted into strings. Passed a single argument, the scale instance.
afterTickToLabelConversion | Function | undefined | Callback that runs after ticks are converted into strings. Passed a single argument, the scale instance.
beforeCalculateTickRotation | Function | undefined | Callback that runs before tick rotation is determined. Passed a single argument, the scale instance.
afterCalculateTickRotation | Function | undefined | Callback that runs after tick rotation is determined. Passed a single argument, the scale instance.
beforeFit | Function | undefined | Callback that runs before the scale fits to the canvas. Passed a single argument, the scale instance.
afterFit | Function | undefined | Callback that runs after the scale fits to the canvas. Passed a single argument, the scale instance.
afterUpdate | Function | undefined | Callback that runs at the end of the update process. Passed a single argument, the scale instance.
**gridLines** | Array | - | Options for the grid lines that run perpendicular to the axis.
*gridLines*.display | Boolean | true |
*gridLines*.color | Color | "rgba(0, 0, 0, 0.1)" | Color of the grid lines.
*gridLines*.lineWidth | Number | 1 | Stroke width of grid lines
*gridLines*.drawOnChartArea | Boolean | true | If true, draw lines on the chart area inside the axis lines. This is useful when there are multiple axes and you need to control which grid lines are drawn
*gridLines*.drawTicks | Boolean | true | If true, draw lines beside the ticks in the axis area beside the chart.
*gridLines*.zeroLineWidth | Number | 1 | Stroke width of the grid line for the first index (index 0).
*gridLines*.zeroLineColor | Color | "rgba(0, 0, 0, 0.25)" | Stroke color of the grid line for the first index (index 0).
*gridLines*.offsetGridLines | Boolean | false | If true, offset labels from grid lines.
**scaleLabel** | Array | | Title for the entire axis.
*scaleLabel*.display | Boolean | false |
*scaleLabel*.labelString | String | "" | The text for the title. (i.e. "# of People", "Response Choices")
*scaleLabel*.fontColor | Color | "#666" | Font color for the scale title.
*scaleLabel*.fontFamily| String | "Helvetica Neue" | Font family for the scale title, follows CSS font-family options.
*scaleLabel*.fontSize | Number | 12 | Font size for the scale title.
*scaleLabel*.fontStyle | String | "normal" | Font style for the scale title, follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit).
**ticks** | Array | | Settings for the labels that run along the axis.
*ticks*.beginAtZero | Boolean | false | If true the scale will be begin at 0, if false the ticks will begin at your smallest data value.
*ticks*.fontColor | Color | "#666" | Font color for the tick labels.
*ticks*.fontFamily | String | "Helvetica Neue" | Font family for the tick labels, follows CSS font-family options.
*ticks*.fontSize | Number | 12 | Font size for the tick labels.
*ticks*.fontStyle | String | "normal" | Font style for the tick labels, follows CSS font-style options (i.e. normal, italic, oblique, initial, inherit).
*ticks*.maxRotation | Number | 90 | Maximum rotation for tick labels when rotating to condense labels. Note: Rotation doesn't occur until necessary. *Note: Only applicable to horizontal scales.*
*ticks*.minRotation | Number | 20 | *currently not-implemented* Minimum rotation for tick labels when condensing is necessary. *Note: Only applicable to horizontal scales.*
*ticks*.maxTicksLimit | Number | 11 | Maximum number of ticks and gridlines to show. If not defined, it will limit to 11 ticks but will show all gridlines.
*ticks*.padding | Number | 10 | Padding between the tick label and the axis. *Note: Only applicable to horizontal scales.*
*ticks*.mirror | Boolean | false | Flips tick labels around axis, displaying the labels inside the chart instead of outside. *Note: Only applicable to vertical scales.*
*ticks*.reverse | Boolean | false | Reverses order of tick labels.
*ticks*.display | Boolean | true | If true, show the ticks.
*ticks*.suggestedMin | Number | - | User defined minimum number for the scale, overrides minimum value *except for if* it is higher than the minimum value.
*ticks*.suggestedMax | Number | - | User defined maximum number for the scale, overrides maximum value *except for if* it is lower than the maximum value.
*ticks*.min | Number | - | User defined minimum number for the scale, overrides minimum value
*ticks*.max | Number | - | User defined minimum number for the scale, overrides maximum value
*ticks*.autoSkip | Boolean | true | If true, automatically calculates how many labels that can be shown and hides labels accordingly. Turn it off to show all labels no matter what
*ticks*.callback | Function | `function(value) { return '' + value; } ` | Returns the string representation of the tick value as it should be displayed on the chart.
The `callback` method may be used for advanced tick customization. The following callback would display every label in scientific notation
```javascript
{
scales: {
xAxes: [{
ticks: {
// Return an empty string to draw the tick line but hide the tick label
// Return `null` or `undefined` to hide the tick line entirely
userCallback: function(value, index, values) {
return value.toExponential();
}
}
}]
}
}
```
### Category Scale
The category scale will be familiar to those who have used v1.0. Labels are drawn in from the labels array included in the chart data.
The category scale extends the core scale class with the following tick template:
```javascript
{
position: "bottom",
}
```
### Linear Scale
The linear scale can be used to display numerical data. It can be placed on either the x or y axis. The scatter chart type automatically configures a line chart to use one of these scales for the x axis.
The linear scale extends the core scale class with the following tick template:
```javascript
{
position: "left",
ticks: {
callback: function(tickValue, index, ticks) {
var delta = ticks[1] - ticks[0];
// If we have a number like 2.5 as the delta, figure out how many decimal places we need
if (Math.abs(delta) > 1) {
if (tickValue !== Math.floor(tickValue)) {
// not an integer
delta = tickValue - Math.floor(tickValue);
}
}
var logDelta = helpers.log10(Math.abs(delta));
var tickString = '';
if (tickValue !== 0) {
var numDecimal = -1 * Math.floor(logDelta);
numDecimal = Math.max(Math.min(numDecimal, 20), 0); // toFixed has a max of 20 decimal places
tickString = tickValue.toFixed(numDecimal);
} else {
tickString = '0'; // never show decimal places for 0
}
return tickString;
}
}
}
```
It also provides additional configuration options:
Name | Type | Default | Description
--- |:---:| --- | ---
*ticks*.stepSize | Number | - | User defined fixed step size for the scale. If set, the scale ticks will be enumerated by multiple of stepSize, having one tick per increment. If not set, the ticks are labeled automatically using the nice numbers algorithm.
### Logarithmic Scale
The logarithmic scale is used to display logarithmic data of course. It can be placed on either the x or y axis.
The log scale extends the core scale class with the following tick template:
```javascript
{
position: "left",
ticks: {
callback: function(value) {
var remain = value / (Math.pow(10, Math.floor(Chart.helpers.log10(value))));
if (remain === 1 || remain === 2 || remain === 5) {
return value.toExponential();
} else {
return '';
}
}
}
}
```
### Time Scale
The time scale is used to display times and dates. It can be placed on the x axis. When building its ticks, it will automatically calculate the most comfortable unit base on the size of the scale.
The time scale extends the core scale class with the following tick template:
```javascript
{
position: "bottom",
time: {
// string/callback - By default, date objects are expected. You may use a pattern string from http://momentjs.com/docs/#/parsing/string-format/ to parse a time string format, or use a callback function that is passed the label, and must return a moment() instance.
parser: false,
// string - By default, unit will automatically be detected. Override with 'week', 'month', 'year', etc. (see supported time measurements)
unit: false,
// Number - The number of steps of the above unit between ticks
unitStepSize: 1
// string - By default, no rounding is applied. To round, set to a supported time unit eg. 'week', 'month', 'year', etc.
round: false,
// Moment js for each of the units. Replaces `displayFormat`
// To override, use a pattern string from http://momentjs.com/docs/#/displaying/format/
displayFormats: {
'millisecond': 'SSS [ms]',
'second': 'h:mm:ss a', // 11:20:01 AM
'minute': 'h:mm:ss a', // 11:20:01 AM
'hour': 'MMM D, hA', // Sept 4, 5PM
'day': 'll', // Sep 4 2015
'week': 'll', // Week 46, or maybe "[W]WW - YYYY" ?
'month': 'MMM YYYY', // Sept 2015
'quarter': '[Q]Q - YYYY', // Q3
'year': 'YYYY', // 2015
},
// Sets the display format used in tooltip generation
tooltipFormat: ''
},
}
```
The following time measurements are supported:
```javascript
{
'millisecond': {
display: 'SSS [ms]', // 002 ms
maxStep: 1000,
},
'second': {
display: 'h:mm:ss a', // 11:20:01 AM
maxStep: 60,
},
'minute': {
display: 'h:mm:ss a', // 11:20:01 AM
maxStep: 60,
},
'hour': {
display: 'MMM D, hA', // Sept 4, 5PM
maxStep: 24,
},
'day': {
display: 'll', // Sep 4 2015
maxStep: 7,
},
'week': {
display: 'll', // Week 46, or maybe "[W]WW - YYYY" ?
maxStep: 4.3333,
},
'month': {
display: 'MMM YYYY', // Sept 2015
maxStep: 12,
},
'quarter': {
display: '[Q]Q - YYYY', // Q3
maxStep: 4,
},
'year': {
display: 'YYYY', // 2015
maxStep: false,
},
}
```
### Radial Linear Scale
The radial linear scale is used specifically for the radar chart type.
The radial linear scale extends the core scale class with the following tick template:
```javascript
{
animate: true,
lineArc: false,
position: "chartArea",
angleLines: {
display: true,
color: "rgba(0, 0, 0, 0.1)",
lineWidth: 1
},
// label settings
ticks: {
//Boolean - Show a backdrop to the scale label
showLabelBackdrop: true,
//String - The colour of the label backdrop
backdropColor: "rgba(255,255,255,0.75)",
//Number - The backdrop padding above & below the label in pixels
backdropPaddingY: 2,
//Number - The backdrop padding to the side of the label in pixels
backdropPaddingX: 2,
//Number - Limit the maximum number of ticks and gridlines
maxTicksLimit: 11,
},
pointLabels: {
//String - Point label font declaration
fontFamily: "'Arial'",
//String - Point label font weight
fontStyle: "normal",
//Number - Point label font size in pixels
fontSize: 10,
//String - Point label font colour
fontColor: "#666",
//Function - Used to determine point labels to show in scale
callback: function(pointLabel) {
return pointLabel;
}
},
}
```
-155
Ver Arquivo
@@ -1,155 +0,0 @@
---
title: Line Chart
anchor: line-chart
---
### Introduction
A line chart is a way of plotting data points on a line.
Often, it is used to show trend data, and the comparison of two data sets.
<div class="canvas-holder">
<canvas width="250" height="125"></canvas>
</div>
### Example usage
```javascript
var myLineChart = new Chart(ctx, {
type: 'line',
data: data,
options: options
});
```
Alternatively a line chart can be created using syntax similar to the v1.0 syntax
```javascript
var myLineChart = Chart.Line(ctx, {
data: data,
options: options
});
```
### Data structure
```javascript
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
// Boolean - if true fill the area under the line
fill: false,
// String - the color to fill the area under the line with if fill is true
backgroundColor: "rgba(220,220,220,0.2)",
// 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 - cap style of the line. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineCap
borderCapStyle: 'butt',
// Array - Length and spacing of dashes. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash
borderDash: [],
// Number - Offset for line dashes. See https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineDashOffset
borderDashOffset: 0.0,
// 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)",
// String or array - Point fill color
pointBackgroundColor: "#fff",
// Number or array - Stroke width of point border
pointBorderWidth: 1,
// Number or array - Radius of point when hovered
pointHoverRadius: 5,
// String or array - point background color when hovered
pointHoverBackgroundColor: "rgba(220,220,220,1)",
// Point border color when hovered
pointHoverBorderColor: "rgba(220,220,220,1)",
// 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,
// The actual data
data: [65, 59, 80, 81, 56, 55, 40],
// String - If specified, binds the dataset to a certain y-axis. If not specified, the first y-axis is used. First id is y-axis-0
yAxisID: "y-axis-0",
},
{
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)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(220,220,220,1)",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointHoverBorderWidth: 2,
data: [28, 48, 40, 19, 86, 27, 90]
}
]
};
```
The line chart requires an array of labels. This labels are shown on the X axis. There must be one label for each data point. More labels than datapoints are allowed, in which case the line ends at the last data point.
The data for line charts is broken up into an array of datasets. Each dataset has a colour for the fill, a colour for the line and colours for the points and strokes of the points. These colours are strings just like CSS. You can use RGBA, RGB, HEX or HSL notation.
The label key on each dataset is optional, and can be used when generating a scale for the chart.
### Chart options
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`.
Name | Type | Default | Description
--- | --- | --- | ---
showLines | Boolean | true | If false, the lines between points are not drawn
stacked | Boolean | false | If true, lines stack on top of each other along the y axis.
*hover*.mode | String | "label" | Label's hover mode. "label" is used since the x axis displays data by the index in the dataset.
scales | - | - | -
*scales*.xAxes | Array | `[{type:"category","id":"x-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.
*Options for xAxes* | | |
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.
*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.
You can override these for your `Chart` instance by passing a member `options` into the `Line` method.
For example, we could have a line chart display without an x axis by doing the following. The config merge is smart enough to handle arrays so that you do not need to specify all axis settings to change one thing.
```javascript
new Chart(ctx, {
type: 'line',
data: data,
options: {
xAxes: [{
display: false
}]
}
});
// This will create a chart with all of the default options, merged from the global config,
// and the Line chart defaults, but this particular instance will have the x axis not displaying.
```
We can also change these defaults values for each Line type that is created, this object is available at `Chart.defaults.line`.
-155
Ver Arquivo
@@ -1,155 +0,0 @@
---
title: Bar Chart
anchor: bar-chart
---
### Introduction
A bar chart is a way of showing data as bars.
It is sometimes used to show trend data, and the comparison of multiple data sets side by side.
<div class="canvas-holder">
<canvas width="250" height="125"></canvas>
</div>
### Example usage
```javascript
var myBarChart = new Chart(ctx, {
type: 'bar',
data: data,
options: options
});
```
### Data structure
```javascript
var data = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
// 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)",
// String or array - bar stroke color
borderColor: "rgba(220,220,220,1)",
// Number or array - bar border width
borderWidth: 1,
// String or array - fill color when hovered
hoverBackgroundColor: "rgba(220,220,220,0.2)",
// String or array - border color when hovered
hoverBorderColor: "rgba(220,220,220,1)",
// The actual data
data: [65, 59, 80, 81, 56, 55, 40],
// String - If specified, binds the dataset to a certain y-axis. If not specified, the first y-axis is used.
yAxisID: "y-axis-0",
},
{
label: "My Second dataset",
backgroundColor: "rgba(220,220,220,0.2)",
borderColor: "rgba(220,220,220,1)",
borderWidth: 1,
hoverBackgroundColor: "rgba(220,220,220,0.2)",
hoverBorderColor: "rgba(220,220,220,1)",
data: [28, 48, 40, 19, 86, 27, 90]
}
]
};
```
The bar chart has the a very similar data structure to the line chart, and has an array of datasets, each with colours and an array of data. Again, colours are in CSS format.
We have an array of labels too for display. In the example, we are showing the same data as the previous line chart example.
The label key on each dataset is optional, and can be used when generating a scale for the chart.
### Chart Options
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`.
Name | Type | Default | Description
--- |:---:| --- | ---
stacked | Boolean | false |
*hover*.mode | String | "label" | Label's hover mode. "label" is used since the x axis displays data by the index in the dataset.
scales | Array | - | -
*scales*.xAxes | Array | | The bar chart officially supports only 1 x-axis but uses an array to keep the API consistent. Use a scatter chart if you need multiple x axes.
*Options for xAxes* | | |
type | String | "Category" | As defined in [Scales](#scales-category-scale).
display | Boolean | true | If true, show the scale.
position | String | "bottom" | Position of the scale. Options are "top" and "bottom" for dataset scales.
id | String | "x-axis-1" | Id of the axis so that data can bind to it
categoryPercentage | Number | 0.8 | Percent (0-1) of the available width (the space between the gridlines for small datasets) for each data-point to use for the bars. [Read More](#bar-chart-barpercentage-vs-categorypercentage)
barPercentage | Number | 0.9 | Percent (0-1) of the available width each bar should be within the category percentage. 1.0 will take the whole category width and put the bars right next to each other. [Read More](#bar-chart-barpercentage-vs-categorypercentage)
gridLines | Array | [See Scales](#scales) |
*gridLines*.offsetGridLines | Boolean | true | If true, the bars for a particular data point fall between the grid lines. If false, the grid line will go right down the middle of the bars.
scaleLabel | Array | [See Scales](#scales) |
ticks | Array | [See Scales](#scales) |
| | |
*scales*.yAxes | Array | `[{ type: "linear" }]` |
*Options for xAxes* | | |
type | String | "linear" | As defined in [Scales](#scales-linear-scale).
display | Boolean | true | If true, show the scale.
position | String | "left" | Position of the scale. Options are "left" and "right" for dataset scales.
id | String | "y-axis-1" | Id of the axis so that data can bind to it.
gridLines | Array | [See Scales](#scales) |
scaleLabel | Array | [See Scales](#scales) |
ticks | Array | [See Scales](#scales) |
You can override these for your `Chart` instance by passing a second argument into the `Bar` method as an object with the keys you want to override.
For example, we could have a bar chart without a stroke on each bar by doing the following:
```javascript
new Chart(ctx, {
type: "bar",
data: data,
options: {
scales: {
xAxes: [{
stacked: true
}],
yAxes: [{
stacked: true
}]
}
}
}
});
// This will create a chart with all of the default options, merged from the global config,
// and the Bar chart defaults but this particular instance will have `stacked` set to true
// 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`.
#### barPercentage vs categoryPercentage
The following shows the relationship between the bar percentage option and the category percentage option.
```text
// categoryPercentage: 1.0
// barPercentage: 1.0
Bar: | 1.0 | 1.0 |
Category: | 1.0 |
Sample: |===========|
// categoryPercentage: 1.0
// barPercentage: 0.5
Bar: |.5| |.5|
Category: | 1.0 |
Sample: |==============|
// categoryPercentage: 0.5
// barPercentage: 1.0
Bar: |1.||1.|
Category: | .5 |
Sample: |==============|
```
-93
Ver Arquivo
@@ -1,93 +0,0 @@
---
title: Radar Chart
anchor: radar-chart
---
### Introduction
A radar chart is a way of showing multiple data points and the variation between them.
They are often useful for comparing the points of two or more different data sets.
<div class="canvas-holder">
<canvas width="250" height="125"></canvas>
</div>
### Example usage
```javascript
var myRadarChart = new Chart(ctx, {
type: 'radar',
data: data,
options: options
});
```
### Data structure
```javascript
var data = {
labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],
datasets: [
{
label: "My First dataset",
backgroundColor: "rgba(220,220,220,0.2)",
borderColor: "rgba(220,220,220,1)",
pointBackgroundColor: "rgba(220,220,220,1)",
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgba(220,220,220,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)",
pointBorderColor: "#fff",
pointHoverBackgroundColor: "#fff",
pointHoverBorderColor: "rgba(151,187,205,1)",
data: [28, 48, 40, 19, 96, 27, 100]
}
]
};
```
For a radar chart, to provide context of what each point means, we include an array of strings that show around each point in the chart.
For the radar chart data, we have an array of datasets. Each of these is an object, with a fill colour, a stroke colour, a colour for the fill of each point, and a colour for the stroke of each point. We also have an array of data values.
The label key on each dataset is optional, and can be used when generating a scale for the chart.
### Chart Options
These are the customisation options specific to Radar 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 radar chart are defined in `Chart.defaults.radar`.
Name | Type | Default | Description
--- | --- | --- | ---
scale | Array | [See Scales](#scales) and [Defaults for Radial Linear Scale](#scales-radial-linear-scale) | Options for the one scale used on the chart. Use this to style the ticks, labels, and grid lines.
*scale*.type | String |"radialLinear" | As defined in ["Radial Linear"](#scales-radial-linear-scale).
*elements*.line | Array | | Options for all line elements used on the chart, as defined in the global elements, duplicated here to show Radar chart specific defaults.
*elements.line*.tension | Number | 0 | Tension exhibited by lines when calculating splineCurve. Setting to 0 creates straight lines.
You can override these for your `Chart` instance by passing a second argument into the `Radar` method as an object with the keys you want to override.
For example, we could have a radar chart without a point for each on piece of data by doing the following:
```javascript
new Chart(ctx, {
type: "radar",
data: data,
options: {
scale: {
reverse: true,
ticks: {
beginAtZero: true
}
}
}
});
// This will create a chart with all of the default options, merged from the global config,
// and the Radar chart defaults but this particular instance's scale will be reversed as
// well as the ticks beginning at zero.
```
We can also change these defaults values for each Radar type that is created, this object is available at `Chart.defaults.radar`.
-91
Ver Arquivo
@@ -1,91 +0,0 @@
---
title: Polar Area Chart
anchor: polar-area-chart
---
### Introduction
Polar area charts are similar to pie charts, but each segment has the same angle - the radius of the segment differs depending on the value.
This type of chart is often useful when we want to show a comparison data similar to a pie chart, but also show a scale of values for context.
<div class="canvas-holder">
<canvas width="250" height="125"></canvas>
</div>
### Example usage
```javascript
new Chart(ctx, {
data: data,
type: 'polarArea',
options: options
});
```
### Data structure
```javascript
var data = {
datasets: [{
data: [
10,
32,
53,
14,
22,
],
backgroundColor: [
"#F7464A",
"#46BFBD",
"#FDB45C",
"#949FB1",
"#4D5360",
],
label: 'My dataset' // for legend
}],
labels: [
"Red",
"Green",
"Yellow",
"Grey",
"Dark Grey"
]
};
```
As you can see, for the chart data you pass in an array of objects, with a value and a colour. The value attribute should be a number, while the color attribute should be a string. Similar to CSS, for this string you can use HEX notation, RGB, RGBA or HSL.
### Chart options
These are the customisation options specific to Polar Area charts. These options are merged with the [global chart configuration options](#getting-started-global-chart-configuration), and form the options of the chart.
Name | Type | Default | Description
--- | --- | --- | ---
scale | Array | [See Scales](#scales) and [Defaults for Radial Linear Scale](#getting-started-radial-linear-scale) | Options for the one scale used on the chart. Use this to style the ticks, labels, and grid.
*scale*.type | String |"radialLinear" | As defined in ["Radial Linear"](#scales-radial-linear-scale).
*scale*.lineArc | Boolean | true | When true, lines are circular.
animateRotate | Boolean |true | If true, will animate the rotation of the chart.
animateScale | Boolean | true | If true, will animate scaling the chart.
*legend*.*labels*.generateLabels | Function | `function(data) {} ` | Returns labels for each the legend
*legend*.onClick | Function | function(event, legendItem) {} ` | Handles clicking an individual legend item
legendCallback | Function | `function(chart) ` | Generates the HTML legend via calls to `generateLegend`
You can override these for your `Chart` instance by passing a second argument into the `PolarArea` method as an object with the keys you want to override.
For example, we could have a polar area chart with a black stroke on each segment like so:
```javascript
new Chart(ctx, {
data: data,
type: "polarArea",
options: {
elements: {
arc: {
borderColor: "#000000"
}
}
}
});
// This will create a chart with all of the default options, merged from the global config,
// and the PolarArea chart defaults but this particular instance will have `elements.arc.borderColor` set to `"#000000"`.
```
We can also change these defaults values for each PolarArea type that is created, this object is available at `Chart.defaults.polarArea`.
-99
Ver Arquivo
@@ -1,99 +0,0 @@
---
title: Pie & Doughnut Charts
anchor: doughnut-pie-chart
---
### Introduction
Pie and doughnut charts are probably the most commonly used chart there are. They are divided into segments, the arc of each segment shows the proportional value of each piece of data.
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.
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.
<div class="canvas-holder half">
<canvas width="250" height="125"></canvas>
</div>
<div class="canvas-holder half">
<canvas width="250" height="125"></canvas>
</div>
### Example usage
```javascript
// For a pie chart
var myPieChart = new Chart(ctx[0],{
type:'pie',
data: data,
options: options
});
// And for a doughnut chart
var myDoughnutChart = new Chart(ctx[1], {
type:'doughnut',
data: data,
options: options
});
```
### Data structure
```javascript
var data = {
labels: [
"Red",
"Green",
"Yellow"
],
datasets: [
{
data: [300, 50, 100],
backgroundColor: [
"#F7464A",
"#46BFBD",
"#FDB45C"
],
hoverBackgroundColor: [
"#FF5A5E",
"#5AD3D1",
"#FFC870"
]
}]
};
```
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.
### Chart options
These are the customisation options specific to Pie & Doughnut charts. These options are merged with the [global chart configuration options](#getting-started-global-chart-configuration), and form the options of the chart.
Name | Type | Default | Description
--- | --- | --- | ---
cutoutPercentage | Number | 50 - for doughnut, 0 - for pie | The percentage of the chart that is cut out of the middle.
scale | Array | [See Scales](#scales) and [Defaults for Radial Linear Scale](#getting-started-radial-linear-scale) | Options for the one scale used on the chart. Use this to style the ticks, labels, and grid.
*scale*.type | String |"radialLinear" | As defined in ["Radial Linear"](#scales-radial-linear-scale).
*scale*.lineArc | Boolean | true | When true, lines are arced compared to straight when false.
*animation*.animateRotate | Boolean |true | If true, will animate the rotation of the chart.
*animation*.animateScale | Boolean | false | If true, will animate scaling the Doughnut from the centre.
*legend*.*labels*.generateLabels | Function | `function(data) {} ` | Returns labels for each the legend
*legend*.onClick | Function | function(event, legendItem) {} ` | Handles clicking an individual legend item
You can override these for your `Chart` instance by passing a second argument into the `Doughnut` method as an object with the keys you want to override.
For example, we could have a doughnut chart that animates by scaling out from the centre like so:
```javascript
new Chart(ctx,{
type:"doughnut",
animation:{
animateScale:true
}
});
// This will create a chart with all of the default options, merged from the global config,
// 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.
-386
Ver Arquivo
@@ -1,386 +0,0 @@
---
title: Advanced usage
anchor: advanced-usage
---
### Prototype methods
For each chart, there are a set of global prototype methods on the shared `ChartType` which you may find useful. These are available on all charts created with Chart.js, but for the examples, let's use a line chart we've made.
```javascript
// For example:
var myLineChart = new Chart(ctx, config);
```
#### .destroy()
Use this to destroy any chart instances that are created. This will clean up any references stored to the chart object within Chart.js, along with any associated event listeners attached by Chart.js.
This must be called before the canvas is reused for a new chart.
```javascript
// Destroys a specific chart instance
myLineChart.destroy();
```
#### .update(duration, lazy)
Triggers an update of the chart. This can be safely called after replacing the entire data object. This will update all scales, legends, and then re-render the chart.
```javascript
// duration is the time for the animation of the redraw in miliseconds
// lazy is a boolean. if true, the animation can be interupted by other animations
myLineChart.data.datasets[0].data[2] = 50; // Would update the first dataset's value of 'March' to be 50
myLineChart.update(); // Calling update now animates the position of March from 90 to 50.
```
#### .render(duration, lazy)
Triggers a redraw of all chart elements. Note, this does not update elements for new data. Use `.update()` in that case.
```javascript
// duration is the time for the animation of the redraw in miliseconds
// lazy is a boolean. if true, the animation can be interupted by other animations
myLineChart.render(duration, lazy);
```
#### .stop()
Use this to stop any current animation loop. This will pause the chart during any current animation frame. Call `.render()` to re-animate.
```javascript
// Stops the charts animation loop at its current frame
myLineChart.stop();
// => returns 'this' for chainability
```
#### .resize()
Use this to manually resize the canvas element. This is run each time the canvas container is resized, but you can call this method manually if you change the size of the canvas nodes container element.
```javascript
// Resizes & redraws to fill its container element
myLineChart.resize();
// => returns 'this' for chainability
```
#### .clear()
Will clear the chart canvas. Used extensively internally between animation frames, but you might find it useful.
```javascript
// Will clear the canvas that myLineChart is drawn on
myLineChart.clear();
// => returns 'this' for chainability
```
#### .toBase64Image()
This returns a base 64 encoded string of the chart in it's current state.
```javascript
myLineChart.toBase64Image();
// => returns png data url of the image on the canvas
```
#### .generateLegend()
Returns an HTML string of a legend for that chart. The legend is generated from the `legendCallback` in the options.
```javascript
myLineChart.generateLegend();
// => returns HTML string of a legend for this chart
```
#### .getElementAtEvent(e)
Calling `getElementAtEvent(event)` on your Chart instance passing an argument of an event, or jQuery event, will return the single element at the event position. If there are multiple items within range, only the first is returned
```javascript
myLineChart.getElementAtEvent(e);
// => returns the first element at the event point.
```
#### .getElementsAtEvent(e)
Looks for the element under the event point, then returns all elements at the same data index. This is used internally for 'label' mode highlighting.
Calling `getElementsAtEvent(event)` on your Chart instance passing an argument of an event, or jQuery event, will return the point elements that are at that the same position of that event.
```javascript
canvas.onclick = function(evt){
var activePoints = myLineChart.getElementsAtEvent(evt);
// => activePoints is an array of points on the canvas that are at the same position as the click event.
};
```
This functionality may be useful for implementing DOM based tooltips, or triggering custom behaviour in your application.
#### .getDatasetAtEvent(e)
Looks for the element under the event point, then returns all elements from that dataset. This is used internally for 'dataset' mode highlighting
```javascript
myLineChart.getDatasetAtEvent(e);
// => returns an array of elements
```
### External Tooltips
You can enable custom tooltips in the global or chart configuration like so:
```javascript
var myPieChart = new Chart(ctx, {
type: 'pie',
data: data,
options: {
tooltips: {
custom: function(tooltip) {
// tooltip will be false if tooltip is not visible or should be hidden
if (!tooltip) {
return;
}
// Otherwise, tooltip will be an object with all tooltip properties like:
// tooltip.caretHeight
// tooltip.caretPadding
// tooltip.chart
// tooltip.cornerRadius
// tooltip.fillColor
// tooltip.font...
// tooltip.text
// tooltip.x
// tooltip.y
// etc...
}
}
}
});
```
See `sample/line-customTooltips.html` for examples on how to get started.
### Writing new scale types
Starting with Chart.js 2.0 scales can be individually extended. Scales should always derive from Chart.Scale.
```javascript
var MyScale = Chart.Scale.extend({
/* extensions ... */
});
// MyScale is now derived from Chart.Scale
```
Once you have created your scale class, you need to register it with the global chart object so that it can be used. A default config for the scale may be provided when registering the constructor. The first parameter to the register function is a string key that is used later to identify which scale type to use for a chart.
```javascript
Chart.scaleService.registerScaleType('myScale', MyScale, defaultConfigObject);
```
To use the new scale, simply pass in the string key to the config when creating a chart.
```javascript
var lineChart = new Chart(ctx, {
data: data,
type: 'line',
options: {
scales: {
yAxes: [{
type: 'myScale' // this is the same key that was passed to the registerScaleType function
}]
}
}
})
```
#### Scale Properties
Scale instances are given the following properties during the fitting process.
```javascript
{
left: Number, // left edge of the scale bounding box
right: Number, // right edge of the bounding box'
top: Number,
bottom: Number,
width: Number, // the same as right - left
height: Number, // the same as bottom - top
// Margin on each side. Like css, this is outside the bounding box.
margins: {
left: Number,
right: Number,
top: Number,
bottom: Number,
},
// Amount of padding on the inside of the bounding box (like CSS)
paddingLeft: Number,
paddingRight: Number,
paddingTop: Number,
paddingBottom: Number,
}
```
#### Scale Interface
To work with Chart.js, custom scale types must implement the following interface.
```javascript
{
// Determines the data limits. Should set this.min and this.max to be the data max/min
determineDataLimits: function() {},
// Generate tick marks. this.chart is the chart instance. The data object can be accessed as this.chart.data
// buildTicks() should create a ticks array on the scale instance, if you intend to use any of the implementations from the base class
buildTicks: function() {},
// Get the value to show for the data at the given index of the the given dataset, ie this.chart.data.datasets[datasetIndex].data[index]
getLabelForIndex: function(index, datasetIndex) {},
// Get the pixel (x coordinate for horizontal scale, y coordinate for vertical scales) for a given value
// @param index: index into the ticks array
// @param includeOffset: if true, get the pixel halway between the given tick and the next
getPixelForTick: function(index, includeOffset) {},
// Get the pixel (x coordinate for horizontal scale, y coordinate for vertical scales) for a given value
// @param value : the value to get the pixel for
// @param index : index into the data array of the value
// @param datasetIndex : index of the dataset the value comes from
// @param includeOffset : if true, get the pixel halway between the given tick and the next
getPixelForValue: function(value, index, datasetIndex, includeOffset) {}
}
```
Optionally, the following methods may also be overwritten, but an implementation is already provided by the `Chart.Scale` base class.
```javascript
// Transform the ticks array of the scale instance into strings. The default implementation simply calls this.options.ticks.callback(numericalTick, index, ticks);
convertTicksToLabels: function() {},
// Determine how much the labels will rotate by. The default implementation will only rotate labels if the scale is horizontal.
calculateTickRotation: function() {},
// Fits the scale into the canvas.
// this.maxWidth and this.maxHeight will tell you the maximum dimensions the scale instance can be. Scales should endeavour to be as efficient as possible with canvas space.
// this.margins is the amount of space you have on either side of your scale that you may expand in to. This is used already for calculating the best label rotation
// You must set this.minSize to be the size of your scale. It must be an object containing 2 properties: width and height.
// You must set this.width to be the width and this.height to be the height of the scale
fit: function() {},
// Draws the scale onto the canvas. this.(left|right|top|bottom) will have been populated to tell you the area on the canvas to draw in
// @param chartArea : an object containing four properties: left, right, top, bottom. This is the rectangle that lines, bars, etc will be drawn in. It may be used, for example, to draw grid lines.
draw: function(chartArea) {},
```
The Core.Scale base class also has some utility functions that you may find useful.
```javascript
{
// Returns true if the scale instance is horizontal
isHorizontal: function() {},
// Get the correct value from the value from this.chart.data.datasets[x].data[]
// If dataValue is an object, returns .x or .y depending on the return of isHorizontal()
// If the value is undefined, returns NaN
// Otherwise returns the value.
// Note that in all cases, the returned value is not guaranteed to be a Number
getRightValue: function(dataValue) {},
}
```
### Writing new chart types
Chart.js 2.0 introduces the concept of controllers for each dataset. Like scales, new controllers can be written as needed.
```javascript
Chart.controllers.MyType = Chart.DatasetController.extend({
});
// Now we can create a new instance of our chart, using the Chart.js API
new Chart(ctx, {
// this is the string the constructor was registered at, ie Chart.controllers.MyType
type: 'MyType',
data: data,
options: options
});
```
#### Dataset Controller Interface
Dataset controllers must implement the following interface.
```javascript
{
// Create elements for each piece of data in the dataset. Store elements in an array on the dataset as dataset.metaData
addElements: function() {},
// Create a single element for the data at the given index and reset its state
addElementAndReset: function(index) {},
// Draw the representation of the dataset
// @param ease : if specified, this number represents how far to transition elements. See the implementation of draw() in any of the provided controllers to see how this should be used
draw: function(ease) {},
// Remove hover styling from the given element
removeHoverStyle: function(element) {},
// Add hover styling to the given element
setHoverStyle: function(element) {},
// Update the elements in response to new data
// @param reset : if true, put the elements into a reset state so they can animate to their final values
update: function(reset) {},
}
```
The following methods may optionally be overridden by derived dataset controllers
```javascript
{
// Initializes the controller
initialize: function(chart, datasetIndex) {},
// Ensures that the dataset represented by this controller is linked to a scale. Overridden to helpers.noop in the polar area and doughnut controllers as these
// chart types using a single scale
linkScales: function() {},
// Called by the main chart controller when an update is triggered. The default implementation handles the number of data points changing and creating elements appropriately.
buildOrUpdateElements: function() {}
}
```
### Extending existing chart types
Extending or replacing an existing controller type is easy. Simply replace the constructor for one of the built in types with your own.
The built in controller types are:
* `Chart.controllers.line`
* `Chart.controllers.bar`
* `Chart.controllers.radar`
* `Chart.controllers.doughnut`
* `Chart.controllers.polarArea`
* `Chart.controllers.bubble`
#### Bar Controller
The bar controller has a special property that you should be aware of. To correctly calculate the width of a bar, the controller must determine the number of datasets that map to bars. To do this, the bar controller attaches a property `bar` to the dataset during initialization. If you are creating a replacement or updated bar controller, you should do the same. This will ensure that charts with regular bars and your new derived bars will work seamlessly.
### Building Chart.js
Chart.js uses <a href="http://gulpjs.com/" target="_blank">gulp</a> to build the library into a single JavaScript file.
Firstly, we need to ensure development dependencies are installed. With node and npm installed, after cloning the Chart.js repo to a local directory, and navigating to that directory in the command line, we can run the following:
```bash
npm install
npm install -g gulp
```
This will install the local development dependencies for Chart.js, along with a CLI for the JavaScript task runner <a href="http://gulpjs.com/" target="_blank">gulp</a>.
Now, we can run the `gulp build` task.
```bash
gulp build
```
-42
Ver Arquivo
@@ -1,42 +0,0 @@
---
title: Notes
anchor: notes
---
### Browser support
Browser support for the canvas element is available in all modern & major mobile browsers <a href="http://caniuse.com/canvas" target="_blank">(caniuse.com/canvas)</a>.
For IE8 & below, I would recommend using the polyfill ExplorerCanvas - available at <a href="https://code.google.com/p/explorercanvas/" target="_blank">https://code.google.com/p/explorercanvas/</a>. It falls back to Internet explorer's format VML when canvas support is not available. Example use:
```html
<head>
<!--[if lte IE 8]>
<script src="excanvas.js"></script>
<![endif]-->
</head>
```
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 <a href="http://modernizr.com/" target="_blank">Modernizr</a> 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
Please report these on the GitHub page - at <a href="https://github.com/nnnick/Chart.js" target="_blank">github.com/nnnick/Chart.js</a>. If you could include a link to a simple <a href="http://jsbin.com/" target="_blank">jsbin</a> or similar to demonstrate the issue, that'd be really helpful.
### Contributing
New contributions to the library are welcome, just a couple of guidelines:
- Tabs for indentation, not spaces please.
- Please ensure you're changing the individual files in `/src`, not the concatenated output in the `Chart.js` file in the root of the repo.
- Please check that your code will pass `jshint` code standards, `gulp jshint` will run this for you.
- Please keep pull requests concise, and document new functionality in the relevant `.md` file.
- Consider whether your changes are useful for all users, or if creating a Chart.js extension would be more appropriate.
### License
Chart.js is open source and available under the <a href="http://opensource.org/licenses/MIT" target="_blank">MIT license</a>.
-11
Ver Arquivo
Diff do arquivo suprimido porque uma ou mais linhas são muito longas
-673
Ver Arquivo
@@ -1,673 +0,0 @@
* {
padding: 0;
margin: 0;
color: inherit;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
body {
position: relative;
font-family: "proxima-nova", 'Helvetica Neue', 'Helvetica', 'sans-serif';
color: #232830;
}
lesshat-selector {
-lh-property: 0; }
::selection{color: #dfe1e8; background: #5b90bf}
::-moz-selection{color: #dfe1e8; background: #5b90bf;
}
.hll {
background-color: #ffffcc;
}
.c {
color: #999988;
font-style: italic;
}
/* Comment */
.err {
color: #a61717;
background-color: #e3d2d2;
}
/* Error */
.k {
color: #000000;
font-weight: bold;
}
/* Keyword */
.o {
color: #000000;
font-weight: bold;
}
/* Operator */
.cm {
color: #999988;
font-style: italic;
}
/* Comment.Multiline */
.cp {
color: #999999;
font-weight: bold;
font-style: italic;
}
/* Comment.Preproc */
.c1 {
color: #999988;
font-style: italic;
}
/* Comment.Single */
.cs {
color: #999999;
font-weight: bold;
font-style: italic;
}
/* Comment.Special */
.gd {
color: #000000;
background-color: #ffdddd;
}
/* Generic.Deleted */
.ge {
color: #000000;
font-style: italic;
}
/* Generic.Emph */
.gr {
color: #aa0000;
}
/* Generic.Error */
.gh {
color: #999999;
}
/* Generic.Heading */
.gi {
color: #000000;
background-color: #ddffdd;
}
/* Generic.Inserted */
.go {
color: #888888;
}
/* Generic.Output */
.gp {
color: #555555;
}
/* Generic.Prompt */
.gs {
font-weight: bold;
}
/* Generic.Strong */
.gu {
color: #aaaaaa;
}
/* Generic.Subheading */
.gt {
color: #aa0000;
}
/* Generic.Traceback */
.kc {
color: #000000;
font-weight: bold;
}
/* Keyword.Constant */
.kd {
color: #000000;
font-weight: bold;
}
/* Keyword.Declaration */
.kn {
color: #000000;
font-weight: bold;
}
/* Keyword.Namespace */
.kp {
color: #000000;
font-weight: bold;
}
/* Keyword.Pseudo */
.kr {
color: #000000;
font-weight: bold;
}
/* Keyword.Reserved */
.kt {
color: #445588;
font-weight: bold;
}
/* Keyword.Type */
.m {
color: #009999;
}
/* Literal.Number */
.s {
color: #d01040;
}
/* Literal.String */
.na {
color: #008080;
}
/* Name.Attribute */
.nb {
color: #0086b3;
}
/* Name.Builtin */
.nc {
color: #445588;
font-weight: bold;
}
/* Name.Class */
.no {
color: #008080;
}
/* Name.Constant */
.nd {
color: #3c5d5d;
font-weight: bold;
}
/* Name.Decorator */
.ni {
color: #800080;
}
/* Name.Entity */
.ne {
color: #990000;
font-weight: bold;
}
/* Name.Exception */
.nf {
color: #990000;
font-weight: bold;
}
/* Name.Function */
.nl {
color: #990000;
font-weight: bold;
}
/* Name.Label */
.nn {
color: #555555;
}
/* Name.Namespace */
.nt {
color: #000080;
}
/* Name.Tag */
.nv {
color: #008080;
}
/* Name.Variable */
.ow {
color: #000000;
font-weight: bold;
}
/* Operator.Word */
.w {
color: #bbbbbb;
}
/* Text.Whitespace */
.mf {
color: #009999;
}
/* Literal.Number.Float */
.mh {
color: #009999;
}
/* Literal.Number.Hex */
.mi {
color: #009999;
}
/* Literal.Number.Integer */
.mo {
color: #009999;
}
/* Literal.Number.Oct */
.sb {
color: #d01040;
}
/* Literal.String.Backtick */
.sc {
color: #d01040;
}
/* Literal.String.Char */
.sd {
color: #d01040;
}
/* Literal.String.Doc */
.s2 {
color: #d01040;
}
/* Literal.String.Double */
.se {
color: #d01040;
}
/* Literal.String.Escape */
.sh {
color: #d01040;
}
/* Literal.String.Heredoc */
.si {
color: #d01040;
}
/* Literal.String.Interpol */
.sx {
color: #d01040;
}
/* Literal.String.Other */
.sr {
color: #009926;
}
/* Literal.String.Regex */
.s1 {
color: #d01040;
}
/* Literal.String.Single */
.ss {
color: #990073;
}
/* Literal.String.Symbol */
.bp {
color: #999999;
}
/* Name.Builtin.Pseudo */
.vc {
color: #008080;
}
/* Name.Variable.Class */
.vg {
color: #008080;
}
/* Name.Variable.Global */
.vi {
color: #008080;
}
/* Name.Variable.Instance */
.il {
color: #009999;
}
/* Literal.Number.Integer.Long */
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-top{ 0%{ -webkit-transform: translate3d(0,0,0) rotate(0); } 50%{ -webkit-transform: translate3d(0,8px,0) rotate(0); } 100%{ -webkit-transform: translate3d(0,8px,0) rotate(45deg); }}
@-moz-keyframes hamburger-top{ 0%{ -moz-transform: translate3d(0,0,0) rotate(0); } 50%{ -moz-transform: translate3d(0,8px,0) rotate(0); } 100%{ -moz-transform: translate3d(0,8px,0) rotate(45deg); }}
@-o-keyframes hamburger-top{ 0%{ -o-transform: translate3d(0,0,0) rotate(0); } 50%{ -o-transform: translate3d(0,8px,0) rotate(0); } 100%{ -o-transform: translate3d(0,8px,0) rotate(45deg); }}
@keyframes hamburger-top{ 0%{-webkit-transform: translate3d(0,0,0) rotate(0);-moz-transform: translate3d(0,0,0) rotate(0);-ms-transform: translate3d(0,0,0) rotate(0);transform: translate3d(0,0,0) rotate(0); } 50%{-webkit-transform: translate3d(0,8px,0) rotate(0);-moz-transform: translate3d(0,8px,0) rotate(0);-ms-transform: translate3d(0,8px,0) rotate(0);transform: translate3d(0,8px,0) rotate(0); } 100%{-webkit-transform: translate3d(0,8px,0) rotate(45deg);-moz-transform: translate3d(0,8px,0) rotate(45deg);-ms-transform: translate3d(0,8px,0) rotate(45deg);transform: translate3d(0,8px,0) rotate(45deg); }
}
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-middle{ 0%{ opacity:1; } 50%{ opacity: 1; } 51%{ opacity:0; } 100%{ opacity:0; }}
@-moz-keyframes hamburger-middle{ 0%{ opacity:1; } 50%{ opacity: 1; } 51%{ opacity:0; } 100%{ opacity:0; }}
@-o-keyframes hamburger-middle{ 0%{ opacity:1; } 50%{ opacity: 1; } 51%{ opacity:0; } 100%{ opacity:0; }}
@keyframes hamburger-middle{ 0%{ opacity:1; } 50%{ opacity: 1; } 51%{ opacity:0; } 100%{ opacity:0; }
}
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-bottom{ 0%{ -webkit-transform: translate3d(0,0,0) rotate(0); } 50%{ -webkit-transform: translate3d(0,-8px,0) rotate(0); } 100%{ -webkit-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@-moz-keyframes hamburger-bottom{ 0%{ -moz-transform: translate3d(0,0,0) rotate(0); } 50%{ -moz-transform: translate3d(0,-8px,0) rotate(0); } 100%{ -moz-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@-o-keyframes hamburger-bottom{ 0%{ -o-transform: translate3d(0,0,0) rotate(0); } 50%{ -o-transform: translate3d(0,-8px,0) rotate(0); } 100%{ -o-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@keyframes hamburger-bottom{ 0%{-webkit-transform: translate3d(0,0,0) rotate(0);-moz-transform: translate3d(0,0,0) rotate(0);-ms-transform: translate3d(0,0,0) rotate(0);transform: translate3d(0,0,0) rotate(0); } 50%{-webkit-transform: translate3d(0,-8px,0) rotate(0);-moz-transform: translate3d(0,-8px,0) rotate(0);-ms-transform: translate3d(0,-8px,0) rotate(0);transform: translate3d(0,-8px,0) rotate(0); } 100%{-webkit-transform: translate3d(0,-8px,0) rotate(-45deg);-moz-transform: translate3d(0,-8px,0) rotate(-45deg);-ms-transform: translate3d(0,-8px,0) rotate(-45deg);transform: translate3d(0,-8px,0) rotate(-45deg); }
}
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-top-reverse{ 100%{ -webkit-transform: translate3d(0,0,0) rotate(0); } 50%{ -webkit-transform: translate3d(0,8px,0) rotate(0); } 0%{ -webkit-transform: translate3d(0,8px,0) rotate(45deg); }}
@-moz-keyframes hamburger-top-reverse{ 100%{ -moz-transform: translate3d(0,0,0) rotate(0); } 50%{ -moz-transform: translate3d(0,8px,0) rotate(0); } 0%{ -moz-transform: translate3d(0,8px,0) rotate(45deg); }}
@-o-keyframes hamburger-top-reverse{ 100%{ -o-transform: translate3d(0,0,0) rotate(0); } 50%{ -o-transform: translate3d(0,8px,0) rotate(0); } 0%{ -o-transform: translate3d(0,8px,0) rotate(45deg); }}
@keyframes hamburger-top-reverse{ 100%{-webkit-transform: translate3d(0,0,0) rotate(0);-moz-transform: translate3d(0,0,0) rotate(0);-ms-transform: translate3d(0,0,0) rotate(0);transform: translate3d(0,0,0) rotate(0); } 50%{-webkit-transform: translate3d(0,8px,0) rotate(0);-moz-transform: translate3d(0,8px,0) rotate(0);-ms-transform: translate3d(0,8px,0) rotate(0);transform: translate3d(0,8px,0) rotate(0); } 0%{-webkit-transform: translate3d(0,8px,0) rotate(45deg);-moz-transform: translate3d(0,8px,0) rotate(45deg);-ms-transform: translate3d(0,8px,0) rotate(45deg);transform: translate3d(0,8px,0) rotate(45deg); }
}
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-middle-reverse{ 100%{ opacity:1; } 51%{ opacity:1; } 50%{ opacity: 0; } 0%{ opacity:0; }}
@-moz-keyframes hamburger-middle-reverse{ 100%{ opacity:1; } 51%{ opacity:1; } 50%{ opacity: 0; } 0%{ opacity:0; }}
@-o-keyframes hamburger-middle-reverse{ 100%{ opacity:1; } 51%{ opacity:1; } 50%{ opacity: 0; } 0%{ opacity:0; }}
@keyframes hamburger-middle-reverse{ 100%{ opacity:1; } 51%{ opacity:1; } 50%{ opacity: 0; } 0%{ opacity:0; }
}
lesshat-selector {
-lh-property: 0; }
@-webkit-keyframes hamburger-bottom-reverse{ 100%{ -webkit-transform: translate3d(0,0,0) rotate(0); } 50%{ -webkit-transform: translate3d(0,-8px,0) rotate(0); } 0%{ -webkit-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@-moz-keyframes hamburger-bottom-reverse{ 100%{ -moz-transform: translate3d(0,0,0) rotate(0); } 50%{ -moz-transform: translate3d(0,-8px,0) rotate(0); } 0%{ -moz-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@-o-keyframes hamburger-bottom-reverse{ 100%{ -o-transform: translate3d(0,0,0) rotate(0); } 50%{ -o-transform: translate3d(0,-8px,0) rotate(0); } 0%{ -o-transform: translate3d(0,-8px,0) rotate(-45deg); }}
@keyframes hamburger-bottom-reverse{ 100%{-webkit-transform: translate3d(0,0,0) rotate(0);-moz-transform: translate3d(0,0,0) rotate(0);-ms-transform: translate3d(0,0,0) rotate(0);transform: translate3d(0,0,0) rotate(0); } 50%{-webkit-transform: translate3d(0,-8px,0) rotate(0);-moz-transform: translate3d(0,-8px,0) rotate(0);-ms-transform: translate3d(0,-8px,0) rotate(0);transform: translate3d(0,-8px,0) rotate(0); } 0%{-webkit-transform: translate3d(0,-8px,0) rotate(-45deg);-moz-transform: translate3d(0,-8px,0) rotate(-45deg);-ms-transform: translate3d(0,-8px,0) rotate(-45deg);transform: translate3d(0,-8px,0) rotate(-45deg); }
}
body {
-webkit-text-size-adjust: 100%;
padding-left: 250px;
overflow-x: hidden;
}
@media only screen and (max-width: 978px) {
body {
padding-left: 200px;
}
}
@media only screen and (max-width: 600px) {
body {
padding-left: 0px;
padding-top: 40px;
}
body.open-menu aside {
-webkit-transform: translateX(0);
-moz-transform: translateX(0);
-o-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
body.open-menu .docs-container {
pointer-events: none;
-webkit-transform: translateX(250px);
-moz-transform: translateX(250px);
-o-transform: translateX(250px);
-ms-transform: translateX(250px);
transform: translateX(250px);
}
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: #232830;
}
h1 {
font-size: 42px;
margin-bottom: 30px;
}
@media only screen and (max-width: 600px) {
h1 {
font-size: 28px;
margin-bottom: 22px;
}
}
h2 {
font-size: 32px;
padding-top: 12px;
margin-bottom: 14px;
}
@media only screen and (max-width: 600px) {
h2 {
font-size: 22px;
margin-bottom: 8px;
}
}
h3 {
clear: both;
font-size: 22px;
margin-bottom: 12px;
padding-top: 32px;
}
@media only screen and (max-width: 600px) {
h3 {
font-size: 18px;
}
}
h4 {
font-size: 18px;
margin-bottom: 10px;
padding-top: 10px;
}
@media only screen and (max-width: 600px) {
h4 {
font-size: 16px;
margin-bottom: 6px;
}
}
p {
color: #566076;
margin-bottom: 12px;
line-height: 22px;
}
p code {
background-color: #fafafa;
padding: 4px 8px;
border-radius: 6px;
color: #232830;
}
@media only screen and (max-width: 600px) {
p {
font-size: 14px;
}
}
code {
font-family: 'source-code-pro', monospace;
font-size: 14px;
}
@media only screen and (max-width: 600px) {
code {
font-size: 12px;
}
}
canvas {
margin-bottom: 22px;
}
.half {
width: 50%;
float: left;
}
@media only screen and (max-width: 600px) {
.half {
float: none;
width: 100%;
}
}
.docs-container {
padding: 40px 80px;
max-width: 978px;
margin: 0 auto;
-webkit-transition: -webkit-transform 200ms ease-in-out;
-moz-transition: -moz-transform 200ms ease-in-out;
-o-transition: -o-transform 200ms ease-in-out;
transition: -webkit-transform 200ms ease-in-out,-moz-transform 200ms ease-in-out,-o-transform 200ms ease-in-out,transform 200ms ease-in-out;
}
@media only screen and (max-width: 978px) {
.docs-container {
padding: 40px;
}
}
@media only screen and (max-width: 600px) {
.docs-container {
padding: 20px;
}
}
.highlight {
padding: 8px 12px;
margin: 20px 0;
background-color: #fafafa;
border-radius: 6px;
overflow: scroll;
overflow-x: visible;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
.intro h3 {
color: #566076;
font-weight: normal;
}
article {
border-bottom: 1px solid #e1e1e1;
padding-bottom: 40px;
padding-top: 40px;
}
@media only screen and (max-width: 600px) {
article {
padding-top: 20px;
padding-bottom: 20px;
}
}
article:first-child {
padding-top: 0;
}
article ul {
padding-left: 20px;
}
article ul li {
color: #566076;
margin-bottom: 12px;
line-height: 22px;
}
@media only screen and (max-width: 600px) {
article ul li {
font-size: 14px;
}
}
/* Styles for the tables in v2 documentation */
table {
margin-top: 10px;
margin-bottom: 10px;
border-collapse: collapse;
}
th, td {
border: 1px solid #e1e1e1;
padding-top: 10px;
padding-bottom: 10px;
}
td {
padding-left: 5px;
padding-right: 5px;
}
thead {
background-color:
}
tbody tr:nth-child(even) {
background-color: #ffffff
}
tbody tr:nth-child(odd) {
background-color: #eeeeee;
}
/* Left navigation menu */
aside {
position: fixed;
height: 100%;
background-color: #232830;
left: 0;
top: 0;
width: 250px;
border-right: 10px solid #5b90bf;
z-index: 10;
-webkit-transition: -webkit-transform 200ms ease-in-out;
-moz-transition: -moz-transform 200ms ease-in-out;
-o-transition: -o-transform 200ms ease-in-out;
transition: -webkit-transform 200ms ease-in-out,-moz-transform 200ms ease-in-out,-o-transform 200ms ease-in-out,transform 200ms ease-in-out;
}
aside .hamburger-menu {
display: none;
cursor: pointer;
padding: 10px;
}
aside .hamburger-menu li {
list-style: none;
height: 4px;
margin-bottom: 4px;
display: block;
background-color: #fafafa;
-webkit-transition: -webkit-transform 400ms ease-out;
-moz-transition: -moz-transform 400ms ease-out;
-o-transition: -o-transform 400ms ease-out;
transition: -webkit-transform 400ms ease-out,-moz-transform 400ms ease-out,-o-transform 400ms ease-out,transform 400ms ease-out;
}
aside .hamburger-menu li:last-child {
margin-bottom: 0;
}
@media only screen and (max-width: 978px) {
aside {
width: 200px;
}
}
@media only screen and (max-width: 600px) {
aside {
width: 250px;
-webkit-transform: translateX(-250px);
-moz-transform: translateX(-250px);
-o-transform: translateX(-250px);
-ms-transform: translateX(-250px);
transform: translateX(-250px);
}
aside .hamburger-menu {
display: block;
position: absolute;
width: 40px;
height: 40px;
top: 0;
right: -50px;
background-color: #232830;
}
.open-menu aside .hamburger-menu li {
-webkit-animation: hamburger-middle 400ms ease-out forwards;
-moz-animation: hamburger-middle 400ms ease-out forwards;
-o-animation: hamburger-middle 400ms ease-out forwards;
animation: hamburger-middle 400ms ease-out forwards;
}
.open-menu aside .hamburger-menu li:first-child {
-webkit-animation: hamburger-top 400ms ease-out forwards;
-moz-animation: hamburger-top 400ms ease-out forwards;
-o-animation: hamburger-top 400ms ease-out forwards;
animation: hamburger-top 400ms ease-out forwards;
}
.open-menu aside .hamburger-menu li:last-child {
-webkit-animation: hamburger-bottom 400ms ease-out forwards;
-moz-animation: hamburger-bottom 400ms ease-out forwards;
-o-animation: hamburger-bottom 400ms ease-out forwards;
animation: hamburger-bottom 400ms ease-out forwards;
}
.closed-menu aside .hamburger-menu li {
-webkit-animation: hamburger-middle-reverse 400ms ease-out forwards;
-moz-animation: hamburger-middle-reverse 400ms ease-out forwards;
-o-animation: hamburger-middle-reverse 400ms ease-out forwards;
animation: hamburger-middle-reverse 400ms ease-out forwards;
}
.closed-menu aside .hamburger-menu li:first-child {
-webkit-animation: hamburger-top-reverse 400ms ease-out forwards;
-moz-animation: hamburger-top-reverse 400ms ease-out forwards;
-o-animation: hamburger-top-reverse 400ms ease-out forwards;
animation: hamburger-top-reverse 400ms ease-out forwards;
}
.closed-menu aside .hamburger-menu li:last-child {
-webkit-animation: hamburger-bottom-reverse 400ms ease-out forwards;
-moz-animation: hamburger-bottom-reverse 400ms ease-out forwards;
-o-animation: hamburger-bottom-reverse 400ms ease-out forwards;
animation: hamburger-bottom-reverse 400ms ease-out forwards;
}
}
aside nav {
height: 100%;
padding-bottom: 20px;
overflow: auto;
overflow-x: hidden;
overflow-y: scroll;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
aside nav li {
display: block;
}
aside nav li a {
display: block;
color: #fafafa;
padding: 10px 12px;
text-decoration: none;
-webkit-transition: background-color 200ms ease-in-out;
-moz-transition: background-color 200ms ease-in-out;
-o-transition: background-color 200ms ease-in-out;
transition: background-color 200ms ease-in-out;
}
aside nav li a:hover {
background-color: #2b303b;
}
aside .subsection-navigation li {
font-size: 12px;
margin-left: 12px;
border-left: 1px solid #2b303b;
}
aside .subsection-navigation li a {
padding: 6px 12px;
}
Diff do arquivo suprimido porque uma ou mais linhas são muito longas

Antes

Largura:  |  Altura:  |  Tamanho: 66 KiB

-404
Ver Arquivo
@@ -1,404 +0,0 @@
* {
padding: 0;
margin: 0;
color: inherit;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
*,
*:before,
*:after {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
body {
position: relative;
font-family: "proxima-nova", 'Helvetica Neue', 'Helvetica', 'sans-serif';
color: #232830;
}
lesshat-selector {
-lh-property: 0; }
::selection{color: #dfe1e8; background: #5b90bf}
::-moz-selection{color: #dfe1e8; background: #5b90bf;
}
.aspect-ratio {
width: 100%;
padding-bottom: 40%;
position: relative;
background-color: #232830;
border-bottom: 10px solid #5b90bf;
}
header {
position: absolute;
left: 0;
width: 100%;
top: 50%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-o-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
text-align: center;
color: #dfe1e8;
z-index: 3;
}
header h1 {
margin-bottom: 30px;
}
header h2 {
margin-bottom: 30px;
}
@media only screen and (max-width: 600px) {
header {
color: #232830;
top: 100%;
margin-top: 10px;
padding: 40px 10px;
background-color: #fafafa;
border-bottom: 1px solid #e1e1e1;
-webkit-transform: translateY(0%);
-moz-transform: translateY(0%);
-o-transform: translateY(0%);
-ms-transform: translateY(0%);
transform: translateY(0%);
}
header h1 {
font-size: 38px;
margin-bottom: 10px;
}
header h2 {
font-size: 16px;
margin-bottom: 20px;
}
header .btn {
min-width: 136px;
font-size: 14px;
padding: 18px 20px;
margin: 0 5px;
}
}
.content-main {
background-color: #fff;
z-index: 2;
position: relative;
max-width: 1440px;
margin: 0 auto;
}
@media only screen and (max-width: 600px) {
.content-main {
padding-top: 256px;
}
}
.container {
margin: 0 auto;
}
.container:after {
content: '';
display: table;
}
.canvas-holder {
padding: 4px 0;
margin: 20px 0;
position: relative;
}
.canvas-holder img {
width: 100%;
height: auto;
}
.aspect-spacer {
width: 100% !important;
height: auto !important;
display: inline-block;
}
.canvas-node-demo {
position: relative;
}
.canvas-node-demo code {
z-index: -1;
position: absolute;
width: 100%;
top: 50%;
-webkit-transform: translateY(-50%);
-moz-transform: translateY(-50%);
-o-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
font-family: "proxima-nova", 'Helvetica Neue', 'Helvetica', 'sans-serif';
text-align: center;
color: #b0bace;
}
.canvas-node-demo .operator {
font-size: 36px;
}
.canvas-node-demo .node-name {
font-size: 50px;
}
.labeled-chart-container {
padding-right: 150px;
min-height: 180px;
position: relative;
}
@media only screen and (max-width: 600px) {
.labeled-chart-container {
padding-right: 130px;
}
}
.doughnut-legend {
list-style: none;
position: absolute;
right: 8px;
top: 0;
}
.doughnut-legend li {
display: block;
padding-left: 30px;
position: relative;
margin-bottom: 4px;
border-radius: 5px;
padding: 2px 8px 2px 28px;
font-size: 14px;
cursor: default;
-webkit-transition: background-color 200ms ease-in-out;
-moz-transition: background-color 200ms ease-in-out;
-o-transition: background-color 200ms ease-in-out;
transition: background-color 200ms ease-in-out;
}
.doughnut-legend li:hover {
background-color: #fafafa;
}
.doughnut-legend li span {
display: block;
position: absolute;
left: 0;
top: 0;
width: 20px;
height: 100%;
border-radius: 5px;
}
.carousel {
white-space: nowrap;
overflow: hidden;
}
.carousel canvas {
display: inline-block;
-webkit-transition: -webkit-transform 400ms ease-out;
-moz-transition: -moz-transform 400ms ease-out;
-o-transition: -o-transform 400ms ease-out;
transition: -webkit-transform 400ms ease-out,-moz-transform 400ms ease-out,-o-transform 400ms ease-out,transform 400ms ease-out;
}
.position-6 canvas {
-webkit-transform: translateX(-500%);
-moz-transform: translateX(-500%);
-o-transform: translateX(-500%);
-ms-transform: translateX(-500%);
transform: translateX(-500%);
}
.position-5 canvas {
-webkit-transform: translateX(-400%);
-moz-transform: translateX(-400%);
-o-transform: translateX(-400%);
-ms-transform: translateX(-400%);
transform: translateX(-400%);
}
.position-4 canvas {
-webkit-transform: translateX(-300%);
-moz-transform: translateX(-300%);
-o-transform: translateX(-300%);
-ms-transform: translateX(-300%);
transform: translateX(-300%);
}
.position-3 canvas {
-webkit-transform: translateX(-200%);
-moz-transform: translateX(-200%);
-o-transform: translateX(-200%);
-ms-transform: translateX(-200%);
transform: translateX(-200%);
}
.position-2 canvas {
-webkit-transform: translateX(-100%);
-moz-transform: translateX(-100%);
-o-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
}
.position-1 canvas {
-webkit-transform: translateX(0%);
-moz-transform: translateX(0%);
-o-transform: translateX(0%);
-ms-transform: translateX(0%);
transform: translateX(0%);
}
.hover-highlight {
border-radius: 10px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-transition: background-color 200ms ease-in-out;
-moz-transition: background-color 200ms ease-in-out;
-o-transition: background-color 200ms ease-in-out;
transition: background-color 200ms ease-in-out;
}
.hover-highlight:hover {
background-color: rgba(239, 241, 245, 0.3);
border-radius: 10px;
}
.hover-highlight canvas {
cursor: pointer;
}
#hero-bar {
position: absolute;
left: 0;
top: 0;
z-index: 1;
}
h1 {
font-size: 62px;
font-weight: 600;
}
@media only screen and (max-width: 978px) {
h1 {
font-size: 48px;
}
}
h2 {
font-weight: 400;
}
h3 {
text-align: center;
}
p {
margin: 20px 0;
text-align: center;
font-size: 18px;
line-height: 28px;
}
a {
color: #5b90bf;
text-decoration: none;
border-bottom: 1px solid;
}
.features article {
width: 33.33%;
padding: 40px;
float: left;
}
@media only screen and (max-width: 978px) {
.features article {
width: 50%;
}
.features article:nth-child(2n+1) {
clear: left;
}
}
@media only screen and (max-width: 600px) {
.features article {
width: auto;
float: none;
border-bottom: 1px solid #e1e1e1;
padding: 20px 12px;
}
.features article:last-child {
border-bottom: none;
}
}
.features h3 {
margin: 40px 0 60px 0;
font-size: 32px;
}
@media only screen and (max-width: 600px) {
.features h3 {
font-size: 28px;
}
}
.btn {
margin: 0 10px;
padding: 18px 26px;
min-width: 220px;
border: none;
text-align: center;
display: inline-block;
text-decoration: none;
background-color: #1C1F26;
border-radius: 5px;
font-size: 18px;
color: #dfe1e8;
-webkit-transition: 200ms background-color;
-moz-transition: 200ms background-color;
-o-transition: 200ms background-color;
transition: 200ms background-color;
}
.btn.red {
background-color: #bf616a;
}
.btn.red:hover {
background-color: #b9525c;
}
.btn.blue {
background-color: #5b90bf;
}
.btn.blue:hover {
background-color: #4c86b9;
}
.documentation-button-container {
margin-top: 20px;
}
.badge {
background-color: #ebcb8b;
padding: 4px 8px;
font-size: 14px;
border-radius: 6px;
color: #fff;
vertical-align: top;
margin-left: 4px;
}
footer {
margin-top: 20px;
text-align: center;
clear: both;
}
.download-banner {
padding: 60px 12px;
background-color: #eff1f5;
}
.download-banner h2 {
line-height: 40px;
}
.download-banner h2 span {
padding: 0 5px;
}
@media only screen and (max-width: 600px) {
.download-banner h2 {
line-height: normal;
font-size: 22px;
}
.download-banner h2 span {
display: block;
margin: 12px 0;
font-size: 16px;
}
}
.owner-notice {
padding: 20px 12px;
background-color: #232830;
color: rgba(250, 250, 250, 0.3);
border-top: 10px solid #5b90bf;
-webkit-transition: color 200ms ease-out;
-moz-transition: color 200ms ease-out;
-o-transition: color 200ms ease-out;
transition: color 200ms ease-out;
}
.owner-notice a {
color: rgba(250, 250, 250, 0.3);
-webkit-transition: color 200ms ease-out;
-moz-transition: color 200ms ease-out;
-o-transition: color 200ms ease-out;
transition: color 200ms ease-out;
}
.owner-notice:hover {
color: #fafafa;
}
.owner-notice:hover a {
color: #fafafa;
}
+21
Ver Arquivo
@@ -0,0 +1,21 @@
{
"name": "Chart.js",
"description": "Simple HTML5 Charts using the canvas element",
"homepage": "https://github.com/nnnick/Chart.js",
"author": "nnnick",
"main": [
"Chart.js"
],
"ignore": [
"**/*",
".travis.yml",
"CONTRIBUTING.md",
"Chart.js",
"LICENSE.md",
"README.md",
"gulpfile.js",
"package.json"
],
"dependencies": {},
"version": "1.1.1"
}
+26
Ver Arquivo
@@ -0,0 +1,26 @@
{
"name": "nnnick/chartjs",
"type": "library",
"description": "Simple HTML5 charts using the canvas element.",
"keywords": [
"chart",
"js"
],
"homepage": "http://www.chartjs.org/",
"license": "MIT",
"authors": [
{
"name": "NICK DOWNIE",
"email": "hello@nickdownie.com"
}
],
"require": {
"php": ">=5.3.3"
},
"minimum-stability": "stable",
"extra": {
"branch-alias": {
"release/2.0": "v2.0-dev"
}
}
}
-54
Ver Arquivo
@@ -1,54 +0,0 @@
---
---
<!doctype html>
<html>
<head>
<title>Chart.js | Documentation</title>
<link rel="stylesheet" type="text/css" href="../assets/docs.css">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimal-ui">
<script type="text/javascript" src="//use.typekit.net/dqv7hih.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
</head>
<body>
<aside id="js-toggle-menu">
<ul class="hamburger-menu">
<li></li>
<li></li>
<li></li>
</ul>
<nav>
<ul>
{% for doc in site.collections[1].docs %}
<li id="link-{{ doc.anchor }}">
<a href="#{{ doc.anchor }}">{{ doc.title | escape }}</a>
</li>
{% endfor %}
</ul>
</nav>
</aside>
<section class="docs-container">
<article class="intro">
<h1>Chart.js V2 Documentation</h1>
<h3>Everything you need to know to build great looking charts using Chart.js</h3>
</article>
{% for doc in site.collections[1].docs %}
<article id="{{ doc.anchor }}">
<h2>{{ doc.title | escape }}</h2>
{{ doc.content }}
</article>
{% endfor %}
</section>
<script src="../assets/Chart.min.js"></script>
<script>!function(){var e=Chart.helpers;Chart.defaults.global.responsive=!0,Chart.defaults.global.animation=!1;var t=document.getElementById("js-toggle-menu");e.addEvent(t,"click",function(){document.body.className=-1!==document.body.className.indexOf("open-menu")?"closed-menu":"open-menu"});var n=document.getElementsByTagName("article");e.each(n,function(t){if(t.id){var n=t.getElementsByTagName("canvas"),a=t.getElementsByTagName("h3"),l=t.querySelectorAll(".javascript"),i=Array.prototype.slice.call(l,0,2);if(articleId=t.id,list=document.createElement("ul"),navigationItem=document.getElementById("link-"+articleId),list.className="subsection-navigation",e.each(a,function(e){var t=document.createElement("li");e.id=articleId+"-"+e.textContent.replace(/\s+/g,"-").toLowerCase(),t.innerHTML='<a href="#'+e.id+'">'+e.textContent+"</a>",list.appendChild(t)}),a.length>0&&navigationItem.appendChild(list),n.length>0){var o="",c=[];e.each(n,function(e){c.push(e.getContext("2d"))}),c=c.length>1?c:c[0];for(var d=i.length-1;d>=0;d--)o+=i[d].textContent;new Function("ctx","options",o)(c)}}})}();</script>
<script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28909194-3', 'auto');
ga('send', 'pageview');</script>
</body>
</html>
@@ -226,3 +226,22 @@ Chart.defaults.global.responsive = true;
```
Now, every time we create a chart, `options.responsive` will be `true`.
###Tooltip Templates
For the `tooltipTemplate` and `multiTooltipTemplate` configuration options, you may use special template blocks. **Do not use user input in the tooltip template, as it may be executed as raw JavaScript.**
Anything in between `<%` and `%>` will be executed as JavaScript. As in the example shown above, `<% if (label) { %>` and later `<% } %>`. Using `<%= expr %>` will print the value of the variable named by `expr` into the tooltip.
The available variables to print into the tooltip depends on the chart type. In general, the following variables are available:
```javascript
{
value : "value of the data point",
label : "label for the position the data point is at",
datasetLabel: "label for the dataset the point is from",
strokeColor : "stroke color for the dataset",
fillColor : "fill color for the dataset",
highlightFill : "highlight fill color for the dataset",
highlightStroke : "highlight stroke color for the dataset"
}
```
@@ -45,7 +45,7 @@ var data = {
};
```
The line chart requires an array of labels for each of the data points. This is shown on the X axis.
The line chart requires an array of labels. This labels are shown on the X axis. There must be one label for each data point. More labels than datapoints are allowed, in which case the line ends at the last data point.
The data for line charts is broken up into an array of datasets. Each dataset has a colour for the fill, a colour for the line and colours for the points and strokes of the points. These colours are strings just like CSS. You can use RGBA, RGB, HEX or HSL notation.
The label key on each dataset is optional, and can be used when generating a scale for the chart.
@@ -76,6 +76,9 @@ These are the customisation options specific to Radar charts. These options are
//Number - Pixel width of the angle line
angleLineWidth : 1,
//Number - Interval at which to draw angle lines ("every Nth point")
angleLineInterval: 1,
//String - Point label font declaration
pointLabelFontFamily : "'Arial'",
@@ -174,4 +177,4 @@ Calling `removeData()` on your Chart instance will remove the first value for al
```javascript
myRadarChart.removeData();
// Other points will now animate to their correct positions.
```
```
@@ -137,6 +137,8 @@ myDoughnutChart.update();
Calling `addData(segmentData, index)` on your Chart instance passing an object in the same format as in the constructor. There is an optional second argument of 'index', this determines at what index the new segment should be inserted into the chart.
If you don't specify a color and highliht, one will be chosen from the global default array: segmentColorDefault and the corresponding segmentHighlightColorDefault. The index of the addded data is used to lookup a corresponding color from the defaults.
```javascript
// An object in the same format as the original data source
myDoughnutChart.addData({
@@ -96,7 +96,7 @@ var myPieChart = new Chart(ctx).Pie(data, {
// tooltip.y
// etc...
};
}
});
```
-57
Ver Arquivo
@@ -1,57 +0,0 @@
---
---
<!doctype html>
<html>
<head>
<title>Chart.js | Documentation</title>
<link rel="stylesheet" type="text/css" href="../assets/docs.css">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimal-ui">
<script type="text/javascript" src="//use.typekit.net/dqv7hih.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
</head>
<body>
<aside id="js-toggle-menu">
<ul class="hamburger-menu">
<li></li>
<li></li>
<li></li>
</ul>
<nav>
<ul>
{% for doc in site.collections[0].docs %}
<li id="link-{{ doc.anchor }}">
<a href="#{{ doc.anchor }}">{{ doc.title | escape }}</a>
</li>
{% endfor %}
</ul>
</nav>
</aside>
<section class="docs-container">
<article class="intro">
<h1>Chart.js V1 Documentation</h1>
<h3>Everything you need to know to build great looking charts using Chart.js</h3>
</article>
{% for doc in site.collections[0].docs %}
<article id="{{ doc.anchor }}">
<h2>{{ doc.title | escape }}</h2>
{{ doc.content }}
</article>
{% endfor %}
</section>
<script src="../assets/Chart.min.js"></script>
<script>!function(){var e=Chart.helpers;Chart.defaults.global.responsive=!0,Chart.defaults.global.animation=!1;var t=document.getElementById("js-toggle-menu");e.addEvent(t,"click",function(){document.body.className=-1!==document.body.className.indexOf("open-menu")?"closed-menu":"open-menu"});var n=document.getElementsByTagName("article");e.each(n,function(t){if(t.id){var n=t.getElementsByTagName("canvas"),a=t.getElementsByTagName("h3"),l=t.querySelectorAll(".javascript"),i=Array.prototype.slice.call(l,0,2);if(articleId=t.id,list=document.createElement("ul"),navigationItem=document.getElementById("link-"+articleId),list.className="subsection-navigation",e.each(a,function(e){var t=document.createElement("li");e.id=articleId+"-"+e.textContent.replace(/\s+/g,"-").toLowerCase(),t.innerHTML='<a href="#'+e.id+'">'+e.textContent+"</a>",list.appendChild(t)}),a.length>0&&navigationItem.appendChild(list),n.length>0){var o="",c=[];e.each(n,function(e){c.push(e.getContext("2d"))}),c=c.length>1?c:c[0];for(var d=i.length-1;d>=0;d--)o+=i[d].textContent;new Function("ctx","options",o)(c)}}})}();</script>
<script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28909194-3', 'auto');
ga('send', 'pageview');</script>
</body>
</html>
+147
Ver Arquivo
@@ -0,0 +1,147 @@
var gulp = require('gulp'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
util = require('gulp-util'),
jshint = require('gulp-jshint'),
size = require('gulp-size'),
connect = require('gulp-connect'),
replace = require('gulp-replace'),
htmlv = require('gulp-html-validator'),
inquirer = require('inquirer'),
semver = require('semver'),
exec = require('child_process').exec,
fs = require('fs'),
package = require('./package.json'),
bower = require('./bower.json'),
livereload = require('gulp-livereload');
var srcDir = './src/';
/*
* Usage : gulp build --types=Bar,Line,Doughnut
* Output: - A built Chart.js file with Core and types Bar, Line and Doughnut concatenated together
* - A minified version of this code, in Chart.min.js
*/
gulp.task('build', function(){
// Default to all of the chart types, with Chart.Core first
var srcFiles = [FileName('Core')],
isCustom = !!(util.env.types),
outputDir = (isCustom) ? 'custom' : '.';
if (isCustom){
util.env.types.split(',').forEach(function(type){ return srcFiles.push(FileName(type));});
}
else{
// Seems gulp-concat remove duplicates - nice!
// So we can use this to sort out dependency order - aka include Core first!
srcFiles.push(srcDir+'*');
}
return gulp.src(srcFiles)
.pipe(concat('Chart.js'))
.pipe(replace('{{ version }}', package.version))
.pipe(gulp.dest(outputDir))
.pipe(uglify({preserveComments:'some'}))
.pipe(concat('Chart.min.js'))
.pipe(gulp.dest(outputDir));
function FileName(moduleName){
return srcDir+'Chart.'+moduleName+'.js';
}
});
/*
* Usage : gulp bump
* Prompts: Version increment to bump
* Output: - New version number written into package.json & bower.json
*/
gulp.task('bump', function(complete){
util.log('Current version:', util.colors.cyan(package.version));
var choices = ['major', 'premajor', 'minor', 'preminor', 'patch', 'prepatch', 'prerelease'].map(function(versionType){
return versionType + ' (v' + semver.inc(package.version, versionType) + ')';
});
inquirer.prompt({
type: 'list',
name: 'version',
message: 'What version update would you like?',
choices: choices
}, function(res){
var increment = res.version.split(' ')[0],
newVersion = semver.inc(package.version, increment);
// Set the new versions into the bower/package object
package.version = newVersion;
bower.version = newVersion;
// Write these to their own files, then build the output
fs.writeFileSync('package.json', JSON.stringify(package, null, 2));
fs.writeFileSync('bower.json', JSON.stringify(bower, null, 2));
complete();
});
});
gulp.task('release', ['build'], function(){
exec('git tag -a v' + package.version);
});
gulp.task('jshint', function(){
return gulp.src(srcDir + '*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
gulp.task('valid', function(){
return gulp.src('samples/*.html')
.pipe(htmlv());
});
gulp.task('library-size', function(){
return gulp.src('Chart.min.js')
.pipe(size({
gzip: true
}));
});
gulp.task('module-sizes', function(){
return gulp.src(srcDir + '*.js')
.pipe(uglify({preserveComments:'some'}))
.pipe(size({
showFiles: true,
gzip: true
}));
});
gulp.task('watch', function(){
gulp.watch('./src/*', ['build']);
livereload.listen(35729);
var reloadPage = function (evt) {
livereload.changed(evt.path);
};
gulp.watch(['Chart.js', 'samples/*'], reloadPage);
});
gulp.task('test', ['jshint', 'valid']);
gulp.task('size', ['library-size', 'module-sizes']);
gulp.task('default', ['build', 'watch']);
gulp.task('server', function(){
connect.server({
port: 8000
});
});
// Convenience task for opening the project straight from the command line
gulp.task('_open', function(){
exec('open http://localhost:8000');
exec('subl .');
});
gulp.task('dev', ['server', 'default']);
-558
Ver Arquivo
@@ -1,558 +0,0 @@
---
---
<!doctype html>
<html>
<head>
<title>Chart.js | Open source HTML5 Charts for your website</title>
<meta name="description" content="Simple, clean and engaging HTML5 based JavaScript charts. Chart.js is an easy way to include animated, interactive graphs on your website for free."/>
<link rel="stylesheet" type="text/css" href="assets/styles.css">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimal-ui">
<script type="text/javascript" src="//use.typekit.net/dqv7hih.js"></script>
<script type="text/javascript">try{Typekit.load();}catch(e){}</script>
</head>
<body>
<div class="aspect-ratio">
<canvas width='1200' height='480' id="hero-bar"></canvas>
<header>
<h1>Chart.js</h1>
<h2>Simple, clean and engaging charts for designers and developers</h2>
<a class="btn red" href="https://github.com/nnnick/Chart.js">Download</a>
<div class="documentation-button-container">
<a class="btn blue" href="{{ site.baseurl }}/docs">V1 Documentation</a>
<a class="btn blue" href="{{ site.baseurl }}/docs-v2">V2 Documentation</a>
</div>
</header>
</div>
<div class="content-main">
<section class="features container">
<article>
<h3>Six chart types</h3>
<div id="js-carousel" class="canvas-holder hover-highlight carousel position-1"><canvas width="400" height="250" id="carousel-radar"></canvas><canvas width="400" height="250" id="carousel-polar-area"></canvas><canvas width="400" height="250" id="carousel-bar"></canvas><canvas width="400" height="250" id="carousel-doughnut"></canvas><canvas width="400" height="250" id="carousel-line"></canvas><canvas width="400" height="250" id="carousel-pie"></canvas></div>
<p>Visualize your data in 6 different ways. Each of them animated, with a load of customisation options and interactivity extensions.</p>
</article>
<article>
<h3>HTML5 based</h3>
<div id="js-mouse-bubbles" class="canvas-holder canvas-node-demo hover-highlight">
<code>
<span class="operator">&lt;</span><span class="node-name">canvas</span><span class="operator">&gt;</span>
</code>
<canvas width="400" height="250" class="aspect-spacer"></canvas>
</div>
<p>Chart.js uses the HTML5 canvas element. It's supported in all modern browsers, and polyfills support for IE7/8.</p>
</article>
<article>
<h3>Simple and flexible</h3>
<div class="canvas-holder hover-highlight">
<canvas width="400" height="250" id="micro-line"></canvas>
</div>
<p>Chart.js is dependency free and super lightweight. All six core chart types are only <strong>11.01kb</strong> when minified, concatenated and served gzipped.</p>
</article>
<article>
<h3>Responsive <span class="badge new">new</span></h3>
<div class="canvas-holder">
<img width="400" height="250" src="assets/responsive.svg"/>
</div>
<p>Chart.js will resize your chart if the browser changes size, along with providing the perfect scale granularity for that size</p>
</article>
<article>
<h3>Modular <span class="badge new">new</span></h3>
<div class="labeled-chart-container">
<div class="canvas-holder">
<canvas id="modular-doughnut" width="250" height="250">
</canvas>
</div>
</div>
<p>Chart.js is modular, and each of the chart types have been split up, so you can load only which chart types you need for your project</p>
</article>
<article>
<h3>Interactive <span class="badge new">new</span></h3>
<div class="canvas-holder half">
<canvas id="interactive-bar" width="400" height="250">
</canvas>
</div>
<p>Chart.js provides default simple support for canvas tooltips on hover/touch, but you can extend chart interactions to trigger events in your application</p>
</article>
</section>
</div>
<footer>
<div class="download-banner">
<h2><a href="https://github.com/nnnick/Chart.js">Download on GitHub</a><span> or </span><a href="/docs">Read detailed documentation</a></h2>
</div>
<div class="owner-notice">
A project by <a href="http://www.nickdownie.com">Nick Downie</a>
</div>
</footer>
<script src="assets/Chart.min.js"></script>
<script>(function(){
// Colour variables
var red = "#bf616a",
blue = "#5B90BF",
orange = "#d08770",
yellow = "#ebcb8b",
green = "#a3be8c",
teal = "#96b5b4",
pale_blue = "#8fa1b3",
purple = "#b48ead",
brown = "#ab7967";
var baseDataset = {
fill: 'rgba(222,225,232,0.4)',
stroke: 'rgba(222,225,232,1)',
highlight: 'rgba(222,225,232,0.8)',
highlightStroke: 'rgba(222,225,232,1)'
},
overlayDataset = {
fill: 'rgba(91,144,191,0.4)',
stroke: 'rgba(91,144,191,1)',
highlight: 'rgba(91,144,191,0.8)',
highlightStroke: 'rgba(91,144,191,1)'
};
var data = [],
barsCount = 50,
labels = new Array(barsCount),
updateDelayMax = 500,
$id = function(id){
return document.getElementById(id);
},
random = function(max){ return Math.round(Math.random()*100)},
helpers = Chart.helpers;
Chart.defaults.global.responsive = true;
for (var i = barsCount - 1; i >= 0; i--) {
data.push(Math.round(Math.random() * 100));
};
new Chart($id('hero-bar').getContext('2d')).Bar({
labels : labels,
datasets : [{
fillColor : '#2B303B',
data : data
}]
},{
showScale : false,
barShowStroke : false,
barValueSpacing: 1,
showTooltips : false,
onAnimationComplete : function(){
// Get scope of the hero chart during updates
var heroChart = this,
timeout;
// Stop this running every time the update is fired
this.options.onAnimationComplete = randomUpdate;
this.options.animationEasing = 'easeOutQuint';
randomUpdate();
function randomUpdate(){
heroChart.stop();
clearTimeout(timeout);
// Get a random bar
timeout = setTimeout(function(){
var randomNumberOfBars = Math.floor(Math.random() * barsCount),
i;
for (i = randomNumberOfBars - 1; i >= 0; i--) {
heroChart.datasets[0].bars[Math.floor(Math.random() * barsCount)].value = Math.round(Math.random() * 100);
};
heroChart.update();
},Math.random() * updateDelayMax);
};
}
});
//Run any of the smaller demo charts here.
// Six up carousel
(function(){
var contexts = {
polar : $id('carousel-polar-area').getContext('2d'),
radar : $id('carousel-radar').getContext('2d'),
line : $id('carousel-line').getContext('2d'),
bar : $id('carousel-bar').getContext('2d'),
doughnut : $id('carousel-doughnut').getContext('2d'),
pie : $id('carousel-pie').getContext('2d')
},
chartInstances = [];
var data = {
multiSets: {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [
{
label: "My First dataset",
fillColor: baseDataset.fill,
strokeColor: baseDataset.stroke,
pointColor: baseDataset.stroke,
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
highlightFill: baseDataset.highlight,
pointHighlightStroke: baseDataset.highlightStroke,
data: [65, 59, 90, 81, 56, 55, 40]
},
{
label: "My Second dataset",
fillColor: overlayDataset.fill,
strokeColor: overlayDataset.stroke,
pointColor: overlayDataset.stroke,
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: overlayDataset.highlightStroke,
highlightFill: overlayDataset.highlight,
data: [28, 48, 40, 19, 96, 27, 100]
}
]
},
segments : [
{
value : 25,
color : orange,
highlight : Colour(orange, 10),
label : "Orange"
},
{
value: 14,
color: blue,
highlight : Colour(blue, 10),
label : "Blue"
},
{
value: 6,
color: yellow,
highlight : Colour(yellow, 10),
label : "Yellow"
},
{
value : 28,
color : purple,
highlight : Colour(purple, 10),
label : "Purple"
},
{
value: 18,
color: teal,
highlight: Colour(teal, 10),
label: "Teal"
}
]
}
var config = {
animation: false,
onAnimationComplete: function(){
this.options.animation = true;
}
};
chartInstances.push(new Chart(contexts.radar).Radar(data.multiSets, config));
chartInstances.push(new Chart(contexts.polar).PolarArea(data.segments, config));
chartInstances.push(new Chart(contexts.bar).Bar(data.multiSets, config));
chartInstances.push(new Chart(contexts.doughnut).Doughnut(data.segments, config));
chartInstances.push(new Chart(contexts.line).Line(data.multiSets, config));
chartInstances.push(new Chart(contexts.pie).Pie(data.segments, config));
var iteratePosition = (function(){
var position = 1;
return function(){
position++;
return (position > chartInstances.length) ? position = 1 : position;
};
})();
var carousel = $id('js-carousel');
helpers.addEvent(carousel, 'click', function(){
var positionPrefix = 'position-',
carouselPosition = iteratePosition(),
chartToScrollTo = chartInstances[carouselPosition-1];
this.className = this.className.replace(new RegExp(positionPrefix+'[1-6]'), positionPrefix+carouselPosition);
chartToScrollTo.clear();
chartToScrollTo.render();
});
})();
// Canvas demo
(function(){
var mousetrap = $id('js-mouse-bubbles'),
canvas = mousetrap.getElementsByTagName('canvas')[0],
ctx = canvas.getContext('2d'),
colour = 'rgba(239,241,245, <%= alpha %>)',
maxSize = 50;
helpers.retinaScale({
canvas: canvas,
ctx: ctx
});
canvas.style.width = '100%';
canvas.style.height = 'auto';
helpers.addEvent(mousetrap, 'mousemove', drawTriangle);
helpers.addEvent(mousetrap, 'click', function(){
helpers.clear({
width: canvas.width,
height: canvas.height,
ctx: ctx
});
});
setInterval(function(){
setTimeout(drawTriangle, Math.random() * 400)
}, 150);
function drawTriangle(){
var x = Math.random() * canvas.width,
y = Math.random() * canvas.height,
width = Math.round((maxSize * Math.random() / 2)),
height = Math.sqrt(3) * width;
ctx.save();
ctx.translate(x, y);
ctx.rotate(Math.random() * (Math.PI * 2));
ctx.beginPath();
ctx.moveTo(-1 * width, 0);
ctx.lineTo(0, -1 * height);
ctx.lineTo(width, 0);
ctx.closePath();
ctx.fillStyle = colour.replace('<%= alpha %>', Math.random() + 0.2);
ctx.fill();
ctx.restore();
};
})();
// Simple & flexible
// Micro line chart
(function(){
var canvas = $id('micro-line'),
ctx = canvas.getContext('2d'),
lineChartData = [0, 6, 9, 10, 11, 14, 20];
var Line = new Chart(ctx).Line({
labels: new Array(lineChartData.length),
datasets: [{
strokeColor: overlayDataset.stroke,
pointColor: '#fff',
pointStrokeColor: overlayDataset.stroke,
data: lineChartData
}]
}, {
showScale: false,
showTooltips: false,
datasetStrokeWidth: 6,
datasetFill: false,
pointDotRadius : 9,
pointDotStrokeWidth: 4,
animation: false,
animationEasing: 'easeInOutQuint',
onAnimationComplete: function(){
this.options.animation = true;
}
});
helpers.addEvent(canvas, 'click', function(){
lineChartData.reverse();
Line.stop();
helpers.each(Line.datasets[0].points, function(point, index){
point.value = lineChartData[index];
});
Line.update();
})
})();
// Modular doughnut
(function(){
var canvas = $id('modular-doughnut'),
colours = {
"Core": blue,
"Line": orange,
"Bar": teal,
"Polar Area": purple,
"Radar": brown,
"Doughnut": green
};
var moduleData = [
{
value: 7.57,
color: colours["Core"],
highlight: Colour(colours["Core"], 10),
label: "Core"
},
{
value: 1.63,
color: colours["Bar"],
highlight: Colour(colours["Bar"], 10),
label: "Bar"
},
{
value: 1.09,
color: colours["Doughnut"],
highlight: Colour(colours["Doughnut"], 10),
label: "Doughnut"
},
{
value: 1.71,
color: colours["Radar"],
highlight: Colour(colours["Radar"], 10),
label: "Radar"
},
{
value: 1.64,
color: colours["Line"],
highlight: Colour(colours["Line"], 10),
label: "Line"
},
{
value: 1.37,
color: colours["Polar Area"],
highlight: Colour(colours["Polar Area"], 10),
label: "Polar Area"
}
];
//
{% raw %}
var moduleDoughnut = new Chart(canvas.getContext('2d')).Doughnut(moduleData, { tooltipTemplate : "<%if (label){%><%=label%>: <%}%><%= value %>kb", animation: false });
{% endraw %}
//
var legendHolder = document.createElement('div');
legendHolder.innerHTML = moduleDoughnut.generateLegend();
// Include a html legend template after the module doughnut itself
helpers.each(legendHolder.firstChild.childNodes, function(legendNode, index){
helpers.addEvent(legendNode, 'mouseover', function(){
var activeSegment = moduleDoughnut.segments[index];
activeSegment.save();
activeSegment.fillColor = activeSegment.highlightColor;
moduleDoughnut.showTooltip([activeSegment]);
activeSegment.restore();
});
});
helpers.addEvent(legendHolder.firstChild, 'mouseout', function(){
moduleDoughnut.draw();
});
canvas.parentNode.parentNode.appendChild(legendHolder.firstChild);
})();
// Interative micro bar chart
(function(){
var canvas = $id('interactive-bar'),
ctx = canvas.getContext('2d'),
microBar = new Chart(ctx).Bar({
labels: new Array(7),
datasets: [{
fillColor : "rgba(239,241,245,1)",
strokeColor : "rgba(0,0,0,0)",
highlightFill: "rgba(230,233,240,1)",
data: [random(), random(), random(), random(), random(), random(), random()]
}]
}, {
animation: false,
showScale: false,
barShowStroke: false,
tooltipXPadding: 10,
tooltipYPadding: 6,
tooltipFontSize: 18,
tooltipFontStyle: 'bold',
// Boolean - If we want to override with a hard coded scale
scaleOverride: true,
// ** Required if scaleOverride is true **
// Number - The number of steps in a hard coded scale
scaleSteps: 2,
// Number - The value jump in the hard coded scale
scaleStepWidth: 50,
// Number - The scale starting value
scaleStartValue: 0,
});
helpers.addEvent(canvas, 'mousemove', function(evt){
var bars =microBar.getBarsAtEvent(evt);
if (bars.length > 0){
canvas.style.cursor = "pointer";
}
else {
canvas.style.cursor = "default";
}
});
helpers.addEvent(canvas, 'click', function(evt){
microBar.options.animation = true;
microBar.options.onAnimationComplete = function(){
this.showTooltip(this.activeElements, true);
};
var bars = microBar.getBarsAtEvent(evt);
helpers.each(bars, function(bar){
bar.value = Math.max(random(), 5);
});
if (bars.length > 0){
microBar.update();
}
});
})();
function Colour(col, amt) {
var usePound = false;
if (col[0] == "#") {
col = col.slice(1);
usePound = true;
}
var num = parseInt(col,16);
var r = (num >> 16) + amt;
if (r > 255) r = 255;
else if (r < 0) r = 0;
var b = ((num >> 8) & 0x00FF) + amt;
if (b > 255) b = 255;
else if (b < 0) b = 0;
var g = (num & 0x0000FF) + amt;
if (g > 255) g = 255;
else if (g < 0) g = 0;
return (usePound?"#":"") + (g | (b << 8) | (r << 16)).toString(16);
}
})();
</script>
<script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28909194-3', 'auto');
ga('send', 'pageview');</script>
</body>
</html>
+30
Ver Arquivo
@@ -0,0 +1,30 @@
{
"name": "chart.js",
"homepage": "http://www.chartjs.org",
"description": "Simple HTML5 charts using the canvas element.",
"version": "1.1.1",
"main": "Chart.js",
"repository": {
"type": "git",
"url": "https://github.com/nnnick/Chart.js.git"
},
"license": "MIT",
"dependences": {},
"devDependencies": {
"gulp": "3.9.x",
"gulp-concat": "~2.1.x",
"gulp-connect": "~2.0.5",
"gulp-jshint": "~1.5.1",
"gulp-replace": "^0.4.0",
"gulp-size": "~0.4.0",
"gulp-uglify": "~1.5.x",
"gulp-util": "~2.2.x",
"gulp-html-validator": "^0.0.2",
"inquirer": "^0.5.1",
"semver": "^3.0.1",
"gulp-livereload": "^3.8.0"
},
"spm": {
"main": "Chart.js"
}
}
+45
Ver Arquivo
@@ -0,0 +1,45 @@
<!doctype html>
<html>
<head>
<title>Bar Chart</title>
<script src="../Chart.js"></script>
</head>
<body>
<div style="width: 50%">
<canvas id="canvas" height="450" width="600"></canvas>
</div>
<script>
var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
var barChartData = {
labels : ["January","February","March","April","May","June","July"],
datasets : [
{
fillColor : "rgba(220,220,220,0.5)",
strokeColor : "rgba(220,220,220,0.8)",
highlightFill: "rgba(220,220,220,0.75)",
highlightStroke: "rgba(220,220,220,1)",
data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
},
{
fillColor : "rgba(151,187,205,0.5)",
strokeColor : "rgba(151,187,205,0.8)",
highlightFill : "rgba(151,187,205,0.75)",
highlightStroke : "rgba(151,187,205,1)",
data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
}
]
}
window.onload = function(){
var ctx = document.getElementById("canvas").getContext("2d");
window.myBar = new Chart(ctx).Bar(barChartData, {
responsive : true
});
}
</script>
</body>
</html>
+58
Ver Arquivo
@@ -0,0 +1,58 @@
<!doctype html>
<html>
<head>
<title>Doughnut Chart</title>
<script src="../src/Chart.Core.js"></script>
<script src="../src/Chart.Doughnut.js"></script>
<style>
body{
padding: 0;
margin: 0;
}
#canvas-holder{
width:30%;
}
</style>
</head>
<body>
<div id="canvas-holder">
<canvas id="chart-area" width="500" height="500"/>
</div>
<script>
var doughnutData = [
{
value: 1,
label: "One"
},
{
value: 2,
label: "Two"
},
{
value: 3,
label: "Three"
},
{
value: 4,
label: "Four"
},
{
value: 5,
label: "Five"
}
];
window.onload = function(){
var ctx = document.getElementById("chart-area").getContext("2d");
window.myDoughnut = new Chart(ctx).Doughnut(doughnutData, {responsive : true});
};
</script>
</body>
</html>
+67
Ver Arquivo
@@ -0,0 +1,67 @@
<!doctype html>
<html>
<head>
<title>Doughnut Chart</title>
<script src="../Chart.js"></script>
<style>
body{
padding: 0;
margin: 0;
}
#canvas-holder{
width:30%;
}
</style>
</head>
<body>
<div id="canvas-holder">
<canvas id="chart-area" width="500" height="500"/>
</div>
<script>
var doughnutData = [
{
value: 300,
color:"#F7464A",
highlight: "#FF5A5E",
label: "Red"
},
{
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green"
},
{
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow"
},
{
value: 40,
color: "#949FB1",
highlight: "#A8B3C5",
label: "Grey"
},
{
value: 120,
color: "#4D5360",
highlight: "#616774",
label: "Dark Grey"
}
];
window.onload = function(){
var ctx = document.getElementById("chart-area").getContext("2d");
window.myDoughnut = new Chart(ctx).Doughnut(doughnutData, {responsive : true});
};
</script>
</body>
</html>
+129
Ver Arquivo
@@ -0,0 +1,129 @@
<!doctype html>
<html>
<head>
<title>Line Chart with Custom Tooltips</title>
<script src="../Chart.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
#canvas-holder1 {
width: 300px;
margin: 20px auto;
}
#canvas-holder2 {
width: 50%;
margin: 20px 25%;
}
#chartjs-tooltip {
opacity: 1;
position: absolute;
background: rgba(0, 0, 0, .7);
color: white;
padding: 3px;
border-radius: 3px;
-webkit-transition: all .1s ease;
transition: all .1s ease;
pointer-events: none;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
.chartjs-tooltip-key{
display:inline-block;
width:10px;
height:10px;
}
</style>
</head>
<body>
<div id="canvas-holder1">
<canvas id="chart1" width="300" height="30" />
</div>
<div id="canvas-holder2">
<canvas id="chart2" width="450" height="600" />
</div>
<div id="chartjs-tooltip"></div>
<script>
Chart.defaults.global.pointHitDetectionRadius = 1;
Chart.defaults.global.customTooltips = function(tooltip) {
var tooltipEl = $('#chartjs-tooltip');
if (!tooltip) {
tooltipEl.css({
opacity: 0
});
return;
}
tooltipEl.removeClass('above below');
tooltipEl.addClass(tooltip.yAlign);
var innerHtml = '';
for (var i = tooltip.labels.length - 1; i >= 0; i--) {
innerHtml += [
'<div class="chartjs-tooltip-section">',
' <span class="chartjs-tooltip-key" style="background-color:' + tooltip.legendColors[i].fill + '"></span>',
' <span class="chartjs-tooltip-value">' + tooltip.labels[i] + '</span>',
'</div>'
].join('');
}
tooltipEl.html(innerHtml);
tooltipEl.css({
opacity: 1,
left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
top: tooltip.chart.canvas.offsetTop + tooltip.y + 'px',
fontFamily: tooltip.fontFamily,
fontSize: tooltip.fontSize,
fontStyle: tooltip.fontStyle,
});
};
var randomScalingFactor = function() {
return Math.round(Math.random() * 100);
};
var lineChartData = {
labels: ["January", "February", "March", "April", "May", "June", "July"],
datasets: [{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
}, {
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.2)",
strokeColor: "rgba(151,187,205,1)",
pointColor: "rgba(151,187,205,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
data: [randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor(), randomScalingFactor()]
}]
};
window.onload = function() {
var ctx1 = document.getElementById("chart1").getContext("2d");
window.myLine = new Chart(ctx1).Line(lineChartData, {
showScale: false,
pointDot : true,
responsive: true
});
var ctx2 = document.getElementById("chart2").getContext("2d");
window.myLine = new Chart(ctx2).Line(lineChartData, {
responsive: true
});
};
</script>
</body>
</html>
+54
Ver Arquivo
@@ -0,0 +1,54 @@
<!doctype html>
<html>
<head>
<title>Line Chart</title>
<script src="../Chart.js"></script>
</head>
<body>
<div style="width:30%">
<div>
<canvas id="canvas" height="450" width="600"></canvas>
</div>
</div>
<script>
var randomScalingFactor = function(){ return Math.round(Math.random()*100)};
var lineChartData = {
labels : ["January","February","March","April","May","June","July"],
datasets : [
{
label: "My First dataset",
fillColor : "rgba(220,220,220,0.2)",
strokeColor : "rgba(220,220,220,1)",
pointColor : "rgba(220,220,220,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(220,220,220,1)",
data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
},
{
label: "My Second dataset",
fillColor : "rgba(151,187,205,0.2)",
strokeColor : "rgba(151,187,205,1)",
pointColor : "rgba(151,187,205,1)",
pointStrokeColor : "#fff",
pointHighlightFill : "#fff",
pointHighlightStroke : "rgba(151,187,205,1)",
data : [randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor(),randomScalingFactor()]
}
]
}
window.onload = function(){
var ctx = document.getElementById("canvas").getContext("2d");
window.myLine = new Chart(ctx).Line(lineChartData, {
responsive: true
});
}
</script>
</body>
</html>
+156
Ver Arquivo
@@ -0,0 +1,156 @@
<!doctype html>
<html>
<head>
<title>Pie Chart with Custom Tooltips</title>
<script src="../Chart.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<style>
#canvas-holder {
width: 100%;
margin-top: 50px;
text-align: center;
}
#chartjs-tooltip {
opacity: 1;
position: absolute;
background: rgba(0, 0, 0, .7);
color: white;
padding: 3px;
border-radius: 3px;
-webkit-transition: all .1s ease;
transition: all .1s ease;
pointer-events: none;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
#chartjs-tooltip.below {
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
#chartjs-tooltip.below:before {
border: solid;
border-color: #111 transparent;
border-color: rgba(0, 0, 0, .8) transparent;
border-width: 0 8px 8px 8px;
bottom: 1em;
content: "";
display: block;
left: 50%;
position: absolute;
z-index: 99;
-webkit-transform: translate(-50%, -100%);
transform: translate(-50%, -100%);
}
#chartjs-tooltip.above {
-webkit-transform: translate(-50%, -100%);
transform: translate(-50%, -100%);
}
#chartjs-tooltip.above:before {
border: solid;
border-color: #111 transparent;
border-color: rgba(0, 0, 0, .8) transparent;
border-width: 8px 8px 0 8px;
bottom: 1em;
content: "";
display: block;
left: 50%;
top: 100%;
position: absolute;
z-index: 99;
-webkit-transform: translate(-50%, 0);
transform: translate(-50%, 0);
}
</style>
</head>
<body>
<div id="canvas-holder">
<canvas id="chart-area1" width="50" height="50" />
</div>
<div id="canvas-holder">
<canvas id="chart-area2" width="300" height="300" />
</div>
<div id="chartjs-tooltip"></div>
<script>
Chart.defaults.global.customTooltips = function(tooltip) {
// Tooltip Element
var tooltipEl = $('#chartjs-tooltip');
// Hide if no tooltip
if (!tooltip) {
tooltipEl.css({
opacity: 0
});
return;
}
// Set caret Position
tooltipEl.removeClass('above below');
tooltipEl.addClass(tooltip.yAlign);
// Set Text
tooltipEl.html(tooltip.text);
// Find Y Location on page
var top;
if (tooltip.yAlign == 'above') {
top = tooltip.y - tooltip.caretHeight - tooltip.caretPadding;
} else {
top = tooltip.y + tooltip.caretHeight + tooltip.caretPadding;
}
// Display, position, and set styles for font
tooltipEl.css({
opacity: 1,
left: tooltip.chart.canvas.offsetLeft + tooltip.x + 'px',
top: tooltip.chart.canvas.offsetTop + top + 'px',
fontFamily: tooltip.fontFamily,
fontSize: tooltip.fontSize,
fontStyle: tooltip.fontStyle,
});
};
var pieData = [{
value: 300,
color: "#F7464A",
highlight: "#FF5A5E",
label: "Red"
}, {
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green"
}, {
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow"
}, {
value: 40,
color: "#949FB1",
highlight: "#A8B3C5",
label: "Grey"
}, {
value: 120,
color: "#4D5360",
highlight: "#616774",
label: "Dark Grey"
}];
window.onload = function() {
var ctx1 = document.getElementById("chart-area1").getContext("2d");
window.myPie = new Chart(ctx1).Pie(pieData);
var ctx2 = document.getElementById("chart-area2").getContext("2d");
window.myPie = new Chart(ctx2).Pie(pieData);
};
</script>
</body>
</html>
+58
Ver Arquivo
@@ -0,0 +1,58 @@
<!doctype html>
<html>
<head>
<title>Pie Chart</title>
<script src="../Chart.js"></script>
</head>
<body>
<div id="canvas-holder">
<canvas id="chart-area" width="300" height="300"/>
</div>
<script>
var pieData = [
{
value: 300,
color:"#F7464A",
highlight: "#FF5A5E",
label: "Red"
},
{
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green"
},
{
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow"
},
{
value: 40,
color: "#949FB1",
highlight: "#A8B3C5",
label: "Grey"
},
{
value: 120,
color: "#4D5360",
highlight: "#616774",
label: "Dark Grey"
}
];
window.onload = function(){
var ctx = document.getElementById("chart-area").getContext("2d");
window.myPie = new Chart(ctx).Pie(pieData);
};
</script>
</body>
</html>
+60
Ver Arquivo
@@ -0,0 +1,60 @@
<!doctype html>
<html>
<head>
<title>Polar Area Chart</title>
<script src="../Chart.js"></script>
</head>
<body>
<div id="canvas-holder" style="width:30%">
<canvas id="chart-area" width="300" height="300"/>
</div>
<script>
var polarData = [
{
value: 300,
color:"#F7464A",
highlight: "#FF5A5E",
label: "Red"
},
{
value: 50,
color: "#46BFBD",
highlight: "#5AD3D1",
label: "Green"
},
{
value: 100,
color: "#FDB45C",
highlight: "#FFC870",
label: "Yellow"
},
{
value: 40,
color: "#949FB1",
highlight: "#A8B3C5",
label: "Grey"
},
{
value: 120,
color: "#4D5360",
highlight: "#616774",
label: "Dark Grey"
}
];
window.onload = function(){
var ctx = document.getElementById("chart-area").getContext("2d");
window.myPolarArea = new Chart(ctx).PolarArea(polarData, {
responsive:true
});
};
</script>
</body>
</html>
+53
Ver Arquivo
@@ -0,0 +1,53 @@
<!doctype html>
<html>
<head>
<title>Radar Chart</title>
<script src="../Chart.js"></script>
<meta name = "viewport" content = "initial-scale = 1, user-scalable = no">
<style>
canvas{
}
</style>
</head>
<body>
<div style="width:30%">
<canvas id="canvas" height="450" width="450"></canvas>
</div>
<script>
var radarChartData = {
labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],
datasets: [
{
label: "My First dataset",
fillColor: "rgba(220,220,220,0.2)",
strokeColor: "rgba(220,220,220,1)",
pointColor: "rgba(220,220,220,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(220,220,220,1)",
data: [65,59,90,81,56,55,40]
},
{
label: "My Second dataset",
fillColor: "rgba(151,187,205,0.2)",
strokeColor: "rgba(151,187,205,1)",
pointColor: "rgba(151,187,205,1)",
pointStrokeColor: "#fff",
pointHighlightFill: "#fff",
pointHighlightStroke: "rgba(151,187,205,1)",
data: [28,48,40,19,96,27,100]
}
]
};
window.onload = function(){
window.myRadar = new Chart(document.getElementById("canvas").getContext("2d")).Radar(radarChartData, {
responsive: true
});
}
</script>
</body>
</html>
+305
Ver Arquivo
@@ -0,0 +1,305 @@
(function(){
"use strict";
var root = this,
Chart = root.Chart,
helpers = Chart.helpers;
var defaultConfig = {
//Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
scaleBeginAtZero : true,
//Boolean - Whether grid lines are shown across the chart
scaleShowGridLines : true,
//String - Colour of the grid lines
scaleGridLineColor : "rgba(0,0,0,.05)",
//Number - Width of the grid lines
scaleGridLineWidth : 1,
//Boolean - Whether to show horizontal lines (except X axis)
scaleShowHorizontalLines: true,
//Boolean - Whether to show vertical lines (except Y axis)
scaleShowVerticalLines: true,
//Boolean - If there is a stroke on each bar
barShowStroke : true,
//Number - Pixel width of the bar stroke
barStrokeWidth : 2,
//Number - Spacing between each of the X value sets
barValueSpacing : 5,
//Number - Spacing between data sets within X values
barDatasetSpacing : 1,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\"<%=name.toLowerCase()%>-legend-icon\" style=\"background-color:<%=datasets[i].fillColor%>\"></span><span class=\"<%=name.toLowerCase()%>-legend-text\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>"
};
Chart.Type.extend({
name: "Bar",
defaults : defaultConfig,
initialize: function(data){
//Expose options as a scope variable here so we can access it in the ScaleClass
var options = this.options;
this.ScaleClass = Chart.Scale.extend({
offsetGridLines : true,
calculateBarX : function(datasetCount, datasetIndex, barIndex){
//Reusable method for calculating the xPosition of a given bar based on datasetIndex & width of the bar
var xWidth = this.calculateBaseWidth(),
xAbsolute = this.calculateX(barIndex) - (xWidth/2),
barWidth = this.calculateBarWidth(datasetCount);
return xAbsolute + (barWidth * datasetIndex) + (datasetIndex * options.barDatasetSpacing) + barWidth/2;
},
calculateBaseWidth : function(){
return (this.calculateX(1) - this.calculateX(0)) - (2*options.barValueSpacing);
},
calculateBarWidth : function(datasetCount){
//The padding between datasets is to the right of each bar, providing that there are more than 1 dataset
var baseWidth = this.calculateBaseWidth() - ((datasetCount - 1) * options.barDatasetSpacing);
return (baseWidth / datasetCount);
}
});
this.datasets = [];
//Set up tooltip events on the chart
if (this.options.showTooltips){
helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
var activeBars = (evt.type !== 'mouseout') ? this.getBarsAtEvent(evt) : [];
this.eachBars(function(bar){
bar.restore(['fillColor', 'strokeColor']);
});
helpers.each(activeBars, function(activeBar){
if (activeBar) {
activeBar.fillColor = activeBar.highlightFill;
activeBar.strokeColor = activeBar.highlightStroke;
}
});
this.showTooltip(activeBars);
});
}
//Declare the extension of the default point, to cater for the options passed in to the constructor
this.BarClass = Chart.Rectangle.extend({
strokeWidth : this.options.barStrokeWidth,
showStroke : this.options.barShowStroke,
ctx : this.chart.ctx
});
//Iterate through each of the datasets, and build this into a property of the chart
helpers.each(data.datasets,function(dataset,datasetIndex){
var datasetObject = {
label : dataset.label || null,
fillColor : dataset.fillColor,
strokeColor : dataset.strokeColor,
bars : []
};
this.datasets.push(datasetObject);
helpers.each(dataset.data,function(dataPoint,index){
//Add a new point for each piece of data, passing any required data to draw.
datasetObject.bars.push(new this.BarClass({
value : dataPoint,
label : data.labels[index],
datasetLabel: dataset.label,
strokeColor : (typeof dataset.strokeColor == 'object') ? dataset.strokeColor[index] : dataset.strokeColor,
fillColor : (typeof dataset.fillColor == 'object') ? dataset.fillColor[index] : dataset.fillColor,
highlightFill : (dataset.highlightFill) ? (typeof dataset.highlightFill == 'object') ? dataset.highlightFill[index] : dataset.highlightFill : (typeof dataset.fillColor == 'object') ? dataset.fillColor[index] : dataset.fillColor,
highlightStroke : (dataset.highlightStroke) ? (typeof dataset.highlightStroke == 'object') ? dataset.highlightStroke[index] : dataset.highlightStroke : (typeof dataset.strokeColor == 'object') ? dataset.strokeColor[index] : dataset.strokeColor
}));
},this);
},this);
this.buildScale(data.labels);
this.BarClass.prototype.base = this.scale.endPoint;
this.eachBars(function(bar, index, datasetIndex){
helpers.extend(bar, {
width : this.scale.calculateBarWidth(this.datasets.length),
x: this.scale.calculateBarX(this.datasets.length, datasetIndex, index),
y: this.scale.endPoint
});
bar.save();
}, this);
this.render();
},
update : function(){
this.scale.update();
// Reset any highlight colours before updating.
helpers.each(this.activeElements, function(activeElement){
activeElement.restore(['fillColor', 'strokeColor']);
});
this.eachBars(function(bar){
bar.save();
});
this.render();
},
eachBars : function(callback){
helpers.each(this.datasets,function(dataset, datasetIndex){
helpers.each(dataset.bars, callback, this, datasetIndex);
},this);
},
getBarsAtEvent : function(e){
var barsArray = [],
eventPosition = helpers.getRelativePosition(e),
datasetIterator = function(dataset){
barsArray.push(dataset.bars[barIndex]);
},
barIndex;
for (var datasetIndex = 0; datasetIndex < this.datasets.length; datasetIndex++) {
for (barIndex = 0; barIndex < this.datasets[datasetIndex].bars.length; barIndex++) {
if (this.datasets[datasetIndex].bars[barIndex].inRange(eventPosition.x,eventPosition.y)){
helpers.each(this.datasets, datasetIterator);
return barsArray;
}
}
}
return barsArray;
},
buildScale : function(labels){
var self = this;
var dataTotal = function(){
var values = [];
self.eachBars(function(bar){
values.push(bar.value);
});
return values;
};
var scaleOptions = {
templateString : this.options.scaleLabel,
height : this.chart.height,
width : this.chart.width,
ctx : this.chart.ctx,
textColor : this.options.scaleFontColor,
fontSize : this.options.scaleFontSize,
fontStyle : this.options.scaleFontStyle,
fontFamily : this.options.scaleFontFamily,
valuesCount : labels.length,
beginAtZero : this.options.scaleBeginAtZero,
integersOnly : this.options.scaleIntegersOnly,
calculateYRange: function(currentHeight){
var updatedRanges = helpers.calculateScaleRange(
dataTotal(),
currentHeight,
this.fontSize,
this.beginAtZero,
this.integersOnly
);
helpers.extend(this, updatedRanges);
},
xLabels : labels,
font : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),
lineWidth : this.options.scaleLineWidth,
lineColor : this.options.scaleLineColor,
showHorizontalLines : this.options.scaleShowHorizontalLines,
showVerticalLines : this.options.scaleShowVerticalLines,
gridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,
gridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : "rgba(0,0,0,0)",
padding : (this.options.showScale) ? 0 : (this.options.barShowStroke) ? this.options.barStrokeWidth : 0,
showLabels : this.options.scaleShowLabels,
display : this.options.showScale
};
if (this.options.scaleOverride){
helpers.extend(scaleOptions, {
calculateYRange: helpers.noop,
steps: this.options.scaleSteps,
stepValue: this.options.scaleStepWidth,
min: this.options.scaleStartValue,
max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
});
}
this.scale = new this.ScaleClass(scaleOptions);
},
addData : function(valuesArray,label){
//Map the values array for each of the datasets
helpers.each(valuesArray,function(value,datasetIndex){
//Add a new point for each piece of data, passing any required data to draw.
this.datasets[datasetIndex].bars.push(new this.BarClass({
value : value,
label : label,
datasetLabel: this.datasets[datasetIndex].label,
x: this.scale.calculateBarX(this.datasets.length, datasetIndex, this.scale.valuesCount+1),
y: this.scale.endPoint,
width : this.scale.calculateBarWidth(this.datasets.length),
base : this.scale.endPoint,
strokeColor : this.datasets[datasetIndex].strokeColor,
fillColor : this.datasets[datasetIndex].fillColor
}));
},this);
this.scale.addXLabel(label);
//Then re-render the chart.
this.update();
},
removeData : function(){
this.scale.removeXLabel();
//Then re-render the chart.
helpers.each(this.datasets,function(dataset){
dataset.bars.shift();
},this);
this.update();
},
reflow : function(){
helpers.extend(this.BarClass.prototype,{
y: this.scale.endPoint,
base : this.scale.endPoint
});
var newScaleProps = helpers.extend({
height : this.chart.height,
width : this.chart.width
});
this.scale.update(newScaleProps);
},
draw : function(ease){
var easingDecimal = ease || 1;
this.clear();
var ctx = this.chart.ctx;
this.scale.draw(easingDecimal);
//Draw all the bars for each dataset
helpers.each(this.datasets,function(dataset,datasetIndex){
helpers.each(dataset.bars,function(bar,index){
if (bar.hasValue()){
bar.base = this.scale.endPoint;
//Transition then draw
bar.transition({
x : this.scale.calculateBarX(this.datasets.length, datasetIndex, index),
y : this.scale.calculateY(bar.value),
width : this.scale.calculateBarWidth(this.datasets.length)
}, easingDecimal).draw();
}
},this);
},this);
}
});
}).call(this);
Arquivo executável
+2249
Ver Arquivo
Diferenças do arquivo suprimidas por serem muito extensas Carregar Diff
+194
Ver Arquivo
@@ -0,0 +1,194 @@
(function(){
"use strict";
var root = this,
Chart = root.Chart,
//Cache a local reference to Chart.helpers
helpers = Chart.helpers;
var defaultConfig = {
//Boolean - Whether we should show a stroke on each segment
segmentShowStroke : true,
//String - The colour of each segment stroke
segmentStrokeColor : "#fff",
//Number - The width of each segment stroke
segmentStrokeWidth : 2,
//The percentage of the chart that we cut out of the middle.
percentageInnerCutout : 50,
//Number - Amount of animation steps
animationSteps : 100,
//String - Animation easing effect
animationEasing : "easeOutBounce",
//Boolean - Whether we animate the rotation of the Doughnut
animateRotate : true,
//Boolean - Whether we animate scaling the Doughnut from the centre
animateScale : false,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span class=\"<%=name.toLowerCase()%>-legend-icon\" style=\"background-color:<%=segments[i].fillColor%>\"></span><span class=\"<%=name.toLowerCase()%>-legend-text\"><%if(segments[i].label){%><%=segments[i].label%><%}%></span></li><%}%></ul>"
};
Chart.Type.extend({
//Passing in a name registers this chart in the Chart namespace
name: "Doughnut",
//Providing a defaults will also register the defaults in the chart namespace
defaults : defaultConfig,
//Initialize is fired when the chart is initialized - Data is passed in as a parameter
//Config is automatically merged by the core of Chart.js, and is available at this.options
initialize: function(data){
//Declare segments as a static property to prevent inheriting across the Chart type prototype
this.segments = [];
this.outerRadius = (helpers.min([this.chart.width,this.chart.height]) - this.options.segmentStrokeWidth/2)/2;
this.SegmentArc = Chart.Arc.extend({
ctx : this.chart.ctx,
x : this.chart.width/2,
y : this.chart.height/2
});
//Set up tooltip events on the chart
if (this.options.showTooltips){
helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
var activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];
helpers.each(this.segments,function(segment){
segment.restore(["fillColor"]);
});
helpers.each(activeSegments,function(activeSegment){
activeSegment.fillColor = activeSegment.highlightColor;
});
this.showTooltip(activeSegments);
});
}
this.calculateTotal(data);
helpers.each(data,function(datapoint, index){
if (!datapoint.color) {
datapoint.color = 'hsl(' + (360 * index / data.length) + ', 100%, 50%)';
}
this.addData(datapoint, index, true);
},this);
this.render();
},
getSegmentsAtEvent : function(e){
var segmentsArray = [];
var location = helpers.getRelativePosition(e);
helpers.each(this.segments,function(segment){
if (segment.inRange(location.x,location.y)) segmentsArray.push(segment);
},this);
return segmentsArray;
},
addData : function(segment, atIndex, silent){
var index = atIndex !== undefined ? atIndex : this.segments.length;
if ( typeof(segment.color) === "undefined" ) {
segment.color = Chart.defaults.global.segmentColorDefault[index % Chart.defaults.global.segmentColorDefault.length];
segment.highlight = Chart.defaults.global.segmentHighlightColorDefaults[index % Chart.defaults.global.segmentHighlightColorDefaults.length];
}
this.segments.splice(index, 0, new this.SegmentArc({
value : segment.value,
outerRadius : (this.options.animateScale) ? 0 : this.outerRadius,
innerRadius : (this.options.animateScale) ? 0 : (this.outerRadius/100) * this.options.percentageInnerCutout,
fillColor : segment.color,
highlightColor : segment.highlight || segment.color,
showStroke : this.options.segmentShowStroke,
strokeWidth : this.options.segmentStrokeWidth,
strokeColor : this.options.segmentStrokeColor,
startAngle : Math.PI * 1.5,
circumference : (this.options.animateRotate) ? 0 : this.calculateCircumference(segment.value),
label : segment.label
}));
if (!silent){
this.reflow();
this.update();
}
},
calculateCircumference : function(value) {
if ( this.total > 0 ) {
return (Math.PI*2)*(value / this.total);
} else {
return 0;
}
},
calculateTotal : function(data){
this.total = 0;
helpers.each(data,function(segment){
this.total += Math.abs(segment.value);
},this);
},
update : function(){
this.calculateTotal(this.segments);
// Reset any highlight colours before updating.
helpers.each(this.activeElements, function(activeElement){
activeElement.restore(['fillColor']);
});
helpers.each(this.segments,function(segment){
segment.save();
});
this.render();
},
removeData: function(atIndex){
var indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;
this.segments.splice(indexToDelete, 1);
this.reflow();
this.update();
},
reflow : function(){
helpers.extend(this.SegmentArc.prototype,{
x : this.chart.width/2,
y : this.chart.height/2
});
this.outerRadius = (helpers.min([this.chart.width,this.chart.height]) - this.options.segmentStrokeWidth/2)/2;
helpers.each(this.segments, function(segment){
segment.update({
outerRadius : this.outerRadius,
innerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout
});
}, this);
},
draw : function(easeDecimal){
var animDecimal = (easeDecimal) ? easeDecimal : 1;
this.clear();
helpers.each(this.segments,function(segment,index){
segment.transition({
circumference : this.calculateCircumference(segment.value),
outerRadius : this.outerRadius,
innerRadius : (this.outerRadius/100) * this.options.percentageInnerCutout
},animDecimal);
segment.endAngle = segment.startAngle + segment.circumference;
segment.draw();
if (index === 0){
segment.startAngle = Math.PI * 1.5;
}
//Check to see if it's the last segment, if not get the next and update the start angle
if (index < this.segments.length-1){
this.segments[index+1].startAngle = segment.endAngle;
}
},this);
}
});
Chart.types.Doughnut.extend({
name : "Pie",
defaults : helpers.merge(defaultConfig,{percentageInnerCutout : 0})
});
}).call(this);
+383
Ver Arquivo
@@ -0,0 +1,383 @@
(function(){
"use strict";
var root = this,
Chart = root.Chart,
helpers = Chart.helpers;
var defaultConfig = {
///Boolean - Whether grid lines are shown across the chart
scaleShowGridLines : true,
//String - Colour of the grid lines
scaleGridLineColor : "rgba(0,0,0,.05)",
//Number - Width of the grid lines
scaleGridLineWidth : 1,
//Boolean - Whether to show horizontal lines (except X axis)
scaleShowHorizontalLines: true,
//Boolean - Whether to show vertical lines (except Y axis)
scaleShowVerticalLines: true,
//Boolean - Whether the line is curved between points
bezierCurve : true,
//Number - Tension of the bezier curve between points
bezierCurveTension : 0.4,
//Boolean - Whether to show a dot for each point
pointDot : true,
//Number - Radius of each point dot in pixels
pointDotRadius : 4,
//Number - Pixel width of point dot stroke
pointDotStrokeWidth : 1,
//Number - amount extra to add to the radius to cater for hit detection outside the drawn point
pointHitDetectionRadius : 20,
//Boolean - Whether to show a stroke for datasets
datasetStroke : true,
//Number - Pixel width of dataset stroke
datasetStrokeWidth : 2,
//Boolean - Whether to fill the dataset with a colour
datasetFill : true,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\"<%=name.toLowerCase()%>-legend-icon\" style=\"background-color:<%=datasets[i].strokeColor%>\"></span><span class=\"<%=name.toLowerCase()%>-legend-text\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>",
//Boolean - Whether to horizontally center the label and point dot inside the grid
offsetGridLines : false
};
Chart.Type.extend({
name: "Line",
defaults : defaultConfig,
initialize: function(data){
//Declare the extension of the default point, to cater for the options passed in to the constructor
this.PointClass = Chart.Point.extend({
offsetGridLines : this.options.offsetGridLines,
strokeWidth : this.options.pointDotStrokeWidth,
radius : this.options.pointDotRadius,
display: this.options.pointDot,
hitDetectionRadius : this.options.pointHitDetectionRadius,
ctx : this.chart.ctx,
inRange : function(mouseX){
return (Math.pow(mouseX-this.x, 2) < Math.pow(this.radius + this.hitDetectionRadius,2));
}
});
this.datasets = [];
//Set up tooltip events on the chart
if (this.options.showTooltips){
helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
var activePoints = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];
this.eachPoints(function(point){
point.restore(['fillColor', 'strokeColor']);
});
helpers.each(activePoints, function(activePoint){
activePoint.fillColor = activePoint.highlightFill;
activePoint.strokeColor = activePoint.highlightStroke;
});
this.showTooltip(activePoints);
});
}
//Iterate through each of the datasets, and build this into a property of the chart
helpers.each(data.datasets,function(dataset){
var datasetObject = {
label : dataset.label || null,
fillColor : dataset.fillColor,
strokeColor : dataset.strokeColor,
pointColor : dataset.pointColor,
pointStrokeColor : dataset.pointStrokeColor,
points : []
};
this.datasets.push(datasetObject);
helpers.each(dataset.data,function(dataPoint,index){
//Add a new point for each piece of data, passing any required data to draw.
datasetObject.points.push(new this.PointClass({
value : dataPoint,
label : data.labels[index],
datasetLabel: dataset.label,
strokeColor : dataset.pointStrokeColor,
fillColor : dataset.pointColor,
highlightFill : dataset.pointHighlightFill || dataset.pointColor,
highlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor
}));
},this);
this.buildScale(data.labels);
this.eachPoints(function(point, index){
helpers.extend(point, {
x: this.scale.calculateX(index),
y: this.scale.endPoint
});
point.save();
}, this);
},this);
this.render();
},
update : function(){
this.scale.update();
// Reset any highlight colours before updating.
helpers.each(this.activeElements, function(activeElement){
activeElement.restore(['fillColor', 'strokeColor']);
});
this.eachPoints(function(point){
point.save();
});
this.render();
},
eachPoints : function(callback){
helpers.each(this.datasets,function(dataset){
helpers.each(dataset.points,callback,this);
},this);
},
getPointsAtEvent : function(e){
var pointsArray = [],
eventPosition = helpers.getRelativePosition(e);
helpers.each(this.datasets,function(dataset){
helpers.each(dataset.points,function(point){
if (point.inRange(eventPosition.x,eventPosition.y)) pointsArray.push(point);
});
},this);
return pointsArray;
},
buildScale : function(labels){
var self = this;
var dataTotal = function(){
var values = [];
self.eachPoints(function(point){
values.push(point.value);
});
return values;
};
var scaleOptions = {
templateString : this.options.scaleLabel,
height : this.chart.height,
width : this.chart.width,
ctx : this.chart.ctx,
textColor : this.options.scaleFontColor,
offsetGridLines : this.options.offsetGridLines,
fontSize : this.options.scaleFontSize,
fontStyle : this.options.scaleFontStyle,
fontFamily : this.options.scaleFontFamily,
valuesCount : labels.length,
beginAtZero : this.options.scaleBeginAtZero,
integersOnly : this.options.scaleIntegersOnly,
calculateYRange : function(currentHeight){
var updatedRanges = helpers.calculateScaleRange(
dataTotal(),
currentHeight,
this.fontSize,
this.beginAtZero,
this.integersOnly
);
helpers.extend(this, updatedRanges);
},
xLabels : labels,
font : helpers.fontString(this.options.scaleFontSize, this.options.scaleFontStyle, this.options.scaleFontFamily),
lineWidth : this.options.scaleLineWidth,
lineColor : this.options.scaleLineColor,
showHorizontalLines : this.options.scaleShowHorizontalLines,
showVerticalLines : this.options.scaleShowVerticalLines,
gridLineWidth : (this.options.scaleShowGridLines) ? this.options.scaleGridLineWidth : 0,
gridLineColor : (this.options.scaleShowGridLines) ? this.options.scaleGridLineColor : "rgba(0,0,0,0)",
padding: (this.options.showScale) ? 0 : this.options.pointDotRadius + this.options.pointDotStrokeWidth,
showLabels : this.options.scaleShowLabels,
display : this.options.showScale
};
if (this.options.scaleOverride){
helpers.extend(scaleOptions, {
calculateYRange: helpers.noop,
steps: this.options.scaleSteps,
stepValue: this.options.scaleStepWidth,
min: this.options.scaleStartValue,
max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
});
}
this.scale = new Chart.Scale(scaleOptions);
},
addData : function(valuesArray,label){
//Map the values array for each of the datasets
helpers.each(valuesArray,function(value,datasetIndex){
//Add a new point for each piece of data, passing any required data to draw.
this.datasets[datasetIndex].points.push(new this.PointClass({
value : value,
label : label,
datasetLabel: this.datasets[datasetIndex].label,
x: this.scale.calculateX(this.scale.valuesCount+1),
y: this.scale.endPoint,
strokeColor : this.datasets[datasetIndex].pointStrokeColor,
fillColor : this.datasets[datasetIndex].pointColor
}));
},this);
this.scale.addXLabel(label);
//Then re-render the chart.
this.update();
},
removeData : function(){
this.scale.removeXLabel();
//Then re-render the chart.
helpers.each(this.datasets,function(dataset){
dataset.points.shift();
},this);
this.update();
},
reflow : function(){
var newScaleProps = helpers.extend({
height : this.chart.height,
width : this.chart.width
});
this.scale.update(newScaleProps);
},
draw : function(ease){
var easingDecimal = ease || 1;
this.clear();
var ctx = this.chart.ctx;
// Some helper methods for getting the next/prev points
var hasValue = function(item){
return item.value !== null;
},
nextPoint = function(point, collection, index){
return helpers.findNextWhere(collection, hasValue, index) || point;
},
previousPoint = function(point, collection, index){
return helpers.findPreviousWhere(collection, hasValue, index) || point;
};
if (!this.scale) return;
this.scale.draw(easingDecimal);
helpers.each(this.datasets,function(dataset){
var pointsWithValues = helpers.where(dataset.points, hasValue);
//Transition each point first so that the line and point drawing isn't out of sync
//We can use this extra loop to calculate the control points of this dataset also in this loop
helpers.each(dataset.points, function(point, index){
if (point.hasValue()){
point.transition({
y : this.scale.calculateY(point.value),
x : this.scale.calculateX(index)
}, easingDecimal);
}
},this);
// Control points need to be calculated in a separate loop, because we need to know the current x/y of the point
// This would cause issues when there is no animation, because the y of the next point would be 0, so beziers would be skewed
if (this.options.bezierCurve){
helpers.each(pointsWithValues, function(point, index){
var tension = (index > 0 && index < pointsWithValues.length - 1) ? this.options.bezierCurveTension : 0;
point.controlPoints = helpers.splineCurve(
previousPoint(point, pointsWithValues, index),
point,
nextPoint(point, pointsWithValues, index),
tension
);
// Prevent the bezier going outside of the bounds of the graph
// Cap puter bezier handles to the upper/lower scale bounds
if (point.controlPoints.outer.y > this.scale.endPoint){
point.controlPoints.outer.y = this.scale.endPoint;
}
else if (point.controlPoints.outer.y < this.scale.startPoint){
point.controlPoints.outer.y = this.scale.startPoint;
}
// Cap inner bezier handles to the upper/lower scale bounds
if (point.controlPoints.inner.y > this.scale.endPoint){
point.controlPoints.inner.y = this.scale.endPoint;
}
else if (point.controlPoints.inner.y < this.scale.startPoint){
point.controlPoints.inner.y = this.scale.startPoint;
}
},this);
}
//Draw the line between all the points
ctx.lineWidth = this.options.datasetStrokeWidth;
ctx.strokeStyle = dataset.strokeColor;
ctx.beginPath();
helpers.each(pointsWithValues, function(point, index){
if (index === 0){
ctx.moveTo(point.x, point.y);
}
else{
if(this.options.bezierCurve){
var previous = previousPoint(point, pointsWithValues, index);
ctx.bezierCurveTo(
previous.controlPoints.outer.x,
previous.controlPoints.outer.y,
point.controlPoints.inner.x,
point.controlPoints.inner.y,
point.x,
point.y
);
}
else{
ctx.lineTo(point.x,point.y);
}
}
}, this);
if (this.options.datasetStroke) {
ctx.stroke();
}
if (this.options.datasetFill && pointsWithValues.length > 0){
//Round off the line by going to the base of the chart, back to the start, then fill.
ctx.lineTo(pointsWithValues[pointsWithValues.length - 1].x, this.scale.endPoint);
ctx.lineTo(pointsWithValues[0].x, this.scale.endPoint);
ctx.fillStyle = dataset.fillColor;
ctx.closePath();
ctx.fill();
}
//Now draw the points over the line
//A little inefficient double looping, but better than the line
//lagging behind the point positions
helpers.each(pointsWithValues,function(point){
point.draw();
});
},this);
}
});
}).call(this);
+250
Ver Arquivo
@@ -0,0 +1,250 @@
(function(){
"use strict";
var root = this,
Chart = root.Chart,
//Cache a local reference to Chart.helpers
helpers = Chart.helpers;
var defaultConfig = {
//Boolean - Show a backdrop to the scale label
scaleShowLabelBackdrop : true,
//String - The colour of the label backdrop
scaleBackdropColor : "rgba(255,255,255,0.75)",
// Boolean - Whether the scale should begin at zero
scaleBeginAtZero : true,
//Number - The backdrop padding above & below the label in pixels
scaleBackdropPaddingY : 2,
//Number - The backdrop padding to the side of the label in pixels
scaleBackdropPaddingX : 2,
//Boolean - Show line for each value in the scale
scaleShowLine : true,
//Boolean - Stroke a line around each segment in the chart
segmentShowStroke : true,
//String - The colour of the stroke on each segment.
segmentStrokeColor : "#fff",
//Number - The width of the stroke value in pixels
segmentStrokeWidth : 2,
//Number - Amount of animation steps
animationSteps : 100,
//String - Animation easing effect.
animationEasing : "easeOutBounce",
//Boolean - Whether to animate the rotation of the chart
animateRotate : true,
//Boolean - Whether to animate scaling the chart from the centre
animateScale : false,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<segments.length; i++){%><li><span class=\"<%=name.toLowerCase()%>-legend-icon\" style=\"background-color:<%=segments[i].fillColor%>\"></span><span class=\"<%=name.toLowerCase()%>-legend-text\"><%if(segments[i].label){%><%=segments[i].label%><%}%></span></li><%}%></ul>"
};
Chart.Type.extend({
//Passing in a name registers this chart in the Chart namespace
name: "PolarArea",
//Providing a defaults will also register the defaults in the chart namespace
defaults : defaultConfig,
//Initialize is fired when the chart is initialized - Data is passed in as a parameter
//Config is automatically merged by the core of Chart.js, and is available at this.options
initialize: function(data){
this.segments = [];
//Declare segment class as a chart instance specific class, so it can share props for this instance
this.SegmentArc = Chart.Arc.extend({
showStroke : this.options.segmentShowStroke,
strokeWidth : this.options.segmentStrokeWidth,
strokeColor : this.options.segmentStrokeColor,
ctx : this.chart.ctx,
innerRadius : 0,
x : this.chart.width/2,
y : this.chart.height/2
});
this.scale = new Chart.RadialScale({
display: this.options.showScale,
fontStyle: this.options.scaleFontStyle,
fontSize: this.options.scaleFontSize,
fontFamily: this.options.scaleFontFamily,
fontColor: this.options.scaleFontColor,
showLabels: this.options.scaleShowLabels,
showLabelBackdrop: this.options.scaleShowLabelBackdrop,
backdropColor: this.options.scaleBackdropColor,
backdropPaddingY : this.options.scaleBackdropPaddingY,
backdropPaddingX: this.options.scaleBackdropPaddingX,
lineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,
lineColor: this.options.scaleLineColor,
lineArc: true,
width: this.chart.width,
height: this.chart.height,
xCenter: this.chart.width/2,
yCenter: this.chart.height/2,
ctx : this.chart.ctx,
templateString: this.options.scaleLabel,
valuesCount: data.length
});
this.updateScaleRange(data);
this.scale.update();
helpers.each(data,function(segment,index){
this.addData(segment,index,true);
},this);
//Set up tooltip events on the chart
if (this.options.showTooltips){
helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
var activeSegments = (evt.type !== 'mouseout') ? this.getSegmentsAtEvent(evt) : [];
helpers.each(this.segments,function(segment){
segment.restore(["fillColor"]);
});
helpers.each(activeSegments,function(activeSegment){
activeSegment.fillColor = activeSegment.highlightColor;
});
this.showTooltip(activeSegments);
});
}
this.render();
},
getSegmentsAtEvent : function(e){
var segmentsArray = [];
var location = helpers.getRelativePosition(e);
helpers.each(this.segments,function(segment){
if (segment.inRange(location.x,location.y)) segmentsArray.push(segment);
},this);
return segmentsArray;
},
addData : function(segment, atIndex, silent){
var index = atIndex || this.segments.length;
this.segments.splice(index, 0, new this.SegmentArc({
fillColor: segment.color,
highlightColor: segment.highlight || segment.color,
label: segment.label,
value: segment.value,
outerRadius: (this.options.animateScale) ? 0 : this.scale.calculateCenterOffset(segment.value),
circumference: (this.options.animateRotate) ? 0 : this.scale.getCircumference(),
startAngle: Math.PI * 1.5
}));
if (!silent){
this.reflow();
this.update();
}
},
removeData: function(atIndex){
var indexToDelete = (helpers.isNumber(atIndex)) ? atIndex : this.segments.length-1;
this.segments.splice(indexToDelete, 1);
this.reflow();
this.update();
},
calculateTotal: function(data){
this.total = 0;
helpers.each(data,function(segment){
this.total += segment.value;
},this);
this.scale.valuesCount = this.segments.length;
},
updateScaleRange: function(datapoints){
var valuesArray = [];
helpers.each(datapoints,function(segment){
valuesArray.push(segment.value);
});
var scaleSizes = (this.options.scaleOverride) ?
{
steps: this.options.scaleSteps,
stepValue: this.options.scaleStepWidth,
min: this.options.scaleStartValue,
max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
} :
helpers.calculateScaleRange(
valuesArray,
helpers.min([this.chart.width, this.chart.height])/2,
this.options.scaleFontSize,
this.options.scaleBeginAtZero,
this.options.scaleIntegersOnly
);
helpers.extend(
this.scale,
scaleSizes,
{
size: helpers.min([this.chart.width, this.chart.height]),
xCenter: this.chart.width/2,
yCenter: this.chart.height/2
}
);
},
update : function(){
this.calculateTotal(this.segments);
helpers.each(this.segments,function(segment){
segment.save();
});
this.reflow();
this.render();
},
reflow : function(){
helpers.extend(this.SegmentArc.prototype,{
x : this.chart.width/2,
y : this.chart.height/2
});
this.updateScaleRange(this.segments);
this.scale.update();
helpers.extend(this.scale,{
xCenter: this.chart.width/2,
yCenter: this.chart.height/2
});
helpers.each(this.segments, function(segment){
segment.update({
outerRadius : this.scale.calculateCenterOffset(segment.value)
});
}, this);
},
draw : function(ease){
var easingDecimal = ease || 1;
//Clear & draw the canvas
this.clear();
helpers.each(this.segments,function(segment, index){
segment.transition({
circumference : this.scale.getCircumference(),
outerRadius : this.scale.calculateCenterOffset(segment.value)
},easingDecimal);
segment.endAngle = segment.startAngle + segment.circumference;
// If we've removed the first segment we need to set the first one to
// start at the top.
if (index === 0){
segment.startAngle = Math.PI * 1.5;
}
//Check to see if it's the last segment, if not get the next and update the start angle
if (index < this.segments.length - 1){
this.segments[index+1].startAngle = segment.endAngle;
}
segment.draw();
}, this);
this.scale.draw();
}
});
}).call(this);
+350
Ver Arquivo
@@ -0,0 +1,350 @@
(function(){
"use strict";
var root = this,
Chart = root.Chart,
helpers = Chart.helpers;
Chart.Type.extend({
name: "Radar",
defaults:{
//Boolean - Whether to show lines for each scale point
scaleShowLine : true,
//Boolean - Whether we show the angle lines out of the radar
angleShowLineOut : true,
//Boolean - Whether to show labels on the scale
scaleShowLabels : false,
// Boolean - Whether the scale should begin at zero
scaleBeginAtZero : true,
//String - Colour of the angle line
angleLineColor : "rgba(0,0,0,.1)",
//Number - Pixel width of the angle line
angleLineWidth : 1,
//Number - Interval at which to draw angle lines ("every Nth point")
angleLineInterval: 1,
//String - Point label font declaration
pointLabelFontFamily : "'Arial'",
//String - Point label font weight
pointLabelFontStyle : "normal",
//Number - Point label font size in pixels
pointLabelFontSize : 10,
//String - Point label font colour
pointLabelFontColor : "#666",
//Boolean - Whether to show a dot for each point
pointDot : true,
//Number - Radius of each point dot in pixels
pointDotRadius : 3,
//Number - Pixel width of point dot stroke
pointDotStrokeWidth : 1,
//Number - amount extra to add to the radius to cater for hit detection outside the drawn point
pointHitDetectionRadius : 20,
//Boolean - Whether to show a stroke for datasets
datasetStroke : true,
//Number - Pixel width of dataset stroke
datasetStrokeWidth : 2,
//Boolean - Whether to fill the dataset with a colour
datasetFill : true,
//String - A legend template
legendTemplate : "<ul class=\"<%=name.toLowerCase()%>-legend\"><% for (var i=0; i<datasets.length; i++){%><li><span class=\"<%=name.toLowerCase()%>-legend-icon\" style=\"background-color:<%=datasets[i].strokeColor%>\"></span><span class=\"<%=name.toLowerCase()%>-legend-text\"><%if(datasets[i].label){%><%=datasets[i].label%><%}%></span></li><%}%></ul>"
},
initialize: function(data){
this.PointClass = Chart.Point.extend({
strokeWidth : this.options.pointDotStrokeWidth,
radius : this.options.pointDotRadius,
display: this.options.pointDot,
hitDetectionRadius : this.options.pointHitDetectionRadius,
ctx : this.chart.ctx
});
this.datasets = [];
this.buildScale(data);
//Set up tooltip events on the chart
if (this.options.showTooltips){
helpers.bindEvents(this, this.options.tooltipEvents, function(evt){
var activePointsCollection = (evt.type !== 'mouseout') ? this.getPointsAtEvent(evt) : [];
this.eachPoints(function(point){
point.restore(['fillColor', 'strokeColor']);
});
helpers.each(activePointsCollection, function(activePoint){
activePoint.fillColor = activePoint.highlightFill;
activePoint.strokeColor = activePoint.highlightStroke;
});
this.showTooltip(activePointsCollection);
});
}
//Iterate through each of the datasets, and build this into a property of the chart
helpers.each(data.datasets,function(dataset){
var datasetObject = {
label: dataset.label || null,
fillColor : dataset.fillColor,
strokeColor : dataset.strokeColor,
pointColor : dataset.pointColor,
pointStrokeColor : dataset.pointStrokeColor,
points : []
};
this.datasets.push(datasetObject);
helpers.each(dataset.data,function(dataPoint,index){
//Add a new point for each piece of data, passing any required data to draw.
var pointPosition;
if (!this.scale.animation){
pointPosition = this.scale.getPointPosition(index, this.scale.calculateCenterOffset(dataPoint));
}
datasetObject.points.push(new this.PointClass({
value : dataPoint,
label : data.labels[index],
datasetLabel: dataset.label,
x: (this.options.animation) ? this.scale.xCenter : pointPosition.x,
y: (this.options.animation) ? this.scale.yCenter : pointPosition.y,
strokeColor : dataset.pointStrokeColor,
fillColor : dataset.pointColor,
highlightFill : dataset.pointHighlightFill || dataset.pointColor,
highlightStroke : dataset.pointHighlightStroke || dataset.pointStrokeColor
}));
},this);
},this);
this.render();
},
eachPoints : function(callback){
helpers.each(this.datasets,function(dataset){
helpers.each(dataset.points,callback,this);
},this);
},
getPointsAtEvent : function(evt){
var mousePosition = helpers.getRelativePosition(evt),
fromCenter = helpers.getAngleFromPoint({
x: this.scale.xCenter,
y: this.scale.yCenter
}, mousePosition);
var anglePerIndex = (Math.PI * 2) /this.scale.valuesCount,
pointIndex = Math.round((fromCenter.angle - Math.PI * 1.5) / anglePerIndex),
activePointsCollection = [];
// If we're at the top, make the pointIndex 0 to get the first of the array.
if (pointIndex >= this.scale.valuesCount || pointIndex < 0){
pointIndex = 0;
}
if (fromCenter.distance <= this.scale.drawingArea){
helpers.each(this.datasets, function(dataset){
activePointsCollection.push(dataset.points[pointIndex]);
});
}
return activePointsCollection;
},
buildScale : function(data){
this.scale = new Chart.RadialScale({
display: this.options.showScale,
fontStyle: this.options.scaleFontStyle,
fontSize: this.options.scaleFontSize,
fontFamily: this.options.scaleFontFamily,
fontColor: this.options.scaleFontColor,
showLabels: this.options.scaleShowLabels,
showLabelBackdrop: this.options.scaleShowLabelBackdrop,
backdropColor: this.options.scaleBackdropColor,
backgroundColors: this.options.scaleBackgroundColors,
backdropPaddingY : this.options.scaleBackdropPaddingY,
backdropPaddingX: this.options.scaleBackdropPaddingX,
lineWidth: (this.options.scaleShowLine) ? this.options.scaleLineWidth : 0,
lineColor: this.options.scaleLineColor,
angleLineColor : this.options.angleLineColor,
angleLineWidth : (this.options.angleShowLineOut) ? this.options.angleLineWidth : 0,
angleLineInterval: (this.options.angleLineInterval) ? this.options.angleLineInterval : 1,
// Point labels at the edge of each line
pointLabelFontColor : this.options.pointLabelFontColor,
pointLabelFontSize : this.options.pointLabelFontSize,
pointLabelFontFamily : this.options.pointLabelFontFamily,
pointLabelFontStyle : this.options.pointLabelFontStyle,
height : this.chart.height,
width: this.chart.width,
xCenter: this.chart.width/2,
yCenter: this.chart.height/2,
ctx : this.chart.ctx,
templateString: this.options.scaleLabel,
labels: data.labels,
valuesCount: data.datasets[0].data.length
});
this.scale.setScaleSize();
this.updateScaleRange(data.datasets);
this.scale.buildYLabels();
},
updateScaleRange: function(datasets){
var valuesArray = (function(){
var totalDataArray = [];
helpers.each(datasets,function(dataset){
if (dataset.data){
totalDataArray = totalDataArray.concat(dataset.data);
}
else {
helpers.each(dataset.points, function(point){
totalDataArray.push(point.value);
});
}
});
return totalDataArray;
})();
var scaleSizes = (this.options.scaleOverride) ?
{
steps: this.options.scaleSteps,
stepValue: this.options.scaleStepWidth,
min: this.options.scaleStartValue,
max: this.options.scaleStartValue + (this.options.scaleSteps * this.options.scaleStepWidth)
} :
helpers.calculateScaleRange(
valuesArray,
helpers.min([this.chart.width, this.chart.height])/2,
this.options.scaleFontSize,
this.options.scaleBeginAtZero,
this.options.scaleIntegersOnly
);
helpers.extend(
this.scale,
scaleSizes
);
},
addData : function(valuesArray,label){
//Map the values array for each of the datasets
this.scale.valuesCount++;
helpers.each(valuesArray,function(value,datasetIndex){
var pointPosition = this.scale.getPointPosition(this.scale.valuesCount, this.scale.calculateCenterOffset(value));
this.datasets[datasetIndex].points.push(new this.PointClass({
value : value,
label : label,
datasetLabel: this.datasets[datasetIndex].label,
x: pointPosition.x,
y: pointPosition.y,
strokeColor : this.datasets[datasetIndex].pointStrokeColor,
fillColor : this.datasets[datasetIndex].pointColor
}));
},this);
this.scale.labels.push(label);
this.reflow();
this.update();
},
removeData : function(){
this.scale.valuesCount--;
this.scale.labels.shift();
helpers.each(this.datasets,function(dataset){
dataset.points.shift();
},this);
this.reflow();
this.update();
},
update : function(){
this.eachPoints(function(point){
point.save();
});
this.reflow();
this.render();
},
reflow: function(){
helpers.extend(this.scale, {
width : this.chart.width,
height: this.chart.height,
size : helpers.min([this.chart.width, this.chart.height]),
xCenter: this.chart.width/2,
yCenter: this.chart.height/2
});
this.updateScaleRange(this.datasets);
this.scale.setScaleSize();
this.scale.buildYLabels();
},
draw : function(ease){
var easeDecimal = ease || 1,
ctx = this.chart.ctx;
this.clear();
this.scale.draw();
helpers.each(this.datasets,function(dataset){
//Transition each point first so that the line and point drawing isn't out of sync
helpers.each(dataset.points,function(point,index){
if (point.hasValue()){
point.transition(this.scale.getPointPosition(index, this.scale.calculateCenterOffset(point.value)), easeDecimal);
}
},this);
//Draw the line between all the points
ctx.lineWidth = this.options.datasetStrokeWidth;
ctx.strokeStyle = dataset.strokeColor;
ctx.beginPath();
helpers.each(dataset.points,function(point,index){
if (index === 0){
ctx.moveTo(point.x,point.y);
}
else{
ctx.lineTo(point.x,point.y);
}
},this);
ctx.closePath();
ctx.stroke();
ctx.fillStyle = dataset.fillColor;
if(this.options.datasetFill){
ctx.fill();
}
//Now draw the points over the line
//A little inefficient double looping, but better than the line
//lagging behind the point positions
helpers.each(dataset.points,function(point){
if (point.hasValue()){
point.draw();
}
});
},this);
}
});
}).call(this);