From 021e4ff8ea9a7537e4005edafe07434f38a81960 Mon Sep 17 00:00:00 2001 From: Justin Wolgamott Date: Mon, 10 Jul 2023 16:06:00 -0400 Subject: [PATCH 01/34] Many node modules deprecated, upgrading and removing node_modules from tracking --- .gitignore | 5 +- .../node_modules/angular-animate/LICENSE.md | 21 - static/node_modules/angular-animate/README.md | 68 - static/node_modules/angular-animate/index.js | 2 - .../angular-chart.js/.codeclimate.yml | 10 - .../angular-chart.js/.dockerignore | 2 - .../angular-chart.js/.editorconfig | 18 - static/node_modules/angular-chart.js/.jscsrc | 82 - .../angular-chart.js/.jshintignore | 9 - .../node_modules/angular-chart.js/.jshintrc | 24 - .../angular-chart.js/.node-version | 1 - .../node_modules/angular-chart.js/.npmignore | 7 - .../node_modules/angular-chart.js/.travis.yml | 19 - .../angular-chart.js/CONTRIBUTING.md | 9 - .../node_modules/angular-chart.js/Dockerfile | 7 - .../angular-chart.js/ISSUE_TEMPLATE.md | 39 - static/node_modules/angular-chart.js/LICENSE | 27 - .../angular-chart.js/PULL_REQUEST_TEMPLATE.md | 15 - .../node_modules/angular-chart.js/README.md | 284 - .../angular-chart.js/angular-chart.js | 391 - .../node_modules/angular-chart.js/bower.json | 44 - .../angular-chart.js/dist/angular-chart.js | 400 - .../dist/angular-chart.js.tar.gz | Bin 9980 -> 0 bytes .../dist/angular-chart.min.js | 11 - .../dist/angular-chart.min.js.map | 1 - .../angular-chart.js/examples/amd.html | 25 - .../angular-chart.js/examples/amd.js | 32 - .../angular-chart.js/examples/app.css | 80 - .../angular-chart.js/examples/app.js | 311 - .../angular-chart.js/examples/bubble.html | 29 - .../angular-chart.js/examples/bubble.js | 55 - .../angular-chart.js/examples/charts.html | 701 - .../examples/charts.template.html | 701 - .../angular-chart.js/examples/commonjs.html | 25 - .../angular-chart.js/examples/commonjs.js | 19 - .../examples/dataset-override.html | 38 - .../examples/dataset-override.js | 32 - .../angular-chart.js/examples/scatter.html | 29 - .../angular-chart.js/examples/scatter.js | 30 - .../examples/smoothscroll.min.js | 1 - .../examples/stacked-bars.html | 31 - .../angular-chart.js/examples/tables.html | 45 - .../angular-chart.js/examples/tabs.html | 33 - .../angular-chart.js/examples/ticks.html | 30 - .../examples/webpack.commonjs.js | 18 - .../examples/webpack.config.js | 12 - .../angular-chart.js/examples/xy.html | 28 - .../angular-chart.js/examples/xy.js | 18 - .../node_modules/angular-chart.js/gulpfile.js | 170 - .../angular-chart.js/package.json | 104 - .../test/fixtures/29-tabs.html | 33 - .../angular-chart.js/test/fixtures/29-tabs.js | 18 - .../test/fixtures/29-tabs.png | Bin 69542 -> 0 bytes .../test/fixtures/51-pie-update-colours.html | 35 - .../test/fixtures/51-pie-update-colours.js | 34 - .../test/fixtures/51-pie-update-colours.png | Bin 33947 -> 0 bytes .../test/fixtures/54-not-enough-colours.html | 36 - .../test/fixtures/54-not-enough-colours.js | 36 - .../test/fixtures/54-not-enough-colours.png | Bin 34002 -> 0 bytes .../test/fixtures/57-hex-colours.html | 35 - .../test/fixtures/57-hex-colours.js | 15 - .../test/fixtures/57-hex-colours.png | Bin 33144 -> 0 bytes .../test/fixtures/bubble.html | 29 - .../angular-chart.js/test/fixtures/bubble.js | 787 - .../angular-chart.js/test/fixtures/bubble.png | Bin 57308 -> 0 bytes .../test/fixtures/charts.html | 77 - .../angular-chart.js/test/fixtures/charts.js | 68 - .../angular-chart.js/test/fixtures/charts.png | Bin 89556 -> 0 bytes .../test/fixtures/configure-line-chart.html | 33 - .../test/fixtures/configure-line-chart.js | 33 - .../test/fixtures/configure-line-chart.png | Bin 29301 -> 0 bytes .../test/fixtures/coverage.js | 9 - .../test/fixtures/custom-directive.html | 32 - .../test/fixtures/custom-directive.js | 20 - .../test/fixtures/custom-directive.png | Bin 29677 -> 0 bytes .../test/fixtures/dataset-override.html | 41 - .../test/fixtures/dataset-override.js | 32 - .../test/fixtures/dataset-override.png | Bin 62199 -> 0 bytes .../test/fixtures/horizontal-bar-chart.html | 33 - .../test/fixtures/horizontal-bar-chart.js | 18 - .../test/fixtures/horizontal-bar-chart.png | Bin 39629 -> 0 bytes .../test/fixtures/options-override.html | 77 - .../test/fixtures/options-override.js | 73 - .../test/fixtures/options-override.png | Bin 99989 -> 0 bytes .../test/fixtures/scatter.html | 29 - .../angular-chart.js/test/fixtures/scatter.js | 30 - .../test/fixtures/scatter.png | Bin 36475 -> 0 bytes .../angular-chart.js/test/index.html | 31 - .../angular-chart.js/test/mocha.opts | 4 - .../angular-chart.js/test/support/setup.js | 11 - .../angular-chart.js/test/test.integration.js | 76 - .../angular-chart.js/test/test.unit.js | 440 - .../angular-chart.js/tmp/Dockerfile-alpine | 15 - .../bower_components/chart.js/CONTRIBUTING.md | 64 - .../tmp/bower_components/chart.js/LICENSE.md | 8 - .../bower_components/chart.js/MAINTAINING.md | 36 - .../tmp/bower_components/chart.js/README.md | 45 - .../tmp/bower_components/chart.js/bower.json | 8 - .../bower_components/chart.js/composer.json | 26 - .../bower_components/chart.js/config.jshintrc | 5 - .../chart.js/dist/Chart.bundle.js | 14868 ------- .../chart.js/dist/Chart.bundle.min.js | 15 - .../bower_components/chart.js/dist/Chart.js | 10635 ----- .../chart.js/dist/Chart.min.js | 14 - .../chart.js/docs/00-Getting-Started.md | 125 - .../chart.js/docs/01-Chart-Configuration.md | 479 - .../chart.js/docs/02-Scales.md | 368 - .../chart.js/docs/03-Line-Chart.md | 187 - .../chart.js/docs/04-Bar-Chart.md | 173 - .../chart.js/docs/05-Radar-Chart.md | 125 - .../chart.js/docs/06-Polar-Area-Chart.md | 109 - .../chart.js/docs/07-Pie-Doughnut-Chart.md | 113 - .../chart.js/docs/08-Bubble-Chart.md | 100 - .../chart.js/docs/09-Advanced.md | 450 - .../chart.js/docs/10-Notes.md | 110 - .../tmp/bower_components/chart.js/gulpfile.js | 226 - .../chart.js/karma.conf.ci.js | 25 - .../bower_components/chart.js/karma.conf.js | 14 - .../chart.js/karma.coverage.conf.js | 43 - .../bower_components/chart.js/package.json | 50 - .../AnimationCallbacks/progress-bar.html | 170 - .../chart.js/samples/bar-horizontal.html | 143 - .../chart.js/samples/bar-multi-axis.html | 102 - .../chart.js/samples/bar-stacked.html | 84 - .../chart.js/samples/bar.html | 144 - .../chart.js/samples/bubble.html | 192 - .../chart.js/samples/combo-bar-line.html | 80 - .../samples/data_label_combo-bar-line.html | 95 - .../samples/different-point-sizes.html | 154 - .../chart.js/samples/doughnut.html | 180 - .../samples/line-cubicInterpolationMode.html | 113 - .../chart.js/samples/line-customTooltips.html | 141 - .../chart.js/samples/line-legend.html | 172 - .../chart.js/samples/line-logarithmic.html | 155 - .../chart.js/samples/line-multi-axis.html | 101 - .../samples/line-multiline-labels.html | 218 - .../chart.js/samples/line-non-numeric-y.html | 92 - .../chart.js/samples/line-skip-points.html | 164 - .../chart.js/samples/line-stacked-area.html | 163 - .../chart.js/samples/line-stepped.html | 224 - .../chart.js/samples/line-x-axis-filter.html | 151 - .../chart.js/samples/line.html | 218 - .../chart.js/samples/pie-customTooltips.html | 156 - .../chart.js/samples/pie.html | 122 - .../chart.js/samples/polar-area.html | 125 - .../chart.js/samples/radar-skip-points.html | 143 - .../chart.js/samples/radar.html | 141 - .../chart.js/samples/scatter-logX.html | 185 - .../chart.js/samples/scatter-multi-axis.html | 186 - .../chart.js/samples/scatter.html | 177 - .../samples/timeScale/combo-time-scale.html | 165 - .../timeScale/line-time-point-data.html | 164 - .../samples/timeScale/line-time-scale.html | 198 - .../chart.js/samples/tooltip-hooks.html | 189 - .../chart.js/scripts/release.sh | 29 - .../bower_components/chart.js/src/chart.js | 49 - .../chart.js/src/charts/Chart.Bar.js | 11 - .../chart.js/src/charts/Chart.Bubble.js | 10 - .../chart.js/src/charts/Chart.Doughnut.js | 11 - .../chart.js/src/charts/Chart.Line.js | 11 - .../chart.js/src/charts/Chart.PolarArea.js | 11 - .../chart.js/src/charts/Chart.Radar.js | 12 - .../chart.js/src/charts/Chart.Scatter.js | 47 - .../src/controllers/controller.bar.js | 573 - .../src/controllers/controller.bubble.js | 122 - .../src/controllers/controller.doughnut.js | 291 - .../src/controllers/controller.line.js | 350 - .../src/controllers/controller.polarArea.js | 215 - .../src/controllers/controller.radar.js | 188 - .../chart.js/src/core/core.animation.js | 131 - .../chart.js/src/core/core.canvasHelpers.js | 104 - .../chart.js/src/core/core.controller.js | 690 - .../src/core/core.datasetController.js | 164 - .../chart.js/src/core/core.element.js | 96 - .../chart.js/src/core/core.helpers.js | 1044 - .../chart.js/src/core/core.js | 110 - .../chart.js/src/core/core.layoutService.js | 321 - .../chart.js/src/core/core.legend.js | 484 - .../chart.js/src/core/core.plugin.js | 129 - .../chart.js/src/core/core.scale.js | 758 - .../chart.js/src/core/core.scaleService.js | 40 - .../chart.js/src/core/core.title.js | 204 - .../chart.js/src/core/core.tooltip.js | 714 - .../chart.js/src/elements/element.arc.js | 91 - .../chart.js/src/elements/element.line.js | 175 - .../chart.js/src/elements/element.point.js | 57 - .../src/elements/element.rectangle.js | 95 - .../chart.js/src/scales/scale.category.js | 129 - .../chart.js/src/scales/scale.linear.js | 192 - .../chart.js/src/scales/scale.linearbase.js | 125 - .../chart.js/src/scales/scale.logarithmic.js | 266 - .../chart.js/src/scales/scale.radialLinear.js | 414 - .../chart.js/src/scales/scale.time.js | 460 - .../chart.js/test/controller.bar.tests.js | 485 - .../chart.js/test/controller.bubble.tests.js | 431 - .../test/controller.doughnut.tests.js | 335 - .../chart.js/test/controller.line.tests.js | 747 - .../test/controller.polarArea.tests.js | 355 - .../chart.js/test/controller.radar.tests.js | 457 - .../chart.js/test/core.element.tests.js | 45 - .../chart.js/test/core.helpers.tests.js | 934 - .../chart.js/test/core.layoutService.tests.js | 242 - .../chart.js/test/core.legend.tests.js | 304 - .../chart.js/test/core.plugin.tests.js | 100 - .../chart.js/test/core.scaleService.tests.js | 29 - .../chart.js/test/core.title.tests.js | 210 - .../chart.js/test/core.tooltip.tests.js | 452 - .../chart.js/test/defaultConfig.tests.js | 293 - .../chart.js/test/element.arc.tests.js | 176 - .../chart.js/test/element.line.tests.js | 2271 -- .../chart.js/test/element.point.tests.js | 474 - .../chart.js/test/element.rectangle.tests.js | 303 - .../chart.js/test/mockContext.js | 258 - .../chart.js/test/scale.category.tests.js | 465 - .../chart.js/test/scale.linear.tests.js | 772 - .../chart.js/test/scale.logarithmic.tests.js | 783 - .../chart.js/test/scale.radialLinear.tests.js | 444 - .../chart.js/test/scale.time.tests.js | 551 - .../tmp/bower_components/chart.js/thankyou.md | 3 - .../angular-chart.js/tmp/gradient.html | 25 - .../angular-chart.js/tmp/gradient.js | 29 - static/node_modules/angular-route/LICENSE.md | 21 - static/node_modules/angular-route/README.md | 68 - static/node_modules/angular-route/index.js | 2 - .../node_modules/angular-sanitize/LICENSE.md | 21 - .../node_modules/angular-sanitize/README.md | 68 - static/node_modules/angular-sanitize/index.js | 2 - static/node_modules/angular/LICENSE.md | 21 - static/node_modules/angular/README.md | 64 - static/node_modules/angular/angular-csp.css | 21 - static/node_modules/angular/angular.js | 32384 ---------------- static/node_modules/angular/angular.min.js | 323 - .../node_modules/angular/angular.min.js.gzip | Bin 57757 -> 0 bytes .../node_modules/angular/angular.min.js.map | 8 - static/node_modules/angular/bower.json | 9 - static/node_modules/angular/index.js | 2 - static/node_modules/angular/package.json | 60 - static/node_modules/angulartics/.bowerrc | 3 - static/node_modules/angulartics/.npmignore | 5 - static/node_modules/angulartics/CHANGELOG.md | 130 - static/node_modules/angulartics/Gruntfile.js | 87 - static/node_modules/angulartics/LICENSE | 22 - static/node_modules/angulartics/README.md | 222 - static/node_modules/angulartics/bower.json | 33 - .../angulartics/dist/angulartics-adobe.min.js | 7 - .../angulartics/dist/angulartics-baidu.min.js | 7 - .../dist/angulartics-chartbeat.min.js | 7 - .../angulartics/dist/angulartics-cnzz.min.js | 1 - .../angulartics/dist/angulartics-debug.min.js | 6 - .../dist/angulartics-flurry.min.js | 7 - ...-ga-cordova-google-analytics-plugin.min.js | 6 - .../dist/angulartics-ga-cordova.min.js | 6 - .../angulartics/dist/angulartics-ga.min.js | 7 - .../dist/angulartics-gtm-cordova.min.js | 1 - .../angulartics/dist/angulartics-gtm.min.js | 7 - .../dist/angulartics-hubspot.min.js | 1 - .../dist/angulartics-intercom.min.js | 7 - .../dist/angulartics-kissmetrics.min.js | 6 - .../dist/angulartics-localytics.min.js | 7 - .../dist/angulartics-loggly.min.js | 7 - .../dist/angulartics-marketo.min.js | 7 - .../dist/angulartics-mixpanel.min.js | 7 - .../angulartics/dist/angulartics-piwik.min.js | 7 - .../dist/angulartics-scroll.min.js | 14 - .../dist/angulartics-segmentio.min.js | 6 - .../dist/angulartics-splunk.min.js | 6 - .../dist/angulartics-woopra.min.js | 6 - .../angulartics/dist/angulartics.min.js | 6 - static/node_modules/angulartics/karma.conf.js | 24 - .../nuget/angular.analytics.adobe.nuspec | 28 - .../nuget/angular.analytics.baidu.nuspec | 28 - .../nuget/angular.analytics.chartbeat.nuspec | 28 - .../nuget/angular.analytics.cnzz.nuspec | 28 - .../nuget/angular.analytics.core.nuspec | 37 - .../nuget/angular.analytics.debug.nuspec | 26 - .../nuget/angular.analytics.flurry.nuspec | 26 - ....ga.cordova-google-analytics-plugin.nuspec | 28 - .../nuget/angular.analytics.ga.cordova.nuspec | 26 - .../nuget/angular.analytics.ga.nuspec | 26 - .../nuget/angular.analytics.gtm.nuspec | 26 - .../nuget/angular.analytics.hubspot.nuspec | 26 - .../nuget/angular.analytics.intercom.nuspec | 26 - .../angular.analytics.kissmetrics.nuspec | 26 - .../nuget/angular.analytics.localytics.nuspec | 26 - .../nuget/angular.analytics.loggly.nuspec | 26 - .../nuget/angular.analytics.marketo.nuspec | 26 - .../nuget/angular.analytics.mixpanel.nuspec | 26 - .../nuget/angular.analytics.piwik.nuspec | 26 - .../nuget/angular.analytics.scroll.nuspec | 26 - .../nuget/angular.analytics.segmentio.nuspec | 26 - .../nuget/angular.analytics.splunk.nuspec | 26 - .../nuget/angular.analytics.woopra.nuspec | 26 - static/node_modules/angulartics/package.json | 84 - .../angulartics/samples/adobe-analytics.html | 60 - .../angulartics/samples/baidu.html | 67 - .../angulartics/samples/chartbeat.html | 79 - .../angulartics/samples/cnzz.html | 63 - .../angulartics/samples/flurry.html | 64 - .../angulartics/samples/google-analytics.html | 69 - .../samples/google-tag-manager.html | 71 - .../angulartics/samples/intercom.html | 73 - .../angulartics/samples/kissmetrics.html | 75 - .../angulartics/samples/localytics.html | 68 - .../angulartics/samples/loggly.html | 66 - .../angulartics/samples/loggly.tracker.js | 136 - .../angulartics/samples/marketo.html | 66 - .../angulartics/samples/mixpanel.html | 65 - .../angulartics/samples/partials/a.tpl.html | 1 - .../angulartics/samples/partials/b.tpl.html | 1 - .../angulartics/samples/partials/c.tpl.html | 1 - .../samples/partials/root.tpl.html | 1 - .../angulartics/samples/piwik.html | 77 - .../angulartics/samples/scroll.html | 82 - .../angulartics/samples/segmentio.html | 65 - .../angulartics/samples/splunk.html | 66 - .../angulartics/samples/woopra.html | 68 - .../angulartics/src/angulartics-adobe.js | 46 - .../angulartics/src/angulartics-baidu.js | 49 - .../angulartics/src/angulartics-chartbeat.js | 29 - .../angulartics/src/angulartics-cnzz.js | 29 - .../angulartics/src/angulartics-debug.js | 30 - .../angulartics/src/angulartics-flurry.js | 29 - ...tics-ga-cordova-google-analytics-plugin.js | 90 - .../angulartics/src/angulartics-ga-cordova.js | 91 - .../angulartics/src/angulartics-ga.js | 96 - .../src/angulartics-gtm-cordova.js | 106 - .../angulartics/src/angulartics-gtm.js | 57 - .../angulartics/src/angulartics-hubspot.js | 38 - .../angulartics/src/angulartics-intercom.js | 44 - .../src/angulartics-kissmetrics.js | 46 - .../angulartics/src/angulartics-localytics.js | 43 - .../angulartics/src/angulartics-loggly.js | 41 - .../angulartics/src/angulartics-marketo.js | 78 - .../angulartics/src/angulartics-mixpanel.js | 67 - .../angulartics/src/angulartics-piwik.js | 46 - .../angulartics/src/angulartics-scroll.js | 47 - .../angulartics/src/angulartics-segmentio.js | 73 - .../angulartics/src/angulartics-splunk.js | 36 - .../angulartics/src/angulartics-woopra.js | 26 - .../angulartics/src/angulartics.js | 266 - .../angulartics/test/angularticsSpec.js | 227 - static/node_modules/chart.js/.editorconfig | 10 - static/node_modules/chart.js/.eslintignore | 1 - static/node_modules/chart.js/.eslintrc | 224 - static/node_modules/chart.js/.npmignore | 13 - static/node_modules/chart.js/CONTRIBUTING.md | 64 - static/node_modules/chart.js/LICENSE.md | 8 - static/node_modules/chart.js/MAINTAINING.md | 36 - static/node_modules/chart.js/README.md | 45 - static/node_modules/chart.js/bower.json | 8 - static/node_modules/chart.js/composer.json | 26 - static/node_modules/chart.js/config.jshintrc | 5 - .../chart.js/dist/Chart.bundle.js | 14868 ------- .../chart.js/dist/Chart.bundle.min.js | 15 - static/node_modules/chart.js/dist/Chart.js | 10635 ----- .../node_modules/chart.js/dist/Chart.min.js | 14 - .../chart.js/docs/00-Getting-Started.md | 125 - .../chart.js/docs/01-Chart-Configuration.md | 479 - .../node_modules/chart.js/docs/02-Scales.md | 368 - .../chart.js/docs/03-Line-Chart.md | 187 - .../chart.js/docs/04-Bar-Chart.md | 173 - .../chart.js/docs/05-Radar-Chart.md | 125 - .../chart.js/docs/06-Polar-Area-Chart.md | 109 - .../chart.js/docs/07-Pie-Doughnut-Chart.md | 113 - .../chart.js/docs/08-Bubble-Chart.md | 100 - .../node_modules/chart.js/docs/09-Advanced.md | 450 - static/node_modules/chart.js/docs/10-Notes.md | 110 - static/node_modules/chart.js/gulpfile.js | 226 - static/node_modules/chart.js/karma.conf.ci.js | 25 - static/node_modules/chart.js/karma.conf.js | 14 - .../chart.js/karma.coverage.conf.js | 43 - static/node_modules/chart.js/package.json | 81 - .../AnimationCallbacks/progress-bar.html | 170 - .../chart.js/samples/bar-horizontal.html | 143 - .../chart.js/samples/bar-multi-axis.html | 102 - .../chart.js/samples/bar-stacked.html | 84 - static/node_modules/chart.js/samples/bar.html | 144 - .../node_modules/chart.js/samples/bubble.html | 192 - .../chart.js/samples/combo-bar-line.html | 80 - .../samples/data_label_combo-bar-line.html | 95 - .../samples/different-point-sizes.html | 154 - .../chart.js/samples/doughnut.html | 180 - .../samples/line-cubicInterpolationMode.html | 113 - .../chart.js/samples/line-customTooltips.html | 141 - .../chart.js/samples/line-legend.html | 172 - .../chart.js/samples/line-logarithmic.html | 155 - .../chart.js/samples/line-multi-axis.html | 101 - .../samples/line-multiline-labels.html | 218 - .../chart.js/samples/line-non-numeric-y.html | 92 - .../chart.js/samples/line-skip-points.html | 164 - .../chart.js/samples/line-stacked-area.html | 163 - .../chart.js/samples/line-stepped.html | 224 - .../chart.js/samples/line-x-axis-filter.html | 151 - .../node_modules/chart.js/samples/line.html | 218 - .../chart.js/samples/pie-customTooltips.html | 156 - static/node_modules/chart.js/samples/pie.html | 122 - .../chart.js/samples/polar-area.html | 125 - .../chart.js/samples/radar-skip-points.html | 143 - .../node_modules/chart.js/samples/radar.html | 141 - .../chart.js/samples/scatter-logX.html | 185 - .../chart.js/samples/scatter-multi-axis.html | 186 - .../chart.js/samples/scatter.html | 177 - .../samples/timeScale/combo-time-scale.html | 165 - .../timeScale/line-time-point-data.html | 164 - .../samples/timeScale/line-time-scale.html | 198 - .../chart.js/samples/tooltip-hooks.html | 189 - .../node_modules/chart.js/scripts/release.sh | 29 - static/node_modules/chart.js/src/chart.js | 49 - .../chart.js/src/charts/Chart.Bar.js | 11 - .../chart.js/src/charts/Chart.Bubble.js | 10 - .../chart.js/src/charts/Chart.Doughnut.js | 11 - .../chart.js/src/charts/Chart.Line.js | 11 - .../chart.js/src/charts/Chart.PolarArea.js | 11 - .../chart.js/src/charts/Chart.Radar.js | 12 - .../chart.js/src/charts/Chart.Scatter.js | 47 - .../src/controllers/controller.bar.js | 573 - .../src/controllers/controller.bubble.js | 122 - .../src/controllers/controller.doughnut.js | 291 - .../src/controllers/controller.line.js | 350 - .../src/controllers/controller.polarArea.js | 215 - .../src/controllers/controller.radar.js | 188 - .../chart.js/src/core/core.animation.js | 131 - .../chart.js/src/core/core.canvasHelpers.js | 104 - .../chart.js/src/core/core.controller.js | 690 - .../src/core/core.datasetController.js | 164 - .../chart.js/src/core/core.element.js | 96 - .../chart.js/src/core/core.helpers.js | 1044 - static/node_modules/chart.js/src/core/core.js | 110 - .../chart.js/src/core/core.layoutService.js | 321 - .../chart.js/src/core/core.legend.js | 484 - .../chart.js/src/core/core.plugin.js | 129 - .../chart.js/src/core/core.scale.js | 758 - .../chart.js/src/core/core.scaleService.js | 40 - .../chart.js/src/core/core.title.js | 204 - .../chart.js/src/core/core.tooltip.js | 714 - .../chart.js/src/elements/element.arc.js | 91 - .../chart.js/src/elements/element.line.js | 175 - .../chart.js/src/elements/element.point.js | 57 - .../src/elements/element.rectangle.js | 95 - .../chart.js/src/scales/scale.category.js | 129 - .../chart.js/src/scales/scale.linear.js | 192 - .../chart.js/src/scales/scale.linearbase.js | 125 - .../chart.js/src/scales/scale.logarithmic.js | 266 - .../chart.js/src/scales/scale.radialLinear.js | 414 - .../chart.js/src/scales/scale.time.js | 460 - .../chart.js/test/controller.bar.tests.js | 485 - .../chart.js/test/controller.bubble.tests.js | 431 - .../test/controller.doughnut.tests.js | 335 - .../chart.js/test/controller.line.tests.js | 747 - .../test/controller.polarArea.tests.js | 355 - .../chart.js/test/controller.radar.tests.js | 457 - .../chart.js/test/core.element.tests.js | 45 - .../chart.js/test/core.helpers.tests.js | 934 - .../chart.js/test/core.layoutService.tests.js | 242 - .../chart.js/test/core.legend.tests.js | 304 - .../chart.js/test/core.plugin.tests.js | 100 - .../chart.js/test/core.scaleService.tests.js | 29 - .../chart.js/test/core.title.tests.js | 210 - .../chart.js/test/core.tooltip.tests.js | 452 - .../chart.js/test/defaultConfig.tests.js | 293 - .../chart.js/test/element.arc.tests.js | 176 - .../chart.js/test/element.line.tests.js | 2271 -- .../chart.js/test/element.point.tests.js | 474 - .../chart.js/test/element.rectangle.tests.js | 303 - .../node_modules/chart.js/test/mockContext.js | 258 - .../chart.js/test/scale.category.tests.js | 465 - .../chart.js/test/scale.linear.tests.js | 772 - .../chart.js/test/scale.logarithmic.tests.js | 783 - .../chart.js/test/scale.radialLinear.tests.js | 444 - .../chart.js/test/scale.time.tests.js | 551 - static/node_modules/chart.js/thankyou.md | 3 - .../chartjs-color-string/.travis.yml | 12 - .../chartjs-color-string/CHANGELOG.md | 11 - .../node_modules/chartjs-color-string/LICENSE | 21 - .../chartjs-color-string/README.md | 42 - .../chartjs-color-string/color-string.js | 221 - .../chartjs-color-string/package.json | 59 - .../chartjs-color-string/test/basic.js | 93 - .../node_modules/chartjs-color/CHANGELOG.md | 35 - static/node_modules/chartjs-color/LICENSE | 21 - static/node_modules/chartjs-color/README.md | 126 - static/node_modules/chartjs-color/index.js | 485 - .../node_modules/chartjs-color/package.json | 92 - static/node_modules/color-convert/.travis.yml | 1 - .../node_modules/color-convert/CHANGELOG.md | 4 - static/node_modules/color-convert/LICENSE | 21 - static/node_modules/color-convert/README.md | 57 - .../node_modules/color-convert/component.json | 9 - .../node_modules/color-convert/conversions.js | 698 - static/node_modules/color-convert/index.js | 92 - .../node_modules/color-convert/package.json | 54 - .../node_modules/color-convert/test/basic.js | 187 - .../node_modules/color-convert/test/speed.js | 23 - static/node_modules/color-name/LICENSE | 8 - static/node_modules/color-name/README.md | 11 - static/node_modules/color-name/index.js | 152 - static/node_modules/color-name/package.json | 58 - static/node_modules/color-name/test.js | 7 - static/node_modules/es5-shim/.npmignore | 2 - static/node_modules/es5-shim/CHANGES | 93 - static/node_modules/es5-shim/CONTRIBUTORS.md | 25 - static/node_modules/es5-shim/LICENSE | 19 - static/node_modules/es5-shim/README.md | 161 - static/node_modules/es5-shim/es5-sham.js | 444 - static/node_modules/es5-shim/es5-sham.map | 1 - static/node_modules/es5-shim/es5-sham.min.js | 4 - static/node_modules/es5-shim/es5-shim.js | 1216 - static/node_modules/es5-shim/es5-shim.map | 1 - static/node_modules/es5-shim/es5-shim.min.js | 4 - static/node_modules/es5-shim/package.json | 81 - .../es5-shim/tests/helpers/h-kill.js | 63 - .../es5-shim/tests/helpers/h-matchers.js | 34 - .../node_modules/es5-shim/tests/helpers/h.js | 3 - static/node_modules/es5-shim/tests/index.html | 64 - .../es5-shim/tests/index.min.html | 63 - .../es5-shim/tests/lib/jasmine-html.js | 190 - .../es5-shim/tests/lib/jasmine.css | 166 - .../es5-shim/tests/lib/jasmine.js | 2477 -- .../es5-shim/tests/lib/jasmine_favicon.png | Bin 905 -> 0 bytes .../node_modules/es5-shim/tests/lib/json2.js | 478 - .../es5-shim/tests/spec/s-array.js | 1223 - .../es5-shim/tests/spec/s-date.js | 152 - .../es5-shim/tests/spec/s-function.js | 147 - .../es5-shim/tests/spec/s-number.js | 14 - .../es5-shim/tests/spec/s-object.js | 181 - .../es5-shim/tests/spec/s-string.js | 24 - static/node_modules/jquery/AUTHORS.txt | 321 - static/node_modules/jquery/LICENSE.txt | 20 - static/node_modules/jquery/README.md | 67 - static/node_modules/jquery/bower.json | 14 - static/node_modules/jquery/dist/core.js | 399 - static/node_modules/jquery/dist/jquery.js | 10598 ----- static/node_modules/jquery/dist/jquery.min.js | 2 - .../node_modules/jquery/dist/jquery.min.map | 1 - .../node_modules/jquery/dist/jquery.slim.js | 8495 ---- .../jquery/dist/jquery.slim.min.js | 2 - .../jquery/dist/jquery.slim.min.map | 1 - .../jquery/external/sizzle/LICENSE.txt | 36 - .../jquery/external/sizzle/dist/sizzle.js | 2282 -- .../jquery/external/sizzle/dist/sizzle.min.js | 3 - .../external/sizzle/dist/sizzle.min.map | 1 - static/node_modules/jquery/package.json | 143 - static/node_modules/jquery/src/ajax.js | 858 - static/node_modules/jquery/src/ajax/jsonp.js | 103 - static/node_modules/jquery/src/ajax/load.js | 77 - .../node_modules/jquery/src/ajax/parseXML.js | 30 - static/node_modules/jquery/src/ajax/script.js | 74 - .../jquery/src/ajax/var/location.js | 5 - .../node_modules/jquery/src/ajax/var/nonce.js | 5 - .../jquery/src/ajax/var/rquery.js | 5 - static/node_modules/jquery/src/ajax/xhr.js | 170 - static/node_modules/jquery/src/attributes.js | 13 - .../jquery/src/attributes/attr.js | 141 - .../jquery/src/attributes/classes.js | 186 - .../jquery/src/attributes/prop.js | 143 - .../jquery/src/attributes/support.js | 33 - .../node_modules/jquery/src/attributes/val.js | 191 - static/node_modules/jquery/src/callbacks.js | 236 - static/node_modules/jquery/src/core.js | 399 - .../node_modules/jquery/src/core/DOMEval.js | 43 - static/node_modules/jquery/src/core/access.js | 72 - static/node_modules/jquery/src/core/init.js | 129 - .../node_modules/jquery/src/core/nodeName.js | 13 - .../node_modules/jquery/src/core/parseHTML.js | 65 - .../jquery/src/core/ready-no-deferred.js | 97 - static/node_modules/jquery/src/core/ready.js | 86 - .../jquery/src/core/readyException.js | 13 - .../jquery/src/core/stripAndCollapse.js | 14 - .../node_modules/jquery/src/core/support.js | 20 - .../jquery/src/core/var/rsingleTag.js | 7 - static/node_modules/jquery/src/css.js | 484 - .../jquery/src/css/addGetHookIf.js | 26 - .../node_modules/jquery/src/css/adjustCSS.js | 74 - static/node_modules/jquery/src/css/curCSS.js | 65 - .../jquery/src/css/hiddenVisibleSelectors.js | 15 - .../node_modules/jquery/src/css/showHide.js | 105 - static/node_modules/jquery/src/css/support.js | 104 - .../jquery/src/css/var/cssExpand.js | 5 - .../jquery/src/css/var/getStyles.js | 17 - .../jquery/src/css/var/isHiddenWithinTree.js | 34 - .../jquery/src/css/var/rnumnonpx.js | 7 - .../node_modules/jquery/src/css/var/swap.js | 26 - static/node_modules/jquery/src/data.js | 180 - static/node_modules/jquery/src/data/Data.js | 162 - .../jquery/src/data/var/acceptData.js | 19 - .../jquery/src/data/var/dataPriv.js | 7 - .../jquery/src/data/var/dataUser.js | 7 - static/node_modules/jquery/src/deferred.js | 399 - .../jquery/src/deferred/exceptionHook.js | 21 - static/node_modules/jquery/src/deprecated.js | 98 - static/node_modules/jquery/src/dimensions.js | 57 - static/node_modules/jquery/src/effects.js | 702 - .../node_modules/jquery/src/effects/Tween.js | 125 - .../jquery/src/effects/animatedSelector.js | 15 - static/node_modules/jquery/src/event.js | 888 - static/node_modules/jquery/src/event/ajax.js | 22 - static/node_modules/jquery/src/event/alias.js | 29 - .../node_modules/jquery/src/event/focusin.js | 55 - .../node_modules/jquery/src/event/support.js | 11 - .../node_modules/jquery/src/event/trigger.js | 199 - static/node_modules/jquery/src/exports/amd.js | 26 - .../node_modules/jquery/src/exports/global.js | 34 - static/node_modules/jquery/src/jquery.js | 40 - .../node_modules/jquery/src/manipulation.js | 489 - .../jquery/src/manipulation/_evalUrl.js | 32 - .../jquery/src/manipulation/buildFragment.js | 106 - .../jquery/src/manipulation/getAll.js | 32 - .../jquery/src/manipulation/setGlobalEval.js | 22 - .../jquery/src/manipulation/support.js | 35 - .../src/manipulation/var/rscriptType.js | 5 - .../jquery/src/manipulation/var/rtagName.js | 8 - .../jquery/src/manipulation/wrapMap.js | 29 - static/node_modules/jquery/src/offset.js | 233 - static/node_modules/jquery/src/queue.js | 145 - static/node_modules/jquery/src/queue/delay.js | 24 - .../jquery/src/selector-native.js | 237 - .../jquery/src/selector-sizzle.js | 19 - static/node_modules/jquery/src/selector.js | 3 - static/node_modules/jquery/src/serialize.js | 136 - static/node_modules/jquery/src/traversing.js | 191 - .../jquery/src/traversing/findFilter.js | 97 - .../jquery/src/traversing/var/dir.js | 22 - .../src/traversing/var/rneedsContext.js | 8 - .../jquery/src/traversing/var/siblings.js | 17 - .../jquery/src/var/ObjectFunctionString.js | 7 - static/node_modules/jquery/src/var/arr.js | 5 - .../node_modules/jquery/src/var/class2type.js | 6 - static/node_modules/jquery/src/var/concat.js | 7 - .../node_modules/jquery/src/var/document.js | 5 - .../jquery/src/var/documentElement.js | 7 - .../node_modules/jquery/src/var/fnToString.js | 7 - .../node_modules/jquery/src/var/getProto.js | 5 - static/node_modules/jquery/src/var/hasOwn.js | 7 - static/node_modules/jquery/src/var/indexOf.js | 7 - static/node_modules/jquery/src/var/pnum.js | 5 - static/node_modules/jquery/src/var/push.js | 7 - static/node_modules/jquery/src/var/rcssNum.js | 9 - .../jquery/src/var/rnothtmlwhite.js | 8 - static/node_modules/jquery/src/var/slice.js | 7 - static/node_modules/jquery/src/var/support.js | 6 - .../node_modules/jquery/src/var/toString.js | 7 - static/node_modules/jquery/src/wrap.js | 78 - static/node_modules/json3/.gitmodules | 6 - static/node_modules/json3/.jamignore | 10 - static/node_modules/json3/.npmignore | 11 - static/node_modules/json3/.travis.yml | 33 - static/node_modules/json3/LICENSE | 20 - static/node_modules/json3/README.md | 126 - .../node_modules/json3/coverage/coverage.json | 1 - .../coverage/lcov-report/lib/json3.js.html | 2903 -- .../json3/coverage/lcov-report/prettify.css | 1 - .../json3/coverage/lcov-report/prettify.js | 1 - static/node_modules/json3/coverage/lcov.info | 2035 - static/node_modules/json3/lib/json3.js | 861 - static/node_modules/json3/lib/json3.min.js | 18 - static/node_modules/json3/package.json | 116 - static/node_modules/moment/CHANGELOG.md | 821 - static/node_modules/moment/LICENSE | 22 - static/node_modules/moment/README.md | 61 - static/node_modules/moment/ender.js | 1 - static/node_modules/moment/locale/af.js | 73 - static/node_modules/moment/locale/ar-ma.js | 60 - static/node_modules/moment/locale/ar-sa.js | 105 - static/node_modules/moment/locale/ar-tn.js | 59 - static/node_modules/moment/locale/ar.js | 142 - static/node_modules/moment/locale/az.js | 105 - static/node_modules/moment/locale/be.js | 134 - static/node_modules/moment/locale/bg.js | 90 - static/node_modules/moment/locale/bn.js | 119 - static/node_modules/moment/locale/bo.js | 119 - static/node_modules/moment/locale/br.js | 108 - static/node_modules/moment/locale/bs.js | 143 - static/node_modules/moment/locale/ca.js | 88 - static/node_modules/moment/locale/cs.js | 172 - static/node_modules/moment/locale/cv.js | 63 - static/node_modules/moment/locale/cy.js | 81 - static/node_modules/moment/locale/da.js | 60 - static/node_modules/moment/locale/de-at.js | 79 - static/node_modules/moment/locale/de.js | 78 - static/node_modules/moment/locale/dv.js | 100 - static/node_modules/moment/locale/el.js | 100 - static/node_modules/moment/locale/en-au.js | 67 - static/node_modules/moment/locale/en-ca.js | 63 - static/node_modules/moment/locale/en-gb.js | 67 - static/node_modules/moment/locale/en-ie.js | 67 - static/node_modules/moment/locale/en-nz.js | 67 - static/node_modules/moment/locale/eo.js | 73 - static/node_modules/moment/locale/es-do.js | 91 - static/node_modules/moment/locale/es.js | 92 - static/node_modules/moment/locale/et.js | 80 - static/node_modules/moment/locale/eu.js | 66 - static/node_modules/moment/locale/fa.js | 107 - static/node_modules/moment/locale/fi.js | 107 - static/node_modules/moment/locale/fo.js | 60 - static/node_modules/moment/locale/fr-ca.js | 74 - static/node_modules/moment/locale/fr-ch.js | 78 - static/node_modules/moment/locale/fr.js | 83 - static/node_modules/moment/locale/fy.js | 75 - static/node_modules/moment/locale/gd.js | 76 - static/node_modules/moment/locale/gl.js | 77 - static/node_modules/moment/locale/he.js | 99 - static/node_modules/moment/locale/hi.js | 124 - static/node_modules/moment/locale/hr.js | 145 - static/node_modules/moment/locale/hu.js | 108 - static/node_modules/moment/locale/hy-am.js | 95 - static/node_modules/moment/locale/id.js | 83 - static/node_modules/moment/locale/is.js | 127 - static/node_modules/moment/locale/it.js | 70 - static/node_modules/moment/locale/ja.js | 80 - static/node_modules/moment/locale/jv.js | 83 - static/node_modules/moment/locale/ka.js | 89 - static/node_modules/moment/locale/kk.js | 87 - static/node_modules/moment/locale/km.js | 58 - static/node_modules/moment/locale/ko.js | 83 - static/node_modules/moment/locale/ky.js | 88 - static/node_modules/moment/locale/lb.js | 137 - static/node_modules/moment/locale/lo.js | 70 - static/node_modules/moment/locale/lt.js | 117 - static/node_modules/moment/locale/lv.js | 97 - static/node_modules/moment/locale/me.js | 111 - static/node_modules/moment/locale/mk.js | 90 - static/node_modules/moment/locale/ml.js | 81 - static/node_modules/moment/locale/mr.js | 159 - static/node_modules/moment/locale/ms-my.js | 83 - static/node_modules/moment/locale/ms.js | 82 - static/node_modules/moment/locale/my.js | 96 - static/node_modules/moment/locale/nb.js | 63 - static/node_modules/moment/locale/ne.js | 123 - static/node_modules/moment/locale/nl.js | 88 - static/node_modules/moment/locale/nn.js | 60 - static/node_modules/moment/locale/pa-in.js | 124 - static/node_modules/moment/locale/pl.js | 124 - static/node_modules/moment/locale/pt-br.js | 62 - static/node_modules/moment/locale/pt.js | 65 - static/node_modules/moment/locale/ro.js | 75 - static/node_modules/moment/locale/ru.js | 183 - static/node_modules/moment/locale/se.js | 61 - static/node_modules/moment/locale/si.js | 71 - static/node_modules/moment/locale/sk.js | 150 - static/node_modules/moment/locale/sl.js | 162 - static/node_modules/moment/locale/sq.js | 70 - static/node_modules/moment/locale/sr-cyrl.js | 110 - static/node_modules/moment/locale/sr.js | 110 - static/node_modules/moment/locale/ss.js | 89 - static/node_modules/moment/locale/sv.js | 69 - static/node_modules/moment/locale/sw.js | 59 - static/node_modules/moment/locale/ta.js | 130 - static/node_modules/moment/locale/te.js | 89 - static/node_modules/moment/locale/th.js | 67 - static/node_modules/moment/locale/tl-ph.js | 62 - static/node_modules/moment/locale/tlh.js | 120 - static/node_modules/moment/locale/tr.js | 90 - static/node_modules/moment/locale/tzl.js | 91 - static/node_modules/moment/locale/tzm-latn.js | 58 - static/node_modules/moment/locale/tzm.js | 58 - static/node_modules/moment/locale/uk.js | 151 - static/node_modules/moment/locale/uz.js | 58 - static/node_modules/moment/locale/vi.js | 79 - static/node_modules/moment/locale/x-pseudo.js | 68 - static/node_modules/moment/locale/zh-cn.js | 111 - static/node_modules/moment/locale/zh-tw.js | 104 - static/node_modules/moment/min/locales.js | 9534 ----- static/node_modules/moment/min/locales.min.js | 1 - .../moment/min/moment-with-locales.js | 14036 ------- .../moment/min/moment-with-locales.min.js | 1 - static/node_modules/moment/min/moment.min.js | 1 - static/node_modules/moment/moment.d.ts | 717 - static/node_modules/moment/moment.js | 4517 --- static/node_modules/moment/package.js | 11 - static/node_modules/moment/package.json | 153 - .../moment/src/lib/create/check-overflow.js | 34 - .../moment/src/lib/create/date-from-array.js | 21 - .../moment/src/lib/create/from-anything.js | 110 - .../moment/src/lib/create/from-array.js | 147 - .../moment/src/lib/create/from-object.js | 16 - .../src/lib/create/from-string-and-array.js | 50 - .../src/lib/create/from-string-and-format.js | 113 - .../moment/src/lib/create/from-string.js | 230 - .../moment/src/lib/create/local.js | 5 - .../moment/src/lib/create/parsing-flags.js | 26 - .../node_modules/moment/src/lib/create/utc.js | 5 - .../moment/src/lib/create/valid.js | 50 - .../moment/src/lib/duration/abs.js | 18 - .../moment/src/lib/duration/add-subtract.js | 21 - .../moment/src/lib/duration/as.js | 61 - .../moment/src/lib/duration/bubble.js | 61 - .../moment/src/lib/duration/clone.js | 6 - .../moment/src/lib/duration/constructor.js | 44 - .../moment/src/lib/duration/create.js | 122 - .../moment/src/lib/duration/duration.js | 16 - .../moment/src/lib/duration/get.js | 25 - .../moment/src/lib/duration/humanize.js | 85 - .../moment/src/lib/duration/iso-string.js | 64 - .../moment/src/lib/duration/prototype.js | 52 - .../moment/src/lib/duration/valid.js | 36 - .../moment/src/lib/format/format.js | 92 - .../moment/src/lib/locale/base-config.js | 44 - .../moment/src/lib/locale/calendar.js | 15 - .../moment/src/lib/locale/constructor.js | 5 - .../node_modules/moment/src/lib/locale/en.js | 15 - .../moment/src/lib/locale/formats.js | 23 - .../moment/src/lib/locale/invalid.js | 5 - .../moment/src/lib/locale/lists.js | 93 - .../moment/src/lib/locale/locale.js | 39 - .../moment/src/lib/locale/locales.js | 186 - .../moment/src/lib/locale/ordinal.js | 7 - .../moment/src/lib/locale/pre-post-format.js | 3 - .../moment/src/lib/locale/prototype.js | 69 - .../moment/src/lib/locale/relative.js | 30 - .../node_modules/moment/src/lib/locale/set.js | 49 - .../moment/src/lib/moment/add-subtract.js | 55 - .../moment/src/lib/moment/calendar.js | 26 - .../moment/src/lib/moment/clone.js | 5 - .../moment/src/lib/moment/compare.js | 59 - .../moment/src/lib/moment/constructor.js | 77 - .../moment/src/lib/moment/creation-data.js | 9 - .../moment/src/lib/moment/diff.js | 58 - .../moment/src/lib/moment/format.js | 57 - .../moment/src/lib/moment/from.js | 17 - .../moment/src/lib/moment/get-set.js | 61 - .../moment/src/lib/moment/locale.js | 34 - .../moment/src/lib/moment/min-max.js | 63 - .../moment/src/lib/moment/moment.js | 28 - .../node_modules/moment/src/lib/moment/now.js | 3 - .../moment/src/lib/moment/prototype.js | 150 - .../moment/src/lib/moment/start-end-of.js | 59 - .../moment/src/lib/moment/to-type.js | 34 - .../node_modules/moment/src/lib/moment/to.js | 17 - .../moment/src/lib/moment/valid.js | 15 - .../moment/src/lib/parse/regex.js | 54 - .../moment/src/lib/parse/token.js | 33 - .../moment/src/lib/units/aliases.js | 30 - .../moment/src/lib/units/constants.js | 9 - .../moment/src/lib/units/day-of-month.js | 39 - .../moment/src/lib/units/day-of-week.js | 364 - .../moment/src/lib/units/day-of-year.js | 36 - .../node_modules/moment/src/lib/units/hour.js | 144 - .../moment/src/lib/units/millisecond.js | 69 - .../moment/src/lib/units/minute.js | 29 - .../moment/src/lib/units/month.js | 290 - .../moment/src/lib/units/offset.js | 235 - .../moment/src/lib/units/priorities.js | 16 - .../moment/src/lib/units/quarter.js | 32 - .../moment/src/lib/units/second.js | 29 - .../moment/src/lib/units/timestamp.js | 20 - .../moment/src/lib/units/timezone.js | 16 - .../moment/src/lib/units/units.js | 20 - .../src/lib/units/week-calendar-utils.js | 65 - .../moment/src/lib/units/week-year.js | 107 - .../node_modules/moment/src/lib/units/week.js | 67 - .../node_modules/moment/src/lib/units/year.js | 75 - .../moment/src/lib/utils/abs-ceil.js | 7 - .../moment/src/lib/utils/abs-floor.js | 8 - .../moment/src/lib/utils/abs-round.js | 7 - .../moment/src/lib/utils/compare-arrays.js | 16 - .../moment/src/lib/utils/defaults.js | 10 - .../moment/src/lib/utils/deprecate.js | 55 - .../moment/src/lib/utils/extend.js | 19 - .../moment/src/lib/utils/has-own-prop.js | 3 - .../moment/src/lib/utils/hooks.js | 13 - .../moment/src/lib/utils/index-of.js | 18 - .../moment/src/lib/utils/is-array.js | 3 - .../moment/src/lib/utils/is-date.js | 3 - .../moment/src/lib/utils/is-function.js | 3 - .../moment/src/lib/utils/is-number.js | 3 - .../moment/src/lib/utils/is-object-empty.js | 13 - .../moment/src/lib/utils/is-object.js | 5 - .../moment/src/lib/utils/is-undefined.js | 3 - .../node_modules/moment/src/lib/utils/keys.js | 19 - .../node_modules/moment/src/lib/utils/map.js | 7 - .../node_modules/moment/src/lib/utils/mod.js | 3 - .../node_modules/moment/src/lib/utils/some.js | 19 - .../moment/src/lib/utils/to-int.js | 12 - .../moment/src/lib/utils/zero-fill.js | 7 - static/node_modules/moment/src/locale/af.js | 63 - .../node_modules/moment/src/locale/ar-dz.js | 50 - .../node_modules/moment/src/locale/ar-kw.js | 49 - .../node_modules/moment/src/locale/ar-ly.js | 112 - .../node_modules/moment/src/locale/ar-ma.js | 51 - .../node_modules/moment/src/locale/ar-sa.js | 95 - .../node_modules/moment/src/locale/ar-tn.js | 50 - static/node_modules/moment/src/locale/ar.js | 127 - static/node_modules/moment/src/locale/az.js | 96 - static/node_modules/moment/src/locale/be.js | 125 - static/node_modules/moment/src/locale/bg.js | 81 - static/node_modules/moment/src/locale/bm.js | 49 - static/node_modules/moment/src/locale/bn.js | 109 - static/node_modules/moment/src/locale/bo.js | 110 - static/node_modules/moment/src/locale/br.js | 99 - static/node_modules/moment/src/locale/bs.js | 133 - static/node_modules/moment/src/locale/ca.js | 79 - static/node_modules/moment/src/locale/cs.js | 163 - static/node_modules/moment/src/locale/cv.js | 53 - static/node_modules/moment/src/locale/cy.js | 72 - static/node_modules/moment/src/locale/da.js | 50 - .../node_modules/moment/src/locale/de-at.js | 69 - .../node_modules/moment/src/locale/de-ch.js | 68 - static/node_modules/moment/src/locale/de.js | 68 - static/node_modules/moment/src/locale/dv.js | 89 - static/node_modules/moment/src/locale/el.js | 88 - .../node_modules/moment/src/locale/en-au.js | 58 - .../node_modules/moment/src/locale/en-ca.js | 53 - .../node_modules/moment/src/locale/en-gb.js | 58 - .../node_modules/moment/src/locale/en-ie.js | 58 - .../node_modules/moment/src/locale/en-nz.js | 57 - static/node_modules/moment/src/locale/eo.js | 64 - .../node_modules/moment/src/locale/es-do.js | 82 - .../node_modules/moment/src/locale/es-us.js | 73 - static/node_modules/moment/src/locale/es.js | 82 - static/node_modules/moment/src/locale/et.js | 71 - static/node_modules/moment/src/locale/eu.js | 57 - static/node_modules/moment/src/locale/fa.js | 97 - static/node_modules/moment/src/locale/fi.js | 98 - static/node_modules/moment/src/locale/fo.js | 51 - .../node_modules/moment/src/locale/fr-ca.js | 65 - .../node_modules/moment/src/locale/fr-ch.js | 69 - static/node_modules/moment/src/locale/fr.js | 74 - static/node_modules/moment/src/locale/fy.js | 66 - static/node_modules/moment/src/locale/gd.js | 67 - static/node_modules/moment/src/locale/gl.js | 68 - .../moment/src/locale/gom-latn.js | 112 - static/node_modules/moment/src/locale/gu.js | 114 - static/node_modules/moment/src/locale/he.js | 90 - static/node_modules/moment/src/locale/hi.js | 115 - static/node_modules/moment/src/locale/hr.js | 135 - static/node_modules/moment/src/locale/hu.js | 100 - .../node_modules/moment/src/locale/hy-am.js | 86 - static/node_modules/moment/src/locale/id.js | 74 - static/node_modules/moment/src/locale/is.js | 118 - static/node_modules/moment/src/locale/it.js | 61 - static/node_modules/moment/src/locale/ja.js | 71 - static/node_modules/moment/src/locale/jv.js | 73 - static/node_modules/moment/src/locale/ka.js | 80 - static/node_modules/moment/src/locale/kk.js | 77 - static/node_modules/moment/src/locale/km.js | 49 - static/node_modules/moment/src/locale/kn.js | 116 - static/node_modules/moment/src/locale/ko.js | 74 - static/node_modules/moment/src/locale/ky.js | 78 - static/node_modules/moment/src/locale/lb.js | 128 - static/node_modules/moment/src/locale/lo.js | 61 - static/node_modules/moment/src/locale/lt.js | 108 - static/node_modules/moment/src/locale/lv.js | 88 - static/node_modules/moment/src/locale/me.js | 101 - static/node_modules/moment/src/locale/mi.js | 54 - static/node_modules/moment/src/locale/mk.js | 81 - static/node_modules/moment/src/locale/ml.js | 72 - static/node_modules/moment/src/locale/mr.js | 150 - .../node_modules/moment/src/locale/ms-my.js | 74 - static/node_modules/moment/src/locale/ms.js | 73 - static/node_modules/moment/src/locale/my.js | 86 - static/node_modules/moment/src/locale/nb.js | 54 - static/node_modules/moment/src/locale/ne.js | 114 - .../node_modules/moment/src/locale/nl-be.js | 79 - static/node_modules/moment/src/locale/nl.js | 79 - static/node_modules/moment/src/locale/nn.js | 51 - .../node_modules/moment/src/locale/pa-in.js | 115 - static/node_modules/moment/src/locale/pl.js | 114 - .../node_modules/moment/src/locale/pt-br.js | 53 - static/node_modules/moment/src/locale/pt.js | 56 - static/node_modules/moment/src/locale/ro.js | 66 - static/node_modules/moment/src/locale/ru.js | 173 - static/node_modules/moment/src/locale/sd.js | 88 - static/node_modules/moment/src/locale/se.js | 51 - static/node_modules/moment/src/locale/si.js | 61 - static/node_modules/moment/src/locale/sk.js | 141 - static/node_modules/moment/src/locale/sl.js | 152 - static/node_modules/moment/src/locale/sq.js | 61 - .../node_modules/moment/src/locale/sr-cyrl.js | 100 - static/node_modules/moment/src/locale/sr.js | 100 - static/node_modules/moment/src/locale/ss.js | 80 - static/node_modules/moment/src/locale/sv.js | 60 - static/node_modules/moment/src/locale/sw.js | 50 - static/node_modules/moment/src/locale/ta.js | 120 - static/node_modules/moment/src/locale/te.js | 79 - static/node_modules/moment/src/locale/tet.js | 58 - static/node_modules/moment/src/locale/th.js | 57 - .../node_modules/moment/src/locale/tl-ph.js | 53 - static/node_modules/moment/src/locale/tlh.js | 110 - static/node_modules/moment/src/locale/tr.js | 81 - static/node_modules/moment/src/locale/tzl.js | 82 - .../moment/src/locale/tzm-latn.js | 49 - static/node_modules/moment/src/locale/tzm.js | 49 - static/node_modules/moment/src/locale/uk.js | 142 - static/node_modules/moment/src/locale/ur.js | 89 - .../node_modules/moment/src/locale/uz-latn.js | 49 - static/node_modules/moment/src/locale/uz.js | 49 - static/node_modules/moment/src/locale/vi.js | 70 - .../moment/src/locale/x-pseudo.js | 58 - static/node_modules/moment/src/locale/yo.js | 50 - .../node_modules/moment/src/locale/zh-cn.js | 102 - .../node_modules/moment/src/locale/zh-hk.js | 95 - .../node_modules/moment/src/locale/zh-tw.js | 94 - static/node_modules/moment/src/moment.js | 82 - static/node_modules/popper.js/README.md | 219 - .../popper.js/dist/esm/popper-utils.js | 1044 - .../popper.js/dist/esm/popper-utils.js.map | 1 - .../popper.js/dist/esm/popper-utils.min.js | 5 - .../dist/esm/popper-utils.min.js.map | 1 - .../node_modules/popper.js/dist/esm/popper.js | 2437 -- .../popper.js/dist/esm/popper.js.map | 1 - .../popper.js/dist/esm/popper.min.js | 5 - .../popper.js/dist/esm/popper.min.js.map | 1 - .../popper.js/dist/popper-utils.js | 1001 - .../popper.js/dist/popper-utils.js.map | 1 - .../popper.js/dist/popper-utils.min.js | 5 - .../popper.js/dist/popper-utils.min.js.map | 1 - static/node_modules/popper.js/dist/popper.js | 2300 -- .../node_modules/popper.js/dist/popper.js.map | 1 - .../node_modules/popper.js/dist/popper.min.js | 5 - .../popper.js/dist/popper.min.js.map | 1 - .../popper.js/dist/umd/popper-utils.js | 1082 - .../popper.js/dist/umd/popper-utils.js.map | 1 - .../popper.js/dist/umd/popper-utils.min.js | 5 - .../dist/umd/popper-utils.min.js.map | 1 - .../node_modules/popper.js/dist/umd/popper.js | 2445 -- .../popper.js/dist/umd/popper.js.map | 1 - .../popper.js/dist/umd/popper.min.js | 5 - .../popper.js/dist/umd/popper.min.js.map | 1 - static/node_modules/popper.js/index.d.ts | 131 - static/node_modules/popper.js/package.json | 86 - static/node_modules/videogular/.gitattributes | 1 - static/node_modules/videogular/.jshintrc | 24 - static/node_modules/videogular/.npmignore | 30 - static/node_modules/videogular/CHANGELOG.md | 276 - static/node_modules/videogular/Gruntfile.js | 257 - static/node_modules/videogular/LICENSE | 20 - static/node_modules/videogular/README.md | 90 - static/node_modules/videogular/deploy.sh | 32 - .../videogular/dist/analytics/vg-analytics.js | 244 - .../dist/analytics/vg-analytics.min.js | 1 - .../videogular/dist/buffering/vg-buffering.js | 116 - .../dist/buffering/vg-buffering.min.js | 1 - .../videogular/dist/controls/vg-controls.js | 1408 - .../dist/controls/vg-controls.min.js | 1 - .../videogular/dist/dash/vg-dash.js | 92 - .../videogular/dist/dash/vg-dash.min.js | 1 - .../videogular/dist/ima-ads/vg-ima-ads.js | 261 - .../videogular/dist/ima-ads/vg-ima-ads.min.js | 1 - .../dist/overlay-play/vg-overlay-play.js | 76 - .../dist/overlay-play/vg-overlay-play.min.js | 1 - .../videogular/dist/poster/vg-poster.js | 59 - .../videogular/dist/poster/vg-poster.min.js | 1 - .../themes/default/fonts/videogular.dev.svg | 37 - .../dist/themes/default/fonts/videogular.eot | Bin 2544 -> 0 bytes .../dist/themes/default/fonts/videogular.svg | 37 - .../dist/themes/default/fonts/videogular.ttf | Bin 2380 -> 0 bytes .../dist/themes/default/fonts/videogular.woff | Bin 1948 -> 0 bytes .../dist/themes/default/videogular.css | 459 - .../dist/themes/default/videogular.css.map | 7 - .../dist/themes/default/videogular.min.css | 1 - .../dist/themes/default/videogular.scss | 634 - .../videogular/dist/videogular/videogular.js | 1683 - .../dist/videogular/videogular.min.js | 1 - .../node_modules/angular/LICENSE.md | 21 - .../videogular/node_modules/angular/README.md | 64 - .../node_modules/angular/angular-csp.css | 21 - .../node_modules/angular/angular.js | 29852 -------------- .../node_modules/angular/angular.min.js | 301 - .../node_modules/angular/angular.min.js.gzip | Bin 57337 -> 0 bytes .../node_modules/angular/angular.min.js.map | 8 - .../node_modules/angular/bower.json | 9 - .../videogular/node_modules/angular/index.js | 2 - .../node_modules/angular/package.json | 56 - .../node_modules/bootstrap/.editorconfig | 14 - .../node_modules/bootstrap/.gitattributes | 8 - .../node_modules/bootstrap/.npmignore | 42 - .../node_modules/bootstrap/.travis.yml | 28 - .../videogular/node_modules/bootstrap/CNAME | 1 - .../node_modules/bootstrap/CONTRIBUTING.md | 196 - .../node_modules/bootstrap/Gruntfile.js | 421 - .../videogular/node_modules/bootstrap/LICENSE | 21 - .../node_modules/bootstrap/README.md | 173 - .../node_modules/bootstrap/_config.yml | 37 - .../node_modules/bootstrap/bower.json | 24 - .../node_modules/bootstrap/composer.json | 25 - .../bootstrap/dist/css/bootstrap-theme.css | 347 - .../dist/css/bootstrap-theme.css.map | 1 - .../dist/css/bootstrap-theme.min.css | 7 - .../bootstrap/dist/css/bootstrap.css | 5785 --- .../bootstrap/dist/css/bootstrap.css.map | 1 - .../bootstrap/dist/css/bootstrap.min.css | 7 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes .../bootstrap/dist/js/bootstrap.js | 1951 - .../bootstrap/dist/js/bootstrap.min.js | 6 - .../node_modules/bootstrap/docs/LICENSE | 319 - .../bootstrap/docs/_data/core-team.yml | 19 - .../bootstrap/docs/_data/glyphicons.yml | 203 - .../bootstrap/docs/_data/sass-team.yml | 7 - .../bootstrap/docs/_data/showcase.yml | 19 - .../bootstrap/docs/_includes/ads.html | 1 - .../docs/_includes/customizer-variables.html | 1695 - .../bootstrap/docs/_includes/footer.html | 70 - .../bootstrap/docs/_includes/header.html | 42 - .../bootstrap/docs/_includes/nav-about.html | 9 - .../docs/_includes/nav-components.html | 139 - .../bootstrap/docs/_includes/nav-css.html | 130 - .../docs/_includes/nav-customize.html | 46 - .../docs/_includes/nav-getting-started.html | 62 - .../docs/_includes/nav-javascript.html | 89 - .../bootstrap/docs/_includes/nav-main.html | 36 - .../docs/_includes/nav-migration.html | 12 - .../docs/_includes/social-buttons.html | 16 - .../bootstrap/docs/_layouts/default.html | 58 - .../bootstrap/docs/_layouts/home.html | 18 - .../node_modules/bootstrap/docs/about.html | 111 - .../bootstrap/docs/assets/css/docs.css | 1420 - .../bootstrap/docs/assets/css/docs.min.css | 6 - .../docs/assets/css/pygments-manni.css | 66 - .../ico/apple-touch-icon-144-precomposed.png | Bin 3549 -> 0 bytes .../bootstrap/docs/assets/ico/favicon.ico | Bin 5430 -> 0 bytes .../bootstrap/docs/assets/img/components.png | Bin 3110 -> 0 bytes .../bootstrap/docs/assets/img/devices.png | Bin 6654 -> 0 bytes .../bootstrap/docs/assets/img/sass-less.png | Bin 14588 -> 0 bytes .../bootstrap/docs/assets/js/application.js | 101 - .../bootstrap/docs/assets/js/customize.min.js | 55 - .../bootstrap/docs/assets/js/customizer.js | 346 - .../bootstrap/docs/assets/js/docs.min.js | 16 - .../assets/js/ie8-responsive-file-warning.js | 12 - .../bootstrap/docs/assets/js/raw-files.min.js | 8 - .../bootstrap/docs/assets/js/vendor/blob.js | 166 - .../docs/assets/js/vendor/filesaver.js | 242 - .../bootstrap/docs/assets/js/vendor/holder.js | 648 - .../docs/assets/js/vendor/jszip.min.js | 14 - .../docs/assets/js/vendor/less.min.js | 16 - .../docs/assets/js/vendor/uglify.min.js | 14 - .../bootstrap/docs/components.html | 3009 -- .../node_modules/bootstrap/docs/css.html | 3341 -- .../bootstrap/docs/customize.html | 356 - .../docs/dist/css/bootstrap-theme.css.map | 1 - .../docs/dist/css/bootstrap-theme.min.css | 7 - .../bootstrap/docs/dist/css/bootstrap.css.map | 1 - .../bootstrap/docs/dist/css/bootstrap.min.css | 7 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes .../bootstrap/docs/dist/js/bootstrap.min.js | 6 - .../bootstrap/docs/examples/blog/blog.css | 163 - .../bootstrap/docs/examples/blog/index.html | 171 - .../docs/examples/carousel/carousel.css | 147 - .../docs/examples/carousel/index.html | 206 - .../bootstrap/docs/examples/cover/cover.css | 161 - .../bootstrap/docs/examples/cover/index.html | 75 - .../docs/examples/dashboard/dashboard.css | 96 - .../docs/examples/dashboard/index.html | 243 - .../bootstrap/docs/examples/grid/grid.css | 28 - .../bootstrap/docs/examples/grid/index.html | 152 - .../docs/examples/jumbotron-narrow/index.html | 82 - .../jumbotron-narrow/jumbotron-narrow.css | 79 - .../docs/examples/jumbotron/index.html | 99 - .../docs/examples/jumbotron/jumbotron.css | 5 - .../docs/examples/justified-nav/index.html | 84 - .../examples/justified-nav/justified-nav.css | 88 - .../docs/examples/navbar-fixed-top/index.html | 91 - .../navbar-fixed-top/navbar-fixed-top.css | 4 - .../examples/navbar-static-top/index.html | 92 - .../navbar-static-top/navbar-static-top.css | 7 - .../bootstrap/docs/examples/navbar/index.html | 90 - .../bootstrap/docs/examples/navbar/navbar.css | 8 - .../docs/examples/non-responsive/index.html | 105 - .../non-responsive/non-responsive.css | 120 - .../docs/examples/offcanvas/index.html | 130 - .../docs/examples/offcanvas/offcanvas.css | 59 - .../docs/examples/offcanvas/offcanvas.js | 5 - .../docs/examples/screenshots/blog.jpg | Bin 122350 -> 0 bytes .../docs/examples/screenshots/carousel.jpg | Bin 82270 -> 0 bytes .../docs/examples/screenshots/cover.jpg | Bin 36631 -> 0 bytes .../docs/examples/screenshots/dashboard.jpg | Bin 105375 -> 0 bytes .../docs/examples/screenshots/grid.jpg | Bin 99951 -> 0 bytes .../examples/screenshots/jumbotron-narrow.jpg | Bin 68573 -> 0 bytes .../docs/examples/screenshots/jumbotron.jpg | Bin 101215 -> 0 bytes .../examples/screenshots/justified-nav.jpg | Bin 79037 -> 0 bytes .../examples/screenshots/navbar-fixed.jpg | Bin 37932 -> 0 bytes .../examples/screenshots/navbar-static.jpg | Bin 39671 -> 0 bytes .../docs/examples/screenshots/navbar.jpg | Bin 40956 -> 0 bytes .../examples/screenshots/non-responsive.jpg | Bin 61060 -> 0 bytes .../docs/examples/screenshots/offcanvas.jpg | Bin 112583 -> 0 bytes .../docs/examples/screenshots/sign-in.jpg | Bin 13648 -> 0 bytes .../examples/screenshots/starter-template.jpg | Bin 22590 -> 0 bytes .../screenshots/sticky-footer-navbar.jpg | Bin 39249 -> 0 bytes .../examples/screenshots/sticky-footer.jpg | Bin 25056 -> 0 bytes .../docs/examples/screenshots/theme.jpg | Bin 85467 -> 0 bytes .../bootstrap/docs/examples/signin/index.html | 50 - .../bootstrap/docs/examples/signin/signin.css | 40 - .../docs/examples/starter-template/index.html | 68 - .../starter-template/starter-template.css | 7 - .../examples/sticky-footer-navbar/index.html | 87 - .../sticky-footer-navbar.css | 39 - .../docs/examples/sticky-footer/index.html | 51 - .../examples/sticky-footer/sticky-footer.css | 32 - .../bootstrap/docs/examples/theme/index.html | 384 - .../bootstrap/docs/examples/theme/theme.css | 14 - .../bootstrap/docs/getting-started.html | 776 - .../node_modules/bootstrap/docs/index.html | 73 - .../bootstrap/docs/jade/customizer-nav.jade | 15 - .../docs/jade/customizer-variables.jade | 21 - .../bootstrap/docs/javascript.html | 2151 - .../bootstrap/docs/migration.html | 434 - .../fonts/glyphicons-halflings-regular.eot | Bin 20335 -> 0 bytes .../fonts/glyphicons-halflings-regular.svg | 229 - .../fonts/glyphicons-halflings-regular.ttf | Bin 41280 -> 0 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 23320 -> 0 bytes .../node_modules/bootstrap/grunt/.jshintrc | 16 - .../grunt/bs-glyphicons-data-generator.js | 34 - .../bootstrap/grunt/bs-lessdoc-parser.js | 236 - .../bootstrap/grunt/bs-raw-files-generator.js | 31 - .../bootstrap/grunt/shrinkwrap.js | 28 - .../node_modules/bootstrap/js/.jscs.json | 15 - .../node_modules/bootstrap/js/.jshintrc | 14 - .../node_modules/bootstrap/js/affix.js | 137 - .../node_modules/bootstrap/js/alert.js | 88 - .../node_modules/bootstrap/js/button.js | 107 - .../node_modules/bootstrap/js/carousel.js | 205 - .../node_modules/bootstrap/js/collapse.js | 170 - .../node_modules/bootstrap/js/dropdown.js | 147 - .../node_modules/bootstrap/js/modal.js | 243 - .../node_modules/bootstrap/js/popover.js | 110 - .../node_modules/bootstrap/js/scrollspy.js | 153 - .../node_modules/bootstrap/js/tab.js | 125 - .../bootstrap/js/tests/index.html | 54 - .../bootstrap/js/tests/unit/affix.js | 50 - .../bootstrap/js/tests/unit/alert.js | 62 - .../bootstrap/js/tests/unit/button.js | 122 - .../bootstrap/js/tests/unit/carousel.js | 110 - .../bootstrap/js/tests/unit/collapse.js | 164 - .../bootstrap/js/tests/unit/dropdown.js | 218 - .../bootstrap/js/tests/unit/modal.js | 195 - .../bootstrap/js/tests/unit/phantom.js | 69 - .../bootstrap/js/tests/unit/popover.js | 133 - .../bootstrap/js/tests/unit/scrollspy.js | 36 - .../bootstrap/js/tests/unit/tab.js | 86 - .../bootstrap/js/tests/unit/tooltip.js | 432 - .../bootstrap/js/tests/vendor/jquery.js | 4 - .../bootstrap/js/tests/vendor/qunit.css | 245 - .../bootstrap/js/tests/vendor/qunit.js | 2210 -- .../node_modules/bootstrap/js/tooltip.js | 399 - .../node_modules/bootstrap/js/transition.js | 48 - .../node_modules/bootstrap/less/.csscomb.json | 297 - .../node_modules/bootstrap/less/.csslintrc | 19 - .../node_modules/bootstrap/less/alerts.less | 67 - .../node_modules/bootstrap/less/badges.less | 55 - .../bootstrap/less/bootstrap.less | 49 - .../bootstrap/less/breadcrumbs.less | 26 - .../bootstrap/less/button-groups.less | 226 - .../node_modules/bootstrap/less/buttons.less | 159 - .../node_modules/bootstrap/less/carousel.less | 232 - .../node_modules/bootstrap/less/close.less | 33 - .../node_modules/bootstrap/less/code.less | 63 - .../bootstrap/less/component-animations.less | 29 - .../bootstrap/less/dropdowns.less | 213 - .../node_modules/bootstrap/less/forms.less | 438 - .../bootstrap/less/glyphicons.less | 233 - .../node_modules/bootstrap/less/grid.less | 84 - .../bootstrap/less/input-groups.less | 162 - .../bootstrap/less/jumbotron.less | 44 - .../node_modules/bootstrap/less/labels.less | 64 - .../bootstrap/less/list-group.less | 110 - .../node_modules/bootstrap/less/media.less | 56 - .../node_modules/bootstrap/less/mixins.less | 929 - .../node_modules/bootstrap/less/modals.less | 139 - .../node_modules/bootstrap/less/navbar.less | 616 - .../node_modules/bootstrap/less/navs.less | 242 - .../bootstrap/less/normalize.less | 423 - .../node_modules/bootstrap/less/pager.less | 55 - .../bootstrap/less/pagination.less | 88 - .../node_modules/bootstrap/less/panels.less | 241 - .../node_modules/bootstrap/less/popovers.less | 133 - .../node_modules/bootstrap/less/print.less | 101 - .../bootstrap/less/progress-bars.less | 80 - .../bootstrap/less/responsive-utilities.less | 92 - .../bootstrap/less/scaffolding.less | 134 - .../node_modules/bootstrap/less/tables.less | 233 - .../node_modules/bootstrap/less/theme.less | 247 - .../bootstrap/less/thumbnails.less | 36 - .../node_modules/bootstrap/less/tooltip.less | 95 - .../node_modules/bootstrap/less/type.less | 293 - .../bootstrap/less/utilities.less | 56 - .../bootstrap/less/variables.less | 829 - .../node_modules/bootstrap/less/wells.less | 29 - .../node_modules/bootstrap/package.json | 100 - .../bootstrap/test-infra/README.md | 100 - .../test-infra/npm-shrinkwrap.canonical.json | 1 - .../bootstrap/test-infra/requirements.txt | 1 - .../bootstrap/test-infra/s3_cache.py | 107 - .../bootstrap/test-infra/sauce_browsers.yml | 83 - .../test-infra/uncached-npm-install.sh | 4 - static/node_modules/videogular/package.json | 131 - static/package-lock.json | 11485 ++++-- 1291 files changed, 7808 insertions(+), 349947 deletions(-) delete mode 100644 static/node_modules/angular-animate/LICENSE.md delete mode 100644 static/node_modules/angular-animate/README.md delete mode 100644 static/node_modules/angular-animate/index.js delete mode 100644 static/node_modules/angular-chart.js/.codeclimate.yml delete mode 100644 static/node_modules/angular-chart.js/.dockerignore delete mode 100644 static/node_modules/angular-chart.js/.editorconfig delete mode 100644 static/node_modules/angular-chart.js/.jscsrc delete mode 100644 static/node_modules/angular-chart.js/.jshintignore delete mode 100644 static/node_modules/angular-chart.js/.jshintrc delete mode 100644 static/node_modules/angular-chart.js/.node-version delete mode 100644 static/node_modules/angular-chart.js/.npmignore delete mode 100644 static/node_modules/angular-chart.js/.travis.yml delete mode 100644 static/node_modules/angular-chart.js/CONTRIBUTING.md delete mode 100644 static/node_modules/angular-chart.js/Dockerfile delete mode 100644 static/node_modules/angular-chart.js/ISSUE_TEMPLATE.md delete mode 100644 static/node_modules/angular-chart.js/LICENSE delete mode 100644 static/node_modules/angular-chart.js/PULL_REQUEST_TEMPLATE.md delete mode 100644 static/node_modules/angular-chart.js/README.md delete mode 100644 static/node_modules/angular-chart.js/angular-chart.js delete mode 100644 static/node_modules/angular-chart.js/bower.json delete mode 100644 static/node_modules/angular-chart.js/dist/angular-chart.js delete mode 100644 static/node_modules/angular-chart.js/dist/angular-chart.js.tar.gz delete mode 100644 static/node_modules/angular-chart.js/dist/angular-chart.min.js delete mode 100644 static/node_modules/angular-chart.js/dist/angular-chart.min.js.map delete mode 100644 static/node_modules/angular-chart.js/examples/amd.html delete mode 100644 static/node_modules/angular-chart.js/examples/amd.js delete mode 100644 static/node_modules/angular-chart.js/examples/app.css delete mode 100644 static/node_modules/angular-chart.js/examples/app.js delete mode 100644 static/node_modules/angular-chart.js/examples/bubble.html delete mode 100644 static/node_modules/angular-chart.js/examples/bubble.js delete mode 100644 static/node_modules/angular-chart.js/examples/charts.html delete mode 100644 static/node_modules/angular-chart.js/examples/charts.template.html delete mode 100644 static/node_modules/angular-chart.js/examples/commonjs.html delete mode 100644 static/node_modules/angular-chart.js/examples/commonjs.js delete mode 100644 static/node_modules/angular-chart.js/examples/dataset-override.html delete mode 100644 static/node_modules/angular-chart.js/examples/dataset-override.js delete mode 100644 static/node_modules/angular-chart.js/examples/scatter.html delete mode 100644 static/node_modules/angular-chart.js/examples/scatter.js delete mode 100644 static/node_modules/angular-chart.js/examples/smoothscroll.min.js delete mode 100644 static/node_modules/angular-chart.js/examples/stacked-bars.html delete mode 100644 static/node_modules/angular-chart.js/examples/tables.html delete mode 100644 static/node_modules/angular-chart.js/examples/tabs.html delete mode 100644 static/node_modules/angular-chart.js/examples/ticks.html delete mode 100644 static/node_modules/angular-chart.js/examples/webpack.commonjs.js delete mode 100644 static/node_modules/angular-chart.js/examples/webpack.config.js delete mode 100644 static/node_modules/angular-chart.js/examples/xy.html delete mode 100644 static/node_modules/angular-chart.js/examples/xy.js delete mode 100644 static/node_modules/angular-chart.js/gulpfile.js delete mode 100644 static/node_modules/angular-chart.js/package.json delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/29-tabs.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/29-tabs.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/29-tabs.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/bubble.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/bubble.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/bubble.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/charts.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/charts.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/charts.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/coverage.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/custom-directive.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/custom-directive.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/custom-directive.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/dataset-override.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/dataset-override.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/dataset-override.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/options-override.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/options-override.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/options-override.png delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/scatter.html delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/scatter.js delete mode 100644 static/node_modules/angular-chart.js/test/fixtures/scatter.png delete mode 100644 static/node_modules/angular-chart.js/test/index.html delete mode 100644 static/node_modules/angular-chart.js/test/mocha.opts delete mode 100644 static/node_modules/angular-chart.js/test/support/setup.js delete mode 100644 static/node_modules/angular-chart.js/test/test.integration.js delete mode 100644 static/node_modules/angular-chart.js/test/test.unit.js delete mode 100644 static/node_modules/angular-chart.js/tmp/Dockerfile-alpine delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/CONTRIBUTING.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/LICENSE.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/MAINTAINING.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/README.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/bower.json delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/composer.json delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/config.jshintrc delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.bundle.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.bundle.min.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.min.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/00-Getting-Started.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/01-Chart-Configuration.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/02-Scales.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/03-Line-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/04-Bar-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/05-Radar-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/06-Polar-Area-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/07-Pie-Doughnut-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/08-Bubble-Chart.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/09-Advanced.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/10-Notes.md delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/gulpfile.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.ci.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.coverage.conf.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/package.json delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/AnimationCallbacks/progress-bar.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-horizontal.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-multi-axis.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-stacked.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bubble.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/combo-bar-line.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/data_label_combo-bar-line.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/different-point-sizes.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/doughnut.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-cubicInterpolationMode.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-customTooltips.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-legend.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-logarithmic.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multi-axis.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multiline-labels.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-non-numeric-y.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-skip-points.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stacked-area.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stepped.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-x-axis-filter.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie-customTooltips.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/polar-area.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar-skip-points.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-logX.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-multi-axis.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/combo-time-scale.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-point-data.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-scale.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/tooltip-hooks.html delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/scripts/release.sh delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/chart.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bar.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bubble.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Doughnut.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Line.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.PolarArea.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Radar.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Scatter.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bar.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bubble.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.doughnut.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.line.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.polarArea.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.radar.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.animation.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.canvasHelpers.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.controller.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.datasetController.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.element.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.helpers.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.layoutService.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.legend.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.plugin.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.scale.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.scaleService.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.title.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.tooltip.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/elements/element.arc.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/elements/element.line.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/elements/element.point.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/elements/element.rectangle.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.category.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.linear.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.linearbase.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.logarithmic.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.radialLinear.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/scales/scale.time.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.bar.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.bubble.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.doughnut.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.line.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.polarArea.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/controller.radar.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.element.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.helpers.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.layoutService.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.legend.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.plugin.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.scaleService.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.title.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/core.tooltip.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/defaultConfig.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/element.arc.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/element.line.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/element.point.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/element.rectangle.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/mockContext.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/scale.category.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/scale.linear.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/scale.logarithmic.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/scale.radialLinear.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/test/scale.time.tests.js delete mode 100644 static/node_modules/angular-chart.js/tmp/bower_components/chart.js/thankyou.md delete mode 100644 static/node_modules/angular-chart.js/tmp/gradient.html delete mode 100644 static/node_modules/angular-chart.js/tmp/gradient.js delete mode 100644 static/node_modules/angular-route/LICENSE.md delete mode 100644 static/node_modules/angular-route/README.md delete mode 100644 static/node_modules/angular-route/index.js delete mode 100644 static/node_modules/angular-sanitize/LICENSE.md delete mode 100644 static/node_modules/angular-sanitize/README.md delete mode 100644 static/node_modules/angular-sanitize/index.js delete mode 100644 static/node_modules/angular/LICENSE.md delete mode 100644 static/node_modules/angular/README.md delete mode 100644 static/node_modules/angular/angular-csp.css delete mode 100644 static/node_modules/angular/angular.js delete mode 100644 static/node_modules/angular/angular.min.js delete mode 100644 static/node_modules/angular/angular.min.js.gzip delete mode 100644 static/node_modules/angular/angular.min.js.map delete mode 100644 static/node_modules/angular/bower.json delete mode 100644 static/node_modules/angular/index.js delete mode 100644 static/node_modules/angular/package.json delete mode 100644 static/node_modules/angulartics/.bowerrc delete mode 100644 static/node_modules/angulartics/.npmignore delete mode 100644 static/node_modules/angulartics/CHANGELOG.md delete mode 100644 static/node_modules/angulartics/Gruntfile.js delete mode 100644 static/node_modules/angulartics/LICENSE delete mode 100644 static/node_modules/angulartics/README.md delete mode 100644 static/node_modules/angulartics/bower.json delete mode 100644 static/node_modules/angulartics/dist/angulartics-adobe.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-baidu.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-chartbeat.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-cnzz.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-debug.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-flurry.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-ga-cordova-google-analytics-plugin.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-ga-cordova.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-ga.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-gtm-cordova.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-gtm.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-hubspot.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-intercom.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-kissmetrics.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-localytics.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-loggly.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-marketo.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-mixpanel.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-piwik.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-scroll.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-segmentio.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-splunk.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics-woopra.min.js delete mode 100644 static/node_modules/angulartics/dist/angulartics.min.js delete mode 100644 static/node_modules/angulartics/karma.conf.js delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.adobe.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.baidu.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.chartbeat.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.cnzz.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.core.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.debug.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.flurry.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.ga.cordova-google-analytics-plugin.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.ga.cordova.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.ga.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.gtm.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.hubspot.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.intercom.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.kissmetrics.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.localytics.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.loggly.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.marketo.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.mixpanel.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.piwik.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.scroll.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.segmentio.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.splunk.nuspec delete mode 100644 static/node_modules/angulartics/nuget/angular.analytics.woopra.nuspec delete mode 100644 static/node_modules/angulartics/package.json delete mode 100644 static/node_modules/angulartics/samples/adobe-analytics.html delete mode 100644 static/node_modules/angulartics/samples/baidu.html delete mode 100644 static/node_modules/angulartics/samples/chartbeat.html delete mode 100644 static/node_modules/angulartics/samples/cnzz.html delete mode 100644 static/node_modules/angulartics/samples/flurry.html delete mode 100644 static/node_modules/angulartics/samples/google-analytics.html delete mode 100644 static/node_modules/angulartics/samples/google-tag-manager.html delete mode 100644 static/node_modules/angulartics/samples/intercom.html delete mode 100644 static/node_modules/angulartics/samples/kissmetrics.html delete mode 100644 static/node_modules/angulartics/samples/localytics.html delete mode 100644 static/node_modules/angulartics/samples/loggly.html delete mode 100644 static/node_modules/angulartics/samples/loggly.tracker.js delete mode 100644 static/node_modules/angulartics/samples/marketo.html delete mode 100644 static/node_modules/angulartics/samples/mixpanel.html delete mode 100644 static/node_modules/angulartics/samples/partials/a.tpl.html delete mode 100644 static/node_modules/angulartics/samples/partials/b.tpl.html delete mode 100644 static/node_modules/angulartics/samples/partials/c.tpl.html delete mode 100644 static/node_modules/angulartics/samples/partials/root.tpl.html delete mode 100644 static/node_modules/angulartics/samples/piwik.html delete mode 100644 static/node_modules/angulartics/samples/scroll.html delete mode 100644 static/node_modules/angulartics/samples/segmentio.html delete mode 100644 static/node_modules/angulartics/samples/splunk.html delete mode 100644 static/node_modules/angulartics/samples/woopra.html delete mode 100644 static/node_modules/angulartics/src/angulartics-adobe.js delete mode 100644 static/node_modules/angulartics/src/angulartics-baidu.js delete mode 100644 static/node_modules/angulartics/src/angulartics-chartbeat.js delete mode 100644 static/node_modules/angulartics/src/angulartics-cnzz.js delete mode 100644 static/node_modules/angulartics/src/angulartics-debug.js delete mode 100644 static/node_modules/angulartics/src/angulartics-flurry.js delete mode 100644 static/node_modules/angulartics/src/angulartics-ga-cordova-google-analytics-plugin.js delete mode 100644 static/node_modules/angulartics/src/angulartics-ga-cordova.js delete mode 100644 static/node_modules/angulartics/src/angulartics-ga.js delete mode 100644 static/node_modules/angulartics/src/angulartics-gtm-cordova.js delete mode 100644 static/node_modules/angulartics/src/angulartics-gtm.js delete mode 100644 static/node_modules/angulartics/src/angulartics-hubspot.js delete mode 100644 static/node_modules/angulartics/src/angulartics-intercom.js delete mode 100644 static/node_modules/angulartics/src/angulartics-kissmetrics.js delete mode 100644 static/node_modules/angulartics/src/angulartics-localytics.js delete mode 100644 static/node_modules/angulartics/src/angulartics-loggly.js delete mode 100644 static/node_modules/angulartics/src/angulartics-marketo.js delete mode 100644 static/node_modules/angulartics/src/angulartics-mixpanel.js delete mode 100644 static/node_modules/angulartics/src/angulartics-piwik.js delete mode 100644 static/node_modules/angulartics/src/angulartics-scroll.js delete mode 100644 static/node_modules/angulartics/src/angulartics-segmentio.js delete mode 100644 static/node_modules/angulartics/src/angulartics-splunk.js delete mode 100644 static/node_modules/angulartics/src/angulartics-woopra.js delete mode 100644 static/node_modules/angulartics/src/angulartics.js delete mode 100644 static/node_modules/angulartics/test/angularticsSpec.js delete mode 100644 static/node_modules/chart.js/.editorconfig delete mode 100644 static/node_modules/chart.js/.eslintignore delete mode 100644 static/node_modules/chart.js/.eslintrc delete mode 100644 static/node_modules/chart.js/.npmignore delete mode 100644 static/node_modules/chart.js/CONTRIBUTING.md delete mode 100644 static/node_modules/chart.js/LICENSE.md delete mode 100644 static/node_modules/chart.js/MAINTAINING.md delete mode 100644 static/node_modules/chart.js/README.md delete mode 100644 static/node_modules/chart.js/bower.json delete mode 100644 static/node_modules/chart.js/composer.json delete mode 100644 static/node_modules/chart.js/config.jshintrc delete mode 100644 static/node_modules/chart.js/dist/Chart.bundle.js delete mode 100644 static/node_modules/chart.js/dist/Chart.bundle.min.js delete mode 100644 static/node_modules/chart.js/dist/Chart.js delete mode 100644 static/node_modules/chart.js/dist/Chart.min.js delete mode 100644 static/node_modules/chart.js/docs/00-Getting-Started.md delete mode 100644 static/node_modules/chart.js/docs/01-Chart-Configuration.md delete mode 100644 static/node_modules/chart.js/docs/02-Scales.md delete mode 100644 static/node_modules/chart.js/docs/03-Line-Chart.md delete mode 100644 static/node_modules/chart.js/docs/04-Bar-Chart.md delete mode 100644 static/node_modules/chart.js/docs/05-Radar-Chart.md delete mode 100644 static/node_modules/chart.js/docs/06-Polar-Area-Chart.md delete mode 100644 static/node_modules/chart.js/docs/07-Pie-Doughnut-Chart.md delete mode 100644 static/node_modules/chart.js/docs/08-Bubble-Chart.md delete mode 100644 static/node_modules/chart.js/docs/09-Advanced.md delete mode 100644 static/node_modules/chart.js/docs/10-Notes.md delete mode 100644 static/node_modules/chart.js/gulpfile.js delete mode 100644 static/node_modules/chart.js/karma.conf.ci.js delete mode 100644 static/node_modules/chart.js/karma.conf.js delete mode 100644 static/node_modules/chart.js/karma.coverage.conf.js delete mode 100644 static/node_modules/chart.js/package.json delete mode 100644 static/node_modules/chart.js/samples/AnimationCallbacks/progress-bar.html delete mode 100644 static/node_modules/chart.js/samples/bar-horizontal.html delete mode 100644 static/node_modules/chart.js/samples/bar-multi-axis.html delete mode 100644 static/node_modules/chart.js/samples/bar-stacked.html delete mode 100644 static/node_modules/chart.js/samples/bar.html delete mode 100644 static/node_modules/chart.js/samples/bubble.html delete mode 100644 static/node_modules/chart.js/samples/combo-bar-line.html delete mode 100644 static/node_modules/chart.js/samples/data_label_combo-bar-line.html delete mode 100644 static/node_modules/chart.js/samples/different-point-sizes.html delete mode 100644 static/node_modules/chart.js/samples/doughnut.html delete mode 100644 static/node_modules/chart.js/samples/line-cubicInterpolationMode.html delete mode 100644 static/node_modules/chart.js/samples/line-customTooltips.html delete mode 100644 static/node_modules/chart.js/samples/line-legend.html delete mode 100644 static/node_modules/chart.js/samples/line-logarithmic.html delete mode 100644 static/node_modules/chart.js/samples/line-multi-axis.html delete mode 100644 static/node_modules/chart.js/samples/line-multiline-labels.html delete mode 100644 static/node_modules/chart.js/samples/line-non-numeric-y.html delete mode 100644 static/node_modules/chart.js/samples/line-skip-points.html delete mode 100644 static/node_modules/chart.js/samples/line-stacked-area.html delete mode 100644 static/node_modules/chart.js/samples/line-stepped.html delete mode 100644 static/node_modules/chart.js/samples/line-x-axis-filter.html delete mode 100644 static/node_modules/chart.js/samples/line.html delete mode 100644 static/node_modules/chart.js/samples/pie-customTooltips.html delete mode 100644 static/node_modules/chart.js/samples/pie.html delete mode 100644 static/node_modules/chart.js/samples/polar-area.html delete mode 100644 static/node_modules/chart.js/samples/radar-skip-points.html delete mode 100644 static/node_modules/chart.js/samples/radar.html delete mode 100644 static/node_modules/chart.js/samples/scatter-logX.html delete mode 100644 static/node_modules/chart.js/samples/scatter-multi-axis.html delete mode 100644 static/node_modules/chart.js/samples/scatter.html delete mode 100644 static/node_modules/chart.js/samples/timeScale/combo-time-scale.html delete mode 100644 static/node_modules/chart.js/samples/timeScale/line-time-point-data.html delete mode 100644 static/node_modules/chart.js/samples/timeScale/line-time-scale.html delete mode 100644 static/node_modules/chart.js/samples/tooltip-hooks.html delete mode 100644 static/node_modules/chart.js/scripts/release.sh delete mode 100644 static/node_modules/chart.js/src/chart.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Bar.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Bubble.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Doughnut.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Line.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.PolarArea.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Radar.js delete mode 100644 static/node_modules/chart.js/src/charts/Chart.Scatter.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.bar.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.bubble.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.doughnut.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.line.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.polarArea.js delete mode 100644 static/node_modules/chart.js/src/controllers/controller.radar.js delete mode 100644 static/node_modules/chart.js/src/core/core.animation.js delete mode 100644 static/node_modules/chart.js/src/core/core.canvasHelpers.js delete mode 100644 static/node_modules/chart.js/src/core/core.controller.js delete mode 100644 static/node_modules/chart.js/src/core/core.datasetController.js delete mode 100644 static/node_modules/chart.js/src/core/core.element.js delete mode 100644 static/node_modules/chart.js/src/core/core.helpers.js delete mode 100644 static/node_modules/chart.js/src/core/core.js delete mode 100644 static/node_modules/chart.js/src/core/core.layoutService.js delete mode 100644 static/node_modules/chart.js/src/core/core.legend.js delete mode 100644 static/node_modules/chart.js/src/core/core.plugin.js delete mode 100644 static/node_modules/chart.js/src/core/core.scale.js delete mode 100644 static/node_modules/chart.js/src/core/core.scaleService.js delete mode 100644 static/node_modules/chart.js/src/core/core.title.js delete mode 100644 static/node_modules/chart.js/src/core/core.tooltip.js delete mode 100644 static/node_modules/chart.js/src/elements/element.arc.js delete mode 100644 static/node_modules/chart.js/src/elements/element.line.js delete mode 100644 static/node_modules/chart.js/src/elements/element.point.js delete mode 100644 static/node_modules/chart.js/src/elements/element.rectangle.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.category.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.linear.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.linearbase.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.logarithmic.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.radialLinear.js delete mode 100644 static/node_modules/chart.js/src/scales/scale.time.js delete mode 100644 static/node_modules/chart.js/test/controller.bar.tests.js delete mode 100644 static/node_modules/chart.js/test/controller.bubble.tests.js delete mode 100644 static/node_modules/chart.js/test/controller.doughnut.tests.js delete mode 100644 static/node_modules/chart.js/test/controller.line.tests.js delete mode 100644 static/node_modules/chart.js/test/controller.polarArea.tests.js delete mode 100644 static/node_modules/chart.js/test/controller.radar.tests.js delete mode 100644 static/node_modules/chart.js/test/core.element.tests.js delete mode 100644 static/node_modules/chart.js/test/core.helpers.tests.js delete mode 100644 static/node_modules/chart.js/test/core.layoutService.tests.js delete mode 100644 static/node_modules/chart.js/test/core.legend.tests.js delete mode 100644 static/node_modules/chart.js/test/core.plugin.tests.js delete mode 100644 static/node_modules/chart.js/test/core.scaleService.tests.js delete mode 100644 static/node_modules/chart.js/test/core.title.tests.js delete mode 100644 static/node_modules/chart.js/test/core.tooltip.tests.js delete mode 100644 static/node_modules/chart.js/test/defaultConfig.tests.js delete mode 100644 static/node_modules/chart.js/test/element.arc.tests.js delete mode 100644 static/node_modules/chart.js/test/element.line.tests.js delete mode 100644 static/node_modules/chart.js/test/element.point.tests.js delete mode 100644 static/node_modules/chart.js/test/element.rectangle.tests.js delete mode 100644 static/node_modules/chart.js/test/mockContext.js delete mode 100644 static/node_modules/chart.js/test/scale.category.tests.js delete mode 100644 static/node_modules/chart.js/test/scale.linear.tests.js delete mode 100644 static/node_modules/chart.js/test/scale.logarithmic.tests.js delete mode 100644 static/node_modules/chart.js/test/scale.radialLinear.tests.js delete mode 100644 static/node_modules/chart.js/test/scale.time.tests.js delete mode 100644 static/node_modules/chart.js/thankyou.md delete mode 100644 static/node_modules/chartjs-color-string/.travis.yml delete mode 100644 static/node_modules/chartjs-color-string/CHANGELOG.md delete mode 100644 static/node_modules/chartjs-color-string/LICENSE delete mode 100644 static/node_modules/chartjs-color-string/README.md delete mode 100644 static/node_modules/chartjs-color-string/color-string.js delete mode 100644 static/node_modules/chartjs-color-string/package.json delete mode 100644 static/node_modules/chartjs-color-string/test/basic.js delete mode 100644 static/node_modules/chartjs-color/CHANGELOG.md delete mode 100644 static/node_modules/chartjs-color/LICENSE delete mode 100644 static/node_modules/chartjs-color/README.md delete mode 100644 static/node_modules/chartjs-color/index.js delete mode 100644 static/node_modules/chartjs-color/package.json delete mode 100644 static/node_modules/color-convert/.travis.yml delete mode 100644 static/node_modules/color-convert/CHANGELOG.md delete mode 100644 static/node_modules/color-convert/LICENSE delete mode 100644 static/node_modules/color-convert/README.md delete mode 100644 static/node_modules/color-convert/component.json delete mode 100644 static/node_modules/color-convert/conversions.js delete mode 100644 static/node_modules/color-convert/index.js delete mode 100644 static/node_modules/color-convert/package.json delete mode 100644 static/node_modules/color-convert/test/basic.js delete mode 100644 static/node_modules/color-convert/test/speed.js delete mode 100644 static/node_modules/color-name/LICENSE delete mode 100644 static/node_modules/color-name/README.md delete mode 100644 static/node_modules/color-name/index.js delete mode 100644 static/node_modules/color-name/package.json delete mode 100644 static/node_modules/color-name/test.js delete mode 100644 static/node_modules/es5-shim/.npmignore delete mode 100644 static/node_modules/es5-shim/CHANGES delete mode 100644 static/node_modules/es5-shim/CONTRIBUTORS.md delete mode 100644 static/node_modules/es5-shim/LICENSE delete mode 100644 static/node_modules/es5-shim/README.md delete mode 100644 static/node_modules/es5-shim/es5-sham.js delete mode 100644 static/node_modules/es5-shim/es5-sham.map delete mode 100644 static/node_modules/es5-shim/es5-sham.min.js delete mode 100644 static/node_modules/es5-shim/es5-shim.js delete mode 100644 static/node_modules/es5-shim/es5-shim.map delete mode 100644 static/node_modules/es5-shim/es5-shim.min.js delete mode 100644 static/node_modules/es5-shim/package.json delete mode 100644 static/node_modules/es5-shim/tests/helpers/h-kill.js delete mode 100644 static/node_modules/es5-shim/tests/helpers/h-matchers.js delete mode 100644 static/node_modules/es5-shim/tests/helpers/h.js delete mode 100644 static/node_modules/es5-shim/tests/index.html delete mode 100644 static/node_modules/es5-shim/tests/index.min.html delete mode 100644 static/node_modules/es5-shim/tests/lib/jasmine-html.js delete mode 100644 static/node_modules/es5-shim/tests/lib/jasmine.css delete mode 100644 static/node_modules/es5-shim/tests/lib/jasmine.js delete mode 100644 static/node_modules/es5-shim/tests/lib/jasmine_favicon.png delete mode 100644 static/node_modules/es5-shim/tests/lib/json2.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-array.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-date.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-function.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-number.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-object.js delete mode 100644 static/node_modules/es5-shim/tests/spec/s-string.js delete mode 100644 static/node_modules/jquery/AUTHORS.txt delete mode 100644 static/node_modules/jquery/LICENSE.txt delete mode 100644 static/node_modules/jquery/README.md delete mode 100644 static/node_modules/jquery/bower.json delete mode 100644 static/node_modules/jquery/dist/core.js delete mode 100644 static/node_modules/jquery/dist/jquery.js delete mode 100644 static/node_modules/jquery/dist/jquery.min.js delete mode 100644 static/node_modules/jquery/dist/jquery.min.map delete mode 100644 static/node_modules/jquery/dist/jquery.slim.js delete mode 100644 static/node_modules/jquery/dist/jquery.slim.min.js delete mode 100644 static/node_modules/jquery/dist/jquery.slim.min.map delete mode 100644 static/node_modules/jquery/external/sizzle/LICENSE.txt delete mode 100644 static/node_modules/jquery/external/sizzle/dist/sizzle.js delete mode 100644 static/node_modules/jquery/external/sizzle/dist/sizzle.min.js delete mode 100644 static/node_modules/jquery/external/sizzle/dist/sizzle.min.map delete mode 100644 static/node_modules/jquery/package.json delete mode 100644 static/node_modules/jquery/src/ajax.js delete mode 100644 static/node_modules/jquery/src/ajax/jsonp.js delete mode 100644 static/node_modules/jquery/src/ajax/load.js delete mode 100644 static/node_modules/jquery/src/ajax/parseXML.js delete mode 100644 static/node_modules/jquery/src/ajax/script.js delete mode 100644 static/node_modules/jquery/src/ajax/var/location.js delete mode 100644 static/node_modules/jquery/src/ajax/var/nonce.js delete mode 100644 static/node_modules/jquery/src/ajax/var/rquery.js delete mode 100644 static/node_modules/jquery/src/ajax/xhr.js delete mode 100644 static/node_modules/jquery/src/attributes.js delete mode 100644 static/node_modules/jquery/src/attributes/attr.js delete mode 100644 static/node_modules/jquery/src/attributes/classes.js delete mode 100644 static/node_modules/jquery/src/attributes/prop.js delete mode 100644 static/node_modules/jquery/src/attributes/support.js delete mode 100644 static/node_modules/jquery/src/attributes/val.js delete mode 100644 static/node_modules/jquery/src/callbacks.js delete mode 100644 static/node_modules/jquery/src/core.js delete mode 100644 static/node_modules/jquery/src/core/DOMEval.js delete mode 100644 static/node_modules/jquery/src/core/access.js delete mode 100644 static/node_modules/jquery/src/core/init.js delete mode 100644 static/node_modules/jquery/src/core/nodeName.js delete mode 100644 static/node_modules/jquery/src/core/parseHTML.js delete mode 100644 static/node_modules/jquery/src/core/ready-no-deferred.js delete mode 100644 static/node_modules/jquery/src/core/ready.js delete mode 100644 static/node_modules/jquery/src/core/readyException.js delete mode 100644 static/node_modules/jquery/src/core/stripAndCollapse.js delete mode 100644 static/node_modules/jquery/src/core/support.js delete mode 100644 static/node_modules/jquery/src/core/var/rsingleTag.js delete mode 100644 static/node_modules/jquery/src/css.js delete mode 100644 static/node_modules/jquery/src/css/addGetHookIf.js delete mode 100644 static/node_modules/jquery/src/css/adjustCSS.js delete mode 100644 static/node_modules/jquery/src/css/curCSS.js delete mode 100644 static/node_modules/jquery/src/css/hiddenVisibleSelectors.js delete mode 100644 static/node_modules/jquery/src/css/showHide.js delete mode 100644 static/node_modules/jquery/src/css/support.js delete mode 100644 static/node_modules/jquery/src/css/var/cssExpand.js delete mode 100644 static/node_modules/jquery/src/css/var/getStyles.js delete mode 100644 static/node_modules/jquery/src/css/var/isHiddenWithinTree.js delete mode 100644 static/node_modules/jquery/src/css/var/rnumnonpx.js delete mode 100644 static/node_modules/jquery/src/css/var/swap.js delete mode 100644 static/node_modules/jquery/src/data.js delete mode 100644 static/node_modules/jquery/src/data/Data.js delete mode 100644 static/node_modules/jquery/src/data/var/acceptData.js delete mode 100644 static/node_modules/jquery/src/data/var/dataPriv.js delete mode 100644 static/node_modules/jquery/src/data/var/dataUser.js delete mode 100644 static/node_modules/jquery/src/deferred.js delete mode 100644 static/node_modules/jquery/src/deferred/exceptionHook.js delete mode 100644 static/node_modules/jquery/src/deprecated.js delete mode 100644 static/node_modules/jquery/src/dimensions.js delete mode 100644 static/node_modules/jquery/src/effects.js delete mode 100644 static/node_modules/jquery/src/effects/Tween.js delete mode 100644 static/node_modules/jquery/src/effects/animatedSelector.js delete mode 100644 static/node_modules/jquery/src/event.js delete mode 100644 static/node_modules/jquery/src/event/ajax.js delete mode 100644 static/node_modules/jquery/src/event/alias.js delete mode 100644 static/node_modules/jquery/src/event/focusin.js delete mode 100644 static/node_modules/jquery/src/event/support.js delete mode 100644 static/node_modules/jquery/src/event/trigger.js delete mode 100644 static/node_modules/jquery/src/exports/amd.js delete mode 100644 static/node_modules/jquery/src/exports/global.js delete mode 100644 static/node_modules/jquery/src/jquery.js delete mode 100644 static/node_modules/jquery/src/manipulation.js delete mode 100644 static/node_modules/jquery/src/manipulation/_evalUrl.js delete mode 100644 static/node_modules/jquery/src/manipulation/buildFragment.js delete mode 100644 static/node_modules/jquery/src/manipulation/getAll.js delete mode 100644 static/node_modules/jquery/src/manipulation/setGlobalEval.js delete mode 100644 static/node_modules/jquery/src/manipulation/support.js delete mode 100644 static/node_modules/jquery/src/manipulation/var/rscriptType.js delete mode 100644 static/node_modules/jquery/src/manipulation/var/rtagName.js delete mode 100644 static/node_modules/jquery/src/manipulation/wrapMap.js delete mode 100644 static/node_modules/jquery/src/offset.js delete mode 100644 static/node_modules/jquery/src/queue.js delete mode 100644 static/node_modules/jquery/src/queue/delay.js delete mode 100644 static/node_modules/jquery/src/selector-native.js delete mode 100644 static/node_modules/jquery/src/selector-sizzle.js delete mode 100644 static/node_modules/jquery/src/selector.js delete mode 100644 static/node_modules/jquery/src/serialize.js delete mode 100644 static/node_modules/jquery/src/traversing.js delete mode 100644 static/node_modules/jquery/src/traversing/findFilter.js delete mode 100644 static/node_modules/jquery/src/traversing/var/dir.js delete mode 100644 static/node_modules/jquery/src/traversing/var/rneedsContext.js delete mode 100644 static/node_modules/jquery/src/traversing/var/siblings.js delete mode 100644 static/node_modules/jquery/src/var/ObjectFunctionString.js delete mode 100644 static/node_modules/jquery/src/var/arr.js delete mode 100644 static/node_modules/jquery/src/var/class2type.js delete mode 100644 static/node_modules/jquery/src/var/concat.js delete mode 100644 static/node_modules/jquery/src/var/document.js delete mode 100644 static/node_modules/jquery/src/var/documentElement.js delete mode 100644 static/node_modules/jquery/src/var/fnToString.js delete mode 100644 static/node_modules/jquery/src/var/getProto.js delete mode 100644 static/node_modules/jquery/src/var/hasOwn.js delete mode 100644 static/node_modules/jquery/src/var/indexOf.js delete mode 100644 static/node_modules/jquery/src/var/pnum.js delete mode 100644 static/node_modules/jquery/src/var/push.js delete mode 100644 static/node_modules/jquery/src/var/rcssNum.js delete mode 100644 static/node_modules/jquery/src/var/rnothtmlwhite.js delete mode 100644 static/node_modules/jquery/src/var/slice.js delete mode 100644 static/node_modules/jquery/src/var/support.js delete mode 100644 static/node_modules/jquery/src/var/toString.js delete mode 100644 static/node_modules/jquery/src/wrap.js delete mode 100644 static/node_modules/json3/.gitmodules delete mode 100644 static/node_modules/json3/.jamignore delete mode 100644 static/node_modules/json3/.npmignore delete mode 100644 static/node_modules/json3/.travis.yml delete mode 100644 static/node_modules/json3/LICENSE delete mode 100644 static/node_modules/json3/README.md delete mode 100644 static/node_modules/json3/coverage/coverage.json delete mode 100644 static/node_modules/json3/coverage/lcov-report/lib/json3.js.html delete mode 100644 static/node_modules/json3/coverage/lcov-report/prettify.css delete mode 100644 static/node_modules/json3/coverage/lcov-report/prettify.js delete mode 100644 static/node_modules/json3/coverage/lcov.info delete mode 100644 static/node_modules/json3/lib/json3.js delete mode 100644 static/node_modules/json3/lib/json3.min.js delete mode 100644 static/node_modules/json3/package.json delete mode 100644 static/node_modules/moment/CHANGELOG.md delete mode 100644 static/node_modules/moment/LICENSE delete mode 100644 static/node_modules/moment/README.md delete mode 100644 static/node_modules/moment/ender.js delete mode 100644 static/node_modules/moment/locale/af.js delete mode 100644 static/node_modules/moment/locale/ar-ma.js delete mode 100644 static/node_modules/moment/locale/ar-sa.js delete mode 100644 static/node_modules/moment/locale/ar-tn.js delete mode 100644 static/node_modules/moment/locale/ar.js delete mode 100644 static/node_modules/moment/locale/az.js delete mode 100644 static/node_modules/moment/locale/be.js delete mode 100644 static/node_modules/moment/locale/bg.js delete mode 100644 static/node_modules/moment/locale/bn.js delete mode 100644 static/node_modules/moment/locale/bo.js delete mode 100644 static/node_modules/moment/locale/br.js delete mode 100644 static/node_modules/moment/locale/bs.js delete mode 100644 static/node_modules/moment/locale/ca.js delete mode 100644 static/node_modules/moment/locale/cs.js delete mode 100644 static/node_modules/moment/locale/cv.js delete mode 100644 static/node_modules/moment/locale/cy.js delete mode 100644 static/node_modules/moment/locale/da.js delete mode 100644 static/node_modules/moment/locale/de-at.js delete mode 100644 static/node_modules/moment/locale/de.js delete mode 100644 static/node_modules/moment/locale/dv.js delete mode 100644 static/node_modules/moment/locale/el.js delete mode 100644 static/node_modules/moment/locale/en-au.js delete mode 100644 static/node_modules/moment/locale/en-ca.js delete mode 100644 static/node_modules/moment/locale/en-gb.js delete mode 100644 static/node_modules/moment/locale/en-ie.js delete mode 100644 static/node_modules/moment/locale/en-nz.js delete mode 100644 static/node_modules/moment/locale/eo.js delete mode 100644 static/node_modules/moment/locale/es-do.js delete mode 100644 static/node_modules/moment/locale/es.js delete mode 100644 static/node_modules/moment/locale/et.js delete mode 100644 static/node_modules/moment/locale/eu.js delete mode 100644 static/node_modules/moment/locale/fa.js delete mode 100644 static/node_modules/moment/locale/fi.js delete mode 100644 static/node_modules/moment/locale/fo.js delete mode 100644 static/node_modules/moment/locale/fr-ca.js delete mode 100644 static/node_modules/moment/locale/fr-ch.js delete mode 100644 static/node_modules/moment/locale/fr.js delete mode 100644 static/node_modules/moment/locale/fy.js delete mode 100644 static/node_modules/moment/locale/gd.js delete mode 100644 static/node_modules/moment/locale/gl.js delete mode 100644 static/node_modules/moment/locale/he.js delete mode 100644 static/node_modules/moment/locale/hi.js delete mode 100644 static/node_modules/moment/locale/hr.js delete mode 100644 static/node_modules/moment/locale/hu.js delete mode 100644 static/node_modules/moment/locale/hy-am.js delete mode 100644 static/node_modules/moment/locale/id.js delete mode 100644 static/node_modules/moment/locale/is.js delete mode 100644 static/node_modules/moment/locale/it.js delete mode 100644 static/node_modules/moment/locale/ja.js delete mode 100644 static/node_modules/moment/locale/jv.js delete mode 100644 static/node_modules/moment/locale/ka.js delete mode 100644 static/node_modules/moment/locale/kk.js delete mode 100644 static/node_modules/moment/locale/km.js delete mode 100644 static/node_modules/moment/locale/ko.js delete mode 100644 static/node_modules/moment/locale/ky.js delete mode 100644 static/node_modules/moment/locale/lb.js delete mode 100644 static/node_modules/moment/locale/lo.js delete mode 100644 static/node_modules/moment/locale/lt.js delete mode 100644 static/node_modules/moment/locale/lv.js delete mode 100644 static/node_modules/moment/locale/me.js delete mode 100644 static/node_modules/moment/locale/mk.js delete mode 100644 static/node_modules/moment/locale/ml.js delete mode 100644 static/node_modules/moment/locale/mr.js delete mode 100644 static/node_modules/moment/locale/ms-my.js delete mode 100644 static/node_modules/moment/locale/ms.js delete mode 100644 static/node_modules/moment/locale/my.js delete mode 100644 static/node_modules/moment/locale/nb.js delete mode 100644 static/node_modules/moment/locale/ne.js delete mode 100644 static/node_modules/moment/locale/nl.js delete mode 100644 static/node_modules/moment/locale/nn.js delete mode 100644 static/node_modules/moment/locale/pa-in.js delete mode 100644 static/node_modules/moment/locale/pl.js delete mode 100644 static/node_modules/moment/locale/pt-br.js delete mode 100644 static/node_modules/moment/locale/pt.js delete mode 100644 static/node_modules/moment/locale/ro.js delete mode 100644 static/node_modules/moment/locale/ru.js delete mode 100644 static/node_modules/moment/locale/se.js delete mode 100644 static/node_modules/moment/locale/si.js delete mode 100644 static/node_modules/moment/locale/sk.js delete mode 100644 static/node_modules/moment/locale/sl.js delete mode 100644 static/node_modules/moment/locale/sq.js delete mode 100644 static/node_modules/moment/locale/sr-cyrl.js delete mode 100644 static/node_modules/moment/locale/sr.js delete mode 100644 static/node_modules/moment/locale/ss.js delete mode 100644 static/node_modules/moment/locale/sv.js delete mode 100644 static/node_modules/moment/locale/sw.js delete mode 100644 static/node_modules/moment/locale/ta.js delete mode 100644 static/node_modules/moment/locale/te.js delete mode 100644 static/node_modules/moment/locale/th.js delete mode 100644 static/node_modules/moment/locale/tl-ph.js delete mode 100644 static/node_modules/moment/locale/tlh.js delete mode 100644 static/node_modules/moment/locale/tr.js delete mode 100644 static/node_modules/moment/locale/tzl.js delete mode 100644 static/node_modules/moment/locale/tzm-latn.js delete mode 100644 static/node_modules/moment/locale/tzm.js delete mode 100644 static/node_modules/moment/locale/uk.js delete mode 100644 static/node_modules/moment/locale/uz.js delete mode 100644 static/node_modules/moment/locale/vi.js delete mode 100644 static/node_modules/moment/locale/x-pseudo.js delete mode 100644 static/node_modules/moment/locale/zh-cn.js delete mode 100644 static/node_modules/moment/locale/zh-tw.js delete mode 100644 static/node_modules/moment/min/locales.js delete mode 100644 static/node_modules/moment/min/locales.min.js delete mode 100644 static/node_modules/moment/min/moment-with-locales.js delete mode 100644 static/node_modules/moment/min/moment-with-locales.min.js delete mode 100644 static/node_modules/moment/min/moment.min.js delete mode 100644 static/node_modules/moment/moment.d.ts delete mode 100644 static/node_modules/moment/moment.js delete mode 100644 static/node_modules/moment/package.js delete mode 100644 static/node_modules/moment/package.json delete mode 100644 static/node_modules/moment/src/lib/create/check-overflow.js delete mode 100644 static/node_modules/moment/src/lib/create/date-from-array.js delete mode 100644 static/node_modules/moment/src/lib/create/from-anything.js delete mode 100644 static/node_modules/moment/src/lib/create/from-array.js delete mode 100644 static/node_modules/moment/src/lib/create/from-object.js delete mode 100644 static/node_modules/moment/src/lib/create/from-string-and-array.js delete mode 100644 static/node_modules/moment/src/lib/create/from-string-and-format.js delete mode 100644 static/node_modules/moment/src/lib/create/from-string.js delete mode 100644 static/node_modules/moment/src/lib/create/local.js delete mode 100644 static/node_modules/moment/src/lib/create/parsing-flags.js delete mode 100644 static/node_modules/moment/src/lib/create/utc.js delete mode 100644 static/node_modules/moment/src/lib/create/valid.js delete mode 100644 static/node_modules/moment/src/lib/duration/abs.js delete mode 100644 static/node_modules/moment/src/lib/duration/add-subtract.js delete mode 100644 static/node_modules/moment/src/lib/duration/as.js delete mode 100644 static/node_modules/moment/src/lib/duration/bubble.js delete mode 100644 static/node_modules/moment/src/lib/duration/clone.js delete mode 100644 static/node_modules/moment/src/lib/duration/constructor.js delete mode 100644 static/node_modules/moment/src/lib/duration/create.js delete mode 100644 static/node_modules/moment/src/lib/duration/duration.js delete mode 100644 static/node_modules/moment/src/lib/duration/get.js delete mode 100644 static/node_modules/moment/src/lib/duration/humanize.js delete mode 100644 static/node_modules/moment/src/lib/duration/iso-string.js delete mode 100644 static/node_modules/moment/src/lib/duration/prototype.js delete mode 100644 static/node_modules/moment/src/lib/duration/valid.js delete mode 100644 static/node_modules/moment/src/lib/format/format.js delete mode 100644 static/node_modules/moment/src/lib/locale/base-config.js delete mode 100644 static/node_modules/moment/src/lib/locale/calendar.js delete mode 100644 static/node_modules/moment/src/lib/locale/constructor.js delete mode 100644 static/node_modules/moment/src/lib/locale/en.js delete mode 100644 static/node_modules/moment/src/lib/locale/formats.js delete mode 100644 static/node_modules/moment/src/lib/locale/invalid.js delete mode 100644 static/node_modules/moment/src/lib/locale/lists.js delete mode 100644 static/node_modules/moment/src/lib/locale/locale.js delete mode 100644 static/node_modules/moment/src/lib/locale/locales.js delete mode 100644 static/node_modules/moment/src/lib/locale/ordinal.js delete mode 100644 static/node_modules/moment/src/lib/locale/pre-post-format.js delete mode 100644 static/node_modules/moment/src/lib/locale/prototype.js delete mode 100644 static/node_modules/moment/src/lib/locale/relative.js delete mode 100644 static/node_modules/moment/src/lib/locale/set.js delete mode 100644 static/node_modules/moment/src/lib/moment/add-subtract.js delete mode 100644 static/node_modules/moment/src/lib/moment/calendar.js delete mode 100644 static/node_modules/moment/src/lib/moment/clone.js delete mode 100644 static/node_modules/moment/src/lib/moment/compare.js delete mode 100644 static/node_modules/moment/src/lib/moment/constructor.js delete mode 100644 static/node_modules/moment/src/lib/moment/creation-data.js delete mode 100644 static/node_modules/moment/src/lib/moment/diff.js delete mode 100644 static/node_modules/moment/src/lib/moment/format.js delete mode 100644 static/node_modules/moment/src/lib/moment/from.js delete mode 100644 static/node_modules/moment/src/lib/moment/get-set.js delete mode 100644 static/node_modules/moment/src/lib/moment/locale.js delete mode 100644 static/node_modules/moment/src/lib/moment/min-max.js delete mode 100644 static/node_modules/moment/src/lib/moment/moment.js delete mode 100644 static/node_modules/moment/src/lib/moment/now.js delete mode 100644 static/node_modules/moment/src/lib/moment/prototype.js delete mode 100644 static/node_modules/moment/src/lib/moment/start-end-of.js delete mode 100644 static/node_modules/moment/src/lib/moment/to-type.js delete mode 100644 static/node_modules/moment/src/lib/moment/to.js delete mode 100644 static/node_modules/moment/src/lib/moment/valid.js delete mode 100644 static/node_modules/moment/src/lib/parse/regex.js delete mode 100644 static/node_modules/moment/src/lib/parse/token.js delete mode 100644 static/node_modules/moment/src/lib/units/aliases.js delete mode 100644 static/node_modules/moment/src/lib/units/constants.js delete mode 100644 static/node_modules/moment/src/lib/units/day-of-month.js delete mode 100644 static/node_modules/moment/src/lib/units/day-of-week.js delete mode 100644 static/node_modules/moment/src/lib/units/day-of-year.js delete mode 100644 static/node_modules/moment/src/lib/units/hour.js delete mode 100644 static/node_modules/moment/src/lib/units/millisecond.js delete mode 100644 static/node_modules/moment/src/lib/units/minute.js delete mode 100644 static/node_modules/moment/src/lib/units/month.js delete mode 100644 static/node_modules/moment/src/lib/units/offset.js delete mode 100644 static/node_modules/moment/src/lib/units/priorities.js delete mode 100644 static/node_modules/moment/src/lib/units/quarter.js delete mode 100644 static/node_modules/moment/src/lib/units/second.js delete mode 100644 static/node_modules/moment/src/lib/units/timestamp.js delete mode 100644 static/node_modules/moment/src/lib/units/timezone.js delete mode 100644 static/node_modules/moment/src/lib/units/units.js delete mode 100644 static/node_modules/moment/src/lib/units/week-calendar-utils.js delete mode 100644 static/node_modules/moment/src/lib/units/week-year.js delete mode 100644 static/node_modules/moment/src/lib/units/week.js delete mode 100644 static/node_modules/moment/src/lib/units/year.js delete mode 100644 static/node_modules/moment/src/lib/utils/abs-ceil.js delete mode 100644 static/node_modules/moment/src/lib/utils/abs-floor.js delete mode 100644 static/node_modules/moment/src/lib/utils/abs-round.js delete mode 100644 static/node_modules/moment/src/lib/utils/compare-arrays.js delete mode 100644 static/node_modules/moment/src/lib/utils/defaults.js delete mode 100644 static/node_modules/moment/src/lib/utils/deprecate.js delete mode 100644 static/node_modules/moment/src/lib/utils/extend.js delete mode 100644 static/node_modules/moment/src/lib/utils/has-own-prop.js delete mode 100644 static/node_modules/moment/src/lib/utils/hooks.js delete mode 100644 static/node_modules/moment/src/lib/utils/index-of.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-array.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-date.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-function.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-number.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-object-empty.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-object.js delete mode 100644 static/node_modules/moment/src/lib/utils/is-undefined.js delete mode 100644 static/node_modules/moment/src/lib/utils/keys.js delete mode 100644 static/node_modules/moment/src/lib/utils/map.js delete mode 100644 static/node_modules/moment/src/lib/utils/mod.js delete mode 100644 static/node_modules/moment/src/lib/utils/some.js delete mode 100644 static/node_modules/moment/src/lib/utils/to-int.js delete mode 100644 static/node_modules/moment/src/lib/utils/zero-fill.js delete mode 100644 static/node_modules/moment/src/locale/af.js delete mode 100644 static/node_modules/moment/src/locale/ar-dz.js delete mode 100644 static/node_modules/moment/src/locale/ar-kw.js delete mode 100644 static/node_modules/moment/src/locale/ar-ly.js delete mode 100644 static/node_modules/moment/src/locale/ar-ma.js delete mode 100644 static/node_modules/moment/src/locale/ar-sa.js delete mode 100644 static/node_modules/moment/src/locale/ar-tn.js delete mode 100644 static/node_modules/moment/src/locale/ar.js delete mode 100644 static/node_modules/moment/src/locale/az.js delete mode 100644 static/node_modules/moment/src/locale/be.js delete mode 100644 static/node_modules/moment/src/locale/bg.js delete mode 100644 static/node_modules/moment/src/locale/bm.js delete mode 100644 static/node_modules/moment/src/locale/bn.js delete mode 100644 static/node_modules/moment/src/locale/bo.js delete mode 100644 static/node_modules/moment/src/locale/br.js delete mode 100644 static/node_modules/moment/src/locale/bs.js delete mode 100644 static/node_modules/moment/src/locale/ca.js delete mode 100644 static/node_modules/moment/src/locale/cs.js delete mode 100644 static/node_modules/moment/src/locale/cv.js delete mode 100644 static/node_modules/moment/src/locale/cy.js delete mode 100644 static/node_modules/moment/src/locale/da.js delete mode 100644 static/node_modules/moment/src/locale/de-at.js delete mode 100644 static/node_modules/moment/src/locale/de-ch.js delete mode 100644 static/node_modules/moment/src/locale/de.js delete mode 100644 static/node_modules/moment/src/locale/dv.js delete mode 100644 static/node_modules/moment/src/locale/el.js delete mode 100644 static/node_modules/moment/src/locale/en-au.js delete mode 100644 static/node_modules/moment/src/locale/en-ca.js delete mode 100644 static/node_modules/moment/src/locale/en-gb.js delete mode 100644 static/node_modules/moment/src/locale/en-ie.js delete mode 100644 static/node_modules/moment/src/locale/en-nz.js delete mode 100644 static/node_modules/moment/src/locale/eo.js delete mode 100644 static/node_modules/moment/src/locale/es-do.js delete mode 100644 static/node_modules/moment/src/locale/es-us.js delete mode 100644 static/node_modules/moment/src/locale/es.js delete mode 100644 static/node_modules/moment/src/locale/et.js delete mode 100644 static/node_modules/moment/src/locale/eu.js delete mode 100644 static/node_modules/moment/src/locale/fa.js delete mode 100644 static/node_modules/moment/src/locale/fi.js delete mode 100644 static/node_modules/moment/src/locale/fo.js delete mode 100644 static/node_modules/moment/src/locale/fr-ca.js delete mode 100644 static/node_modules/moment/src/locale/fr-ch.js delete mode 100644 static/node_modules/moment/src/locale/fr.js delete mode 100644 static/node_modules/moment/src/locale/fy.js delete mode 100644 static/node_modules/moment/src/locale/gd.js delete mode 100644 static/node_modules/moment/src/locale/gl.js delete mode 100644 static/node_modules/moment/src/locale/gom-latn.js delete mode 100644 static/node_modules/moment/src/locale/gu.js delete mode 100644 static/node_modules/moment/src/locale/he.js delete mode 100644 static/node_modules/moment/src/locale/hi.js delete mode 100644 static/node_modules/moment/src/locale/hr.js delete mode 100644 static/node_modules/moment/src/locale/hu.js delete mode 100644 static/node_modules/moment/src/locale/hy-am.js delete mode 100644 static/node_modules/moment/src/locale/id.js delete mode 100644 static/node_modules/moment/src/locale/is.js delete mode 100644 static/node_modules/moment/src/locale/it.js delete mode 100644 static/node_modules/moment/src/locale/ja.js delete mode 100644 static/node_modules/moment/src/locale/jv.js delete mode 100644 static/node_modules/moment/src/locale/ka.js delete mode 100644 static/node_modules/moment/src/locale/kk.js delete mode 100644 static/node_modules/moment/src/locale/km.js delete mode 100644 static/node_modules/moment/src/locale/kn.js delete mode 100644 static/node_modules/moment/src/locale/ko.js delete mode 100644 static/node_modules/moment/src/locale/ky.js delete mode 100644 static/node_modules/moment/src/locale/lb.js delete mode 100644 static/node_modules/moment/src/locale/lo.js delete mode 100644 static/node_modules/moment/src/locale/lt.js delete mode 100644 static/node_modules/moment/src/locale/lv.js delete mode 100644 static/node_modules/moment/src/locale/me.js delete mode 100644 static/node_modules/moment/src/locale/mi.js delete mode 100644 static/node_modules/moment/src/locale/mk.js delete mode 100644 static/node_modules/moment/src/locale/ml.js delete mode 100644 static/node_modules/moment/src/locale/mr.js delete mode 100644 static/node_modules/moment/src/locale/ms-my.js delete mode 100644 static/node_modules/moment/src/locale/ms.js delete mode 100644 static/node_modules/moment/src/locale/my.js delete mode 100644 static/node_modules/moment/src/locale/nb.js delete mode 100644 static/node_modules/moment/src/locale/ne.js delete mode 100644 static/node_modules/moment/src/locale/nl-be.js delete mode 100644 static/node_modules/moment/src/locale/nl.js delete mode 100644 static/node_modules/moment/src/locale/nn.js delete mode 100644 static/node_modules/moment/src/locale/pa-in.js delete mode 100644 static/node_modules/moment/src/locale/pl.js delete mode 100644 static/node_modules/moment/src/locale/pt-br.js delete mode 100644 static/node_modules/moment/src/locale/pt.js delete mode 100644 static/node_modules/moment/src/locale/ro.js delete mode 100644 static/node_modules/moment/src/locale/ru.js delete mode 100644 static/node_modules/moment/src/locale/sd.js delete mode 100644 static/node_modules/moment/src/locale/se.js delete mode 100644 static/node_modules/moment/src/locale/si.js delete mode 100644 static/node_modules/moment/src/locale/sk.js delete mode 100644 static/node_modules/moment/src/locale/sl.js delete mode 100644 static/node_modules/moment/src/locale/sq.js delete mode 100644 static/node_modules/moment/src/locale/sr-cyrl.js delete mode 100644 static/node_modules/moment/src/locale/sr.js delete mode 100644 static/node_modules/moment/src/locale/ss.js delete mode 100644 static/node_modules/moment/src/locale/sv.js delete mode 100644 static/node_modules/moment/src/locale/sw.js delete mode 100644 static/node_modules/moment/src/locale/ta.js delete mode 100644 static/node_modules/moment/src/locale/te.js delete mode 100644 static/node_modules/moment/src/locale/tet.js delete mode 100644 static/node_modules/moment/src/locale/th.js delete mode 100644 static/node_modules/moment/src/locale/tl-ph.js delete mode 100644 static/node_modules/moment/src/locale/tlh.js delete mode 100644 static/node_modules/moment/src/locale/tr.js delete mode 100644 static/node_modules/moment/src/locale/tzl.js delete mode 100644 static/node_modules/moment/src/locale/tzm-latn.js delete mode 100644 static/node_modules/moment/src/locale/tzm.js delete mode 100644 static/node_modules/moment/src/locale/uk.js delete mode 100644 static/node_modules/moment/src/locale/ur.js delete mode 100644 static/node_modules/moment/src/locale/uz-latn.js delete mode 100644 static/node_modules/moment/src/locale/uz.js delete mode 100644 static/node_modules/moment/src/locale/vi.js delete mode 100644 static/node_modules/moment/src/locale/x-pseudo.js delete mode 100644 static/node_modules/moment/src/locale/yo.js delete mode 100644 static/node_modules/moment/src/locale/zh-cn.js delete mode 100644 static/node_modules/moment/src/locale/zh-hk.js delete mode 100644 static/node_modules/moment/src/locale/zh-tw.js delete mode 100644 static/node_modules/moment/src/moment.js delete mode 100644 static/node_modules/popper.js/README.md delete mode 100644 static/node_modules/popper.js/dist/esm/popper-utils.js delete mode 100644 static/node_modules/popper.js/dist/esm/popper-utils.js.map delete mode 100644 static/node_modules/popper.js/dist/esm/popper-utils.min.js delete mode 100644 static/node_modules/popper.js/dist/esm/popper-utils.min.js.map delete mode 100644 static/node_modules/popper.js/dist/esm/popper.js delete mode 100644 static/node_modules/popper.js/dist/esm/popper.js.map delete mode 100644 static/node_modules/popper.js/dist/esm/popper.min.js delete mode 100644 static/node_modules/popper.js/dist/esm/popper.min.js.map delete mode 100644 static/node_modules/popper.js/dist/popper-utils.js delete mode 100644 static/node_modules/popper.js/dist/popper-utils.js.map delete mode 100644 static/node_modules/popper.js/dist/popper-utils.min.js delete mode 100644 static/node_modules/popper.js/dist/popper-utils.min.js.map delete mode 100644 static/node_modules/popper.js/dist/popper.js delete mode 100644 static/node_modules/popper.js/dist/popper.js.map delete mode 100644 static/node_modules/popper.js/dist/popper.min.js delete mode 100644 static/node_modules/popper.js/dist/popper.min.js.map delete mode 100644 static/node_modules/popper.js/dist/umd/popper-utils.js delete mode 100644 static/node_modules/popper.js/dist/umd/popper-utils.js.map delete mode 100644 static/node_modules/popper.js/dist/umd/popper-utils.min.js delete mode 100644 static/node_modules/popper.js/dist/umd/popper-utils.min.js.map delete mode 100644 static/node_modules/popper.js/dist/umd/popper.js delete mode 100644 static/node_modules/popper.js/dist/umd/popper.js.map delete mode 100644 static/node_modules/popper.js/dist/umd/popper.min.js delete mode 100644 static/node_modules/popper.js/dist/umd/popper.min.js.map delete mode 100644 static/node_modules/popper.js/index.d.ts delete mode 100644 static/node_modules/popper.js/package.json delete mode 100644 static/node_modules/videogular/.gitattributes delete mode 100644 static/node_modules/videogular/.jshintrc delete mode 100644 static/node_modules/videogular/.npmignore delete mode 100644 static/node_modules/videogular/CHANGELOG.md delete mode 100644 static/node_modules/videogular/Gruntfile.js delete mode 100644 static/node_modules/videogular/LICENSE delete mode 100644 static/node_modules/videogular/README.md delete mode 100644 static/node_modules/videogular/deploy.sh delete mode 100644 static/node_modules/videogular/dist/analytics/vg-analytics.js delete mode 100644 static/node_modules/videogular/dist/analytics/vg-analytics.min.js delete mode 100644 static/node_modules/videogular/dist/buffering/vg-buffering.js delete mode 100644 static/node_modules/videogular/dist/buffering/vg-buffering.min.js delete mode 100644 static/node_modules/videogular/dist/controls/vg-controls.js delete mode 100644 static/node_modules/videogular/dist/controls/vg-controls.min.js delete mode 100644 static/node_modules/videogular/dist/dash/vg-dash.js delete mode 100644 static/node_modules/videogular/dist/dash/vg-dash.min.js delete mode 100644 static/node_modules/videogular/dist/ima-ads/vg-ima-ads.js delete mode 100644 static/node_modules/videogular/dist/ima-ads/vg-ima-ads.min.js delete mode 100644 static/node_modules/videogular/dist/overlay-play/vg-overlay-play.js delete mode 100644 static/node_modules/videogular/dist/overlay-play/vg-overlay-play.min.js delete mode 100644 static/node_modules/videogular/dist/poster/vg-poster.js delete mode 100644 static/node_modules/videogular/dist/poster/vg-poster.min.js delete mode 100644 static/node_modules/videogular/dist/themes/default/fonts/videogular.dev.svg delete mode 100644 static/node_modules/videogular/dist/themes/default/fonts/videogular.eot delete mode 100644 static/node_modules/videogular/dist/themes/default/fonts/videogular.svg delete mode 100644 static/node_modules/videogular/dist/themes/default/fonts/videogular.ttf delete mode 100644 static/node_modules/videogular/dist/themes/default/fonts/videogular.woff delete mode 100644 static/node_modules/videogular/dist/themes/default/videogular.css delete mode 100644 static/node_modules/videogular/dist/themes/default/videogular.css.map delete mode 100644 static/node_modules/videogular/dist/themes/default/videogular.min.css delete mode 100644 static/node_modules/videogular/dist/themes/default/videogular.scss delete mode 100644 static/node_modules/videogular/dist/videogular/videogular.js delete mode 100644 static/node_modules/videogular/dist/videogular/videogular.min.js delete mode 100644 static/node_modules/videogular/node_modules/angular/LICENSE.md delete mode 100644 static/node_modules/videogular/node_modules/angular/README.md delete mode 100644 static/node_modules/videogular/node_modules/angular/angular-csp.css delete mode 100644 static/node_modules/videogular/node_modules/angular/angular.js delete mode 100644 static/node_modules/videogular/node_modules/angular/angular.min.js delete mode 100644 static/node_modules/videogular/node_modules/angular/angular.min.js.gzip delete mode 100644 static/node_modules/videogular/node_modules/angular/angular.min.js.map delete mode 100644 static/node_modules/videogular/node_modules/angular/bower.json delete mode 100644 static/node_modules/videogular/node_modules/angular/index.js delete mode 100644 static/node_modules/videogular/node_modules/angular/package.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/.editorconfig delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/.gitattributes delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/.npmignore delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/.travis.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/CNAME delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/CONTRIBUTING.md delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/Gruntfile.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/LICENSE delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/README.md delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/_config.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/bower.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/composer.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap-theme.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap-theme.css.map delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap-theme.min.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap.css.map delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/css/bootstrap.min.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.eot delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.svg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/js/bootstrap.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/dist/js/bootstrap.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/LICENSE delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_data/core-team.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_data/glyphicons.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_data/sass-team.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_data/showcase.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/ads.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/customizer-variables.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/footer.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/header.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-about.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-components.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-css.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-customize.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-getting-started.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-javascript.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-main.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/nav-migration.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_includes/social-buttons.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_layouts/default.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/_layouts/home.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/about.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/css/docs.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/css/docs.min.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/css/pygments-manni.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/ico/apple-touch-icon-144-precomposed.png delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/ico/favicon.ico delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/img/components.png delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/img/devices.png delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/img/sass-less.png delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/application.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/customize.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/customizer.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/docs.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/ie8-responsive-file-warning.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/raw-files.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/blob.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/filesaver.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/holder.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/jszip.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/less.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/assets/js/vendor/uglify.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/components.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/css.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/customize.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/css/bootstrap-theme.css.map delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/css/bootstrap-theme.min.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/css/bootstrap.css.map delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/css/bootstrap.min.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.eot delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.svg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.ttf delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/fonts/glyphicons-halflings-regular.woff delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/dist/js/bootstrap.min.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/blog/blog.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/blog/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/carousel/carousel.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/carousel/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/cover/cover.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/cover/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/dashboard/dashboard.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/dashboard/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/grid/grid.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/grid/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/jumbotron-narrow/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/jumbotron-narrow/jumbotron-narrow.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/jumbotron/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/jumbotron/jumbotron.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/justified-nav/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/justified-nav/justified-nav.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar-fixed-top/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar-fixed-top/navbar-fixed-top.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar-static-top/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar-static-top/navbar-static-top.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/navbar/navbar.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/non-responsive/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/non-responsive/non-responsive.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/offcanvas/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/offcanvas/offcanvas.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/offcanvas/offcanvas.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/blog.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/carousel.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/cover.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/dashboard.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/grid.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/jumbotron-narrow.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/jumbotron.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/justified-nav.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/navbar-fixed.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/navbar-static.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/navbar.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/non-responsive.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/offcanvas.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/sign-in.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/starter-template.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/sticky-footer-navbar.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/sticky-footer.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/screenshots/theme.jpg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/signin/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/signin/signin.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/starter-template/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/starter-template/starter-template.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/sticky-footer-navbar/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/sticky-footer/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/sticky-footer/sticky-footer.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/theme/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/examples/theme/theme.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/getting-started.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/jade/customizer-nav.jade delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/jade/customizer-variables.jade delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/javascript.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/docs/migration.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/fonts/glyphicons-halflings-regular.eot delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/fonts/glyphicons-halflings-regular.svg delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/fonts/glyphicons-halflings-regular.ttf delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/fonts/glyphicons-halflings-regular.woff delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/grunt/.jshintrc delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/grunt/bs-glyphicons-data-generator.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/grunt/bs-lessdoc-parser.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/grunt/bs-raw-files-generator.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/grunt/shrinkwrap.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/.jscs.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/.jshintrc delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/affix.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/alert.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/button.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/carousel.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/collapse.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/dropdown.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/modal.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/popover.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/scrollspy.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tab.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/index.html delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/affix.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/alert.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/button.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/carousel.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/collapse.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/dropdown.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/modal.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/phantom.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/popover.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/scrollspy.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/tab.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/unit/tooltip.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/vendor/jquery.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/vendor/qunit.css delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tests/vendor/qunit.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/tooltip.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/js/transition.js delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/.csscomb.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/.csslintrc delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/alerts.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/badges.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/bootstrap.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/breadcrumbs.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/button-groups.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/buttons.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/carousel.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/close.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/code.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/component-animations.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/dropdowns.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/forms.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/glyphicons.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/grid.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/input-groups.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/jumbotron.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/labels.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/list-group.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/media.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/mixins.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/modals.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/navbar.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/navs.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/normalize.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/pager.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/pagination.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/panels.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/popovers.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/print.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/progress-bars.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/responsive-utilities.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/scaffolding.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/tables.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/theme.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/thumbnails.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/tooltip.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/type.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/utilities.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/variables.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/less/wells.less delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/package.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/README.md delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/npm-shrinkwrap.canonical.json delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/requirements.txt delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/s3_cache.py delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/sauce_browsers.yml delete mode 100644 static/node_modules/videogular/node_modules/bootstrap/test-infra/uncached-npm-install.sh delete mode 100644 static/node_modules/videogular/package.json diff --git a/.gitignore b/.gitignore index 77d4985a..966cf5e8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,8 +9,9 @@ templates_bk/* media Icon static/CACHE -static/node_modules +static/node_modules/ staticdev/CACHE venv .coverage -/static/css/.sass-cache/ \ No newline at end of file +/static/css/.sass-cache/ +.venv \ No newline at end of file diff --git a/static/node_modules/angular-animate/LICENSE.md b/static/node_modules/angular-animate/LICENSE.md deleted file mode 100644 index 2c395eef..00000000 --- a/static/node_modules/angular-animate/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Angular - -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. diff --git a/static/node_modules/angular-animate/README.md b/static/node_modules/angular-animate/README.md deleted file mode 100644 index 8313da67..00000000 --- a/static/node_modules/angular-animate/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# packaged angular-animate - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-animate -``` - -Then add `ngAnimate` as a dependency for your app: - -```javascript -angular.module('myApp', [require('angular-animate')]); -``` - -### bower - -```shell -bower install angular-animate -``` - -Then add a ` -``` - -Then add `ngAnimate` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngAnimate']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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. diff --git a/static/node_modules/angular-animate/index.js b/static/node_modules/angular-animate/index.js deleted file mode 100644 index 6ec0a351..00000000 --- a/static/node_modules/angular-animate/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./angular-animate'); -module.exports = 'ngAnimate'; diff --git a/static/node_modules/angular-chart.js/.codeclimate.yml b/static/node_modules/angular-chart.js/.codeclimate.yml deleted file mode 100644 index c41c0fa3..00000000 --- a/static/node_modules/angular-chart.js/.codeclimate.yml +++ /dev/null @@ -1,10 +0,0 @@ -languages: - Ruby: false - JavaScript: true - PHP: false -exclude_paths: -- "dist/*" -- "node_modules/*" -- "gulpfile.js" -- "examples/*" -- "test/fixtures/coverage.js" diff --git a/static/node_modules/angular-chart.js/.dockerignore b/static/node_modules/angular-chart.js/.dockerignore deleted file mode 100644 index b509c88b..00000000 --- a/static/node_modules/angular-chart.js/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -coverage/ -node_modules/ diff --git a/static/node_modules/angular-chart.js/.editorconfig b/static/node_modules/angular-chart.js/.editorconfig deleted file mode 100644 index 85653605..00000000 --- a/static/node_modules/angular-chart.js/.editorconfig +++ /dev/null @@ -1,18 +0,0 @@ -# This file is for unifying the coding style for different editors and IDEs -# editorconfig.org - -root = true - -[*] -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -# Tabs in JS unless otherwise specified -[**.js] -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = false \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/.jscsrc b/static/node_modules/angular-chart.js/.jscsrc deleted file mode 100644 index c2c7e3cd..00000000 --- a/static/node_modules/angular-chart.js/.jscsrc +++ /dev/null @@ -1,82 +0,0 @@ -{ - "requireCurlyBraces": [ - "try", - "catch", - "do" - ], - "requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties", - "requireCapitalizedConstructors": true, - "maximumLineLength": { - "value": 120, - "allowComments": true, - "allowRegex": true - }, - "validateIndentation": 2, - "validateQuoteMarks": "'", - - "disallowMultipleLineStrings": true, - "disallowMixedSpacesAndTabs": true, - "disallowTrailingWhitespace": true, - "disallowQuotedKeysInObjects": true, - "disallowSpaceAfterObjectKeys": true, - - "requireSpaceAfterKeywords": [ - "if", - "else", - "for", - "while", - "do", - "switch", - "return", - "try", - "catch", - "function", - "typeof" - ], - "requireSpaceBeforeBinaryOperators": [ - "=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", - "&=", "|=", "^=", "+=", - - "+", "-", "*", "/", "%", "<<", ">>", ">>>", "&", - "|", "^", "&&", "||", "===", "==", ">=", - "<=", "<", ">", "!=", "!==" - ], - "requireSpaceAfterPrefixUnaryOperators": [ - "!" - ], - "requireSpacesInConditionalExpression": true, - "requireSpaceBeforeBlockStatements": true, - "requireSpacesInForStatement": true, - "requireLineFeedAtFileEnd": true, - "requireSpacesInFunctionExpression": { - "beforeOpeningCurlyBrace": true, - "beforeOpeningRoundBrace": true - }, - "requireSpacesInFunctionDeclaration": { - "beforeOpeningCurlyBrace": true, - "beforeOpeningRoundBrace": true - }, - "requireDotNotation": true, - "disallowSpacesInsideArrayBrackets": "all", - "disallowSpacesInsideParentheses": true, - - - "validateJSDoc": { - "checkParamNames": true, - "requireParamTypes": true - }, - - "disallowMultipleLineBreaks": true, - "disallowNewlineBeforeBlockStatements": true, - "disallowKeywords": [ "with" ], - - "excludeFiles": [ - "node_modules/**", - "dist/**", - "coverage/**", - "examples/bundle.js", - "examples/commonjs.bundle.js", - "examples/smoothscroll.min.js", - "test/fixtures/coverage.js" - ] -} diff --git a/static/node_modules/angular-chart.js/.jshintignore b/static/node_modules/angular-chart.js/.jshintignore deleted file mode 100644 index 283d79d9..00000000 --- a/static/node_modules/angular-chart.js/.jshintignore +++ /dev/null @@ -1,9 +0,0 @@ -node_modules/ -dist/ -tmp/ -examples/bundle.js -examples/commonjs.bundle.js -examples/smoothscroll.min.js -coverage/ -test/fixtures/coverage.js - diff --git a/static/node_modules/angular-chart.js/.jshintrc b/static/node_modules/angular-chart.js/.jshintrc deleted file mode 100644 index cd570bb7..00000000 --- a/static/node_modules/angular-chart.js/.jshintrc +++ /dev/null @@ -1,24 +0,0 @@ -{ - "strict" : true, // true: Requires all functions run in ES5 Strict Mode - "undef" : true, // true: Require all non-global variables to be declared (prevents global leaks) - "unused" : true, // true: Require all defined variables be used - "noempty" : true, // Prohibit use of empty blocks - "trailing" : true, // Prohibit trailing whitespaces. - "white" : false, // Check against strict whitespace and indentation rules. - "indent" : 2, // {int} Number of spaces to use for indentation - "maxcomplexity" : 10, // {int} Max number for cyclomatic complexity - "maxdepth" : 2, // {int} Max number for nesting blocks - "newcap" : true, // true: Require capitalization of all constructor functions e.g. `new F()` - "quotmark" : "single", // Quotation mark consistency - "-W058" : true, // Missing '()' invoking a constructor - "browser" : true, // Standard browser globals e.g. `window`, `document`. - "predef" : [ // Custom globals. - "angular", - "G_vmlCanvasManager", - "require", - "console", - "Chart", - "define", - "module" - ] -} diff --git a/static/node_modules/angular-chart.js/.node-version b/static/node_modules/angular-chart.js/.node-version deleted file mode 100644 index 9e3a9335..00000000 --- a/static/node_modules/angular-chart.js/.node-version +++ /dev/null @@ -1 +0,0 @@ -4.4.3 diff --git a/static/node_modules/angular-chart.js/.npmignore b/static/node_modules/angular-chart.js/.npmignore deleted file mode 100644 index 0523ae93..00000000 --- a/static/node_modules/angular-chart.js/.npmignore +++ /dev/null @@ -1,7 +0,0 @@ -.idea/ -*.iml -node_modules/ -test/fixtures/shots/ -coverage/ -examples/bundle.js -examples/commonjs.bundle.js diff --git a/static/node_modules/angular-chart.js/.travis.yml b/static/node_modules/angular-chart.js/.travis.yml deleted file mode 100644 index e8a9c962..00000000 --- a/static/node_modules/angular-chart.js/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -sudo: required -services: -- docker -install: -- docker build -t jtblin/angular-chart.js . -script: -- docker run --name angular-chart.js -it -e REPORTER=$REPORTER -e CODECLIMATE_REPO_TOKEN=$CODECLIMATE_REPO_TOKEN -e CI=$CI -e TOLERANCE=$TOLERANCE -e DELAY=$DELAY -e IMGUR_ID=$IMGUR_ID jtblin/angular-chart.js -after_success: -- docker start angular-chart.js -- docker exec -it angular-chart.js npm run codeclimate -after_script: -- docker stop angular-chart.js ||true -- docker rm angular-chart.js -env: - global: - - secure: YWABlINoIkwl9RFLOW9G0lATEP3aiXXi+DS6TWfvQWWG/jkS5sn7IqWC2U67LjwQ0lDg0yevo3ZD7FyYQ5lr8AVuScAZ6P2o2dm9t/HBKGTG4u016dxbWWYVZ8MAlKT7TfjVD8iDzcWyZedsbpuyaNNp4pGr/CNcvq7TGdJLNkU= - - CI=1 - - REPORTER=list - - TOLERANCE=0.001 diff --git a/static/node_modules/angular-chart.js/CONTRIBUTING.md b/static/node_modules/angular-chart.js/CONTRIBUTING.md deleted file mode 100644 index 3f2f6b21..00000000 --- a/static/node_modules/angular-chart.js/CONTRIBUTING.md +++ /dev/null @@ -1,9 +0,0 @@ -### Contributing - -1. Create an issue -1. Fork the repo -1. Install dependencies: `npm install` and `bower install` -1. Make your changes -1. Install [GraphicsMagick](http://www.graphicsmagick.org/) -1. Run linter and tests: `gulp check` -1. Submit pull request diff --git a/static/node_modules/angular-chart.js/Dockerfile b/static/node_modules/angular-chart.js/Dockerfile deleted file mode 100644 index 267c61b1..00000000 --- a/static/node_modules/angular-chart.js/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM jtblin/debian-node-graphicsmagick:stretch-node-v4.4.7-gm-v1.3.24 -WORKDIR /src -ADD . ./ -RUN chown -R node:node /src -USER node -RUN npm install -CMD ["npm", "test"] diff --git a/static/node_modules/angular-chart.js/ISSUE_TEMPLATE.md b/static/node_modules/angular-chart.js/ISSUE_TEMPLATE.md deleted file mode 100644 index 8bc79535..00000000 --- a/static/node_modules/angular-chart.js/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,39 +0,0 @@ - - -### Overview - -Describe the issue. What is the issue and what did you expect? - -Please make sure to review and check all of these items: - -- [ ] Use latest version of the library -- [ ] Make sure you've included all the dependencies e.g Chart.js, angular, etc. -- [ ] Include a repro case, see below. - - -### Step to reproduce - -**Ensure you add a link to a plunker, jsbin, or equivalent. Issues without repro steps may be closed immediately.** - -Here is a [jsbin template for 0.x version](http://jsbin.com/cucoqe/1/edit?html,js,output) and [one for 1.x](http://jsbin.com/rodunob/edit?html,js,output) for convenience. - - diff --git a/static/node_modules/angular-chart.js/LICENSE b/static/node_modules/angular-chart.js/LICENSE deleted file mode 100644 index f3bd7149..00000000 --- a/static/node_modules/angular-chart.js/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) Jerome Touffe-Blin ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/PULL_REQUEST_TEMPLATE.md b/static/node_modules/angular-chart.js/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a6508304..00000000 --- a/static/node_modules/angular-chart.js/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,15 +0,0 @@ - - -### Description of change - - - -### Pull Request check-list - -- [ ] Run `gulp test` to ensure there are no linting, or style issues and all tests pass. -- [ ] Squash your commits into a few commits only. -- [ ] Make sure the commit message is short, concise and descriptive of the issues you're fixing. -- [ ] Avoid mixing up multiple issues and/or features, open one pull request for each issue. -- [ ] Have you updated the documentation and / or examples? -- [ ] Have you included a new test? diff --git a/static/node_modules/angular-chart.js/README.md b/static/node_modules/angular-chart.js/README.md deleted file mode 100644 index fdc9df20..00000000 --- a/static/node_modules/angular-chart.js/README.md +++ /dev/null @@ -1,284 +0,0 @@ -# angular-chart.js - -[![Bower version](https://badge.fury.io/bo/angular-chart.js.svg)](http://badge.fury.io/bo/angular-chart.js) -[![npm version](https://badge.fury.io/js/angular-chart.js.svg)](http://badge.fury.io/js/angular-chart.js) -[![Build Status](https://travis-ci.org/jtblin/angular-chart.js.svg?branch=master)](https://travis-ci.org/jtblin/angular-chart.js) -[![Codacy Badge](https://api.codacy.com/project/badge/grade/6aa5ba92f4984a24874e5976ee541623)](https://www.codacy.com/app/jtblin/angular-chart-js) -[![Code Coverage](https://d3s6mut3hikguw.cloudfront.net/github/jtblin/angular-chart.js/badges/coverage.svg)](https://codeclimate.com/github/jtblin/angular-chart.js) -[![npm](https://img.shields.io/npm/dm/angular-chart.js.svg?maxAge=2592000)](https://www.npmjs.com/package/angular-chart.js) - -Beautiful, reactive, responsive charts for Angular.JS using [Chart.js](http://www.chartjs.org/). - -Have a look at the [demo site](http://jtblin.github.io/angular-chart.js/) to see examples with detailed markup, -script and options. - -# Installation - -This is the `1.x` branch which requires Chart.js 2.x version. Following semantic versioning, -there are numerous **breaking changes** since 0.x, notably: - -* all options now need to use the `chart-` prefix -* `chart-colours` is now `chart-colors` and `chart-get-colour` is now `chart-get-color` -* chart types are in `camelCase` e.g. `line` and `polarArea` -* legend is now a Chart.js option so the `chart-legend` attribute has been removed -* events emitted on creation and update are now prefixed with `chart-` e.g. `chart-create` -* `$scope.$apply` is not called anymore on mouse hover functions calls -* obviously all Chart.js breaking changes as well in how options are set, etc. -* disabling the `responsive` option doesn't work via global `Chart.defaults.global.responsive` anymore, -but must be set via standard options e.g. `ChartJsProvider.setOptions({ responsive: false });` -* factory now returns a module name instead of a module instance - -### npm - - npm install --save angular-chart.js - -### cdn - - //cdn.jsdelivr.net/angular.chartjs/latest/angular-chart.min.js - -### bower - - bower install --save angular-chart.js - -### manually - -or copy the files from `dist/`. - -Then add the sources to your code (adjust paths as needed) after -adding the dependencies for Angular and Chart.js first: - -```html - - ... - - - ... - - - - -``` - -# Utilisation - -There are 8 types of charts so 8 directives: `chart-line`, `chart-bar`, `chart-horizontal-bar`, `chart-radar`, -`chart-pie`, `chart-polar-area`, `chart-doughnut`, `chart-bubble`. - -Here are the options for all directives: - -- `chart-data`: series data -- `chart-labels`: x axis labels (line, bar, horizontal bar, radar, bubble) or series labels (pie, doughnut, polar area) -- `chart-options`: chart options (as from [Chart.js documentation](http://www.chartjs.org/docs/)) -- `chart-series`: (default: `[]`): series labels (line, bar, radar) -- `chart-colors`: data colors (will use default colors if not specified) -- `chart-get-color`: function that returns a color in case there are not enough (will use random colors if not specified) -- `chart-click`: onclick event handler -- `chart-hover`: onmousemove event handler -- `chart-dataset-override`: override individual datasets to allow per dataset configuration e.g. y-axis, mixed type chart - -There is another directive `chart-base` that takes an extra attribute `chart-type` to define the type -dynamically. - -You can create mixed type chart using the `chart-dataset-override`, see -[bar-line example](http://jtblin.github.io/angular-chart.js/examples/dataset-override.html). - -See also [stacked bar example](http://jtblin.github.io/angular-chart.js/examples/stacked-bars.html). - -# Example - -## Markup - -```html - -``` - -## Javascript - -```javascript -angular.module("app", ["chart.js"]) - // Optional configuration - .config(['ChartJsProvider', function (ChartJsProvider) { - // Configure all charts - ChartJsProvider.setOptions({ - chartColors: ['#FF5252', '#FF8A80'], - responsive: false - }); - // Configure all line charts - ChartJsProvider.setOptions('line', { - showLines: false - }); - }]) - .controller("LineCtrl", ['$scope', '$timeout', function ($scope, $timeout) { - - $scope.labels = ["January", "February", "March", "April", "May", "June", "July"]; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $scope.onClick = function (points, evt) { - console.log(points, evt); - }; - - // Simulate async data update - $timeout(function () { - $scope.data = [ - [28, 48, 40, 19, 86, 27, 90], - [65, 59, 80, 81, 56, 55, 40] - ]; - }, 3000); -}]); -``` - -## AMD RequireJS - -See [a simple AMD example](examples/amd.js) - -## CommonJS e.g. webpack - -Module should work with CommonJS out of the box e.g. [browserify](http://browserify.org/) or -[webpack](http://webpack.github.io/), see a [webpack example](examples/webpack.commonjs.js). - -# Reactive - -angular-chart.js watch updates on data, series, labels, colors and options and will update, or destroy and recreate, -the chart on changes. - -# Events - -angular-chart.js listens to the following events on the `scope` and acts accordingly: - -* `$destroy`: call `.destroy()` on the chart -* `$resize`: call `.resize()` on the chart - -angular-chart.js emits the following events on the `scope` and pass the chart as argument: - -* `chart-create`: when chart is created -* `chart-update`: when chart is updated -* `chart-destroy`: when chart is destroyed - -``` -$scope.$on('chart-create', function (evt, chart) { - console.log(chart); -}); -``` - -**Note**: the event can be emitted multiple times for each chart as the chart can be destroyed and -created multiple times during angular `watch` lifecycle. - -angular-chart.js listens to the scope `$destroy` event and destroys the chart when it happens. - -# Colors - -There are a set of 7 default colors. Colors can be replaced using the `colors` attribute. -If there is more data than colors, colors are generated randomly or can be provided -via a function through the `getColor` attribute. - -Hex colors are converted to Chart.js colors automatically, -including different shades for highlight, fill, stroke, etc. - -RGB colors may be input by using a string in the format "rgb(r,g,b)". - -## Example - RGB Colors - -``` -angular.module('app',['chart.js']) - .controller('MainController', function($scope){ - $scope.colors = ["rgb(159,204,0)","rgb(250,109,33)","rgb(154,154,154)"]; - $scope.labels = ["Green", "Orange", "Grey"]; - $scope.data = [300, 500, 100]; - }); -``` - -RGBA colors may also be input by using a string in the format "rgba(r,g,b,a)". -They may be used alongside RGB colors and/or Hex colors. - -## Example - RGBA Colors -``` -angular.module('app',['chart.js']) - .controller('MainController', function($scope){ - $scope.colors = ["rgba(159,204,0,0.5)","rgba(250,109,33,0.7)","rgba(154,154,154,0.5)"]; - $scope.labels = ["Green", "Orange", "Grey"]; - $scope.data = [300, 500, 100]; - }); -``` - -Colors may also be input as an object by using the format in the example below. -Colors input as objects, Hex colors, RGB, and RGBA colors may be mixed and matched. - -## Example - input color as an object -``` -angular.module('app',['chart.js']) - .controller('MainController', function($scope){ - $scope.colors = [ - { - backgroundColor: "rgba(159,204,0, 0.2)", - pointBackgroundColor: "rgba(159,204,0, 1)", - pointHoverBackgroundColor: "rgba(159,204,0, 0.8)", - borderColor: "rgba(159,204,0, 1)", - pointBorderColor: '#fff', - pointHoverBorderColor: "rgba(159,204,0, 1)" - },"rgba(250,109,33,0.5)","#9a9a9a","rgb(233,177,69)" - ]; - $scope.labels = ["Green", "Peach", "Grey", "Orange"]; - $scope.data = [300, 500, 100, 150]; - }); -``` - -## Browser compatibility - -For IE8 and older browsers, you will need -to include [excanvas](https://code.google.com/p/explorercanvas/wiki/Instructions). -You will also need a [shim](https://github.com/es-shims/es5-shim) for ES5 functions. - -You also need to have ```height``` and ```width``` attributes for the `````` tag of your chart -if using IE8 and older browsers. If you *do not* have these attributes, you will need a -[getComputedStyle shim](https://github.com/Financial-Times/polyfill-service/blob/master/polyfills/getComputedStyle/polyfill.js) -and the line ```document.defaultView = window;```, but there still may be errors (due to code in Chart.js). - -```html - - - -``` - -# Issues - -**Issues or feature requests for Chart.js (e.g. new chart type, new axis, etc.) need to be opened on -[Chart.js issues tracker](https://github.com/nnnick/Chart.js/issues)** - -**For general questions about usage, please use [http://stackoverflow.com/](http://stackoverflow.com/)** - -Please check if issue exists first, otherwise open issue in [github](https://github.com/jtblin/angular-chart.js/issues). -**Ensure you add a link to a plunker, jsbin, or equivalent.** - -Here is a [jsbin template](http://jsbin.com/rodunob/edit?html,js,output) for convenience. - -# v0.x - Chart.js v1.x - deprecated - -This is the deprecated version of angular-chart.js that uses the v1.x version of Chart.js. -If you want to use this version, please checkout the -[chartjs-1.x branch](https://github.com/jtblin/angular-chart.js/tree/chartjs-1.x) - -# Contributing - -Pull requests welcome! - -See [CONTRIBUTING.md](CONTRIBUTING.md). - -## Contributors - -Thank you to the [contributors](https://github.com/jtblin/angular-chart.js/graphs/contributors)! - -# Author - -Jerome Touffe-Blin, [@jtblin](https://twitter.com/jtblin), [About me](http://about.me/jtblin) - -# License - -angular-chart.js is copyright 2016 Jerome Touffe-Blin and contributors. -It is licensed under the BSD license. See the include LICENSE file for details. diff --git a/static/node_modules/angular-chart.js/angular-chart.js b/static/node_modules/angular-chart.js/angular-chart.js deleted file mode 100644 index 9a3f267a..00000000 --- a/static/node_modules/angular-chart.js/angular-chart.js +++ /dev/null @@ -1,391 +0,0 @@ -(function (factory) { - 'use strict'; - if (typeof exports === 'object') { - // Node/CommonJS - module.exports = factory( - typeof angular !== 'undefined' ? angular : require('angular'), - typeof Chart !== 'undefined' ? Chart : require('chart.js')); - } else if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['angular', 'chart'], factory); - } else { - // Browser globals - if (typeof angular === 'undefined') { - throw new Error('AngularJS framework needs to be included, see https://angularjs.org/'); - } else if (typeof Chart === 'undefined') { - throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/'); - } - factory(angular, Chart); - } -}(function (angular, Chart) { - 'use strict'; - - Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>'; - Chart.defaults.global.tooltips.mode = 'label'; - Chart.defaults.global.elements.line.borderWidth = 2; - Chart.defaults.global.elements.rectangle.borderWidth = 2; - Chart.defaults.global.legend.display = false; - Chart.defaults.global.colors = [ - '#97BBCD', // blue - '#DCDCDC', // light grey - '#F7464A', // red - '#46BFBD', // green - '#FDB45C', // yellow - '#949FB1', // grey - '#4D5360' // dark grey - ]; - - var useExcanvas = typeof window.G_vmlCanvasManager === 'object' && - window.G_vmlCanvasManager !== null && - typeof window.G_vmlCanvasManager.initElement === 'function'; - - if (useExcanvas) Chart.defaults.global.animation = false; - - return angular.module('chart.js', []) - .provider('ChartJs', ChartJsProvider) - .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory]) - .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }]) - .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }]) - .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }]) - .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }]) - .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }]) - .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }]) - .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }]) - .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }]) - .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }]) - .name; - - /** - * Wrapper for chart.js - * Allows configuring chart js using the provider - * - * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) { - * ChartJsProvider.setOptions({ responsive: false }); - * ChartJsProvider.setOptions('Line', { responsive: true }); - * }))) - */ - function ChartJsProvider () { - var options = { responsive: true }; - var ChartJs = { - Chart: Chart, - getOptions: function (type) { - var typeOptions = type && options[type] || {}; - return angular.extend({}, options, typeOptions); - } - }; - - /** - * Allow to set global options during configuration - */ - this.setOptions = function (type, customOptions) { - // If no type was specified set option for the global object - if (! customOptions) { - customOptions = type; - options = angular.merge(options, customOptions); - } else { - // Set options for the specific chart - options[type] = angular.merge(options[type] || {}, customOptions); - } - - angular.merge(ChartJs.Chart.defaults, options); - }; - - this.$get = function () { - return ChartJs; - }; - } - - function ChartJsFactory (ChartJs, $timeout) { - return function chart (type) { - return { - restrict: 'CA', - scope: { - chartGetColor: '=?', - chartType: '=', - chartData: '=?', - chartLabels: '=?', - chartOptions: '=?', - chartSeries: '=?', - chartColors: '=?', - chartClick: '=?', - chartHover: '=?', - chartDatasetOverride: '=?' - }, - link: function (scope, elem/*, attrs */) { - if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]); - - // Order of setting "watch" matter - scope.$watch('chartData', watchData, true); - scope.$watch('chartSeries', watchOther, true); - scope.$watch('chartLabels', watchOther, true); - scope.$watch('chartOptions', watchOther, true); - scope.$watch('chartColors', watchOther, true); - scope.$watch('chartDatasetOverride', watchOther, true); - scope.$watch('chartType', watchType, false); - - scope.$on('$destroy', function () { - destroyChart(scope); - }); - - scope.$on('$resize', function () { - if (scope.chart) scope.chart.resize(); - }); - - function watchData (newVal, oldVal) { - if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) { - destroyChart(scope); - return; - } - var chartType = type || scope.chartType; - if (! chartType) return; - - if (scope.chart && canUpdateChart(newVal, oldVal)) - return updateChart(newVal, scope); - - createChart(chartType, scope, elem); - } - - function watchOther (newVal, oldVal) { - if (isEmpty(newVal)) return; - if (angular.equals(newVal, oldVal)) return; - var chartType = type || scope.chartType; - if (! chartType) return; - - // chart.update() doesn't work for series and labels - // so we have to re-create the chart entirely - createChart(chartType, scope, elem); - } - - function watchType (newVal, oldVal) { - if (isEmpty(newVal)) return; - if (angular.equals(newVal, oldVal)) return; - createChart(newVal, scope, elem); - } - } - }; - }; - - function createChart (type, scope, elem) { - var options = getChartOptions(type, scope); - if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return; - - var cvs = elem[0]; - var ctx = cvs.getContext('2d'); - - scope.chartGetColor = getChartColorFn(scope); - var data = getChartData(type, scope); - // Destroy old chart if it exists to avoid ghost charts issue - // https://github.com/jtblin/angular-chart.js/issues/187 - destroyChart(scope); - - scope.chart = new ChartJs.Chart(ctx, { - type: type, - data: data, - options: options - }); - scope.$emit('chart-create', scope.chart); - bindEvents(cvs, scope); - } - - function canUpdateChart (newVal, oldVal) { - if (newVal && oldVal && newVal.length && oldVal.length) { - return Array.isArray(newVal[0]) ? - newVal.length === oldVal.length && newVal.every(function (element, index) { - return element.length === oldVal[index].length; }) : - oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false; - } - return false; - } - - function sum (carry, val) { - return carry + val; - } - - function getEventHandler (scope, action, triggerOnlyOnChange) { - var lastState = { - point: void 0, - points: void 0 - }; - return function (evt) { - var atEvent = scope.chart.getElementAtEvent || scope.chart.getPointAtEvent; - var atEvents = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent; - if (atEvents) { - var points = atEvents.call(scope.chart, evt); - var point = atEvent ? atEvent.call(scope.chart, evt)[0] : void 0; - - if (triggerOnlyOnChange === false || - (! angular.equals(lastState.points, points) && ! angular.equals(lastState.point, point)) - ) { - lastState.point = point; - lastState.points = points; - scope[action](points, evt, point); - } - } - }; - } - - function getColors (type, scope) { - var colors = angular.copy(scope.chartColors || - ChartJs.getOptions(type).chartColors || - Chart.defaults.global.colors - ); - var notEnoughColors = colors.length < scope.chartData.length; - while (colors.length < scope.chartData.length) { - colors.push(scope.chartGetColor()); - } - // mutate colors in this case as we don't want - // the colors to change on each refresh - if (notEnoughColors) scope.chartColors = colors; - return colors.map(convertColor); - } - - function convertColor (color) { - // Allows RGB and RGBA colors to be input as a string: e.g.: "rgb(159,204,0)", "rgba(159,204,0, 0.5)" - if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color)); - // Allows hex colors to be input as a string. - if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1))); - // Allows colors to be input as an object, bypassing getColor() entirely - if (typeof color === 'object' && color !== null) return color; - return getRandomColor(); - } - - function getRandomColor () { - var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)]; - return getColor(color); - } - - function getColor (color) { - var alpha = color[3] || 1; - color = color.slice(0, 3); - return { - backgroundColor: rgba(color, 0.2), - pointBackgroundColor: rgba(color, alpha), - pointHoverBackgroundColor: rgba(color, 0.8), - borderColor: rgba(color, alpha), - pointBorderColor: '#fff', - pointHoverBorderColor: rgba(color, alpha) - }; - } - - function getRandomInt (min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; - } - - function rgba (color, alpha) { - // rgba not supported by IE8 - return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')'; - } - - // Credit: http://stackoverflow.com/a/11508164/1190235 - function hexToRgb (hex) { - var bigint = parseInt(hex, 16), - r = (bigint >> 16) & 255, - g = (bigint >> 8) & 255, - b = bigint & 255; - - return [r, g, b]; - } - - function rgbStringToRgb (color) { - var match = color.match(/^rgba?\(([\d,.]+)\)$/); - if (! match) throw new Error('Cannot parse rgb value'); - color = match[1].split(','); - return color.map(Number); - } - - function hasData (scope) { - return scope.chartData && scope.chartData.length; - } - - function getChartColorFn (scope) { - return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor; - } - - function getChartData (type, scope) { - var colors = getColors(type, scope); - return Array.isArray(scope.chartData[0]) ? - getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) : - getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride); - } - - function getDataSets (labels, data, series, colors, datasetOverride) { - return { - labels: labels, - datasets: data.map(function (item, i) { - var dataset = angular.extend({}, colors[i], { - label: series[i], - data: item - }); - if (datasetOverride && datasetOverride.length >= i) { - angular.merge(dataset, datasetOverride[i]); - } - return dataset; - }) - }; - } - - function getData (labels, data, colors, datasetOverride) { - var dataset = { - labels: labels, - datasets: [{ - data: data, - backgroundColor: colors.map(function (color) { - return color.pointBackgroundColor; - }), - hoverBackgroundColor: colors.map(function (color) { - return color.backgroundColor; - }) - }] - }; - if (datasetOverride) { - angular.merge(dataset.datasets[0], datasetOverride); - } - return dataset; - } - - function getChartOptions (type, scope) { - return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions); - } - - function bindEvents (cvs, scope) { - cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop; - cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop; - } - - function updateChart (values, scope) { - if (Array.isArray(scope.chartData[0])) { - scope.chart.data.datasets.forEach(function (dataset, i) { - dataset.data = values[i]; - }); - } else { - scope.chart.data.datasets[0].data = values; - } - - scope.chart.update(); - scope.$emit('chart-update', scope.chart); - } - - function isEmpty (value) { - return ! value || - (Array.isArray(value) && ! value.length) || - (typeof value === 'object' && ! Object.keys(value).length); - } - - function canDisplay (type, scope, elem, options) { - // TODO: check parent? - if (options.responsive && elem[0].clientHeight === 0) { - $timeout(function () { - createChart(type, scope, elem); - }, 50, false); - return false; - } - return true; - } - - function destroyChart(scope) { - if(! scope.chart) return; - scope.chart.destroy(); - scope.$emit('chart-destroy', scope.chart); - } - } -})); diff --git a/static/node_modules/angular-chart.js/bower.json b/static/node_modules/angular-chart.js/bower.json deleted file mode 100644 index c4868566..00000000 --- a/static/node_modules/angular-chart.js/bower.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "angular-chart.js", - "version": "1.1.1", - "main": [ - "./dist/angular-chart.js" - ], - "authors": [ - "Jerome Touffe-Blin " - ], - "repository": { - "type": "git", - "url": "git://github.com/jtblin/angular-chart.js.git" - }, - "description": "An angular.js wrapper for Chart.js - reactive, responsive, beautiful charts.", - "moduleType": [ - "globals" - ], - "keywords": [ - "angular", - "angular.js", - "chartjs", - "chart", - "reactive", - "responsive", - "graph", - "bar", - "line", - "area", - "donut" - ], - "license": "BSD", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "examples", - "test", - "tests" - ], - "dependencies": { - "angular": "1.x", - "chart.js": "2.x" - } -} diff --git a/static/node_modules/angular-chart.js/dist/angular-chart.js b/static/node_modules/angular-chart.js/dist/angular-chart.js deleted file mode 100644 index 3a7d5bc8..00000000 --- a/static/node_modules/angular-chart.js/dist/angular-chart.js +++ /dev/null @@ -1,400 +0,0 @@ -/*! - * angular-chart.js - An angular.js wrapper for Chart.js - * http://jtblin.github.io/angular-chart.js/ - * Version: 1.1.1 - * - * Copyright 2016 Jerome Touffe-Blin - * Released under the BSD-2-Clause license - * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE - */ -(function (factory) { - 'use strict'; - if (typeof exports === 'object') { - // Node/CommonJS - module.exports = factory( - typeof angular !== 'undefined' ? angular : require('angular'), - typeof Chart !== 'undefined' ? Chart : require('chart.js')); - } else if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['angular', 'chart'], factory); - } else { - // Browser globals - if (typeof angular === 'undefined') { - throw new Error('AngularJS framework needs to be included, see https://angularjs.org/'); - } else if (typeof Chart === 'undefined') { - throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/'); - } - factory(angular, Chart); - } -}(function (angular, Chart) { - 'use strict'; - - Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>'; - Chart.defaults.global.tooltips.mode = 'label'; - Chart.defaults.global.elements.line.borderWidth = 2; - Chart.defaults.global.elements.rectangle.borderWidth = 2; - Chart.defaults.global.legend.display = false; - Chart.defaults.global.colors = [ - '#97BBCD', // blue - '#DCDCDC', // light grey - '#F7464A', // red - '#46BFBD', // green - '#FDB45C', // yellow - '#949FB1', // grey - '#4D5360' // dark grey - ]; - - var useExcanvas = typeof window.G_vmlCanvasManager === 'object' && - window.G_vmlCanvasManager !== null && - typeof window.G_vmlCanvasManager.initElement === 'function'; - - if (useExcanvas) Chart.defaults.global.animation = false; - - return angular.module('chart.js', []) - .provider('ChartJs', ChartJsProvider) - .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory]) - .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }]) - .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }]) - .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }]) - .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }]) - .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }]) - .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }]) - .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }]) - .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }]) - .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }]) - .name; - - /** - * Wrapper for chart.js - * Allows configuring chart js using the provider - * - * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) { - * ChartJsProvider.setOptions({ responsive: false }); - * ChartJsProvider.setOptions('Line', { responsive: true }); - * }))) - */ - function ChartJsProvider () { - var options = { responsive: true }; - var ChartJs = { - Chart: Chart, - getOptions: function (type) { - var typeOptions = type && options[type] || {}; - return angular.extend({}, options, typeOptions); - } - }; - - /** - * Allow to set global options during configuration - */ - this.setOptions = function (type, customOptions) { - // If no type was specified set option for the global object - if (! customOptions) { - customOptions = type; - options = angular.merge(options, customOptions); - } else { - // Set options for the specific chart - options[type] = angular.merge(options[type] || {}, customOptions); - } - - angular.merge(ChartJs.Chart.defaults, options); - }; - - this.$get = function () { - return ChartJs; - }; - } - - function ChartJsFactory (ChartJs, $timeout) { - return function chart (type) { - return { - restrict: 'CA', - scope: { - chartGetColor: '=?', - chartType: '=', - chartData: '=?', - chartLabels: '=?', - chartOptions: '=?', - chartSeries: '=?', - chartColors: '=?', - chartClick: '=?', - chartHover: '=?', - chartDatasetOverride: '=?' - }, - link: function (scope, elem/*, attrs */) { - if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]); - - // Order of setting "watch" matter - scope.$watch('chartData', watchData, true); - scope.$watch('chartSeries', watchOther, true); - scope.$watch('chartLabels', watchOther, true); - scope.$watch('chartOptions', watchOther, true); - scope.$watch('chartColors', watchOther, true); - scope.$watch('chartDatasetOverride', watchOther, true); - scope.$watch('chartType', watchType, false); - - scope.$on('$destroy', function () { - destroyChart(scope); - }); - - scope.$on('$resize', function () { - if (scope.chart) scope.chart.resize(); - }); - - function watchData (newVal, oldVal) { - if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) { - destroyChart(scope); - return; - } - var chartType = type || scope.chartType; - if (! chartType) return; - - if (scope.chart && canUpdateChart(newVal, oldVal)) - return updateChart(newVal, scope); - - createChart(chartType, scope, elem); - } - - function watchOther (newVal, oldVal) { - if (isEmpty(newVal)) return; - if (angular.equals(newVal, oldVal)) return; - var chartType = type || scope.chartType; - if (! chartType) return; - - // chart.update() doesn't work for series and labels - // so we have to re-create the chart entirely - createChart(chartType, scope, elem); - } - - function watchType (newVal, oldVal) { - if (isEmpty(newVal)) return; - if (angular.equals(newVal, oldVal)) return; - createChart(newVal, scope, elem); - } - } - }; - }; - - function createChart (type, scope, elem) { - var options = getChartOptions(type, scope); - if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return; - - var cvs = elem[0]; - var ctx = cvs.getContext('2d'); - - scope.chartGetColor = getChartColorFn(scope); - var data = getChartData(type, scope); - // Destroy old chart if it exists to avoid ghost charts issue - // https://github.com/jtblin/angular-chart.js/issues/187 - destroyChart(scope); - - scope.chart = new ChartJs.Chart(ctx, { - type: type, - data: data, - options: options - }); - scope.$emit('chart-create', scope.chart); - bindEvents(cvs, scope); - } - - function canUpdateChart (newVal, oldVal) { - if (newVal && oldVal && newVal.length && oldVal.length) { - return Array.isArray(newVal[0]) ? - newVal.length === oldVal.length && newVal.every(function (element, index) { - return element.length === oldVal[index].length; }) : - oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false; - } - return false; - } - - function sum (carry, val) { - return carry + val; - } - - function getEventHandler (scope, action, triggerOnlyOnChange) { - var lastState = { - point: void 0, - points: void 0 - }; - return function (evt) { - var atEvent = scope.chart.getElementAtEvent || scope.chart.getPointAtEvent; - var atEvents = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent; - if (atEvents) { - var points = atEvents.call(scope.chart, evt); - var point = atEvent ? atEvent.call(scope.chart, evt)[0] : void 0; - - if (triggerOnlyOnChange === false || - (! angular.equals(lastState.points, points) && ! angular.equals(lastState.point, point)) - ) { - lastState.point = point; - lastState.points = points; - scope[action](points, evt, point); - } - } - }; - } - - function getColors (type, scope) { - var colors = angular.copy(scope.chartColors || - ChartJs.getOptions(type).chartColors || - Chart.defaults.global.colors - ); - var notEnoughColors = colors.length < scope.chartData.length; - while (colors.length < scope.chartData.length) { - colors.push(scope.chartGetColor()); - } - // mutate colors in this case as we don't want - // the colors to change on each refresh - if (notEnoughColors) scope.chartColors = colors; - return colors.map(convertColor); - } - - function convertColor (color) { - // Allows RGB and RGBA colors to be input as a string: e.g.: "rgb(159,204,0)", "rgba(159,204,0, 0.5)" - if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color)); - // Allows hex colors to be input as a string. - if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1))); - // Allows colors to be input as an object, bypassing getColor() entirely - if (typeof color === 'object' && color !== null) return color; - return getRandomColor(); - } - - function getRandomColor () { - var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)]; - return getColor(color); - } - - function getColor (color) { - var alpha = color[3] || 1; - color = color.slice(0, 3); - return { - backgroundColor: rgba(color, 0.2), - pointBackgroundColor: rgba(color, alpha), - pointHoverBackgroundColor: rgba(color, 0.8), - borderColor: rgba(color, alpha), - pointBorderColor: '#fff', - pointHoverBorderColor: rgba(color, alpha) - }; - } - - function getRandomInt (min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; - } - - function rgba (color, alpha) { - // rgba not supported by IE8 - return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')'; - } - - // Credit: http://stackoverflow.com/a/11508164/1190235 - function hexToRgb (hex) { - var bigint = parseInt(hex, 16), - r = (bigint >> 16) & 255, - g = (bigint >> 8) & 255, - b = bigint & 255; - - return [r, g, b]; - } - - function rgbStringToRgb (color) { - var match = color.match(/^rgba?\(([\d,.]+)\)$/); - if (! match) throw new Error('Cannot parse rgb value'); - color = match[1].split(','); - return color.map(Number); - } - - function hasData (scope) { - return scope.chartData && scope.chartData.length; - } - - function getChartColorFn (scope) { - return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor; - } - - function getChartData (type, scope) { - var colors = getColors(type, scope); - return Array.isArray(scope.chartData[0]) ? - getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) : - getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride); - } - - function getDataSets (labels, data, series, colors, datasetOverride) { - return { - labels: labels, - datasets: data.map(function (item, i) { - var dataset = angular.extend({}, colors[i], { - label: series[i], - data: item - }); - if (datasetOverride && datasetOverride.length >= i) { - angular.merge(dataset, datasetOverride[i]); - } - return dataset; - }) - }; - } - - function getData (labels, data, colors, datasetOverride) { - var dataset = { - labels: labels, - datasets: [{ - data: data, - backgroundColor: colors.map(function (color) { - return color.pointBackgroundColor; - }), - hoverBackgroundColor: colors.map(function (color) { - return color.backgroundColor; - }) - }] - }; - if (datasetOverride) { - angular.merge(dataset.datasets[0], datasetOverride); - } - return dataset; - } - - function getChartOptions (type, scope) { - return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions); - } - - function bindEvents (cvs, scope) { - cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop; - cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop; - } - - function updateChart (values, scope) { - if (Array.isArray(scope.chartData[0])) { - scope.chart.data.datasets.forEach(function (dataset, i) { - dataset.data = values[i]; - }); - } else { - scope.chart.data.datasets[0].data = values; - } - - scope.chart.update(); - scope.$emit('chart-update', scope.chart); - } - - function isEmpty (value) { - return ! value || - (Array.isArray(value) && ! value.length) || - (typeof value === 'object' && ! Object.keys(value).length); - } - - function canDisplay (type, scope, elem, options) { - // TODO: check parent? - if (options.responsive && elem[0].clientHeight === 0) { - $timeout(function () { - createChart(type, scope, elem); - }, 50, false); - return false; - } - return true; - } - - function destroyChart(scope) { - if(! scope.chart) return; - scope.chart.destroy(); - scope.$emit('chart-destroy', scope.chart); - } - } -})); diff --git a/static/node_modules/angular-chart.js/dist/angular-chart.js.tar.gz b/static/node_modules/angular-chart.js/dist/angular-chart.js.tar.gz deleted file mode 100644 index 6b2cc3e8256fbabbd47d82a68980eaaffe8888e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9980 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 Gwg3P~g^x1; diff --git a/static/node_modules/angular-chart.js/dist/angular-chart.min.js b/static/node_modules/angular-chart.js/dist/angular-chart.min.js deleted file mode 100644 index 7e017db5..00000000 --- a/static/node_modules/angular-chart.js/dist/angular-chart.min.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * angular-chart.js - An angular.js wrapper for Chart.js - * http://jtblin.github.io/angular-chart.js/ - * Version: 1.1.1 - * - * Copyright 2016 Jerome Touffe-Blin - * Released under the BSD-2-Clause license - * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE - */ -!function(t){"use strict";if("object"==typeof exports)module.exports=t("undefined"!=typeof angular?angular:require("angular"),"undefined"!=typeof Chart?Chart:require("chart.js"));else if("function"==typeof define&&define.amd)define(["angular","chart"],t);else{if("undefined"==typeof angular)throw new Error("AngularJS framework needs to be included, see https://angularjs.org/");if("undefined"==typeof Chart)throw new Error("Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/");t(angular,Chart)}}(function(t,r){"use strict";function e(){var e={responsive:!0},a={Chart:r,getOptions:function(r){var a=r&&e[r]||{};return t.extend({},e,a)}};this.setOptions=function(r,n){n?e[r]=t.merge(e[r]||{},n):(n=r,e=t.merge(e,n)),t.merge(a.Chart.defaults,e)},this.$get=function(){return a}}function a(e,a){function o(t,r,a){var n=D(t,r);if(C(r)&&k(t,r,a,n)){var o=a[0],c=o.getContext("2d");r.chartGetColor=y(r);var i=b(t,r);F(r),r.chart=new e.Chart(c,{type:t,data:i,options:n}),r.$emit("chart-create",r.chart),A(o,r)}}function c(t,r){return!!(t&&r&&t.length&&r.length)&&(Array.isArray(t[0])?t.length===r.length&&t.every(function(t,e){return t.length===r[e].length}):r.reduce(i,0)>0&&t.length===r.length)}function i(t,r){return t+r}function u(r,e,a){var n={point:void 0,points:void 0};return function(o){var c=r.chart.getElementAtEvent||r.chart.getPointAtEvent,i=r.chart.getElementsAtEvent||r.chart.getPointsAtEvent;if(i){var u=i.call(r.chart,o),l=c?c.call(r.chart,o)[0]:void 0;a!==!1&&(t.equals(n.points,u)||t.equals(n.point,l))||(n.point=l,n.points=u,r[e](u,o,l))}}}function l(a,n){for(var o=t.copy(n.chartColors||e.getOptions(a).chartColors||r.defaults.global.colors),c=o.length>16&255,a=r>>8&255,n=255&r;return[e,a,n]}function v(t){var r=t.match(/^rgba?\(([\d,.]+)\)$/);if(!r)throw new Error("Cannot parse rgb value");return t=r[1].split(","),t.map(Number)}function C(t){return t.chartData&&t.chartData.length}function y(t){return"function"==typeof t.chartGetColor?t.chartGetColor:s}function b(t,r){var e=l(t,r);return Array.isArray(r.chartData[0])?m(r.chartLabels,r.chartData,r.chartSeries||[],e,r.chartDatasetOverride):w(r.chartLabels,r.chartData,e,r.chartDatasetOverride)}function m(r,e,a,n,o){return{labels:r,datasets:e.map(function(r,e){var c=t.extend({},n[e],{label:a[e],data:r});return o&&o.length>=e&&t.merge(c,o[e]),c})}}function w(r,e,a,n){var o={labels:r,datasets:[{data:e,backgroundColor:a.map(function(t){return t.pointBackgroundColor}),hoverBackgroundColor:a.map(function(t){return t.backgroundColor})}]};return n&&t.merge(o.datasets[0],n),o}function D(r,a){return t.extend({},e.getOptions(r),a.chartOptions)}function A(r,e){r.onclick=e.chartClick?u(e,"chartClick",!1):t.noop,r.onmousemove=e.chartHover?u(e,"chartHover",!0):t.noop}function B(t,r){Array.isArray(r.chartData[0])?r.chart.data.datasets.forEach(function(r,e){r.data=t[e]}):r.chart.data.datasets[0].data=t,r.chart.update(),r.$emit("chart-update",r.chart)}function $(t){return!t||Array.isArray(t)&&!t.length||"object"==typeof t&&!Object.keys(t).length}function k(t,r,e,n){return!n.responsive||0!==e[0].clientHeight||(a(function(){o(t,r,e)},50,!1),!1)}function F(t){t.chart&&(t.chart.destroy(),t.$emit("chart-destroy",t.chart))}return function(r){return{restrict:"CA",scope:{chartGetColor:"=?",chartType:"=",chartData:"=?",chartLabels:"=?",chartOptions:"=?",chartSeries:"=?",chartColors:"=?",chartClick:"=?",chartHover:"=?",chartDatasetOverride:"=?"},link:function(e,a){function i(t,n){if(!t||!t.length||Array.isArray(t[0])&&!t[0].length)return void F(e);var i=r||e.chartType;if(i)return e.chart&&c(t,n)?B(t,e):void o(i,e,a)}function u(n,c){if(!$(n)&&!t.equals(n,c)){var i=r||e.chartType;i&&o(i,e,a)}}function l(r,n){$(r)||t.equals(r,n)||o(r,e,a)}n&&window.G_vmlCanvasManager.initElement(a[0]),e.$watch("chartData",i,!0),e.$watch("chartSeries",u,!0),e.$watch("chartLabels",u,!0),e.$watch("chartOptions",u,!0),e.$watch("chartColors",u,!0),e.$watch("chartDatasetOverride",u,!0),e.$watch("chartType",l,!1),e.$on("$destroy",function(){F(e)}),e.$on("$resize",function(){e.chart&&e.chart.resize()})}}}}r.defaults.global.multiTooltipTemplate="<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>",r.defaults.global.tooltips.mode="label",r.defaults.global.elements.line.borderWidth=2,r.defaults.global.elements.rectangle.borderWidth=2,r.defaults.global.legend.display=!1,r.defaults.global.colors=["#97BBCD","#DCDCDC","#F7464A","#46BFBD","#FDB45C","#949FB1","#4D5360"];var n="object"==typeof window.G_vmlCanvasManager&&null!==window.G_vmlCanvasManager&&"function"==typeof window.G_vmlCanvasManager.initElement;return n&&(r.defaults.global.animation=!1),t.module("chart.js",[]).provider("ChartJs",e).factory("ChartJsFactory",["ChartJs","$timeout",a]).directive("chartBase",["ChartJsFactory",function(t){return new t}]).directive("chartLine",["ChartJsFactory",function(t){return new t("line")}]).directive("chartBar",["ChartJsFactory",function(t){return new t("bar")}]).directive("chartHorizontalBar",["ChartJsFactory",function(t){return new t("horizontalBar")}]).directive("chartRadar",["ChartJsFactory",function(t){return new t("radar")}]).directive("chartDoughnut",["ChartJsFactory",function(t){return new t("doughnut")}]).directive("chartPie",["ChartJsFactory",function(t){return new t("pie")}]).directive("chartPolarArea",["ChartJsFactory",function(t){return new t("polarArea")}]).directive("chartBubble",["ChartJsFactory",function(t){return new t("bubble")}]).name}); -//# sourceMappingURL=angular-chart.min.js.map diff --git a/static/node_modules/angular-chart.js/dist/angular-chart.min.js.map b/static/node_modules/angular-chart.js/dist/angular-chart.min.js.map deleted file mode 100644 index e8454a98..00000000 --- a/static/node_modules/angular-chart.js/dist/angular-chart.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["angular-chart.js"],"names":["factory","exports","module","angular","require","Chart","define","amd","Error","ChartJsProvider","options","responsive","ChartJs","getOptions","type","typeOptions","extend","this","setOptions","customOptions","merge","defaults","$get","ChartJsFactory","$timeout","createChart","scope","elem","getChartOptions","hasData","canDisplay","cvs","ctx","getContext","chartGetColor","getChartColorFn","data","getChartData","destroyChart","chart","$emit","bindEvents","canUpdateChart","newVal","oldVal","length","Array","isArray","every","element","index","reduce","sum","carry","val","getEventHandler","action","triggerOnlyOnChange","lastState","point","points","evt","atEvent","getElementAtEvent","getPointAtEvent","atEvents","getElementsAtEvent","getPointsAtEvent","call","equals","getColors","colors","copy","chartColors","global","notEnoughColors","chartData","push","map","convertColor","color","getColor","rgbStringToRgb","hexToRgb","substr","getRandomColor","getRandomInt","alpha","slice","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","min","max","Math","floor","random","useExcanvas","join","concat","hex","bigint","parseInt","r","g","b","match","split","Number","getDataSets","chartLabels","chartSeries","chartDatasetOverride","getData","labels","series","datasetOverride","datasets","item","i","dataset","label","hoverBackgroundColor","chartOptions","onclick","chartClick","noop","onmousemove","chartHover","updateChart","values","forEach","update","isEmpty","value","Object","keys","clientHeight","destroy","restrict","chartType","link","watchData","watchOther","watchType","window","G_vmlCanvasManager","initElement","$watch","$on","resize","multiTooltipTemplate","tooltips","mode","elements","line","borderWidth","rectangle","legend","display","animation","provider","directive","name"],"mappings":"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","file":"angular-chart.min.js","sourcesContent":["(function (factory) {\n 'use strict';\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory(\n typeof angular !== 'undefined' ? angular : require('angular'),\n typeof Chart !== 'undefined' ? Chart : require('chart.js'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'chart'], factory);\n } else {\n // Browser globals\n if (typeof angular === 'undefined') {\n throw new Error('AngularJS framework needs to be included, see https://angularjs.org/');\n } else if (typeof Chart === 'undefined') {\n throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');\n }\n factory(angular, Chart);\n }\n}(function (angular, Chart) {\n 'use strict';\n\n Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n Chart.defaults.global.tooltips.mode = 'label';\n Chart.defaults.global.elements.line.borderWidth = 2;\n Chart.defaults.global.elements.rectangle.borderWidth = 2;\n Chart.defaults.global.legend.display = false;\n Chart.defaults.global.colors = [\n '#97BBCD', // blue\n '#DCDCDC', // light grey\n '#F7464A', // red\n '#46BFBD', // green\n '#FDB45C', // yellow\n '#949FB1', // grey\n '#4D5360' // dark grey\n ];\n\n var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&\n window.G_vmlCanvasManager !== null &&\n typeof window.G_vmlCanvasManager.initElement === 'function';\n\n if (useExcanvas) Chart.defaults.global.animation = false;\n\n return angular.module('chart.js', [])\n .provider('ChartJs', ChartJsProvider)\n .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory])\n .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])\n .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }])\n .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }])\n .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])\n .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }])\n .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }])\n .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }])\n .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }])\n .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])\n .name;\n\n /**\n * Wrapper for chart.js\n * Allows configuring chart js using the provider\n *\n * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {\n * ChartJsProvider.setOptions({ responsive: false });\n * ChartJsProvider.setOptions('Line', { responsive: true });\n * })))\n */\n function ChartJsProvider () {\n var options = { responsive: true };\n var ChartJs = {\n Chart: Chart,\n getOptions: function (type) {\n var typeOptions = type && options[type] || {};\n return angular.extend({}, options, typeOptions);\n }\n };\n\n /**\n * Allow to set global options during configuration\n */\n this.setOptions = function (type, customOptions) {\n // If no type was specified set option for the global object\n if (! customOptions) {\n customOptions = type;\n options = angular.merge(options, customOptions);\n } else {\n // Set options for the specific chart\n options[type] = angular.merge(options[type] || {}, customOptions);\n }\n\n angular.merge(ChartJs.Chart.defaults, options);\n };\n\n this.$get = function () {\n return ChartJs;\n };\n }\n\n function ChartJsFactory (ChartJs, $timeout) {\n return function chart (type) {\n return {\n restrict: 'CA',\n scope: {\n chartGetColor: '=?',\n chartType: '=',\n chartData: '=?',\n chartLabels: '=?',\n chartOptions: '=?',\n chartSeries: '=?',\n chartColors: '=?',\n chartClick: '=?',\n chartHover: '=?',\n chartDatasetOverride: '=?'\n },\n link: function (scope, elem/*, attrs */) {\n if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);\n\n // Order of setting \"watch\" matter\n scope.$watch('chartData', watchData, true);\n scope.$watch('chartSeries', watchOther, true);\n scope.$watch('chartLabels', watchOther, true);\n scope.$watch('chartOptions', watchOther, true);\n scope.$watch('chartColors', watchOther, true);\n scope.$watch('chartDatasetOverride', watchOther, true);\n scope.$watch('chartType', watchType, false);\n\n scope.$on('$destroy', function () {\n destroyChart(scope);\n });\n\n scope.$on('$resize', function () {\n if (scope.chart) scope.chart.resize();\n });\n\n function watchData (newVal, oldVal) {\n if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {\n destroyChart(scope);\n return;\n }\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n if (scope.chart && canUpdateChart(newVal, oldVal))\n return updateChart(newVal, scope);\n\n createChart(chartType, scope, elem);\n }\n\n function watchOther (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n // chart.update() doesn't work for series and labels\n // so we have to re-create the chart entirely\n createChart(chartType, scope, elem);\n }\n\n function watchType (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n createChart(newVal, scope, elem);\n }\n }\n };\n };\n\n function createChart (type, scope, elem) {\n var options = getChartOptions(type, scope);\n if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;\n\n var cvs = elem[0];\n var ctx = cvs.getContext('2d');\n\n scope.chartGetColor = getChartColorFn(scope);\n var data = getChartData(type, scope);\n // Destroy old chart if it exists to avoid ghost charts issue\n // https://github.com/jtblin/angular-chart.js/issues/187\n destroyChart(scope);\n\n scope.chart = new ChartJs.Chart(ctx, {\n type: type,\n data: data,\n options: options\n });\n scope.$emit('chart-create', scope.chart);\n bindEvents(cvs, scope);\n }\n\n function canUpdateChart (newVal, oldVal) {\n if (newVal && oldVal && newVal.length && oldVal.length) {\n return Array.isArray(newVal[0]) ?\n newVal.length === oldVal.length && newVal.every(function (element, index) {\n return element.length === oldVal[index].length; }) :\n oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;\n }\n return false;\n }\n\n function sum (carry, val) {\n return carry + val;\n }\n\n function getEventHandler (scope, action, triggerOnlyOnChange) {\n var lastState = {\n point: void 0,\n points: void 0\n };\n return function (evt) {\n var atEvent = scope.chart.getElementAtEvent || scope.chart.getPointAtEvent;\n var atEvents = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;\n if (atEvents) {\n var points = atEvents.call(scope.chart, evt);\n var point = atEvent ? atEvent.call(scope.chart, evt)[0] : void 0;\n\n if (triggerOnlyOnChange === false ||\n (! angular.equals(lastState.points, points) && ! angular.equals(lastState.point, point))\n ) {\n lastState.point = point;\n lastState.points = points;\n scope[action](points, evt, point);\n }\n }\n };\n }\n\n function getColors (type, scope) {\n var colors = angular.copy(scope.chartColors ||\n ChartJs.getOptions(type).chartColors ||\n Chart.defaults.global.colors\n );\n var notEnoughColors = colors.length < scope.chartData.length;\n while (colors.length < scope.chartData.length) {\n colors.push(scope.chartGetColor());\n }\n // mutate colors in this case as we don't want\n // the colors to change on each refresh\n if (notEnoughColors) scope.chartColors = colors;\n return colors.map(convertColor);\n }\n\n function convertColor (color) {\n // Allows RGB and RGBA colors to be input as a string: e.g.: \"rgb(159,204,0)\", \"rgba(159,204,0, 0.5)\"\n if (typeof color === 'string' && color[0] === 'r') return getColor(rgbStringToRgb(color));\n // Allows hex colors to be input as a string.\n if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\n // Allows colors to be input as an object, bypassing getColor() entirely\n if (typeof color === 'object' && color !== null) return color;\n return getRandomColor();\n }\n\n function getRandomColor () {\n var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n return getColor(color);\n }\n\n function getColor (color) {\n var alpha = color[3] || 1;\n color = color.slice(0, 3);\n return {\n backgroundColor: rgba(color, 0.2),\n pointBackgroundColor: rgba(color, alpha),\n pointHoverBackgroundColor: rgba(color, 0.8),\n borderColor: rgba(color, alpha),\n pointBorderColor: '#fff',\n pointHoverBorderColor: rgba(color, alpha)\n };\n }\n\n function getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n function rgba (color, alpha) {\n // rgba not supported by IE8\n return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')';\n }\n\n // Credit: http://stackoverflow.com/a/11508164/1190235\n function hexToRgb (hex) {\n var bigint = parseInt(hex, 16),\n r = (bigint >> 16) & 255,\n g = (bigint >> 8) & 255,\n b = bigint & 255;\n\n return [r, g, b];\n }\n\n function rgbStringToRgb (color) {\n var match = color.match(/^rgba?\\(([\\d,.]+)\\)$/);\n if (! match) throw new Error('Cannot parse rgb value');\n color = match[1].split(',');\n return color.map(Number);\n }\n\n function hasData (scope) {\n return scope.chartData && scope.chartData.length;\n }\n\n function getChartColorFn (scope) {\n return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;\n }\n\n function getChartData (type, scope) {\n var colors = getColors(type, scope);\n return Array.isArray(scope.chartData[0]) ?\n getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :\n getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);\n }\n\n function getDataSets (labels, data, series, colors, datasetOverride) {\n return {\n labels: labels,\n datasets: data.map(function (item, i) {\n var dataset = angular.extend({}, colors[i], {\n label: series[i],\n data: item\n });\n if (datasetOverride && datasetOverride.length >= i) {\n angular.merge(dataset, datasetOverride[i]);\n }\n return dataset;\n })\n };\n }\n\n function getData (labels, data, colors, datasetOverride) {\n var dataset = {\n labels: labels,\n datasets: [{\n data: data,\n backgroundColor: colors.map(function (color) {\n return color.pointBackgroundColor;\n }),\n hoverBackgroundColor: colors.map(function (color) {\n return color.backgroundColor;\n })\n }]\n };\n if (datasetOverride) {\n angular.merge(dataset.datasets[0], datasetOverride);\n }\n return dataset;\n }\n\n function getChartOptions (type, scope) {\n return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);\n }\n\n function bindEvents (cvs, scope) {\n cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;\n cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;\n }\n\n function updateChart (values, scope) {\n if (Array.isArray(scope.chartData[0])) {\n scope.chart.data.datasets.forEach(function (dataset, i) {\n dataset.data = values[i];\n });\n } else {\n scope.chart.data.datasets[0].data = values;\n }\n\n scope.chart.update();\n scope.$emit('chart-update', scope.chart);\n }\n\n function isEmpty (value) {\n return ! value ||\n (Array.isArray(value) && ! value.length) ||\n (typeof value === 'object' && ! Object.keys(value).length);\n }\n\n function canDisplay (type, scope, elem, options) {\n // TODO: check parent?\n if (options.responsive && elem[0].clientHeight === 0) {\n $timeout(function () {\n createChart(type, scope, elem);\n }, 50, false);\n return false;\n }\n return true;\n }\n\n function destroyChart(scope) {\n if(! scope.chart) return;\n scope.chart.destroy();\n scope.$emit('chart-destroy', scope.chart);\n }\n }\n}));\n"]} \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/examples/amd.html b/static/node_modules/angular-chart.js/examples/amd.html deleted file mode 100644 index a1946efd..00000000 --- a/static/node_modules/angular-chart.js/examples/amd.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - AMD - - - -
-
-
-
-
-
AMD require.js
-
- -
-
-
-
-
- - - - diff --git a/static/node_modules/angular-chart.js/examples/amd.js b/static/node_modules/angular-chart.js/examples/amd.js deleted file mode 100644 index 0c04eaab..00000000 --- a/static/node_modules/angular-chart.js/examples/amd.js +++ /dev/null @@ -1,32 +0,0 @@ -(function () { - 'use strict'; - - require.config({ - paths: { - angular: '../node_modules/angular/angular.min', - chart: '../node_modules/chart.js/dist/Chart.min', - 'angular-chart': '../angular-chart' - }, - shim: { - angular: { - exports: 'angular' - }, - 'chart.js': { - deps: ['angular', 'chart'] - } - } - }); - - define(['angular', 'angular-chart'], function (angular/*, angularChart*/) { - var app = angular.module('examples', ['chart.js']); - app.controller('RequireCtrl', ['$scope', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - }]); - }); - -})(); diff --git a/static/node_modules/angular-chart.js/examples/app.css b/static/node_modules/angular-chart.js/examples/app.css deleted file mode 100644 index 8b18814c..00000000 --- a/static/node_modules/angular-chart.js/examples/app.css +++ /dev/null @@ -1,80 +0,0 @@ -body { padding-top: 50px; } - -.nav, .pagination, .carousel, .panel-title a { cursor: pointer; } - -#hero-bar { - position: absolute; - left: 0; - top: 0; - z-index: 1; - padding-right: 0; -} - -.container-fluid { - padding-left: 0; - padding-right: 0; -} - -.aspect-ratio { - width: 100%; - padding-bottom: 25%; - position: relative; -} - -.header { - position: absolute; - left: 0; - width: 100%; - top: 50%; - font-size: larger; - z-index: 500; -} - -.panel-heading { - font-weight: bold; -} - -.code .nav-tabs>li.active>a, .code .nav-tabs>li.active>a:hover, .code .nav-tabs>li.active>a:focus { - background-color: #f8f8f8; - border: 1px solid #ccc; - border-bottom-color: transparent; -} - -.code pre, .code code { - background-color: #f8f8f8; - border-top: none; - border-top-left-radius: 0; - border-top-right-radius: 0; -} - -.settings > a, .settings { - background-color: white ! important; -} - -.nav-tabs > li > a { - border-bottom: 1px solid #ccc; - margin-right: 0; -} - -.settings > a.active { - border: 1px solid transparent; -} - -div.settings { - border: 1px solid #ccc; - border-top: 0; - padding: 9.5px; - margin: 0 0 10px -} - -div.settings > code { - border-top: 1px solid #eaeaea; -} - -.footer { - text-align: center; - padding: 30px 0; - margin-top: 70px; - border-top: 1px solid #e5e5e5; - background-color: #f5f5f5; -} \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/examples/app.js b/static/node_modules/angular-chart.js/examples/app.js deleted file mode 100644 index 282edaaf..00000000 --- a/static/node_modules/angular-chart.js/examples/app.js +++ /dev/null @@ -1,311 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('examples', ['chart.js', 'ui.bootstrap']); - - app.config(function (ChartJsProvider) { - // Configure all charts - ChartJsProvider.setOptions({ - colors: ['#97BBCD', '#DCDCDC', '#F7464A', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'] - }); - // Configure all doughnut charts - ChartJsProvider.setOptions('doughnut', { - cutoutPercentage: 60 - }); - ChartJsProvider.setOptions('bubble', { - tooltips: { enabled: false } - }); - }); - - app.controller('MenuCtrl', ['$scope', function ($scope) { - $scope.isCollapsed = true; - $scope.charts = ['Line', 'Bar', 'Doughnut', 'Pie', 'Polar Area', 'Radar', 'Horizontal Bar', 'Bubble', 'Base']; - }]); - - app.controller('LineCtrl', ['$scope', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $scope.onClick = function (points, evt) { - console.log(points, evt); - }; - $scope.onHover = function (points) { - if (points.length > 0) { - console.log('Point', points[0].value); - } else { - console.log('No point'); - } - }; - $scope.datasetOverride = [{ yAxisID: 'y-axis-1' }, { yAxisID: 'y-axis-2' }]; - - $scope.options = { - scales: { - yAxes: [ - { - id: 'y-axis-1', - type: 'linear', - display: true, - position: 'left' - }, - { - id: 'y-axis-2', - type: 'linear', - display: true, - position: 'right' - } - ] - } - }; - }]); - - app.controller('BarCtrl', ['$scope', function ($scope) { - $scope.options = { legend: { display: true } }; - $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - }]); - - app.controller('DoughnutCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - $scope.data = [0, 0, 0]; - - $timeout(function () { - $scope.data = [350, 450, 100]; - }, 500); - }]); - - app.controller('PieCtrl', ['$scope', function ($scope) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales']; - $scope.data = [300, 500, 100]; - $scope.options = { legend: { display: false } }; - }]); - - app.controller('PolarAreaCtrl', ['$scope', function ($scope) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales']; - $scope.data = [300, 500, 100, 40, 120]; - $scope.options = { legend: { display: false } }; - }]); - - app.controller('BaseCtrl', ['$scope', function ($scope) { - $scope.labels = ['Download Sales', 'Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales']; - $scope.data = [300, 500, 100, 40, 120]; - $scope.type = 'polarArea'; - - $scope.toggle = function () { - $scope.type = $scope.type === 'polarArea' ? 'pie' : 'polarArea'; - }; - }]); - - app.controller('RadarCtrl', ['$scope', function ($scope) { - $scope.labels = ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running']; - $scope.options = { legend: { display: false } }; - - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - - $scope.onClick = function (points, evt) { - console.log(points, evt); - }; - }]); - - app.controller('StackedBarCtrl', ['$scope', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.type = 'StackedBar'; - $scope.series = ['2015', '2016']; - $scope.options = { - scales: { - xAxes: [{ - stacked: true, - }], - yAxes: [{ - stacked: true - }] - } - }; - - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }]); - - app.controller('TabsCtrl', ['$scope', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.active = true; - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }]); - - app.controller('MixedChartCtrl', ['$scope', function ($scope) { - $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72']; - - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.data = [ - [65, -59, 80, 81, -56, 55, -40], - [28, 48, -40, 19, 86, 27, 90] - ]; - $scope.datasetOverride = [ - { - label: 'Bar chart', - borderWidth: 1, - type: 'bar' - }, - { - label: 'Line chart', - borderWidth: 3, - hoverBackgroundColor: 'rgba(255,99,132,0.4)', - hoverBorderColor: 'rgba(255,99,132,1)', - type: 'line' - } - ]; - }]); - - app.controller('DataTablesCtrl', ['$scope', function ($scope) { - $scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $scope.colors = [ - { // grey - backgroundColor: 'rgba(148,159,177,0.2)', - pointBackgroundColor: 'rgba(148,159,177,1)', - pointHoverBackgroundColor: 'rgba(148,159,177,1)', - borderColor: 'rgba(148,159,177,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(148,159,177,0.8)' - }, - { // dark grey - backgroundColor: 'rgba(77,83,96,0.2)', - pointBackgroundColor: 'rgba(77,83,96,1)', - pointHoverBackgroundColor: 'rgba(77,83,96,1)', - borderColor: 'rgba(77,83,96,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(77,83,96,0.8)' - } - ]; - $scope.options = { legend: { display: false } }; - $scope.randomize = function () { - $scope.data = $scope.data.map(function (data) { - return data.map(function (y) { - y = y + Math.random() * 10 - 5; - return parseInt(y < 0 ? 0 : y > 100 ? 100 : y); - }); - }); - }; - }]); - - app.controller('BubbleCtrl', ['$scope', '$interval', function ($scope, $interval) { - $scope.options = { - scales: { - xAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }], - yAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }] - } - }; - - createChart(); - $interval(createChart, 2000); - - function createChart () { - $scope.data = []; - for (var i = 0; i < 50; i++) { - $scope.data.push([{ - x: randomScalingFactor(), - y: randomScalingFactor(), - r: randomRadius() - }]); - } - } - - function randomScalingFactor () { - return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100); - } - - function randomRadius () { - return Math.abs(randomScalingFactor()) / 4; - } - }]); - - app.controller('TicksCtrl', ['$scope', '$interval', function ($scope, $interval) { - var maximum = document.getElementById('container').clientWidth / 2 || 300; - $scope.data = [[]]; - $scope.labels = []; - $scope.options = { - animation: { - duration: 0 - }, - elements: { - line: { - borderWidth: 0.5 - }, - point: { - radius: 0 - } - }, - legend: { - display: false - }, - scales: { - xAxes: [{ - display: false - }], - yAxes: [{ - display: false - }], - gridLines: { - display: false - } - }, - tooltips: { - enabled: false - } - }; - - // Update the dataset at 25FPS for a smoothly-animating chart - $interval(function () { - getLiveChartData(); - }, 40); - - function getLiveChartData () { - if ($scope.data[0].length) { - $scope.labels = $scope.labels.slice(1); - $scope.data[0] = $scope.data[0].slice(1); - } - - while ($scope.data[0].length < maximum) { - $scope.labels.push(''); - $scope.data[0].push(getRandomValue($scope.data[0])); - } - } - }]); - - function getRandomValue (data) { - var l = data.length, previous = l ? data[l - 1] : 50; - var y = previous + Math.random() * 10 - 5; - return y < 0 ? 0 : y > 100 ? 100 : y; - } -})(); diff --git a/static/node_modules/angular-chart.js/examples/bubble.html b/static/node_modules/angular-chart.js/examples/bubble.html deleted file mode 100644 index bdc233bc..00000000 --- a/static/node_modules/angular-chart.js/examples/bubble.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Bubble chart - - - -
-
-
-
-
-
Bubble chart
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/bubble.js b/static/node_modules/angular-chart.js/examples/bubble.js deleted file mode 100644 index 4ae5a126..00000000 --- a/static/node_modules/angular-chart.js/examples/bubble.js +++ /dev/null @@ -1,55 +0,0 @@ -angular.module('app', ['chart.js']) - .config(['ChartJsProvider', function (ChartJsProvider) { - 'use strict'; - ChartJsProvider.setOptions({ - tooltips: { enabled: false } - }); - }]) - .controller('BubbleCtrl', ['$scope', '$interval', function ($scope, $interval) { - 'use strict'; - - $scope.options = { - scales: { - xAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }], - yAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }] - } - }; - - createChart(); - $interval(createChart, 2000); - - function createChart () { - $scope.series = []; - $scope.data = []; - for (var i = 0; i < 50; i++) { - $scope.series.push(`Series ${i}`); - $scope.data.push([{ - x: randomScalingFactor(), - y: randomScalingFactor(), - r: randomRadius() - }]); - } - } - - function randomScalingFactor () { - return (Math.random() > 0.5 ? 1.0 : -1.0) * Math.round(Math.random() * 100); - } - - function randomRadius () { - return Math.abs(randomScalingFactor()) / 4; - } - }]); diff --git a/static/node_modules/angular-chart.js/examples/charts.html b/static/node_modules/angular-chart.js/examples/charts.html deleted file mode 100644 index 2365d4a9..00000000 --- a/static/node_modules/angular-chart.js/examples/charts.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - Charts - - - - - - - - -
-
- -
-

- Angular Chart -

- -

Reactive, responsive, beautiful charts for AngularJS based on Chart.js

- -

- Code on Github - - Download (1.1.1) - -

-
-
-
-
-
- -

Dependencies

-

- This repository contains a set of native AngularJS directives for Chart.js. The only required dependencies are: -

- -

Files to download

-

- The easiest is to download with npm: -

npm install angular-chart.js --save
- Alternatively files can be downloaded from Github or via PolarArea. - See readme for more information. -

-

Whichever method you choose the good news is that the overall size is very small: - <5kb for all directives (~1kb with gzip compression!)

-

Installation

-

You need to include the dependencies in your page:

-
<script src="node_modules/chart.js/Chart.min.js"></script>
-<script src="node_modules/angular-chart.js/dist/angular-chart.min.js"></script>
-

As soon as you've got all the files downloaded and included in your page you just need to declare - a dependency on the chart.js module:
-

angular.module('myModule', ['chart.js']);
-

-

CSS

-

-

Colors

-

Series have beautiful pre-sets colors (to a maximum of 7 series, after that colors will be randomly generated). - They can be overwritten using Chart.defaults.global.colors.

-
    -
  1. Blue
  2. -
  3. Light grey
  4. -
  5. Red
  6. -
  7. Green
  8. -
  9. Yellow
  10. -
  11. Grey
  12. -
  13. Dark Grey
  14. -
-

You can also use the provider : ChartJsProvider in a .config()

-

(function (ChartJsProvider) {
-  ChartJsProvider.setOptions({ colors : [ '#803690', '#00ADF9', '#DCDCDC', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'] });
-}); 

-
-
- -
-
-
-
Line Chart
-
- -
-
-
-
- - -
- .chart-line -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="line" class="chart chart-line" chart-data="data"
-chart-labels="labels" chart-series="series" chart-options="options"
-chart-dataset-override="datasetOverride" chart-click="onClick">
-</canvas>
-
- -
angular.module("app", ["chart.js"]).controller("LineCtrl", function ($scope) {
-
-  $scope.labels = ["January", "February", "March", "April", "May", "June", "July"];
-  $scope.series = ['Series A', 'Series B'];
-  $scope.data = [
-    [65, 59, 80, 81, 56, 55, 40],
-    [28, 48, 40, 19, 86, 27, 90]
-  ];
-  $scope.onClick = function (points, evt) {
-    console.log(points, evt);
-  };
-  $scope.datasetOverride = [{ yAxisID: 'y-axis-1' }, { yAxisID: 'y-axis-2' }];
-  $scope.options = {
-    scales: {
-      yAxes: [
-        {
-          id: 'y-axis-1',
-          type: 'linear',
-          display: true,
-          position: 'left'
-        },
-        {
-          id: 'y-axis-2',
-          type: 'linear',
-          display: true,
-          position: 'right'
-        }
-      ]
-    }
-  };
-});
-              
-
-
-
-
-
-
- - -
- .chart-bar -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="bar" class="chart chart-bar"
-  chart-data="data" chart-labels="labels"> chart-series="series"
-</canvas>
-
- -
angular.module("app", ["chart.js"]).controller("BarCtrl", function ($scope) {
-  $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
-  $scope.series = ['Series A', 'Series B'];
-
-  $scope.data = [
-    [65, 59, 80, 81, 56, 55, 40],
-    [28, 48, 40, 19, 86, 27, 90]
-  ];
-});
-              
-
-
-
-
-
-
Bar Chart
-
- -
-
-
-
-
-
-
-
Doughnut Chart
-
- -
-
-
-
- - -
- .chart-doughnut -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="doughnut" class="chart chart-doughnut"
-  chart-data="data" chart-labels="labels">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("DoughnutCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales"];
-  $scope.data = [300, 500, 100];
-});
-              
-
-
-
-
-
-
- - -
- .chart-radar -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="radar" class="chart chart-radar"
-  chart-data="data" chart-options="options" chart-labels="labels">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("RadarCtrl", function ($scope) {
-  $scope.labels =["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"];
-
-  $scope.data = [
-    [65, 59, 90, 81, 56, 55, 40],
-    [28, 48, 40, 19, 96, 27, 100]
-  ];
-});
-              
-
-
-
-
-
-
Radar Chart
-
- -
-
-
-
-
-
-
-
Pie Chart
-
- -
-
-
-
- - -
- .chart-pie -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="pie" class="chart chart-pie"
-  chart-data="data" chart-labels="labels" chart-options="options">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("PieCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales"];
-  $scope.data = [300, 500, 100];
-});
-              
-
-
-
-
-
-
- - -
- .chart-polar-area -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="polar-area" class="chart chart-polar-area"
-  chart-data="data" chart-labels="labels" chart-options="options">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("PolarAreaCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales", "Tele Sales", "Corporate Sales"];
-  $scope.data = [300, 500, 100, 40, 120];
-});
-              
-
-
-
-
-
-
Polar Area Chart
-
- -
-
-
-
-
-
-
-
Horizontal Bar Chart
-
- -
-
-
-
- - -
- .chart-horizontal-bar -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="base" class="chart-horizontal-bar"
-  chart-data="data" chart-labels="labels" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BarCtrl",
-  function ($scope) {
-    $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
-    $scope.series = ['Series A', 'Series B'];
-
-    $scope.data = [
-      [65, 59, 80, 81, 56, 55, 40],
-      [28, 48, 40, 19, 86, 27, 90]
-    ];
-});
-              
-
-
-
-
-
-
- - -
- .chart-bubble -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -

-<canvas id="base" class="chart-bubble" chart-data="data"
-  chart-series="series" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BubbleCtrl",
-  function ($scope) {
-    // see examples/bubble.js for random bubbles source code
-    $scope.series = ['Series A', 'Series B'];
-
-    $scope.data = [
-      [{
-        x: 40,
-        y: 10,
-        r: 20
-      }],
-      [{
-        x: 10,
-        y: 40,
-        r: 50
-      }]
-    ];
-});
-              
-
-
-
-
-
-
Bubble Chart
-
- -
-
-
-
-
-
-
-
Dynamic Chart
-
- -
-
- -
-
- - -
- .chart-base -
    -
  • chart-type: chart type e.g. bar, polarArea, etc. or other plugins
  • -
  • other options according to chart type
  • -
-
-
- -
<canvas id="base" class="chart-base" chart-type="type"
-  chart-data="data" chart-labels="labels" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BaseCtrl",
-  function ($scope) {
-    $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales", "Tele Sales", "Corporate Sales"];
-    $scope.data = [300, 500, 100, 40, 120];
-    $scope.type = 'polarArea';
-
-    $scope.toggle = function () {
-      $scope.type = $scope.type === 'polarArea' ?
-        'pie' : 'polarArea';
-    };
-});
-              
-
-
-
-
-
-
- -
-
-
-
Reactive Chart
-
- -
-
-
-
-
-
Chart Data
-
- - - - - - - -
{{label}}
{{data[$parent.$index][$index]}}
- -
-
-
-
-
-
- -
-
- - -
<canvas id="base" class="chart-bar"
-  chart-data="data" chart-labels="labels" chart-colors="colors"
-  chart-dataset-override="datasetOverride" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("MixedChartCtrl",
-  function ($scope) {
-    $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72'];
-
-    $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
-    $scope.data = [
-      [65, -59, 80, 81, -56, 55, -40],
-      [28, 48, -40, 19, 86, 27, 90]
-    ];
-    $scope.datasetOverride = [
-      {
-        label: "Bar chart",
-        borderWidth: 1,
-        type: 'bar'
-      },
-      {
-        label: "Line chart",
-        borderWidth: 3,
-        hoverBackgroundColor: "rgba(255,99,132,0.4)",
-        hoverBorderColor: "rgba(255,99,132,1)",
-        type: 'line'
-      }
-    ];
-});
-              
-
-
-
-
-
-
Bar line Chart
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/charts.template.html b/static/node_modules/angular-chart.js/examples/charts.template.html deleted file mode 100644 index db723dd1..00000000 --- a/static/node_modules/angular-chart.js/examples/charts.template.html +++ /dev/null @@ -1,701 +0,0 @@ - - - - - Charts - - - - - - - - -
-
- -
-

- Angular Chart -

- -

Reactive, responsive, beautiful charts for AngularJS based on Chart.js

- -

- Code on Github - - Download () - -

-
-
-
-
-
- -

Dependencies

-

- This repository contains a set of native AngularJS directives for Chart.js. The only required dependencies are: -

- -

Files to download

-

- The easiest is to download with npm: -

npm install angular-chart.js --save
- Alternatively files can be downloaded from Github or via PolarArea. - See readme for more information. -

-

Whichever method you choose the good news is that the overall size is very small: - <5kb for all directives (~1kb with gzip compression!)

-

Installation

-

You need to include the dependencies in your page:

-
<script src="node_modules/chart.js/Chart.min.js"></script>
-<script src="node_modules/angular-chart.js/dist/angular-chart.min.js"></script>
-

As soon as you've got all the files downloaded and included in your page you just need to declare - a dependency on the chart.js module:
-

angular.module('myModule', ['chart.js']);
-

-

CSS

-

-

Colors

-

Series have beautiful pre-sets colors (to a maximum of 7 series, after that colors will be randomly generated). - They can be overwritten using Chart.defaults.global.colors.

-
    -
  1. Blue
  2. -
  3. Light grey
  4. -
  5. Red
  6. -
  7. Green
  8. -
  9. Yellow
  10. -
  11. Grey
  12. -
  13. Dark Grey
  14. -
-

You can also use the provider : ChartJsProvider in a .config()

-

(function (ChartJsProvider) {
-  ChartJsProvider.setOptions({ colors : [ '#803690', '#00ADF9', '#DCDCDC', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'] });
-}); 

-
-
- -
-
-
-
Line Chart
-
- -
-
-
-
- - -
- .chart-line -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="line" class="chart chart-line" chart-data="data"
-chart-labels="labels" chart-series="series" chart-options="options"
-chart-dataset-override="datasetOverride" chart-click="onClick">
-</canvas>
-
- -
angular.module("app", ["chart.js"]).controller("LineCtrl", function ($scope) {
-
-  $scope.labels = ["January", "February", "March", "April", "May", "June", "July"];
-  $scope.series = ['Series A', 'Series B'];
-  $scope.data = [
-    [65, 59, 80, 81, 56, 55, 40],
-    [28, 48, 40, 19, 86, 27, 90]
-  ];
-  $scope.onClick = function (points, evt) {
-    console.log(points, evt);
-  };
-  $scope.datasetOverride = [{ yAxisID: 'y-axis-1' }, { yAxisID: 'y-axis-2' }];
-  $scope.options = {
-    scales: {
-      yAxes: [
-        {
-          id: 'y-axis-1',
-          type: 'linear',
-          display: true,
-          position: 'left'
-        },
-        {
-          id: 'y-axis-2',
-          type: 'linear',
-          display: true,
-          position: 'right'
-        }
-      ]
-    }
-  };
-});
-              
-
-
-
-
-
-
- - -
- .chart-bar -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="bar" class="chart chart-bar"
-  chart-data="data" chart-labels="labels"> chart-series="series"
-</canvas>
-
- -
angular.module("app", ["chart.js"]).controller("BarCtrl", function ($scope) {
-  $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
-  $scope.series = ['Series A', 'Series B'];
-
-  $scope.data = [
-    [65, 59, 80, 81, 56, 55, 40],
-    [28, 48, 40, 19, 86, 27, 90]
-  ];
-});
-              
-
-
-
-
-
-
Bar Chart
-
- -
-
-
-
-
-
-
-
Doughnut Chart
-
- -
-
-
-
- - -
- .chart-doughnut -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="doughnut" class="chart chart-doughnut"
-  chart-data="data" chart-labels="labels">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("DoughnutCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales"];
-  $scope.data = [300, 500, 100];
-});
-              
-
-
-
-
-
-
- - -
- .chart-radar -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="radar" class="chart chart-radar"
-  chart-data="data" chart-options="options" chart-labels="labels">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("RadarCtrl", function ($scope) {
-  $scope.labels =["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"];
-
-  $scope.data = [
-    [65, 59, 90, 81, 56, 55, 40],
-    [28, 48, 40, 19, 96, 27, 100]
-  ];
-});
-              
-
-
-
-
-
-
Radar Chart
-
- -
-
-
-
-
-
-
-
Pie Chart
-
- -
-
-
-
- - -
- .chart-pie -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="pie" class="chart chart-pie"
-  chart-data="data" chart-labels="labels" chart-options="options">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("PieCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales"];
-  $scope.data = [300, 500, 100];
-});
-              
-
-
-
-
-
-
- - -
- .chart-polar-area -
    -
  • chart-data: series data
  • -
  • chart-labels: series labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="polar-area" class="chart chart-polar-area"
-  chart-data="data" chart-labels="labels" chart-options="options">
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("PolarAreaCtrl", function ($scope) {
-  $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales", "Tele Sales", "Corporate Sales"];
-  $scope.data = [300, 500, 100, 40, 120];
-});
-              
-
-
-
-
-
-
Polar Area Chart
-
- -
-
-
-
-
-
-
-
Horizontal Bar Chart
-
- -
-
-
-
- - -
- .chart-horizontal-bar -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -
<canvas id="base" class="chart-horizontal-bar"
-  chart-data="data" chart-labels="labels" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BarCtrl",
-  function ($scope) {
-    $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012'];
-    $scope.series = ['Series A', 'Series B'];
-
-    $scope.data = [
-      [65, 59, 80, 81, 56, 55, 40],
-      [28, 48, 40, 19, 86, 27, 90]
-    ];
-});
-              
-
-
-
-
-
-
- - -
- .chart-bubble -
    -
  • chart-data: series data
  • -
  • chart-labels: x axis labels
  • -
  • chart-options (default: {}): Chart.js options
  • -
  • chart-series (default: []): series labels
  • -
  • chart-click (optional): onclick event handler
  • -
  • chart-hover (optional): onmousemove event handler
  • -
  • chart-colors (default to global colors): colors for the chart
  • -
  • chart-dataset-override (optional): override datasets individually
  • -
-
-
- -

-<canvas id="base" class="chart-bubble" chart-data="data"
-  chart-series="series" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BubbleCtrl",
-  function ($scope) {
-    // see examples/bubble.js for random bubbles source code
-    $scope.series = ['Series A', 'Series B'];
-
-    $scope.data = [
-      [{
-        x: 40,
-        y: 10,
-        r: 20
-      }],
-      [{
-        x: 10,
-        y: 40,
-        r: 50
-      }]
-    ];
-});
-              
-
-
-
-
-
-
Bubble Chart
-
- -
-
-
-
-
-
-
-
Dynamic Chart
-
- -
-
- -
-
- - -
- .chart-base -
    -
  • chart-type: chart type e.g. bar, polarArea, etc. or other plugins
  • -
  • other options according to chart type
  • -
-
-
- -
<canvas id="base" class="chart-base" chart-type="type"
-  chart-data="data" chart-labels="labels" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("BaseCtrl",
-  function ($scope) {
-    $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales", "Tele Sales", "Corporate Sales"];
-    $scope.data = [300, 500, 100, 40, 120];
-    $scope.type = 'polarArea';
-
-    $scope.toggle = function () {
-      $scope.type = $scope.type === 'polarArea' ?
-        'pie' : 'polarArea';
-    };
-});
-              
-
-
-
-
-
-
- -
-
-
-
Reactive Chart
-
- -
-
-
-
-
-
Chart Data
-
- - - - - - - -
{{label}}
{{data[$parent.$index][$index]}}
- -
-
-
-
-
-
- -
-
- - -
<canvas id="base" class="chart-bar"
-  chart-data="data" chart-labels="labels" chart-colors="colors"
-  chart-dataset-override="datasetOverride" >
-</canvas> 
-
- -
angular.module("app", ["chart.js"]).controller("MixedChartCtrl",
-  function ($scope) {
-    $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72'];
-
-    $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
-    $scope.data = [
-      [65, -59, 80, 81, -56, 55, -40],
-      [28, 48, -40, 19, 86, 27, 90]
-    ];
-    $scope.datasetOverride = [
-      {
-        label: "Bar chart",
-        borderWidth: 1,
-        type: 'bar'
-      },
-      {
-        label: "Line chart",
-        borderWidth: 3,
-        hoverBackgroundColor: "rgba(255,99,132,0.4)",
-        hoverBorderColor: "rgba(255,99,132,1)",
-        type: 'line'
-      }
-    ];
-});
-              
-
-
-
-
-
-
Bar line Chart
-
- -
-
-
-
-
-
- - - - - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/commonjs.html b/static/node_modules/angular-chart.js/examples/commonjs.html deleted file mode 100644 index b038f950..00000000 --- a/static/node_modules/angular-chart.js/examples/commonjs.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - CommonJS - - - -
-
-
-
-
-
CommonJS
-
- -
-
-
-
-
- - - - diff --git a/static/node_modules/angular-chart.js/examples/commonjs.js b/static/node_modules/angular-chart.js/examples/commonjs.js deleted file mode 100644 index 23157482..00000000 --- a/static/node_modules/angular-chart.js/examples/commonjs.js +++ /dev/null @@ -1,19 +0,0 @@ -(function () { - 'use strict'; - - var angular = require('angular'); - - var app = angular.module('app', [ - require('angular-chart') - ]); - - app.controller('CommonJSCtrl', ['$scope', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/examples/dataset-override.html b/static/node_modules/angular-chart.js/examples/dataset-override.html deleted file mode 100644 index 7d60e395..00000000 --- a/static/node_modules/angular-chart.js/examples/dataset-override.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Charts with datasets overrides - - - -
-
-
-
-
-
Mixed chart
-
- -
-
-
-
-
-
Doughnut dataset override
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/dataset-override.js b/static/node_modules/angular-chart.js/examples/dataset-override.js deleted file mode 100644 index e7cf76da..00000000 --- a/static/node_modules/angular-chart.js/examples/dataset-override.js +++ /dev/null @@ -1,32 +0,0 @@ -angular.module('app', ['chart.js']).controller('OverrideCtrl', ['$scope', function ($scope) { - 'use strict'; - - $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72']; - - $scope.labels1 = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.data1 = [ - [65, -59, 80, 81, -56, 55, -40], - [28, 48, -40, 19, 86, 27, 90] - ]; - $scope.datasetOverride1 = [ - { - label: 'Override Series A', - borderWidth: 1, - type: 'bar' - }, - { - label: 'Override Series B', - borderWidth: 3, - hoverBackgroundColor: 'rgba(255,99,132,0.4)', - hoverBorderColor: 'rgba(255,99,132,1)', - type: 'line' - } - ]; - - $scope.labels2 = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - $scope.data2 = [350, 450, 100]; - $scope.datasetOverride2 = { - hoverBackgroundColor: ['#45b7cd', '#ff6384', '#ff8e72'], - hoverBorderColor: ['#45b7cd', '#ff6384', '#ff8e72'] - }; -}]); diff --git a/static/node_modules/angular-chart.js/examples/scatter.html b/static/node_modules/angular-chart.js/examples/scatter.html deleted file mode 100644 index 82c54d85..00000000 --- a/static/node_modules/angular-chart.js/examples/scatter.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Bubble chart - - - -
-
-
-
-
-
Scatter chart
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/scatter.js b/static/node_modules/angular-chart.js/examples/scatter.js deleted file mode 100644 index 5d60f6b2..00000000 --- a/static/node_modules/angular-chart.js/examples/scatter.js +++ /dev/null @@ -1,30 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('app', ['chart.js']); - - app.controller('ScatterCtrl', ['$scope', function ($scope) { - $scope.data = [[{ - x: -10, - y: -5 - }, { - x: 0, - y: 10 - }, { - x: 10, - y: 5 - }]]; - - $scope.options = { - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }] - } - }; - - }]); - - -})(); diff --git a/static/node_modules/angular-chart.js/examples/smoothscroll.min.js b/static/node_modules/angular-chart.js/examples/smoothscroll.min.js deleted file mode 100644 index 631953c3..00000000 --- a/static/node_modules/angular-chart.js/examples/smoothscroll.min.js +++ /dev/null @@ -1 +0,0 @@ -window.smoothScroll=function(){if(document.querySelectorAll===void 0||window.pageYOffset===void 0||history.pushState===void 0){return}var e=function(e){if(e.nodeName==="HTML")return-window.pageYOffset;return e.getBoundingClientRect().top+window.pageYOffset};var t=function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1};var n=function(e,n,r,i){if(r>i)return n;return e+(n-e)*t(r/i)};var r=function(t,r,i){r=r||500;var s=window.pageYOffset;if(typeof t==="number"){var o=parseInt(t)}else{var o=e(t)}var u=Date.now();var a=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){window.setTimeout(e,15)};var f=function(){var e=Date.now()-u;window.scroll(0,n(s,o,e,r));if(e>r){if(typeof i==="function"){i(t)}}else{a(f)}};f()};var i=function(e){e.preventDefault();if(location.hash!==this.hash)window.history.pushState(null,null,this.hash);r(document.getElementById(this.hash.substring(1)),500,function(e){location.replace("#"+e.id)})};document.addEventListener("DOMContentLoaded",function(){var e=document.querySelectorAll('a[href^="#"]'),t;for(var n=e.length;t=e[--n];){t.addEventListener("click",i,false)}});return r}() diff --git a/static/node_modules/angular-chart.js/examples/stacked-bars.html b/static/node_modules/angular-chart.js/examples/stacked-bars.html deleted file mode 100644 index ce78e7fb..00000000 --- a/static/node_modules/angular-chart.js/examples/stacked-bars.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - Stacked Bar chart - - - -
-
-
-
-
-
-
Stacked Bar Chart
-
- -
-
-
-
-
- - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/tables.html b/static/node_modules/angular-chart.js/examples/tables.html deleted file mode 100644 index f21e5349..00000000 --- a/static/node_modules/angular-chart.js/examples/tables.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Data tables - - - -
-
-
-
-
-
Chart Data
-
- - - - - - - -
{{label}}
{{data[$parent.$index][$index]}}
- -
-
-
-
-
-
Reactive Chart
-
- -
-
-
-
-
- - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/tabs.html b/static/node_modules/angular-chart.js/examples/tabs.html deleted file mode 100644 index 32091f1f..00000000 --- a/static/node_modules/angular-chart.js/examples/tabs.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Charts in tabs - - - -
-
-
- - -
- -
-
- -
- -
-
-
-
-
- - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/ticks.html b/static/node_modules/angular-chart.js/examples/ticks.html deleted file mode 100644 index 6e2885cf..00000000 --- a/static/node_modules/angular-chart.js/examples/ticks.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - Realtime ticks - - - -
-
-
-
-
-
Ticks Chart
-
- -
-
-
-
-
- - - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/webpack.commonjs.js b/static/node_modules/angular-chart.js/examples/webpack.commonjs.js deleted file mode 100644 index 528eba9e..00000000 --- a/static/node_modules/angular-chart.js/examples/webpack.commonjs.js +++ /dev/null @@ -1,18 +0,0 @@ -(function () { - 'use strict'; - - // install with npm: npm i --save angular-chart.js - // build with `npm bin`/webpack --config examples/webpack.commonjs.js --display-modules --progress - module.exports = { - entry: './examples/commonjs.js', - output: { - filename: './examples/commonjs.bundle.js' - }, - resolve: { - alias: { - 'angular-chart': '../angular-chart.js' // not required when you install with npm - } - } - }; - -})(); diff --git a/static/node_modules/angular-chart.js/examples/webpack.config.js b/static/node_modules/angular-chart.js/examples/webpack.config.js deleted file mode 100644 index 6eb06580..00000000 --- a/static/node_modules/angular-chart.js/examples/webpack.config.js +++ /dev/null @@ -1,12 +0,0 @@ -// install with npm: npm i --save angular-chart.js -module.exports = { - entry: './amd.js', - output: { - filename: './bundle.js' - }, - resolve: { - alias: { - 'angular-chart': '../angular-chart.js' // should not be required if you installed with npm - } - } -}; diff --git a/static/node_modules/angular-chart.js/examples/xy.html b/static/node_modules/angular-chart.js/examples/xy.html deleted file mode 100644 index 08950b76..00000000 --- a/static/node_modules/angular-chart.js/examples/xy.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Charts with { x, y } - - - -
-
-
-
-
-
x y
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/examples/xy.js b/static/node_modules/angular-chart.js/examples/xy.js deleted file mode 100644 index df6dcd11..00000000 --- a/static/node_modules/angular-chart.js/examples/xy.js +++ /dev/null @@ -1,18 +0,0 @@ -angular.module('app', ['chart.js']).controller('LineCtrl', ['$scope', function ($scope) { - 'use strict'; - - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [ {x: 0, y: 10}, {x: 0, y: 1}, {x: 1, y: 6}, {x: 4, y: 2} ], - [ {x: 0, y: 2}, {x: 5, y: 7}, {x: 4, y: 2}, {x: 2, y: 9} ] - ]; - $scope.options = { - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }] - } - }; -}]); - diff --git a/static/node_modules/angular-chart.js/gulpfile.js b/static/node_modules/angular-chart.js/gulpfile.js deleted file mode 100644 index 31636709..00000000 --- a/static/node_modules/angular-chart.js/gulpfile.js +++ /dev/null @@ -1,170 +0,0 @@ -(function () { - 'use strict'; - - var bumper = require('gulp-bump'); - var fs = require('fs'); - var git = require('gulp-git'); - var gulp = require('gulp'); - var gzip = require('gulp-gzip'); - var header = require('gulp-header'); - var istanbul = require('gulp-istanbul'); - var istanbulReport = require('gulp-istanbul-report'); - var jshint = require('gulp-jshint'); - var jscs = require('gulp-jscs'); - var mocha = require('gulp-spawn-mocha'); - var mochaPhantomJS = require('gulp-mocha-phantomjs'); - var path = require('path'); - var pkg = require('./package.json'); - var rename = require('gulp-rename'); - var rimraf = require('gulp-rimraf'); - var sequence = require('gulp-sequence'); - var shell = require('gulp-shell'); - var sourcemaps = require('gulp-sourcemaps'); - var stylish = require('jshint-stylish'); - var tar = require('gulp-tar'); - var uglify = require('gulp-uglify'); - - var banner = ['/*!', - ' * <%= pkg.name %> - <%= pkg.description %>', - ' * <%= pkg.homepage %>', - ' * Version: <%= version %>', - ' *', - ' * Copyright 2016 Jerome Touffe-Blin', - ' * Released under the <%= pkg.license %> license', - ' * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE', - ' */', - '' - ].join('\n'); - - gulp.task('clean', function () { - return gulp.src('./dist/*', { read: false }) - .pipe(rimraf()); - }); - - gulp.task('lint', function () { - return gulp.src('**/*.js') - .pipe(jshint()) - .pipe(jshint.reporter(stylish)); - }); - - gulp.task('style', function () { - return gulp.src('**/*.js') - .pipe(jscs()); - }); - - gulp.task('cover', function () { - return gulp.src('angular-chart.js') - .pipe(istanbul({ coverageVariable: '__coverage__' })) - .pipe(rename('coverage.js')) - .pipe(gulp.dest('test/fixtures')); - }); - - gulp.task('unit', function () { - return gulp.src('test/index.html', { read: false }) - .pipe(mochaPhantomJS({ - phantomjs: { - hooks: 'mocha-phantomjs-istanbul', - coverageFile: 'coverage/coverage.json' - }, - reporter: process.env.REPORTER || 'spec' - })); - }); - - gulp.task('integration', function () { - return gulp.src(path.join('test', 'test.integration.js'), { read: false }) - .pipe(mocha({ reporter: 'list', timeout: 20000, require: 'test/support/setup.js' })); - }); - - gulp.task('report', function () { - return gulp.src('coverage/coverage.json') - .pipe(istanbulReport({ reporters: ['lcov'] })); - }); - - gulp.task('bump-patch', bump('patch')); - gulp.task('bump-minor', bump('minor')); - gulp.task('bump-major', bump('major')); - - gulp.task('bower', function () { - return gulp.src('./angular-chart.js') - .pipe(header(banner, { pkg : pkg, version: version() } )) - .pipe(gulp.dest('./dist')); - }); - - gulp.task('js', ['lint', 'style', 'bower'], function () { - return gulp.src('./angular-chart.js') - .pipe(header(banner, { pkg : pkg, version: version() } )) - .pipe(rename('angular-chart.min.js')) - .pipe(sourcemaps.init()) - .pipe(uglify({ preserveComments: 'license' })) - .pipe(sourcemaps.write('./')) - .pipe(gulp.dest('./dist')); - }); - - gulp.task('build', function () { - return gulp.src(['dist/*', '!./dist/*.tar.gz']) - .pipe(tar('angular-chart.js.tar')) - .pipe(gzip({ gzipOptions: { level: 9 } })) - .pipe(gulp.dest('dist/')); - }); - - gulp.task('update', function (cb) { - fs.readFile('./examples/charts.template.html', 'utf8', function (err, file) { - if (err) return cb(err); - file = file.replace('', version()); - fs.writeFile('./examples/charts.html', file, cb); - }); - }); - - gulp.task('git-commit', function () { - var v = version(); - gulp.src(['./dist/*', './package.json', './bower.json', './examples/charts.html', './test/fixtures/coverage.js']) - .pipe(git.add()) - .pipe(git.commit(v)) - ; - }); - - gulp.task('git-push', function (cb) { - var v = version(); - git.push('origin', 'master', function (err) { - if (err) return cb(err); - git.tag(v, v, function (err) { - if (err) return cb(err); - git.push('origin', 'master', {args: '--tags' }, cb); - }); - }); - }); - - gulp.task('npm', shell.task([ - 'npm publish' - ])); - - gulp.task('watch', function () { - gulp.watch('./*.js', ['js']); - return true; - }); - - gulp.task('docker-test', shell.task([ - 'npm run docker-test' - ])); - - function bump (level) { - return function () { - return gulp.src(['./package.json', './bower.json']) - .pipe(bumper({type: level})) - .pipe(gulp.dest('./')); - }; - } - - function version () { - return JSON.parse(fs.readFileSync('package.json', 'utf8')).version; - } - - gulp.task('default', sequence('docker-test', 'assets')); - gulp.task('assets', sequence('clean', 'js', 'build')); - gulp.task('test', sequence('cover', 'unit', 'integration', 'report')); - gulp.task('check', sequence(['lint', 'style'], 'test')); - gulp.task('deploy-patch', sequence('docker-test', 'bump-patch', 'assets', 'update', 'git-commit', 'git-push', 'npm')); - gulp.task('deploy-minor', sequence('docker-test', 'bump-minor', 'assets', 'update', 'git-commit', 'git-push', 'npm')); - gulp.task('deploy-major', sequence('docker-test', 'bump-patch', 'assets', 'update', 'git-commit', 'git-push', 'npm')); - -})(); diff --git a/static/node_modules/angular-chart.js/package.json b/static/node_modules/angular-chart.js/package.json deleted file mode 100644 index 43459960..00000000 --- a/static/node_modules/angular-chart.js/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "angular-chart.js@1.1.1", - "D:\\Workspace\\Git\\foundation\\static" - ] - ], - "_from": "angular-chart.js@1.1.1", - "_id": "angular-chart.js@1.1.1", - "_inBundle": false, - "_integrity": "sha1-SfDhjQgXYrbUyXkeSHr/L7sw9a4=", - "_location": "/angular-chart.js", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-chart.js@1.1.1", - "name": "angular-chart.js", - "escapedName": "angular-chart.js", - "rawSpec": "1.1.1", - "saveSpec": null, - "fetchSpec": "1.1.1" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-chart.js/-/angular-chart.js-1.1.1.tgz", - "_spec": "1.1.1", - "_where": "D:\\Workspace\\Git\\foundation\\static", - "author": { - "name": "Jerome Touffe-Blin", - "email": "jtblin@gmail.com" - }, - "bugs": { - "url": "https://github.com/jtblin/angular-chart.js/issues" - }, - "dependencies": { - "angular": "1.x", - "chart.js": "2.3.x" - }, - "description": "An angular.js wrapper for Chart.js", - "devDependencies": { - "Rainbow": "git+https://github.com/ccampbell/rainbow.git", - "angular-bootstrap": "^0.12.2", - "angular-mocks": "^1.5.7", - "bootstrap": "^3.3.7", - "chai": "^3.4.1", - "chai-string": "^1.2.0", - "codeclimate-test-reporter": "^0.3.1", - "cp": "^0.2.0", - "font-awesome": "^4.6.3", - "gm": "^1.22.0", - "gulp": "^3.9.0", - "gulp-bump": "^2.1.0", - "gulp-git": "^1.7.1", - "gulp-gzip": "^1.2.0", - "gulp-header": "^1.8.3", - "gulp-istanbul": "^1.0.0", - "gulp-istanbul-report": "^0.0.1", - "gulp-jscs": "^3.0.2", - "gulp-jshint": "^2.0.0", - "gulp-mocha-phantomjs": "^0.11.0", - "gulp-rename": "^1.2.0", - "gulp-rimraf": "^0.2.0", - "gulp-sequence": "^0.4.1", - "gulp-shell": "^0.5.1", - "gulp-sourcemaps": "^1.0.0", - "gulp-spawn-mocha": "^2.0.1", - "gulp-tar": "^1.9.0", - "gulp-uglify": "^1.5.3", - "imgur-node-api": "^0.1.0", - "jshint": "^2.9.1", - "jshint-stylish": "^2.0.1", - "mkdirp": "^0.5.0", - "mocha": "^2.1.0", - "mocha-phantomjs-istanbul": "^0.0.2", - "requirejs": "^2.2.0", - "sinon": "^1.12.2", - "sinon-chai": "^2.7.0", - "testatic": "^0.1.0", - "tmp-sync": "^1.1.0", - "webpack": "^1.13.1", - "webshot": "^0.18.0" - }, - "directories": { - "example": "examples" - }, - "homepage": "http://jtblin.github.io/angular-chart.js/", - "license": "BSD-2-Clause", - "main": "dist/angular-chart.js", - "name": "angular-chart.js", - "repository": { - "type": "git", - "url": "git://github.com/jtblin/angular-chart.js.git" - }, - "scripts": { - "codeclimate": "./node_modules/codeclimate-test-reporter/bin/codeclimate.js < coverage/lcov.info", - "docker": "npm run docker-build && npm run docker-test", - "docker-build": "docker build -t angular-chart.js .", - "docker-test": "docker run --rm -i -v $(pwd)/coverage/:/src/coverage/ -v $(pwd)/test/:/src/test/ -v $(pwd)/angular-chart.js:/src/angular-chart.js angular-chart.js", - "test": "gulp check" - }, - "version": "1.1.1" -} diff --git a/static/node_modules/angular-chart.js/test/fixtures/29-tabs.html b/static/node_modules/angular-chart.js/test/fixtures/29-tabs.html deleted file mode 100644 index 6c988877..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/29-tabs.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Charts in tabs - - - -
-
-
- - -
- -
-
- -
- -
-
-
-
-
- - - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/29-tabs.js b/static/node_modules/angular-chart.js/test/fixtures/29-tabs.js deleted file mode 100644 index b29dab73..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/29-tabs.js +++ /dev/null @@ -1,18 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('examples', ['chart.js', 'ui.bootstrap']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('TabsCtrl', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.active = true; - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/29-tabs.png b/static/node_modules/angular-chart.js/test/fixtures/29-tabs.png deleted file mode 100644 index 62bd3549004faead827032fdbdb9b14fd2b0ac6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69542 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 OkI8Y%W4TA+k^cu`0+4wC diff --git a/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.html b/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.html deleted file mode 100644 index 2010ea12..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - Pie update colors - - - -
-
- - -
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.js b/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.js deleted file mode 100644 index 9265754d..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.js +++ /dev/null @@ -1,34 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('pie', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('PieCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Series A', 'Series B']; - $scope.data = [65, 59]; - $scope.colors = [{ // red - backgroundColor: 'rgba(247,70,74,0.2)', - borderColor: 'rgba(247,70,74,1)', - pointBackgroundColor: 'rgba(247,70,74,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(247,70,74,0.8)' - }, - { // green - backgroundColor: 'rgba(70,191,189,0.2)', - borderColor: 'rgba(70,191,189,1)', - pointBackgroundColor: 'rgba(70,191,189,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(70,191,189,0.8)' - }]; - - $timeout(function () { - $scope.data = [49, 65]; - }, 0); - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.png b/static/node_modules/angular-chart.js/test/fixtures/51-pie-update-colours.png deleted file mode 100644 index 89c440694566ad86f5797b17936c81b1b8a2a89c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33947 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 - - - - Not enough colors - - - -
-
- - -
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.js b/static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.js deleted file mode 100644 index 2f5d97dc..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.js +++ /dev/null @@ -1,36 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('pie', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('PieCtrl', ['$scope', function ($scope) { - var cnt = 0; - $scope.colors = []; - $scope.labels = ['Series A', 'Series B']; - $scope.chartGetColor = function () { - return ++cnt % 2 > 0 ? - { // red - backgroundColor: 'rgba(247,70,74,0.2)', - borderColor: 'rgba(247,70,74,1)', - pointBackgroundColor: 'rgba(247,70,74,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(247,70,74,0.8)' - } - : - { // green - backgroundColor: 'rgba(70,191,189,0.2)', - borderColor: 'rgba(70,191,189,1)', - pointBackgroundColor: 'rgba(70,191,189,1)', - pointBorderColor: '#fff', - pointHoverBackgroundColor: '#fff', - pointHoverBorderColor: 'rgba(70,191,189,0.8)' - }; - }; - $scope.data = [49, 65]; - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.png b/static/node_modules/angular-chart.js/test/fixtures/54-not-enough-colours.png deleted file mode 100644 index f1ebc8bc1860e95cbc6d1fee14c4e96453ef86e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34002 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%0DI{n)VKu$paZ*CJ?T~X(wZHy8_hQSZhZ-WAy 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 IS4|)PFY-Q< - - - - Hex colors - - - -
-
- - -
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.js b/static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.js deleted file mode 100644 index f827ee4a..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.js +++ /dev/null @@ -1,15 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('pie', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('PieCtrl', ['$scope', function ($scope) { - $scope.labels = ['Series A', 'Series B']; - $scope.colors = ['#9AFEFF', '#D1D0CE']; - $scope.data = [49, 65]; - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.png b/static/node_modules/angular-chart.js/test/fixtures/57-hex-colours.png deleted file mode 100644 index f91a05c8b909a2ada9644908506dac0256419036..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33144 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 diff --git a/static/node_modules/angular-chart.js/test/fixtures/bubble.html b/static/node_modules/angular-chart.js/test/fixtures/bubble.html deleted file mode 100644 index 635d84bd..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/bubble.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Bubble chart - - - -
-
-
-
-
-
Bubble chart
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/bubble.js b/static/node_modules/angular-chart.js/test/fixtures/bubble.js deleted file mode 100644 index 7af4b8af..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/bubble.js +++ /dev/null @@ -1,787 +0,0 @@ -angular.module('app', ['chart.js']) - .config(['ChartJsProvider', function (ChartJsProvider) { - 'use strict'; - ChartJsProvider.setOptions({ - tooltips: { enabled: false } - }); - }]) - .controller('BubbleCtrl', ['$scope',function ($scope) { - 'use strict'; - - $scope.colors = [ - { - backgroundColor: 'rgba(151,187,205,0.2)', - pointBackgroundColor: 'rgba(151,187,205,1)', - pointHoverBackgroundColor: 'rgba(151,187,205,0.8)', - borderColor: 'rgba(151,187,205,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(151,187,205,1)' - }, - { - backgroundColor: 'rgba(220,220,220,0.2)', - pointBackgroundColor: 'rgba(220,220,220,1)', - pointHoverBackgroundColor: 'rgba(220,220,220,0.8)', - borderColor: 'rgba(220,220,220,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(220,220,220,1)' - }, - { - backgroundColor: 'rgba(247,70,74,0.2)', - pointBackgroundColor: 'rgba(247,70,74,1)', - pointHoverBackgroundColor: 'rgba(247,70,74,0.8)', - borderColor: 'rgba(247,70,74,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(247,70,74,1)' - }, - { - backgroundColor: 'rgba(70,191,189,0.2)', - pointBackgroundColor: 'rgba(70,191,189,1)', - pointHoverBackgroundColor: 'rgba(70,191,189,0.8)', - borderColor: 'rgba(70,191,189,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(70,191,189,1)' - }, - { - backgroundColor: 'rgba(253,180,92,0.2)', - pointBackgroundColor: 'rgba(253,180,92,1)', - pointHoverBackgroundColor: 'rgba(253,180,92,0.8)', - borderColor: 'rgba(253,180,92,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(253,180,92,1)' - }, - { - backgroundColor: 'rgba(148,159,177,0.2)', - pointBackgroundColor: 'rgba(148,159,177,1)', - pointHoverBackgroundColor: 'rgba(148,159,177,0.8)', - borderColor: 'rgba(148,159,177,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(148,159,177,1)' - }, - { - backgroundColor: 'rgba(77,83,96,0.2)', - pointBackgroundColor: 'rgba(77,83,96,1)', - pointHoverBackgroundColor: 'rgba(77,83,96,0.8)', - borderColor: 'rgba(77,83,96,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(77,83,96,1)' - }, - { - backgroundColor: 'rgba(151,57,74,0.2)', - pointBackgroundColor: 'rgba(151,57,74,1)', - pointHoverBackgroundColor: 'rgba(151,57,74,0.8)', - borderColor: 'rgba(151,57,74,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(151,57,74,1)' - }, - { - backgroundColor: 'rgba(198,232,17,0.2)', - pointBackgroundColor: 'rgba(198,232,17,1)', - pointHoverBackgroundColor: 'rgba(198,232,17,0.8)', - borderColor: 'rgba(198,232,17,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(198,232,17,1)' - }, - { - backgroundColor: 'rgba(39,249,229,0.2)', - pointBackgroundColor: 'rgba(39,249,229,1)', - pointHoverBackgroundColor: 'rgba(39,249,229,0.8)', - borderColor: 'rgba(39,249,229,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(39,249,229,1)' - }, - { - backgroundColor: 'rgba(98,128,233,0.2)', - pointBackgroundColor: 'rgba(98,128,233,1)', - pointHoverBackgroundColor: 'rgba(98,128,233,0.8)', - borderColor: 'rgba(98,128,233,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(98,128,233,1)' - }, - { - backgroundColor: 'rgba(195,99,4,0.2)', - pointBackgroundColor: 'rgba(195,99,4,1)', - pointHoverBackgroundColor: 'rgba(195,99,4,0.8)', - borderColor: 'rgba(195,99,4,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(195,99,4,1)' - }, - { - backgroundColor: 'rgba(81,204,249,0.2)', - pointBackgroundColor: 'rgba(81,204,249,1)', - pointHoverBackgroundColor: 'rgba(81,204,249,0.8)', - borderColor: 'rgba(81,204,249,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(81,204,249,1)' - }, - { - backgroundColor: 'rgba(159,197,163,0.2)', - pointBackgroundColor: 'rgba(159,197,163,1)', - pointHoverBackgroundColor: 'rgba(159,197,163,0.8)', - borderColor: 'rgba(159,197,163,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(159,197,163,1)' - }, - { - backgroundColor: 'rgba(122,68,60,0.2)', - pointBackgroundColor: 'rgba(122,68,60,1)', - pointHoverBackgroundColor: 'rgba(122,68,60,0.8)', - borderColor: 'rgba(122,68,60,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(122,68,60,1)' - }, - { - backgroundColor: 'rgba(183,199,142,0.2)', - pointBackgroundColor: 'rgba(183,199,142,1)', - pointHoverBackgroundColor: 'rgba(183,199,142,0.8)', - borderColor: 'rgba(183,199,142,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(183,199,142,1)' - }, - { - backgroundColor: 'rgba(33,125,4,0.2)', - pointBackgroundColor: 'rgba(33,125,4,1)', - pointHoverBackgroundColor: 'rgba(33,125,4,0.8)', - borderColor: 'rgba(33,125,4,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(33,125,4,1)' - }, - { - backgroundColor: 'rgba(100,33,169,0.2)', - pointBackgroundColor: 'rgba(100,33,169,1)', - pointHoverBackgroundColor: 'rgba(100,33,169,0.8)', - borderColor: 'rgba(100,33,169,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(100,33,169,1)' - }, - { - backgroundColor: 'rgba(10,128,69,0.2)', - pointBackgroundColor: 'rgba(10,128,69,1)', - pointHoverBackgroundColor: 'rgba(10,128,69,0.8)', - borderColor: 'rgba(10,128,69,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(10,128,69,1)' - }, - { - backgroundColor: 'rgba(55,144,44,0.2)', - pointBackgroundColor: 'rgba(55,144,44,1)', - pointHoverBackgroundColor: 'rgba(55,144,44,0.8)', - borderColor: 'rgba(55,144,44,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(55,144,44,1)' - }, - { - backgroundColor: 'rgba(111,248,27,0.2)', - pointBackgroundColor: 'rgba(111,248,27,1)', - pointHoverBackgroundColor: 'rgba(111,248,27,0.8)', - borderColor: 'rgba(111,248,27,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(111,248,27,1)' - }, - { - backgroundColor: 'rgba(241,104,154,0.2)', - pointBackgroundColor: 'rgba(241,104,154,1)', - pointHoverBackgroundColor: 'rgba(241,104,154,0.8)', - borderColor: 'rgba(241,104,154,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(241,104,154,1)' - }, - { - backgroundColor: 'rgba(158,253,143,0.2)', - pointBackgroundColor: 'rgba(158,253,143,1)', - pointHoverBackgroundColor: 'rgba(158,253,143,0.8)', - borderColor: 'rgba(158,253,143,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(158,253,143,1)' - }, - { - backgroundColor: 'rgba(186,25,134,0.2)', - pointBackgroundColor: 'rgba(186,25,134,1)', - pointHoverBackgroundColor: 'rgba(186,25,134,0.8)', - borderColor: 'rgba(186,25,134,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(186,25,134,1)' - }, - { - backgroundColor: 'rgba(81,34,77,0.2)', - pointBackgroundColor: 'rgba(81,34,77,1)', - pointHoverBackgroundColor: 'rgba(81,34,77,0.8)', - borderColor: 'rgba(81,34,77,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(81,34,77,1)' - }, - { - backgroundColor: 'rgba(254,6,184,0.2)', - pointBackgroundColor: 'rgba(254,6,184,1)', - pointHoverBackgroundColor: 'rgba(254,6,184,0.8)', - borderColor: 'rgba(254,6,184,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(254,6,184,1)' - }, - { - backgroundColor: 'rgba(4,230,203,0.2)', - pointBackgroundColor: 'rgba(4,230,203,1)', - pointHoverBackgroundColor: 'rgba(4,230,203,0.8)', - borderColor: 'rgba(4,230,203,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(4,230,203,1)' - }, - { - backgroundColor: 'rgba(204,31,79,0.2)', - pointBackgroundColor: 'rgba(204,31,79,1)', - pointHoverBackgroundColor: 'rgba(204,31,79,0.8)', - borderColor: 'rgba(204,31,79,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(204,31,79,1)' - }, - { - backgroundColor: 'rgba(95,152,82,0.2)', - pointBackgroundColor: 'rgba(95,152,82,1)', - pointHoverBackgroundColor: 'rgba(95,152,82,0.8)', - borderColor: 'rgba(95,152,82,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(95,152,82,1)' - }, - { - backgroundColor: 'rgba(120,249,206,0.2)', - pointBackgroundColor: 'rgba(120,249,206,1)', - pointHoverBackgroundColor: 'rgba(120,249,206,0.8)', - borderColor: 'rgba(120,249,206,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(120,249,206,1)' - }, - { - backgroundColor: 'rgba(229,137,70,0.2)', - pointBackgroundColor: 'rgba(229,137,70,1)', - pointHoverBackgroundColor: 'rgba(229,137,70,0.8)', - borderColor: 'rgba(229,137,70,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(229,137,70,1)' - }, - { - backgroundColor: 'rgba(54,98,166,0.2)', - pointBackgroundColor: 'rgba(54,98,166,1)', - pointHoverBackgroundColor: 'rgba(54,98,166,0.8)', - borderColor: 'rgba(54,98,166,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(54,98,166,1)' - }, - { - backgroundColor: 'rgba(22,81,208,0.2)', - pointBackgroundColor: 'rgba(22,81,208,1)', - pointHoverBackgroundColor: 'rgba(22,81,208,0.8)', - borderColor: 'rgba(22,81,208,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(22,81,208,1)' - }, - { - backgroundColor: 'rgba(139,248,40,0.2)', - pointBackgroundColor: 'rgba(139,248,40,1)', - pointHoverBackgroundColor: 'rgba(139,248,40,0.8)', - borderColor: 'rgba(139,248,40,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(139,248,40,1)' - }, - { - backgroundColor: 'rgba(139,221,190,0.2)', - pointBackgroundColor: 'rgba(139,221,190,1)', - pointHoverBackgroundColor: 'rgba(139,221,190,0.8)', - borderColor: 'rgba(139,221,190,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(139,221,190,1)' - }, - { - backgroundColor: 'rgba(230,218,251,0.2)', - pointBackgroundColor: 'rgba(230,218,251,1)', - pointHoverBackgroundColor: 'rgba(230,218,251,0.8)', - borderColor: 'rgba(230,218,251,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(230,218,251,1)' - }, - { - backgroundColor: 'rgba(245,21,15,0.2)', - pointBackgroundColor: 'rgba(245,21,15,1)', - pointHoverBackgroundColor: 'rgba(245,21,15,0.8)', - borderColor: 'rgba(245,21,15,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(245,21,15,1)' - }, - { - backgroundColor: 'rgba(36,166,81,0.2)', - pointBackgroundColor: 'rgba(36,166,81,1)', - pointHoverBackgroundColor: 'rgba(36,166,81,0.8)', - borderColor: 'rgba(36,166,81,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(36,166,81,1)' - }, - { - backgroundColor: 'rgba(177,41,153,0.2)', - pointBackgroundColor: 'rgba(177,41,153,1)', - pointHoverBackgroundColor: 'rgba(177,41,153,0.8)', - borderColor: 'rgba(177,41,153,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(177,41,153,1)' - }, - { - backgroundColor: 'rgba(44,173,178,0.2)', - pointBackgroundColor: 'rgba(44,173,178,1)', - pointHoverBackgroundColor: 'rgba(44,173,178,0.8)', - borderColor: 'rgba(44,173,178,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(44,173,178,1)' - }, - { - backgroundColor: 'rgba(134,50,197,0.2)', - pointBackgroundColor: 'rgba(134,50,197,1)', - pointHoverBackgroundColor: 'rgba(134,50,197,0.8)', - borderColor: 'rgba(134,50,197,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(134,50,197,1)' - }, - { - backgroundColor: 'rgba(176,188,149,0.2)', - pointBackgroundColor: 'rgba(176,188,149,1)', - pointHoverBackgroundColor: 'rgba(176,188,149,0.8)', - borderColor: 'rgba(176,188,149,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(176,188,149,1)' - }, - { - backgroundColor: 'rgba(92,9,164,0.2)', - pointBackgroundColor: 'rgba(92,9,164,1)', - pointHoverBackgroundColor: 'rgba(92,9,164,0.8)', - borderColor: 'rgba(92,9,164,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(92,9,164,1)' - }, - { - backgroundColor: 'rgba(184,93,102,0.2)', - pointBackgroundColor: 'rgba(184,93,102,1)', - pointHoverBackgroundColor: 'rgba(184,93,102,0.8)', - borderColor: 'rgba(184,93,102,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(184,93,102,1)' - }, - { - backgroundColor: 'rgba(1,235,91,0.2)', - pointBackgroundColor: 'rgba(1,235,91,1)', - pointHoverBackgroundColor: 'rgba(1,235,91,0.8)', - borderColor: 'rgba(1,235,91,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(1,235,91,1)' - }, - { - backgroundColor: 'rgba(148,100,155,0.2)', - pointBackgroundColor: 'rgba(148,100,155,1)', - pointHoverBackgroundColor: 'rgba(148,100,155,0.8)', - borderColor: 'rgba(148,100,155,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(148,100,155,1)' - }, - { - backgroundColor: 'rgba(17,253,128,0.2)', - pointBackgroundColor: 'rgba(17,253,128,1)', - pointHoverBackgroundColor: 'rgba(17,253,128,0.8)', - borderColor: 'rgba(17,253,128,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(17,253,128,1)' - }, - { - backgroundColor: 'rgba(107,59,91,0.2)', - pointBackgroundColor: 'rgba(107,59,91,1)', - pointHoverBackgroundColor: 'rgba(107,59,91,0.8)', - borderColor: 'rgba(107,59,91,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(107,59,91,1)' - }, - { - backgroundColor: 'rgba(105,111,203,0.2)', - pointBackgroundColor: 'rgba(105,111,203,1)', - pointHoverBackgroundColor: 'rgba(105,111,203,0.8)', - borderColor: 'rgba(105,111,203,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(105,111,203,1)' - }, - { - backgroundColor: 'rgba(86,123,134,0.2)', - pointBackgroundColor: 'rgba(86,123,134,1)', - pointHoverBackgroundColor: 'rgba(86,123,134,0.8)', - borderColor: 'rgba(86,123,134,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(86,123,134,1)' - } - ]; - - $scope.options = { - scales: { - xAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }], - yAxes: [{ - display: false, - ticks: { - max: 125, - min: -125, - stepSize: 10 - } - }] - } - }; - - $scope.data = [ - [ - { - x: -8, - y: -72, - r: 20.5 - } - ], - [ - { - x: -14, - y: -32, - r: 14.25 - } - ], - [ - { - x: 0, - y: 86, - r: 15 - } - ], - [ - { - x: -13, - y: 58, - r: 7.75 - } - ], - [ - { - x: 22, - y: -60, - r: 9.25 - } - ], - [ - { - x: 84, - y: -25, - r: 15.25 - } - ], - [ - { - x: 14, - y: 85, - r: 23.25 - } - ], - [ - { - x: -2, - y: 37, - r: 10.75 - } - ], - [ - { - x: -40, - y: 69, - r: 0.75 - } - ], - [ - { - x: -62, - y: -46, - r: 19.5 - } - ], - [ - { - x: 4, - y: -1, - r: 0.25 - } - ], - [ - { - x: -34, - y: 67, - r: 17.5 - } - ], - [ - { - x: -21, - y: -88, - r: 16.25 - } - ], - [ - { - x: 90, - y: 80, - r: 24.75 - } - ], - [ - { - x: 7, - y: 93, - r: 20.75 - } - ], - [ - { - x: 48, - y: 39, - r: 7.75 - } - ], - [ - { - x: 99, - y: -20, - r: 2.75 - } - ], - [ - { - x: -48, - y: 52, - r: 4.5 - } - ], - [ - { - x: -57, - y: -39, - r: 21 - } - ], - [ - { - x: 31, - y: -58, - r: 3.25 - } - ], - [ - { - x: 96, - y: 62, - r: 10.25 - } - ], - [ - { - x: 58, - y: -54, - r: 19.5 - } - ], - [ - { - x: 8, - y: 73, - r: 12 - } - ], - [ - { - x: 67, - y: 97, - r: 8.5 - } - ], - [ - { - x: -47, - y: -57, - r: 25 - } - ], - [ - { - x: 0, - y: -97, - r: 23.5 - } - ], - [ - { - x: -55, - y: -27, - r: 2 - } - ], - [ - { - x: 68, - y: 9, - r: 12.25 - } - ], - [ - { - x: -5, - y: 63, - r: 20.75 - } - ], - [ - { - x: 80, - y: 31, - r: 18.75 - } - ], - [ - { - x: 47, - y: -21, - r: 2.5 - } - ], - [ - { - x: -72, - y: 94, - r: 1.25 - } - ], - [ - { - x: 11, - y: -90, - r: 5.25 - } - ], - [ - { - x: 45, - y: -20, - r: 3.5 - } - ], - [ - { - x: 99, - y: 42, - r: 8.5 - } - ], - [ - { - x: -8, - y: -65, - r: 11 - } - ], - [ - { - x: -30, - y: -68, - r: 19 - } - ], - [ - { - x: -56, - y: 19, - r: 1 - } - ], - [ - { - x: -22, - y: 46, - r: 9 - } - ], - [ - { - x: 8, - y: 25, - r: 1 - } - ], - [ - { - x: -36, - y: -64, - r: 0.5 - } - ], - [ - { - x: 13, - y: -6, - r: 23.5 - } - ], - [ - { - x: 41, - y: 45, - r: 3.75 - } - ], - [ - { - x: -84, - y: 39, - r: 10.25 - } - ], - [ - { - x: 27, - y: -96, - r: 23.5 - } - ], - [ - { - x: -14, - y: -83, - r: 25 - } - ], - [ - { - x: -89, - y: -78, - r: 1 - } - ], - [ - { - x: -43, - y: -6, - r: 2.5 - } - ], - [ - { - x: 3, - y: 71, - r: 0 - } - ], - [ - { - x: 11, - y: 53, - r: 4.25 - } - ] - ]; - }]); diff --git a/static/node_modules/angular-chart.js/test/fixtures/bubble.png b/static/node_modules/angular-chart.js/test/fixtures/bubble.png deleted file mode 100644 index f9c070b444c0f7c9e0274365b3d9bf838a601bdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57308 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 diff --git a/static/node_modules/angular-chart.js/test/fixtures/charts.html b/static/node_modules/angular-chart.js/test/fixtures/charts.html deleted file mode 100644 index 04732170..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/charts.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Charts - - - -
-
- -
-
-
-
Line Chart
-
- -
-
-
-
-
-
Bar Chart
-
- -
-
-
-
-
-
Doughnut Chart
-
- -
-
-
-
-
-
-
-
Radar Chart
-
- -
-
-
-
-
-
Pie Chart
-
- -
-
-
-
-
-
Polar Area Chart
-
- -
-
-
-
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/charts.js b/static/node_modules/angular-chart.js/test/fixtures/charts.js deleted file mode 100644 index 82dbe8d7..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/charts.js +++ /dev/null @@ -1,68 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('charts', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('LineCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $timeout(function () { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.data = [ - [28, 48, 40, 19, 86, 27, 90], - [65, 59, 80, 81, 56, 55, 40] - ]; - $scope.series = ['Series C', 'Series D']; - }, 0); - }]); - - app.controller('BarCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.options = { scaleShowVerticalLines: false }; - $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $timeout(function () { - $scope.options = { scaleShowVerticalLines: true }; - }, 0); - }]); - - app.controller('DoughnutCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - $scope.data = [0, 0, 0]; - // TODO: investigate why chart was not showing up without this hack - $timeout(function () { - $scope.data = [350, 450, 100]; - }, 0); - }]); - - app.controller('PieCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales']; - $scope.data = [0, 0, 0]; - $timeout(function () { - $scope.data = [350, 450, 100]; - }, 0); - }]); - - app.controller('PolarAreaCtrl', function ($scope) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales']; - $scope.data = [300, 500, 100, 40, 120]; - }); - - app.controller('RadarCtrl', function ($scope) { - $scope.labels = ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running']; - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }); -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/charts.png b/static/node_modules/angular-chart.js/test/fixtures/charts.png deleted file mode 100644 index 7b796aec4607c7998de4da6a32a3897cb3f2cd2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89556 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 diff --git a/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.html b/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.html deleted file mode 100644 index 9ef8d381..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.html +++ /dev/null @@ -1,33 +0,0 @@ - - - - - Pie update colors - - - -
-
- -
-
-
-
Line Chart
-
- -
-
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.js b/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.js deleted file mode 100644 index e26439c3..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.js +++ /dev/null @@ -1,33 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('line', ['chart.js']); - - app.config(function (ChartJsProvider) { - // Configure all charts - ChartJsProvider.setOptions({ - chartColors: ['#FF5252', '#FF8A80'] - }); - // Configure all line charts - ChartJsProvider.setOptions('line', { - showLines: false - }); - }); - - app.controller('LineCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Series A', 'Series B']; - $scope.data = [[15, 23], [59, 80]]; - - // Configure only this instance - $scope.options = { - legend: { - display: false - } - }; - - $timeout(function () { - $scope.data = [[15, 23], [59, 80]]; - }, 0); - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.png b/static/node_modules/angular-chart.js/test/fixtures/configure-line-chart.png deleted file mode 100644 index 371a54a2e8eb6ba77c332b59dfb506dfc36c9634..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29301 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 diff --git a/static/node_modules/angular-chart.js/test/fixtures/coverage.js b/static/node_modules/angular-chart.js/test/fixtures/coverage.js deleted file mode 100644 index 0df26608..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/coverage.js +++ /dev/null @@ -1,9 +0,0 @@ - -var __cov_sIM21KhAGhzWP0B7wdkh_A = (Function('return this'))(); -if (!__cov_sIM21KhAGhzWP0B7wdkh_A.__coverage__) { __cov_sIM21KhAGhzWP0B7wdkh_A.__coverage__ = {}; } -__cov_sIM21KhAGhzWP0B7wdkh_A = __cov_sIM21KhAGhzWP0B7wdkh_A.__coverage__; -if (!(__cov_sIM21KhAGhzWP0B7wdkh_A['/src/angular-chart.js'])) { - __cov_sIM21KhAGhzWP0B7wdkh_A['/src/angular-chart.js'] = {"path":"/src/angular-chart.js","s":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":1,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":1,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":1,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":1,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":1,"80":0,"81":0,"82":0,"83":0,"84":0,"85":1,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":1,"98":0,"99":0,"100":0,"101":0,"102":1,"103":0,"104":1,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":1,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":1,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":1,"133":0,"134":0,"135":1,"136":0,"137":0,"138":0,"139":1,"140":0,"141":1,"142":0,"143":1,"144":0,"145":0,"146":1,"147":0,"148":0,"149":0,"150":0,"151":0,"152":1,"153":0,"154":1,"155":0,"156":1,"157":0,"158":0,"159":1,"160":0,"161":0,"162":0,"163":0,"164":0,"165":1,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":1,"173":0,"174":1,"175":0,"176":0,"177":1,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":1,"185":0,"186":1,"187":0,"188":0,"189":0,"190":0,"191":0,"192":1,"193":0,"194":0,"195":0,"196":0},"b":{"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0,0],"9":[0,0],"10":[0,0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0,0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0,0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0,0],"40":[0,0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0,0,0,0],"62":[0,0],"63":[0,0],"64":[0,0]},"f":{"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":20}}},"2":{"name":"(anonymous_2)","line":20,"loc":{"start":{"line":20,"column":2},"end":{"line":20,"column":28}}},"3":{"name":"(anonymous_3)","line":47,"loc":{"start":{"line":47,"column":47},"end":{"line":47,"column":73}}},"4":{"name":"(anonymous_4)","line":48,"loc":{"start":{"line":48,"column":47},"end":{"line":48,"column":73}}},"5":{"name":"(anonymous_5)","line":49,"loc":{"start":{"line":49,"column":46},"end":{"line":49,"column":72}}},"6":{"name":"(anonymous_6)","line":50,"loc":{"start":{"line":50,"column":56},"end":{"line":50,"column":82}}},"7":{"name":"(anonymous_7)","line":51,"loc":{"start":{"line":51,"column":48},"end":{"line":51,"column":74}}},"8":{"name":"(anonymous_8)","line":52,"loc":{"start":{"line":52,"column":51},"end":{"line":52,"column":77}}},"9":{"name":"(anonymous_9)","line":53,"loc":{"start":{"line":53,"column":46},"end":{"line":53,"column":72}}},"10":{"name":"(anonymous_10)","line":54,"loc":{"start":{"line":54,"column":52},"end":{"line":54,"column":78}}},"11":{"name":"(anonymous_11)","line":55,"loc":{"start":{"line":55,"column":49},"end":{"line":55,"column":75}}},"12":{"name":"ChartJsProvider","line":67,"loc":{"start":{"line":67,"column":2},"end":{"line":67,"column":30}}},"13":{"name":"(anonymous_13)","line":71,"loc":{"start":{"line":71,"column":18},"end":{"line":71,"column":34}}},"14":{"name":"(anonymous_14)","line":80,"loc":{"start":{"line":80,"column":22},"end":{"line":80,"column":53}}},"15":{"name":"(anonymous_15)","line":93,"loc":{"start":{"line":93,"column":16},"end":{"line":93,"column":28}}},"16":{"name":"ChartJsFactory","line":98,"loc":{"start":{"line":98,"column":2},"end":{"line":98,"column":46}}},"17":{"name":"chart","line":99,"loc":{"start":{"line":99,"column":11},"end":{"line":99,"column":33}}},"18":{"name":"(anonymous_18)","line":114,"loc":{"start":{"line":114,"column":14},"end":{"line":114,"column":49}}},"19":{"name":"(anonymous_19)","line":126,"loc":{"start":{"line":126,"column":32},"end":{"line":126,"column":44}}},"20":{"name":"(anonymous_20)","line":130,"loc":{"start":{"line":130,"column":31},"end":{"line":130,"column":43}}},"21":{"name":"watchData","line":134,"loc":{"start":{"line":134,"column":10},"end":{"line":134,"column":46}}},"22":{"name":"watchOther","line":148,"loc":{"start":{"line":148,"column":10},"end":{"line":148,"column":47}}},"23":{"name":"watchType","line":159,"loc":{"start":{"line":159,"column":10},"end":{"line":159,"column":46}}},"24":{"name":"createChart","line":168,"loc":{"start":{"line":168,"column":4},"end":{"line":168,"column":45}}},"25":{"name":"canUpdateChart","line":190,"loc":{"start":{"line":190,"column":4},"end":{"line":190,"column":45}}},"26":{"name":"(anonymous_26)","line":193,"loc":{"start":{"line":193,"column":56},"end":{"line":193,"column":82}}},"27":{"name":"sum","line":200,"loc":{"start":{"line":200,"column":4},"end":{"line":200,"column":30}}},"28":{"name":"getEventHandler","line":204,"loc":{"start":{"line":204,"column":4},"end":{"line":204,"column":66}}},"29":{"name":"(anonymous_29)","line":209,"loc":{"start":{"line":209,"column":13},"end":{"line":209,"column":28}}},"30":{"name":"getColors","line":227,"loc":{"start":{"line":227,"column":4},"end":{"line":227,"column":37}}},"31":{"name":"convertColor","line":242,"loc":{"start":{"line":242,"column":4},"end":{"line":242,"column":34}}},"32":{"name":"getRandomColor","line":252,"loc":{"start":{"line":252,"column":4},"end":{"line":252,"column":31}}},"33":{"name":"getColor","line":257,"loc":{"start":{"line":257,"column":4},"end":{"line":257,"column":30}}},"34":{"name":"getRandomInt","line":270,"loc":{"start":{"line":270,"column":4},"end":{"line":270,"column":37}}},"35":{"name":"rgba","line":274,"loc":{"start":{"line":274,"column":4},"end":{"line":274,"column":33}}},"36":{"name":"hexToRgb","line":280,"loc":{"start":{"line":280,"column":4},"end":{"line":280,"column":28}}},"37":{"name":"rgbStringToRgb","line":289,"loc":{"start":{"line":289,"column":4},"end":{"line":289,"column":36}}},"38":{"name":"hasData","line":296,"loc":{"start":{"line":296,"column":4},"end":{"line":296,"column":29}}},"39":{"name":"getChartColorFn","line":300,"loc":{"start":{"line":300,"column":4},"end":{"line":300,"column":37}}},"40":{"name":"getChartData","line":304,"loc":{"start":{"line":304,"column":4},"end":{"line":304,"column":40}}},"41":{"name":"getDataSets","line":311,"loc":{"start":{"line":311,"column":4},"end":{"line":311,"column":73}}},"42":{"name":"(anonymous_42)","line":314,"loc":{"start":{"line":314,"column":27},"end":{"line":314,"column":46}}},"43":{"name":"getData","line":327,"loc":{"start":{"line":327,"column":4},"end":{"line":327,"column":61}}},"44":{"name":"(anonymous_44)","line":332,"loc":{"start":{"line":332,"column":38},"end":{"line":332,"column":55}}},"45":{"name":"(anonymous_45)","line":335,"loc":{"start":{"line":335,"column":43},"end":{"line":335,"column":60}}},"46":{"name":"getChartOptions","line":346,"loc":{"start":{"line":346,"column":4},"end":{"line":346,"column":43}}},"47":{"name":"bindEvents","line":350,"loc":{"start":{"line":350,"column":4},"end":{"line":350,"column":37}}},"48":{"name":"updateChart","line":355,"loc":{"start":{"line":355,"column":4},"end":{"line":355,"column":41}}},"49":{"name":"(anonymous_49)","line":357,"loc":{"start":{"line":357,"column":42},"end":{"line":357,"column":64}}},"50":{"name":"isEmpty","line":368,"loc":{"start":{"line":368,"column":4},"end":{"line":368,"column":29}}},"51":{"name":"canDisplay","line":374,"loc":{"start":{"line":374,"column":4},"end":{"line":374,"column":53}}},"52":{"name":"(anonymous_52)","line":377,"loc":{"start":{"line":377,"column":17},"end":{"line":377,"column":29}}},"53":{"name":"destroyChart","line":385,"loc":{"start":{"line":385,"column":4},"end":{"line":385,"column":33}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":391,"column":4}},"2":{"start":{"line":3,"column":2},"end":{"line":19,"column":3}},"3":{"start":{"line":5,"column":4},"end":{"line":7,"column":66}},"4":{"start":{"line":8,"column":10},"end":{"line":19,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":42}},"6":{"start":{"line":13,"column":4},"end":{"line":17,"column":5}},"7":{"start":{"line":14,"column":8},"end":{"line":14,"column":96}},"8":{"start":{"line":15,"column":11},"end":{"line":17,"column":5}},"9":{"start":{"line":16,"column":6},"end":{"line":16,"column":110}},"10":{"start":{"line":18,"column":4},"end":{"line":18,"column":28}},"11":{"start":{"line":23,"column":2},"end":{"line":23,"column":108}},"12":{"start":{"line":24,"column":2},"end":{"line":24,"column":48}},"13":{"start":{"line":25,"column":2},"end":{"line":25,"column":54}},"14":{"start":{"line":26,"column":2},"end":{"line":26,"column":59}},"15":{"start":{"line":27,"column":2},"end":{"line":27,"column":47}},"16":{"start":{"line":28,"column":2},"end":{"line":36,"column":4}},"17":{"start":{"line":38,"column":2},"end":{"line":40,"column":64}},"18":{"start":{"line":42,"column":2},"end":{"line":42,"column":59}},"19":{"start":{"line":42,"column":19},"end":{"line":42,"column":59}},"20":{"start":{"line":44,"column":2},"end":{"line":56,"column":10}},"21":{"start":{"line":47,"column":75},"end":{"line":47,"column":103}},"22":{"start":{"line":48,"column":75},"end":{"line":48,"column":109}},"23":{"start":{"line":49,"column":74},"end":{"line":49,"column":107}},"24":{"start":{"line":50,"column":84},"end":{"line":50,"column":127}},"25":{"start":{"line":51,"column":76},"end":{"line":51,"column":111}},"26":{"start":{"line":52,"column":79},"end":{"line":52,"column":117}},"27":{"start":{"line":53,"column":74},"end":{"line":53,"column":107}},"28":{"start":{"line":54,"column":80},"end":{"line":54,"column":119}},"29":{"start":{"line":55,"column":77},"end":{"line":55,"column":113}},"30":{"start":{"line":67,"column":2},"end":{"line":96,"column":3}},"31":{"start":{"line":68,"column":4},"end":{"line":68,"column":39}},"32":{"start":{"line":69,"column":4},"end":{"line":75,"column":6}},"33":{"start":{"line":72,"column":8},"end":{"line":72,"column":54}},"34":{"start":{"line":73,"column":8},"end":{"line":73,"column":56}},"35":{"start":{"line":80,"column":4},"end":{"line":91,"column":6}},"36":{"start":{"line":82,"column":6},"end":{"line":88,"column":7}},"37":{"start":{"line":83,"column":8},"end":{"line":83,"column":29}},"38":{"start":{"line":84,"column":8},"end":{"line":84,"column":56}},"39":{"start":{"line":87,"column":8},"end":{"line":87,"column":74}},"40":{"start":{"line":90,"column":6},"end":{"line":90,"column":53}},"41":{"start":{"line":93,"column":4},"end":{"line":95,"column":6}},"42":{"start":{"line":94,"column":6},"end":{"line":94,"column":21}},"43":{"start":{"line":98,"column":2},"end":{"line":390,"column":3}},"44":{"start":{"line":99,"column":4},"end":{"line":166,"column":6}},"45":{"start":{"line":100,"column":6},"end":{"line":165,"column":8}},"46":{"start":{"line":115,"column":10},"end":{"line":115,"column":74}},"47":{"start":{"line":115,"column":27},"end":{"line":115,"column":74}},"48":{"start":{"line":118,"column":10},"end":{"line":118,"column":53}},"49":{"start":{"line":119,"column":10},"end":{"line":119,"column":56}},"50":{"start":{"line":120,"column":10},"end":{"line":120,"column":56}},"51":{"start":{"line":121,"column":10},"end":{"line":121,"column":57}},"52":{"start":{"line":122,"column":10},"end":{"line":122,"column":56}},"53":{"start":{"line":123,"column":10},"end":{"line":123,"column":65}},"54":{"start":{"line":124,"column":10},"end":{"line":124,"column":54}},"55":{"start":{"line":126,"column":10},"end":{"line":128,"column":13}},"56":{"start":{"line":127,"column":12},"end":{"line":127,"column":32}},"57":{"start":{"line":130,"column":10},"end":{"line":132,"column":13}},"58":{"start":{"line":131,"column":12},"end":{"line":131,"column":50}},"59":{"start":{"line":131,"column":29},"end":{"line":131,"column":50}},"60":{"start":{"line":134,"column":10},"end":{"line":146,"column":11}},"61":{"start":{"line":135,"column":12},"end":{"line":138,"column":13}},"62":{"start":{"line":136,"column":14},"end":{"line":136,"column":34}},"63":{"start":{"line":137,"column":14},"end":{"line":137,"column":21}},"64":{"start":{"line":139,"column":12},"end":{"line":139,"column":52}},"65":{"start":{"line":140,"column":12},"end":{"line":140,"column":36}},"66":{"start":{"line":140,"column":29},"end":{"line":140,"column":36}},"67":{"start":{"line":142,"column":12},"end":{"line":143,"column":48}},"68":{"start":{"line":143,"column":14},"end":{"line":143,"column":48}},"69":{"start":{"line":145,"column":12},"end":{"line":145,"column":48}},"70":{"start":{"line":148,"column":10},"end":{"line":157,"column":11}},"71":{"start":{"line":149,"column":12},"end":{"line":149,"column":40}},"72":{"start":{"line":149,"column":33},"end":{"line":149,"column":40}},"73":{"start":{"line":150,"column":12},"end":{"line":150,"column":55}},"74":{"start":{"line":150,"column":48},"end":{"line":150,"column":55}},"75":{"start":{"line":151,"column":12},"end":{"line":151,"column":52}},"76":{"start":{"line":152,"column":12},"end":{"line":152,"column":36}},"77":{"start":{"line":152,"column":29},"end":{"line":152,"column":36}},"78":{"start":{"line":156,"column":12},"end":{"line":156,"column":48}},"79":{"start":{"line":159,"column":10},"end":{"line":163,"column":11}},"80":{"start":{"line":160,"column":12},"end":{"line":160,"column":40}},"81":{"start":{"line":160,"column":33},"end":{"line":160,"column":40}},"82":{"start":{"line":161,"column":12},"end":{"line":161,"column":55}},"83":{"start":{"line":161,"column":48},"end":{"line":161,"column":55}},"84":{"start":{"line":162,"column":12},"end":{"line":162,"column":45}},"85":{"start":{"line":168,"column":4},"end":{"line":188,"column":5}},"86":{"start":{"line":169,"column":6},"end":{"line":169,"column":49}},"87":{"start":{"line":170,"column":6},"end":{"line":170,"column":79}},"88":{"start":{"line":170,"column":72},"end":{"line":170,"column":79}},"89":{"start":{"line":172,"column":6},"end":{"line":172,"column":24}},"90":{"start":{"line":173,"column":6},"end":{"line":173,"column":37}},"91":{"start":{"line":175,"column":6},"end":{"line":175,"column":51}},"92":{"start":{"line":176,"column":6},"end":{"line":176,"column":43}},"93":{"start":{"line":179,"column":6},"end":{"line":179,"column":26}},"94":{"start":{"line":181,"column":6},"end":{"line":185,"column":9}},"95":{"start":{"line":186,"column":6},"end":{"line":186,"column":47}},"96":{"start":{"line":187,"column":6},"end":{"line":187,"column":29}},"97":{"start":{"line":190,"column":4},"end":{"line":198,"column":5}},"98":{"start":{"line":191,"column":6},"end":{"line":196,"column":7}},"99":{"start":{"line":192,"column":8},"end":{"line":195,"column":78}},"100":{"start":{"line":194,"column":10},"end":{"line":194,"column":57}},"101":{"start":{"line":197,"column":6},"end":{"line":197,"column":19}},"102":{"start":{"line":200,"column":4},"end":{"line":202,"column":5}},"103":{"start":{"line":201,"column":6},"end":{"line":201,"column":25}},"104":{"start":{"line":204,"column":4},"end":{"line":225,"column":5}},"105":{"start":{"line":205,"column":6},"end":{"line":208,"column":8}},"106":{"start":{"line":209,"column":6},"end":{"line":224,"column":8}},"107":{"start":{"line":210,"column":8},"end":{"line":210,"column":83}},"108":{"start":{"line":211,"column":8},"end":{"line":211,"column":86}},"109":{"start":{"line":212,"column":8},"end":{"line":223,"column":9}},"110":{"start":{"line":213,"column":10},"end":{"line":213,"column":55}},"111":{"start":{"line":214,"column":10},"end":{"line":214,"column":75}},"112":{"start":{"line":216,"column":10},"end":{"line":222,"column":11}},"113":{"start":{"line":219,"column":12},"end":{"line":219,"column":36}},"114":{"start":{"line":220,"column":12},"end":{"line":220,"column":38}},"115":{"start":{"line":221,"column":12},"end":{"line":221,"column":46}},"116":{"start":{"line":227,"column":4},"end":{"line":240,"column":5}},"117":{"start":{"line":228,"column":6},"end":{"line":231,"column":8}},"118":{"start":{"line":232,"column":6},"end":{"line":232,"column":67}},"119":{"start":{"line":233,"column":6},"end":{"line":235,"column":7}},"120":{"start":{"line":234,"column":8},"end":{"line":234,"column":43}},"121":{"start":{"line":238,"column":6},"end":{"line":238,"column":54}},"122":{"start":{"line":238,"column":27},"end":{"line":238,"column":54}},"123":{"start":{"line":239,"column":6},"end":{"line":239,"column":38}},"124":{"start":{"line":242,"column":4},"end":{"line":250,"column":5}},"125":{"start":{"line":244,"column":6},"end":{"line":244,"column":96}},"126":{"start":{"line":244,"column":57},"end":{"line":244,"column":96}},"127":{"start":{"line":246,"column":6},"end":{"line":246,"column":100}},"128":{"start":{"line":246,"column":57},"end":{"line":246,"column":100}},"129":{"start":{"line":248,"column":6},"end":{"line":248,"column":68}},"130":{"start":{"line":248,"column":55},"end":{"line":248,"column":68}},"131":{"start":{"line":249,"column":6},"end":{"line":249,"column":30}},"132":{"start":{"line":252,"column":4},"end":{"line":255,"column":5}},"133":{"start":{"line":253,"column":6},"end":{"line":253,"column":85}},"134":{"start":{"line":254,"column":6},"end":{"line":254,"column":29}},"135":{"start":{"line":257,"column":4},"end":{"line":268,"column":5}},"136":{"start":{"line":258,"column":6},"end":{"line":258,"column":32}},"137":{"start":{"line":259,"column":6},"end":{"line":259,"column":32}},"138":{"start":{"line":260,"column":6},"end":{"line":267,"column":8}},"139":{"start":{"line":270,"column":4},"end":{"line":272,"column":5}},"140":{"start":{"line":271,"column":6},"end":{"line":271,"column":63}},"141":{"start":{"line":274,"column":4},"end":{"line":277,"column":5}},"142":{"start":{"line":276,"column":6},"end":{"line":276,"column":106}},"143":{"start":{"line":280,"column":4},"end":{"line":287,"column":5}},"144":{"start":{"line":281,"column":6},"end":{"line":284,"column":25}},"145":{"start":{"line":286,"column":6},"end":{"line":286,"column":23}},"146":{"start":{"line":289,"column":4},"end":{"line":294,"column":5}},"147":{"start":{"line":290,"column":6},"end":{"line":290,"column":54}},"148":{"start":{"line":291,"column":6},"end":{"line":291,"column":61}},"149":{"start":{"line":291,"column":19},"end":{"line":291,"column":61}},"150":{"start":{"line":292,"column":6},"end":{"line":292,"column":34}},"151":{"start":{"line":293,"column":6},"end":{"line":293,"column":31}},"152":{"start":{"line":296,"column":4},"end":{"line":298,"column":5}},"153":{"start":{"line":297,"column":6},"end":{"line":297,"column":55}},"154":{"start":{"line":300,"column":4},"end":{"line":302,"column":5}},"155":{"start":{"line":301,"column":6},"end":{"line":301,"column":94}},"156":{"start":{"line":304,"column":4},"end":{"line":309,"column":5}},"157":{"start":{"line":305,"column":6},"end":{"line":305,"column":42}},"158":{"start":{"line":306,"column":6},"end":{"line":308,"column":88}},"159":{"start":{"line":311,"column":4},"end":{"line":325,"column":5}},"160":{"start":{"line":312,"column":6},"end":{"line":324,"column":8}},"161":{"start":{"line":315,"column":10},"end":{"line":318,"column":13}},"162":{"start":{"line":319,"column":10},"end":{"line":321,"column":11}},"163":{"start":{"line":320,"column":12},"end":{"line":320,"column":55}},"164":{"start":{"line":322,"column":10},"end":{"line":322,"column":25}},"165":{"start":{"line":327,"column":4},"end":{"line":344,"column":5}},"166":{"start":{"line":328,"column":6},"end":{"line":339,"column":8}},"167":{"start":{"line":333,"column":12},"end":{"line":333,"column":46}},"168":{"start":{"line":336,"column":12},"end":{"line":336,"column":41}},"169":{"start":{"line":340,"column":6},"end":{"line":342,"column":7}},"170":{"start":{"line":341,"column":8},"end":{"line":341,"column":60}},"171":{"start":{"line":343,"column":6},"end":{"line":343,"column":21}},"172":{"start":{"line":346,"column":4},"end":{"line":348,"column":5}},"173":{"start":{"line":347,"column":6},"end":{"line":347,"column":78}},"174":{"start":{"line":350,"column":4},"end":{"line":353,"column":5}},"175":{"start":{"line":351,"column":6},"end":{"line":351,"column":98}},"176":{"start":{"line":352,"column":6},"end":{"line":352,"column":101}},"177":{"start":{"line":355,"column":4},"end":{"line":366,"column":5}},"178":{"start":{"line":356,"column":6},"end":{"line":362,"column":7}},"179":{"start":{"line":357,"column":8},"end":{"line":359,"column":11}},"180":{"start":{"line":358,"column":10},"end":{"line":358,"column":35}},"181":{"start":{"line":361,"column":8},"end":{"line":361,"column":51}},"182":{"start":{"line":364,"column":6},"end":{"line":364,"column":27}},"183":{"start":{"line":365,"column":6},"end":{"line":365,"column":47}},"184":{"start":{"line":368,"column":4},"end":{"line":372,"column":5}},"185":{"start":{"line":369,"column":6},"end":{"line":371,"column":67}},"186":{"start":{"line":374,"column":4},"end":{"line":383,"column":5}},"187":{"start":{"line":376,"column":6},"end":{"line":381,"column":7}},"188":{"start":{"line":377,"column":8},"end":{"line":379,"column":22}},"189":{"start":{"line":378,"column":10},"end":{"line":378,"column":41}},"190":{"start":{"line":380,"column":8},"end":{"line":380,"column":21}},"191":{"start":{"line":382,"column":6},"end":{"line":382,"column":18}},"192":{"start":{"line":385,"column":4},"end":{"line":389,"column":5}},"193":{"start":{"line":386,"column":6},"end":{"line":386,"column":31}},"194":{"start":{"line":386,"column":24},"end":{"line":386,"column":31}},"195":{"start":{"line":387,"column":6},"end":{"line":387,"column":28}},"196":{"start":{"line":388,"column":6},"end":{"line":388,"column":48}}},"branchMap":{"1":{"line":3,"type":"if","locations":[{"start":{"line":3,"column":2},"end":{"line":3,"column":2}},{"start":{"line":3,"column":2},"end":{"line":3,"column":2}}]},"2":{"line":6,"type":"cond-expr","locations":[{"start":{"line":6,"column":39},"end":{"line":6,"column":46}},{"start":{"line":6,"column":49},"end":{"line":6,"column":67}}]},"3":{"line":7,"type":"cond-expr","locations":[{"start":{"line":7,"column":37},"end":{"line":7,"column":42}},{"start":{"line":7,"column":45},"end":{"line":7,"column":64}}]},"4":{"line":8,"type":"if","locations":[{"start":{"line":8,"column":10},"end":{"line":8,"column":10}},{"start":{"line":8,"column":10},"end":{"line":8,"column":10}}]},"5":{"line":8,"type":"binary-expr","locations":[{"start":{"line":8,"column":14},"end":{"line":8,"column":42}},{"start":{"line":8,"column":46},"end":{"line":8,"column":56}}]},"6":{"line":13,"type":"if","locations":[{"start":{"line":13,"column":4},"end":{"line":13,"column":4}},{"start":{"line":13,"column":4},"end":{"line":13,"column":4}}]},"7":{"line":15,"type":"if","locations":[{"start":{"line":15,"column":11},"end":{"line":15,"column":11}},{"start":{"line":15,"column":11},"end":{"line":15,"column":11}}]},"8":{"line":38,"type":"binary-expr","locations":[{"start":{"line":38,"column":20},"end":{"line":38,"column":65}},{"start":{"line":39,"column":4},"end":{"line":39,"column":38}},{"start":{"line":40,"column":4},"end":{"line":40,"column":63}}]},"9":{"line":42,"type":"if","locations":[{"start":{"line":42,"column":2},"end":{"line":42,"column":2}},{"start":{"line":42,"column":2},"end":{"line":42,"column":2}}]},"10":{"line":72,"type":"binary-expr","locations":[{"start":{"line":72,"column":26},"end":{"line":72,"column":30}},{"start":{"line":72,"column":34},"end":{"line":72,"column":47}},{"start":{"line":72,"column":51},"end":{"line":72,"column":53}}]},"11":{"line":82,"type":"if","locations":[{"start":{"line":82,"column":6},"end":{"line":82,"column":6}},{"start":{"line":82,"column":6},"end":{"line":82,"column":6}}]},"12":{"line":87,"type":"binary-expr","locations":[{"start":{"line":87,"column":38},"end":{"line":87,"column":51}},{"start":{"line":87,"column":55},"end":{"line":87,"column":57}}]},"13":{"line":115,"type":"if","locations":[{"start":{"line":115,"column":10},"end":{"line":115,"column":10}},{"start":{"line":115,"column":10},"end":{"line":115,"column":10}}]},"14":{"line":131,"type":"if","locations":[{"start":{"line":131,"column":12},"end":{"line":131,"column":12}},{"start":{"line":131,"column":12},"end":{"line":131,"column":12}}]},"15":{"line":135,"type":"if","locations":[{"start":{"line":135,"column":12},"end":{"line":135,"column":12}},{"start":{"line":135,"column":12},"end":{"line":135,"column":12}}]},"16":{"line":135,"type":"binary-expr","locations":[{"start":{"line":135,"column":16},"end":{"line":135,"column":24}},{"start":{"line":135,"column":28},"end":{"line":135,"column":43}},{"start":{"line":135,"column":48},"end":{"line":135,"column":72}},{"start":{"line":135,"column":76},"end":{"line":135,"column":94}}]},"17":{"line":139,"type":"binary-expr","locations":[{"start":{"line":139,"column":28},"end":{"line":139,"column":32}},{"start":{"line":139,"column":36},"end":{"line":139,"column":51}}]},"18":{"line":140,"type":"if","locations":[{"start":{"line":140,"column":12},"end":{"line":140,"column":12}},{"start":{"line":140,"column":12},"end":{"line":140,"column":12}}]},"19":{"line":142,"type":"if","locations":[{"start":{"line":142,"column":12},"end":{"line":142,"column":12}},{"start":{"line":142,"column":12},"end":{"line":142,"column":12}}]},"20":{"line":142,"type":"binary-expr","locations":[{"start":{"line":142,"column":16},"end":{"line":142,"column":27}},{"start":{"line":142,"column":31},"end":{"line":142,"column":61}}]},"21":{"line":149,"type":"if","locations":[{"start":{"line":149,"column":12},"end":{"line":149,"column":12}},{"start":{"line":149,"column":12},"end":{"line":149,"column":12}}]},"22":{"line":150,"type":"if","locations":[{"start":{"line":150,"column":12},"end":{"line":150,"column":12}},{"start":{"line":150,"column":12},"end":{"line":150,"column":12}}]},"23":{"line":151,"type":"binary-expr","locations":[{"start":{"line":151,"column":28},"end":{"line":151,"column":32}},{"start":{"line":151,"column":36},"end":{"line":151,"column":51}}]},"24":{"line":152,"type":"if","locations":[{"start":{"line":152,"column":12},"end":{"line":152,"column":12}},{"start":{"line":152,"column":12},"end":{"line":152,"column":12}}]},"25":{"line":160,"type":"if","locations":[{"start":{"line":160,"column":12},"end":{"line":160,"column":12}},{"start":{"line":160,"column":12},"end":{"line":160,"column":12}}]},"26":{"line":161,"type":"if","locations":[{"start":{"line":161,"column":12},"end":{"line":161,"column":12}},{"start":{"line":161,"column":12},"end":{"line":161,"column":12}}]},"27":{"line":170,"type":"if","locations":[{"start":{"line":170,"column":6},"end":{"line":170,"column":6}},{"start":{"line":170,"column":6},"end":{"line":170,"column":6}}]},"28":{"line":170,"type":"binary-expr","locations":[{"start":{"line":170,"column":10},"end":{"line":170,"column":26}},{"start":{"line":170,"column":30},"end":{"line":170,"column":70}}]},"29":{"line":191,"type":"if","locations":[{"start":{"line":191,"column":6},"end":{"line":191,"column":6}},{"start":{"line":191,"column":6},"end":{"line":191,"column":6}}]},"30":{"line":191,"type":"binary-expr","locations":[{"start":{"line":191,"column":10},"end":{"line":191,"column":16}},{"start":{"line":191,"column":20},"end":{"line":191,"column":26}},{"start":{"line":191,"column":30},"end":{"line":191,"column":43}},{"start":{"line":191,"column":47},"end":{"line":191,"column":60}}]},"31":{"line":192,"type":"cond-expr","locations":[{"start":{"line":193,"column":8},"end":{"line":194,"column":60}},{"start":{"line":195,"column":10},"end":{"line":195,"column":77}}]},"32":{"line":193,"type":"binary-expr","locations":[{"start":{"line":193,"column":8},"end":{"line":193,"column":39}},{"start":{"line":193,"column":43},"end":{"line":194,"column":60}}]},"33":{"line":195,"type":"cond-expr","locations":[{"start":{"line":195,"column":38},"end":{"line":195,"column":69}},{"start":{"line":195,"column":72},"end":{"line":195,"column":77}}]},"34":{"line":210,"type":"binary-expr","locations":[{"start":{"line":210,"column":22},"end":{"line":210,"column":51}},{"start":{"line":210,"column":55},"end":{"line":210,"column":82}}]},"35":{"line":211,"type":"binary-expr","locations":[{"start":{"line":211,"column":23},"end":{"line":211,"column":53}},{"start":{"line":211,"column":57},"end":{"line":211,"column":85}}]},"36":{"line":212,"type":"if","locations":[{"start":{"line":212,"column":8},"end":{"line":212,"column":8}},{"start":{"line":212,"column":8},"end":{"line":212,"column":8}}]},"37":{"line":214,"type":"cond-expr","locations":[{"start":{"line":214,"column":32},"end":{"line":214,"column":65}},{"start":{"line":214,"column":68},"end":{"line":214,"column":74}}]},"38":{"line":216,"type":"if","locations":[{"start":{"line":216,"column":10},"end":{"line":216,"column":10}},{"start":{"line":216,"column":10},"end":{"line":216,"column":10}}]},"39":{"line":216,"type":"binary-expr","locations":[{"start":{"line":216,"column":14},"end":{"line":216,"column":43}},{"start":{"line":217,"column":13},"end":{"line":217,"column":55}},{"start":{"line":217,"column":59},"end":{"line":217,"column":99}}]},"40":{"line":228,"type":"binary-expr","locations":[{"start":{"line":228,"column":32},"end":{"line":228,"column":49}},{"start":{"line":229,"column":8},"end":{"line":229,"column":44}},{"start":{"line":230,"column":8},"end":{"line":230,"column":36}}]},"41":{"line":238,"type":"if","locations":[{"start":{"line":238,"column":6},"end":{"line":238,"column":6}},{"start":{"line":238,"column":6},"end":{"line":238,"column":6}}]},"42":{"line":244,"type":"if","locations":[{"start":{"line":244,"column":6},"end":{"line":244,"column":6}},{"start":{"line":244,"column":6},"end":{"line":244,"column":6}}]},"43":{"line":244,"type":"binary-expr","locations":[{"start":{"line":244,"column":10},"end":{"line":244,"column":35}},{"start":{"line":244,"column":39},"end":{"line":244,"column":55}}]},"44":{"line":246,"type":"if","locations":[{"start":{"line":246,"column":6},"end":{"line":246,"column":6}},{"start":{"line":246,"column":6},"end":{"line":246,"column":6}}]},"45":{"line":246,"type":"binary-expr","locations":[{"start":{"line":246,"column":10},"end":{"line":246,"column":35}},{"start":{"line":246,"column":39},"end":{"line":246,"column":55}}]},"46":{"line":248,"type":"if","locations":[{"start":{"line":248,"column":6},"end":{"line":248,"column":6}},{"start":{"line":248,"column":6},"end":{"line":248,"column":6}}]},"47":{"line":248,"type":"binary-expr","locations":[{"start":{"line":248,"column":10},"end":{"line":248,"column":35}},{"start":{"line":248,"column":39},"end":{"line":248,"column":53}}]},"48":{"line":258,"type":"binary-expr","locations":[{"start":{"line":258,"column":18},"end":{"line":258,"column":26}},{"start":{"line":258,"column":30},"end":{"line":258,"column":31}}]},"49":{"line":276,"type":"cond-expr","locations":[{"start":{"line":276,"column":27},"end":{"line":276,"column":57}},{"start":{"line":276,"column":60},"end":{"line":276,"column":105}}]},"50":{"line":291,"type":"if","locations":[{"start":{"line":291,"column":6},"end":{"line":291,"column":6}},{"start":{"line":291,"column":6},"end":{"line":291,"column":6}}]},"51":{"line":297,"type":"binary-expr","locations":[{"start":{"line":297,"column":13},"end":{"line":297,"column":28}},{"start":{"line":297,"column":32},"end":{"line":297,"column":54}}]},"52":{"line":301,"type":"cond-expr","locations":[{"start":{"line":301,"column":57},"end":{"line":301,"column":76}},{"start":{"line":301,"column":79},"end":{"line":301,"column":93}}]},"53":{"line":306,"type":"cond-expr","locations":[{"start":{"line":307,"column":8},"end":{"line":307,"column":116}},{"start":{"line":308,"column":8},"end":{"line":308,"column":87}}]},"54":{"line":307,"type":"binary-expr","locations":[{"start":{"line":307,"column":56},"end":{"line":307,"column":73}},{"start":{"line":307,"column":77},"end":{"line":307,"column":79}}]},"55":{"line":319,"type":"if","locations":[{"start":{"line":319,"column":10},"end":{"line":319,"column":10}},{"start":{"line":319,"column":10},"end":{"line":319,"column":10}}]},"56":{"line":319,"type":"binary-expr","locations":[{"start":{"line":319,"column":14},"end":{"line":319,"column":29}},{"start":{"line":319,"column":33},"end":{"line":319,"column":60}}]},"57":{"line":340,"type":"if","locations":[{"start":{"line":340,"column":6},"end":{"line":340,"column":6}},{"start":{"line":340,"column":6},"end":{"line":340,"column":6}}]},"58":{"line":351,"type":"cond-expr","locations":[{"start":{"line":351,"column":39},"end":{"line":351,"column":82}},{"start":{"line":351,"column":85},"end":{"line":351,"column":97}}]},"59":{"line":352,"type":"cond-expr","locations":[{"start":{"line":352,"column":43},"end":{"line":352,"column":85}},{"start":{"line":352,"column":88},"end":{"line":352,"column":100}}]},"60":{"line":356,"type":"if","locations":[{"start":{"line":356,"column":6},"end":{"line":356,"column":6}},{"start":{"line":356,"column":6},"end":{"line":356,"column":6}}]},"61":{"line":369,"type":"binary-expr","locations":[{"start":{"line":369,"column":13},"end":{"line":369,"column":20}},{"start":{"line":370,"column":9},"end":{"line":370,"column":29}},{"start":{"line":370,"column":33},"end":{"line":370,"column":47}},{"start":{"line":371,"column":9},"end":{"line":371,"column":34}},{"start":{"line":371,"column":38},"end":{"line":371,"column":65}}]},"62":{"line":376,"type":"if","locations":[{"start":{"line":376,"column":6},"end":{"line":376,"column":6}},{"start":{"line":376,"column":6},"end":{"line":376,"column":6}}]},"63":{"line":376,"type":"binary-expr","locations":[{"start":{"line":376,"column":10},"end":{"line":376,"column":28}},{"start":{"line":376,"column":32},"end":{"line":376,"column":58}}]},"64":{"line":386,"type":"if","locations":[{"start":{"line":386,"column":6},"end":{"line":386,"column":6}},{"start":{"line":386,"column":6},"end":{"line":386,"column":6}}]}}}; -} -__cov_sIM21KhAGhzWP0B7wdkh_A = __cov_sIM21KhAGhzWP0B7wdkh_A['/src/angular-chart.js']; -__cov_sIM21KhAGhzWP0B7wdkh_A.s['1']++;(function(factory){'use strict';__cov_sIM21KhAGhzWP0B7wdkh_A.f['1']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['2']++;if(typeof exports==='object'){__cov_sIM21KhAGhzWP0B7wdkh_A.b['1'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['3']++;module.exports=factory(typeof angular!=='undefined'?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['2'][0]++,angular):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['2'][1]++,require('angular')),typeof Chart!=='undefined'?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['3'][0]++,Chart):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['3'][1]++,require('chart.js')));}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['1'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['4']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['5'][0]++,typeof define==='function')&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['5'][1]++,define.amd)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['4'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['5']++;define(['angular','chart'],factory);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['4'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['6']++;if(typeof angular==='undefined'){__cov_sIM21KhAGhzWP0B7wdkh_A.b['6'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['7']++;throw new Error('AngularJS framework needs to be included, see https://angularjs.org/');}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['6'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['8']++;if(typeof Chart==='undefined'){__cov_sIM21KhAGhzWP0B7wdkh_A.b['7'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['9']++;throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['7'][1]++;}}__cov_sIM21KhAGhzWP0B7wdkh_A.s['10']++;factory(angular,Chart);}}}(function(angular,Chart){'use strict';__cov_sIM21KhAGhzWP0B7wdkh_A.f['2']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['11']++;Chart.defaults.global.multiTooltipTemplate='<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';__cov_sIM21KhAGhzWP0B7wdkh_A.s['12']++;Chart.defaults.global.tooltips.mode='label';__cov_sIM21KhAGhzWP0B7wdkh_A.s['13']++;Chart.defaults.global.elements.line.borderWidth=2;__cov_sIM21KhAGhzWP0B7wdkh_A.s['14']++;Chart.defaults.global.elements.rectangle.borderWidth=2;__cov_sIM21KhAGhzWP0B7wdkh_A.s['15']++;Chart.defaults.global.legend.display=false;__cov_sIM21KhAGhzWP0B7wdkh_A.s['16']++;Chart.defaults.global.colors=['#97BBCD','#DCDCDC','#F7464A','#46BFBD','#FDB45C','#949FB1','#4D5360'];__cov_sIM21KhAGhzWP0B7wdkh_A.s['17']++;var useExcanvas=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['8'][0]++,typeof window.G_vmlCanvasManager==='object')&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['8'][1]++,window.G_vmlCanvasManager!==null)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['8'][2]++,typeof window.G_vmlCanvasManager.initElement==='function');__cov_sIM21KhAGhzWP0B7wdkh_A.s['18']++;if(useExcanvas){__cov_sIM21KhAGhzWP0B7wdkh_A.b['9'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['19']++;Chart.defaults.global.animation=false;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['9'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['20']++;return angular.module('chart.js',[]).provider('ChartJs',ChartJsProvider).factory('ChartJsFactory',['ChartJs','$timeout',ChartJsFactory]).directive('chartBase',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['3']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['21']++;return new ChartJsFactory();}]).directive('chartLine',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['4']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['22']++;return new ChartJsFactory('line');}]).directive('chartBar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['5']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['23']++;return new ChartJsFactory('bar');}]).directive('chartHorizontalBar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['6']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['24']++;return new ChartJsFactory('horizontalBar');}]).directive('chartRadar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['7']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['25']++;return new ChartJsFactory('radar');}]).directive('chartDoughnut',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['8']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['26']++;return new ChartJsFactory('doughnut');}]).directive('chartPie',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['9']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['27']++;return new ChartJsFactory('pie');}]).directive('chartPolarArea',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['10']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['28']++;return new ChartJsFactory('polarArea');}]).directive('chartBubble',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['11']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['29']++;return new ChartJsFactory('bubble');}]).name;function ChartJsProvider(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['12']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['31']++;var options={responsive:true};__cov_sIM21KhAGhzWP0B7wdkh_A.s['32']++;var ChartJs={Chart:Chart,getOptions:function(type){__cov_sIM21KhAGhzWP0B7wdkh_A.f['13']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['33']++;var typeOptions=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['10'][0]++,type)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['10'][1]++,options[type])||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['10'][2]++,{});__cov_sIM21KhAGhzWP0B7wdkh_A.s['34']++;return angular.extend({},options,typeOptions);}};__cov_sIM21KhAGhzWP0B7wdkh_A.s['35']++;this.setOptions=function(type,customOptions){__cov_sIM21KhAGhzWP0B7wdkh_A.f['14']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['36']++;if(!customOptions){__cov_sIM21KhAGhzWP0B7wdkh_A.b['11'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['37']++;customOptions=type;__cov_sIM21KhAGhzWP0B7wdkh_A.s['38']++;options=angular.merge(options,customOptions);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['11'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['39']++;options[type]=angular.merge((__cov_sIM21KhAGhzWP0B7wdkh_A.b['12'][0]++,options[type])||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['12'][1]++,{}),customOptions);}__cov_sIM21KhAGhzWP0B7wdkh_A.s['40']++;angular.merge(ChartJs.Chart.defaults,options);};__cov_sIM21KhAGhzWP0B7wdkh_A.s['41']++;this.$get=function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['15']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['42']++;return ChartJs;};}function ChartJsFactory(ChartJs,$timeout){__cov_sIM21KhAGhzWP0B7wdkh_A.f['16']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['44']++;return function chart(type){__cov_sIM21KhAGhzWP0B7wdkh_A.f['17']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['45']++;return{restrict:'CA',scope:{chartGetColor:'=?',chartType:'=',chartData:'=?',chartLabels:'=?',chartOptions:'=?',chartSeries:'=?',chartColors:'=?',chartClick:'=?',chartHover:'=?',chartDatasetOverride:'=?'},link:function(scope,elem){__cov_sIM21KhAGhzWP0B7wdkh_A.f['18']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['46']++;if(useExcanvas){__cov_sIM21KhAGhzWP0B7wdkh_A.b['13'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['47']++;window.G_vmlCanvasManager.initElement(elem[0]);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['13'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['48']++;scope.$watch('chartData',watchData,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['49']++;scope.$watch('chartSeries',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['50']++;scope.$watch('chartLabels',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['51']++;scope.$watch('chartOptions',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['52']++;scope.$watch('chartColors',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['53']++;scope.$watch('chartDatasetOverride',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['54']++;scope.$watch('chartType',watchType,false);__cov_sIM21KhAGhzWP0B7wdkh_A.s['55']++;scope.$on('$destroy',function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['19']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['56']++;destroyChart(scope);});__cov_sIM21KhAGhzWP0B7wdkh_A.s['57']++;scope.$on('$resize',function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['20']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['58']++;if(scope.chart){__cov_sIM21KhAGhzWP0B7wdkh_A.b['14'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['59']++;scope.chart.resize();}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['14'][1]++;}});function watchData(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['21']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['61']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['16'][0]++,!newVal)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['16'][1]++,!newVal.length)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['16'][2]++,Array.isArray(newVal[0]))&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['16'][3]++,!newVal[0].length)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['15'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['62']++;destroyChart(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['63']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['15'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['64']++;var chartType=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['17'][0]++,type)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['17'][1]++,scope.chartType);__cov_sIM21KhAGhzWP0B7wdkh_A.s['65']++;if(!chartType){__cov_sIM21KhAGhzWP0B7wdkh_A.b['18'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['66']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['18'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['67']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['20'][0]++,scope.chart)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['20'][1]++,canUpdateChart(newVal,oldVal))){__cov_sIM21KhAGhzWP0B7wdkh_A.b['19'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['68']++;return updateChart(newVal,scope);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['19'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['69']++;createChart(chartType,scope,elem);}function watchOther(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['22']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['71']++;if(isEmpty(newVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['21'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['72']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['21'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['73']++;if(angular.equals(newVal,oldVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['22'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['74']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['22'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['75']++;var chartType=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['23'][0]++,type)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['23'][1]++,scope.chartType);__cov_sIM21KhAGhzWP0B7wdkh_A.s['76']++;if(!chartType){__cov_sIM21KhAGhzWP0B7wdkh_A.b['24'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['77']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['24'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['78']++;createChart(chartType,scope,elem);}function watchType(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['23']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['80']++;if(isEmpty(newVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['25'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['81']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['25'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['82']++;if(angular.equals(newVal,oldVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['26'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['83']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['26'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['84']++;createChart(newVal,scope,elem);}}};};function createChart(type,scope,elem){__cov_sIM21KhAGhzWP0B7wdkh_A.f['24']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['86']++;var options=getChartOptions(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['87']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['28'][0]++,!hasData(scope))||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['28'][1]++,!canDisplay(type,scope,elem,options))){__cov_sIM21KhAGhzWP0B7wdkh_A.b['27'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['88']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['27'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['89']++;var cvs=elem[0];__cov_sIM21KhAGhzWP0B7wdkh_A.s['90']++;var ctx=cvs.getContext('2d');__cov_sIM21KhAGhzWP0B7wdkh_A.s['91']++;scope.chartGetColor=getChartColorFn(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['92']++;var data=getChartData(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['93']++;destroyChart(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['94']++;scope.chart=new ChartJs.Chart(ctx,{type:type,data:data,options:options});__cov_sIM21KhAGhzWP0B7wdkh_A.s['95']++;scope.$emit('chart-create',scope.chart);__cov_sIM21KhAGhzWP0B7wdkh_A.s['96']++;bindEvents(cvs,scope);}function canUpdateChart(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['25']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['98']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['30'][0]++,newVal)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['30'][1]++,oldVal)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['30'][2]++,newVal.length)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['30'][3]++,oldVal.length)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['29'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['99']++;return Array.isArray(newVal[0])?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['31'][0]++,(__cov_sIM21KhAGhzWP0B7wdkh_A.b['32'][0]++,newVal.length===oldVal.length)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['32'][1]++,newVal.every(function(element,index){__cov_sIM21KhAGhzWP0B7wdkh_A.f['26']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['100']++;return element.length===oldVal[index].length;}))):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['31'][1]++,oldVal.reduce(sum,0)>0?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['33'][0]++,newVal.length===oldVal.length):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['33'][1]++,false));}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['29'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['101']++;return false;}function sum(carry,val){__cov_sIM21KhAGhzWP0B7wdkh_A.f['27']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['103']++;return carry+val;}function getEventHandler(scope,action,triggerOnlyOnChange){__cov_sIM21KhAGhzWP0B7wdkh_A.f['28']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['105']++;var lastState={point:void 0,points:void 0};__cov_sIM21KhAGhzWP0B7wdkh_A.s['106']++;return function(evt){__cov_sIM21KhAGhzWP0B7wdkh_A.f['29']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['107']++;var atEvent=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['34'][0]++,scope.chart.getElementAtEvent)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['34'][1]++,scope.chart.getPointAtEvent);__cov_sIM21KhAGhzWP0B7wdkh_A.s['108']++;var atEvents=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['35'][0]++,scope.chart.getElementsAtEvent)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['35'][1]++,scope.chart.getPointsAtEvent);__cov_sIM21KhAGhzWP0B7wdkh_A.s['109']++;if(atEvents){__cov_sIM21KhAGhzWP0B7wdkh_A.b['36'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['110']++;var points=atEvents.call(scope.chart,evt);__cov_sIM21KhAGhzWP0B7wdkh_A.s['111']++;var point=atEvent?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['37'][0]++,atEvent.call(scope.chart,evt)[0]):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['37'][1]++,void 0);__cov_sIM21KhAGhzWP0B7wdkh_A.s['112']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['39'][0]++,triggerOnlyOnChange===false)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['39'][1]++,!angular.equals(lastState.points,points))&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['39'][2]++,!angular.equals(lastState.point,point))){__cov_sIM21KhAGhzWP0B7wdkh_A.b['38'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['113']++;lastState.point=point;__cov_sIM21KhAGhzWP0B7wdkh_A.s['114']++;lastState.points=points;__cov_sIM21KhAGhzWP0B7wdkh_A.s['115']++;scope[action](points,evt,point);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['38'][1]++;}}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['36'][1]++;}};}function getColors(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['30']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['117']++;var colors=angular.copy((__cov_sIM21KhAGhzWP0B7wdkh_A.b['40'][0]++,scope.chartColors)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['40'][1]++,ChartJs.getOptions(type).chartColors)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['40'][2]++,Chart.defaults.global.colors));__cov_sIM21KhAGhzWP0B7wdkh_A.s['118']++;var notEnoughColors=colors.length>16&255,g=bigint>>8&255,b=bigint&255;__cov_sIM21KhAGhzWP0B7wdkh_A.s['145']++;return[r,g,b];}function rgbStringToRgb(color){__cov_sIM21KhAGhzWP0B7wdkh_A.f['37']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['147']++;var match=color.match(/^rgba?\(([\d,.]+)\)$/);__cov_sIM21KhAGhzWP0B7wdkh_A.s['148']++;if(!match){__cov_sIM21KhAGhzWP0B7wdkh_A.b['50'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['149']++;throw new Error('Cannot parse rgb value');}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['50'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['150']++;color=match[1].split(',');__cov_sIM21KhAGhzWP0B7wdkh_A.s['151']++;return color.map(Number);}function hasData(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['38']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['153']++;return(__cov_sIM21KhAGhzWP0B7wdkh_A.b['51'][0]++,scope.chartData)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['51'][1]++,scope.chartData.length);}function getChartColorFn(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['39']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['155']++;return typeof scope.chartGetColor==='function'?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['52'][0]++,scope.chartGetColor):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['52'][1]++,getRandomColor);}function getChartData(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['40']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['157']++;var colors=getColors(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['158']++;return Array.isArray(scope.chartData[0])?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['53'][0]++,getDataSets(scope.chartLabels,scope.chartData,(__cov_sIM21KhAGhzWP0B7wdkh_A.b['54'][0]++,scope.chartSeries)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['54'][1]++,[]),colors,scope.chartDatasetOverride)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['53'][1]++,getData(scope.chartLabels,scope.chartData,colors,scope.chartDatasetOverride));}function getDataSets(labels,data,series,colors,datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.f['41']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['160']++;return{labels:labels,datasets:data.map(function(item,i){__cov_sIM21KhAGhzWP0B7wdkh_A.f['42']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['161']++;var dataset=angular.extend({},colors[i],{label:series[i],data:item});__cov_sIM21KhAGhzWP0B7wdkh_A.s['162']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['56'][0]++,datasetOverride)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['56'][1]++,datasetOverride.length>=i)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['163']++;angular.merge(dataset,datasetOverride[i]);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['164']++;return dataset;})};}function getData(labels,data,colors,datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.f['43']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['166']++;var dataset={labels:labels,datasets:[{data:data,backgroundColor:colors.map(function(color){__cov_sIM21KhAGhzWP0B7wdkh_A.f['44']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['167']++;return color.pointBackgroundColor;}),hoverBackgroundColor:colors.map(function(color){__cov_sIM21KhAGhzWP0B7wdkh_A.f['45']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['168']++;return color.backgroundColor;})}]};__cov_sIM21KhAGhzWP0B7wdkh_A.s['169']++;if(datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.b['57'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['170']++;angular.merge(dataset.datasets[0],datasetOverride);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['57'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['171']++;return dataset;}function getChartOptions(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['46']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['173']++;return angular.extend({},ChartJs.getOptions(type),scope.chartOptions);}function bindEvents(cvs,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['47']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['175']++;cvs.onclick=scope.chartClick?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['58'][0]++,getEventHandler(scope,'chartClick',false)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['58'][1]++,angular.noop);__cov_sIM21KhAGhzWP0B7wdkh_A.s['176']++;cvs.onmousemove=scope.chartHover?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['59'][0]++,getEventHandler(scope,'chartHover',true)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['59'][1]++,angular.noop);}function updateChart(values,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['48']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['178']++;if(Array.isArray(scope.chartData[0])){__cov_sIM21KhAGhzWP0B7wdkh_A.b['60'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['179']++;scope.chart.data.datasets.forEach(function(dataset,i){__cov_sIM21KhAGhzWP0B7wdkh_A.f['49']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['180']++;dataset.data=values[i];});}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['60'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['181']++;scope.chart.data.datasets[0].data=values;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['182']++;scope.chart.update();__cov_sIM21KhAGhzWP0B7wdkh_A.s['183']++;scope.$emit('chart-update',scope.chart);}function isEmpty(value){__cov_sIM21KhAGhzWP0B7wdkh_A.f['50']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['185']++;return(__cov_sIM21KhAGhzWP0B7wdkh_A.b['61'][0]++,!value)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['61'][1]++,Array.isArray(value))&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['61'][2]++,!value.length)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['61'][3]++,typeof value==='object')&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['61'][4]++,!Object.keys(value).length);}function canDisplay(type,scope,elem,options){__cov_sIM21KhAGhzWP0B7wdkh_A.f['51']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['187']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['63'][0]++,options.responsive)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['63'][1]++,elem[0].clientHeight===0)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['62'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['188']++;$timeout(function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['52']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['189']++;createChart(type,scope,elem);},50,false);__cov_sIM21KhAGhzWP0B7wdkh_A.s['190']++;return false;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['62'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['191']++;return true;}function destroyChart(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['53']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['193']++;if(!scope.chart){__cov_sIM21KhAGhzWP0B7wdkh_A.b['64'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['194']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['64'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['195']++;scope.chart.destroy();__cov_sIM21KhAGhzWP0B7wdkh_A.s['196']++;scope.$emit('chart-destroy',scope.chart);}}})); diff --git a/static/node_modules/angular-chart.js/test/fixtures/custom-directive.html b/static/node_modules/angular-chart.js/test/fixtures/custom-directive.html deleted file mode 100644 index 93cf90b1..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/custom-directive.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - Pie update colors - - - -
-
- -
-
-
-
Pie Chart
-
- -
-
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/custom-directive.js b/static/node_modules/angular-chart.js/test/fixtures/custom-directive.js deleted file mode 100644 index 53bcc499..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/custom-directive.js +++ /dev/null @@ -1,20 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('pie', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.directive('mySpecialPie', function (ChartJsFactory) { return new ChartJsFactory('pie'); }); - - app.controller('PieCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Series A', 'Series B']; - $scope.data = [5, 59]; - - $timeout(function () { - $scope.data = [5, 65]; - }, 0); - }]); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/custom-directive.png b/static/node_modules/angular-chart.js/test/fixtures/custom-directive.png deleted file mode 100644 index bd7a3ae61abf10f40a9a6559aef0f121da25e79a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29677 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λO# z6Xwnxa#Oq*F5x;*?s=lpnH(zrQ+IY;u}~}zqmWv*4%d-^=c;wfg9%IU&YQVU&*njl z2fm}a8a8*BoBQOs4vy#i1-E2V@Q{Ln0^k5O`dHv(1T2e+`DX1z3m8`X#EVt`1DhKU z3&PHAuBg-*ltyehE3$<9*II2bCq!&X!5euGr}PNObSc!ALrnuK0GGpMMYb}Jdm-mG zHLX}Pw|VE2P?(e0A;|;KUHO+9@d8xTq8dgjWCr_fgqs3j_%-c?;5jH2{`~~7>j3HB zr7WG_>DXy-%>J_N(VZ^(zvYIdnwx;vWN3=oy@Y!7Z|6edK|r*BacLz~R8-)B%w{TW zc^)W4umP&M+xIrUO+h*pNFSOFY<7cPFL*0^v^g=+4fN>BU)nQ;7 z-P@%n#aS&GvBfbGTJ<>+=-EJ~Oeejw2(l2|yG0Gu+#r^R=C(jriFGTu3)JKjlaq(C zZW-CNAN_~Y1pv8W7D)>qJ_I1CcB`x*-FgMM#rS0;fYL--!(l1npy`>zfspb9c^G)L z)VxbwM|Ae{2>niMgNT&{X(kG*|oPW{KNT>cR`e^5$?le-de`) zqogtw<=2^>m_H1ekmo!&?lgW<$n`-$)o1r@QUuAd`S&0P_K#ZZI4I6^oK#W@7d1g+ z@GtXzJ`09g&a;x^*I(AY2G)~$Z!&BrPv8cga7M3{d#8);-f(wIcb(=RaPn6G?S{o} zSnP(yZdgDV?QR0zr5L*;Y8xo*hQ)4J?1sf|SU?4Z-GX$tc75%4>TcOwoOR=Xex4XfR} z1`Vs-yapi&yHo_qRd(4UlwR(#M`%T`OZcHv4ZHMXmwxP))lkgbEvuoJxvPXgF>_Z5 zfnw&a5&|vRc9jrl$+oi+va5bTE0^CfwX1$WL+QUj{n#%N>~nwU$rPzYL2*e{>q6E! Hi~IivwOzKc diff --git a/static/node_modules/angular-chart.js/test/fixtures/dataset-override.html b/static/node_modules/angular-chart.js/test/fixtures/dataset-override.html deleted file mode 100644 index 78140159..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/dataset-override.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - Charts with datasets overrides - - - -
-
- -
-
-
-
Mixed chart
-
- -
-
-
-
-
-
Doughnut dataset override
-
- -
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/dataset-override.js b/static/node_modules/angular-chart.js/test/fixtures/dataset-override.js deleted file mode 100644 index e7cf76da..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/dataset-override.js +++ /dev/null @@ -1,32 +0,0 @@ -angular.module('app', ['chart.js']).controller('OverrideCtrl', ['$scope', function ($scope) { - 'use strict'; - - $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72']; - - $scope.labels1 = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.data1 = [ - [65, -59, 80, 81, -56, 55, -40], - [28, 48, -40, 19, 86, 27, 90] - ]; - $scope.datasetOverride1 = [ - { - label: 'Override Series A', - borderWidth: 1, - type: 'bar' - }, - { - label: 'Override Series B', - borderWidth: 3, - hoverBackgroundColor: 'rgba(255,99,132,0.4)', - hoverBorderColor: 'rgba(255,99,132,1)', - type: 'line' - } - ]; - - $scope.labels2 = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - $scope.data2 = [350, 450, 100]; - $scope.datasetOverride2 = { - hoverBackgroundColor: ['#45b7cd', '#ff6384', '#ff8e72'], - hoverBorderColor: ['#45b7cd', '#ff6384', '#ff8e72'] - }; -}]); diff --git a/static/node_modules/angular-chart.js/test/fixtures/dataset-override.png b/static/node_modules/angular-chart.js/test/fixtures/dataset-override.png deleted file mode 100644 index 394f81fd9e93b58c4392f0fd4c6809c2aadf1f82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62199 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 - - - - Horizontal Bar Chart - - - -
-
- -
-
-
-
Horizontal Bar Chart
-
- -
-
-
-
-
-
- - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.js b/static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.js deleted file mode 100644 index 6c6f968c..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.js +++ /dev/null @@ -1,18 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('horizontal', ['chart.js']); - Chart.defaults.global.legend = { - display: false - }; - - app.controller('HorizontalBarCtrl', function ($scope) { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.active = true; - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }); - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.png b/static/node_modules/angular-chart.js/test/fixtures/horizontal-bar-chart.png deleted file mode 100644 index b926632c9aba4630e83402667b05a09fe45bce83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39629 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
  • k8;-3{K9lO-U%K6ag?U1m$N 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 diff --git a/static/node_modules/angular-chart.js/test/fixtures/options-override.html b/static/node_modules/angular-chart.js/test/fixtures/options-override.html deleted file mode 100644 index 7235937c..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/options-override.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - Charts - - - -
    -
    - -
    -
    -
    -
    Line Chart
    -
    - -
    -
    -
    -
    -
    -
    Bar Chart
    -
    - -
    -
    -
    -
    -
    -
    Doughnut Chart
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    Radar Chart
    -
    - -
    -
    -
    -
    -
    -
    Pie Chart
    -
    - -
    -
    -
    -
    -
    -
    Polar Area Chart
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/options-override.js b/static/node_modules/angular-chart.js/test/fixtures/options-override.js deleted file mode 100644 index b8dec7d7..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/options-override.js +++ /dev/null @@ -1,73 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('charts', ['chart.js']); - - app.config(function (ChartJsProvider) { - ChartJsProvider.setOptions('global', { - legend: { - display: true - } - }); - }); - - app.controller('LineCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $timeout(function () { - $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - $scope.data = [ - [28, 48, 40, 19, 86, 27, 90], - [65, 59, 80, 81, 56, 55, 40] - ]; - $scope.series = ['Series C', 'Series D']; - }, 0); - }]); - - app.controller('BarCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.options = { scaleShowVerticalLines: false }; - $scope.labels = ['2006', '2007', '2008', '2009', '2010', '2011', '2012']; - $scope.series = ['Series A', 'Series B']; - $scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - $timeout(function () { - $scope.options = { scaleShowVerticalLines: true }; - }, 0); - }]); - - app.controller('DoughnutCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - $scope.data = [0, 0, 0]; - // TODO: investigate why chart was not showing up without this hack - $timeout(function () { - $scope.data = [350, 450, 100]; - }, 0); - }]); - - app.controller('PieCtrl', ['$scope', '$timeout', function ($scope, $timeout) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales']; - $scope.data = [0, 0, 0]; - $timeout(function () { - $scope.data = [350, 450, 100]; - }, 0); - }]); - - app.controller('PolarAreaCtrl', function ($scope) { - $scope.labels = ['Download Sales', 'In-Store Sales', 'Mail Sales', 'Telesales', 'Corporate Sales']; - $scope.data = [300, 500, 100, 40, 120]; - }); - - app.controller('RadarCtrl', function ($scope) { - $scope.labels = ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running']; - $scope.data = [ - [65, 59, 90, 81, 56, 55, 40], - [28, 48, 40, 19, 96, 27, 100] - ]; - }); -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/options-override.png b/static/node_modules/angular-chart.js/test/fixtures/options-override.png deleted file mode 100644 index cc7f8679553272f1a7955185f53e2ec1fec2b5f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99989 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

    |wr2g#2ZCQBRz?*m-iK-ep)~l~!)#D6i7L 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 E0E39DLI3~& diff --git a/static/node_modules/angular-chart.js/test/fixtures/scatter.html b/static/node_modules/angular-chart.js/test/fixtures/scatter.html deleted file mode 100644 index e7f46a7c..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/scatter.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Bubble chart - - - -
    -

    -
    -
    -
    -
    Scatter chart
    -
    - -
    -
    -
    -
    -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/test/fixtures/scatter.js b/static/node_modules/angular-chart.js/test/fixtures/scatter.js deleted file mode 100644 index 5d60f6b2..00000000 --- a/static/node_modules/angular-chart.js/test/fixtures/scatter.js +++ /dev/null @@ -1,30 +0,0 @@ -(function () { - 'use strict'; - - var app = angular.module('app', ['chart.js']); - - app.controller('ScatterCtrl', ['$scope', function ($scope) { - $scope.data = [[{ - x: -10, - y: -5 - }, { - x: 0, - y: 10 - }, { - x: 10, - y: 5 - }]]; - - $scope.options = { - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }] - } - }; - - }]); - - -})(); diff --git a/static/node_modules/angular-chart.js/test/fixtures/scatter.png b/static/node_modules/angular-chart.js/test/fixtures/scatter.png deleted file mode 100644 index c8069be97618c7dd45ff9f2d66943a8c2df3ea01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36475 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 diff --git a/static/node_modules/angular-chart.js/test/index.html b/static/node_modules/angular-chart.js/test/index.html deleted file mode 100644 index fa155409..00000000 --- a/static/node_modules/angular-chart.js/test/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - Mocha Tests - - - -
    - - - - - - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/test/mocha.opts b/static/node_modules/angular-chart.js/test/mocha.opts deleted file mode 100644 index 0cfde2d1..00000000 --- a/static/node_modules/angular-chart.js/test/mocha.opts +++ /dev/null @@ -1,4 +0,0 @@ ---slow 20 ---growl ---reporter spec ---require test/support/setup diff --git a/static/node_modules/angular-chart.js/test/support/setup.js b/static/node_modules/angular-chart.js/test/support/setup.js deleted file mode 100644 index de984149..00000000 --- a/static/node_modules/angular-chart.js/test/support/setup.js +++ /dev/null @@ -1,11 +0,0 @@ -/*jshint node:true*/ -(function () { - 'use strict'; - - var chai = require('chai'); - global.chai = chai; - global.should = chai.should(); - global.expect = chai.expect; - global.assert = chai.assert; - -})(); diff --git a/static/node_modules/angular-chart.js/test/test.integration.js b/static/node_modules/angular-chart.js/test/test.integration.js deleted file mode 100644 index 734eb5d4..00000000 --- a/static/node_modules/angular-chart.js/test/test.integration.js +++ /dev/null @@ -1,76 +0,0 @@ -/*jshint node:true*/ -/*jshint mocha:true*/ -/*global assert:true*/ -describe('integration', function () { - 'use strict'; - - var port = 8045; /* teststatic default port 8080 may be occupied on many systems */ - var webshot = require('webshot'), - path = require('path'), - gm = require('gm'), - tmp = require('tmp-sync'), - mkdirp = require('mkdirp').sync, - cp = require('cp').sync, - imgur = require('imgur-node-api'), - server = require('testatic')('./', port), - WEBSHOT_OPTIONS = { renderDelay: process.env.DELAY || 2500, windowSize: { width: 1366, height: 768 }}, - WEBSHOT_FAILED_DIR = path.join('test', 'fixtures', 'shots') + path.sep, - dir; - - beforeEach(function () { - dir = tmp.in() + path.sep; - }); - - afterEach(function () { - tmp.clean(); - }); - - after(function () { - server.close(); - }); - - mkdirp(WEBSHOT_FAILED_DIR); - - [ - 'bubble', - 'scatter', - 'dataset-override', - 'horizontal-bar-chart', - '29-tabs', - '57-hex-colours', - '54-not-enough-colours', - '51-pie-update-colours', - 'configure-line-chart', - 'custom-directive', - 'charts' - ].forEach(function (name) { - it('compares screenshots for: ' + name, function (done) { - var image = dir + name + '.png', - url = 'http://localhost:' + port + '/test/fixtures/' + name + '.html', - expected = path.join('test', 'fixtures', name + '.png'); - - webshot(url, image, WEBSHOT_OPTIONS, function (err) { - if (err) return done(err); - gm.compare(expected, image, process.env.TOLERANCE || 0.00001, function (err, isEqual) { - if (err) return done(err); - if (! isEqual) { - var failed = WEBSHOT_FAILED_DIR + name + '-failed.png', - msg = 'Expected screenshots to be similar. Screenshot saved to ' + failed; - cp(image, failed); - if (process.env.CI && process.env.IMGUR_ID) { - imgur.setClientID(process.env.IMGUR_ID); - imgur.upload(image, function (err, res) { - if (err) return done(err); - assert.fail(isEqual, true, msg + ', uploaded to ' + res.data.link); - }); - } else { - assert.fail(isEqual, true, msg); - } - return; - } - done(); - }); - }); - }); - }); -}); diff --git a/static/node_modules/angular-chart.js/test/test.unit.js b/static/node_modules/angular-chart.js/test/test.unit.js deleted file mode 100644 index 9a621e59..00000000 --- a/static/node_modules/angular-chart.js/test/test.unit.js +++ /dev/null @@ -1,440 +0,0 @@ -/*jshint mocha:true*/ -/*global module:true*/ -/*global inject:true*/ -/*global expect:true*/ -/*global sinon:true*/ - -describe('Unit testing', function () { - 'use strict'; - - var $compile, scope, sandbox, ChartJs, ChartJsProvider; - - beforeEach(module('chart.js', function (_ChartJsProvider_) { - ChartJsProvider = _ChartJsProvider_; - ChartJsProvider.setOptions({ env: 'test', responsive: false }); - })); - - beforeEach(inject(function (_$compile_, _$rootScope_, _ChartJs_) { - // The injector unwraps the underscores (_) from around the parameter names when matching - $compile = _$compile_; - scope = _$rootScope_; - ChartJs = _ChartJs_; - sandbox = sinon.sandbox.create(); - })); - - afterEach(function () { - sandbox.restore(); - }); - - describe('base', function () { - describe('chart types', function () { - ['line', 'bar', 'horizontalBar', 'radar', 'pie', 'doughnut', 'polarArea', 'bubble'].forEach(function (type) { - it('creates a ' + type + ' chart using the directive', function () { - var markup = ''; - - if (['line', 'bar', 'horizontalBar', 'radar'].indexOf(type) > - 1) { - scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - } else { - scope.labels = ['Downloads', 'In store', 'Mail orders']; - scope.data = [300, 500, 100]; - } - - var spyChart = sandbox.spy(ChartJs, 'Chart'); - - scope.$on('chart-create', function (evt, chart) { - expect(chart).to.be.an.instanceOf(Chart.Controller); - }); - - $compile(markup)(scope); - scope.$digest(); - - expect(spyChart).to.have.been.calledWithNew; - expect(spyChart).to.have.been.calledWithExactly( - sinon.match.any, - sinon.match({ type: type, data: sinon.match.object, options: sinon.match.object }) - ); - }); - - it('creates a ' + type + ' chart using the "chart-type" attribute', function () { - var markup = '
    ' + - '
    '; - - scope.type = type; - - if (['line', 'bar', 'horizontalBar', 'radar'].indexOf(type) > - 1) { - scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - } else { - scope.labels = ['Downloads', 'In store', 'Mail orders']; - scope.data = [300, 500, 100]; - } - - var spyChart = sandbox.spy(ChartJs, 'Chart'); - - scope.$on('chart-create', function (evt, chart) { - expect(chart).to.be.an.instanceOf(Chart.Controller); - }); - - $compile(markup)(scope); - scope.$digest(); - - expect(spyChart).to.have.been.calledWithNew; - expect(spyChart).to.have.been.calledWithExactly( - sinon.match.any, - sinon.match({ type: type, data: sinon.match.object, options: sinon.match.object }) - ); - }); - }); - }); - - describe('colors', function(){ - it('sets the chart colors when Hex colors, RGB colors, RGBA colors, or objects are used', function (){ - var datasets; - var markup = ''; - scope.colors = [ - { - backgroundColor: 'rgba(159,204,0,0.2)', - pointBackgroundColor: 'rgba(159,204,0,1)', - pointHoverBackgroundColor: 'rgba(159,204,0,0.8)', - borderColor: 'rgba(159,204,0,1)', - pointBorderColor: '#fff', - pointHoverBorderColor: 'rgba(159,204,0,1)' - },'rgba(250,109,33,0.5)','#9a9a9a','rgb(233,177,69)' - ]; - scope.labels = ['Green', 'Peach', 'Grey', 'Orange']; - scope.data = [300, 500, 100, 150]; - scope.$on('chart-create', function (evt, chart) { - datasets = chart.chart.config.data.datasets; - }); - $compile(markup)(scope); - scope.$digest(); - expect(datasets[0].backgroundColor[0]).to.equal('rgba(159,204,0,1)'); - expect(datasets[0].backgroundColor[1]).to.equal('rgba(250,109,33,0.5)'); - expect(datasets[0].backgroundColor[2]).to.equal('rgba(154,154,154,1)'); - expect(datasets[0].backgroundColor[3]).to.equal('rgba(233,177,69,1)'); - }); - }); - - describe('dataset override', function () { - it('overrides the datasets for complex charts', function () { - var datasets; - var markup = ''; - - scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - scope.data = [ - [65, -59, 80, 81, -56, 55, -40], - [28, 48, -40, 19, 86, 27, 90] - ]; - scope.datasetOverride = [ - { - label: 'Bar chart', - borderWidth: 1, - type: 'bar' - }, - { - label: 'Line chart', - borderWidth: 3, - type: 'line' - } - ]; - - scope.$on('chart-create', function (evt, chart) { - datasets = chart.chart.config.data.datasets; - }); - - $compile(markup)(scope); - scope.$digest(); - - expect(datasets[0].label).to.equal('Bar chart'); - expect(datasets[1].label).to.equal('Line chart'); - expect(datasets[0].borderWidth).to.equal(1); - expect(datasets[1].borderWidth).to.equal(3); - expect(datasets[0].type).to.equal('bar'); - expect(datasets[1].type).to.equal('line'); - }); - - it('overrides the dataset for simple charts', function () { - var datasets; - var markup = ''; - - scope.colors = ['#45b7cd', '#ff6384', '#ff8e72']; - scope.labels = ['Download Sales', 'In-Store Sales', 'Mail-Order Sales']; - scope.data = [350, 450, 100]; - scope.datasetOverride = { - hoverBackgroundColor: ['#45b7cd', '#ff6384', '#ff8e72'], - hoverBorderColor: ['#45b7cd', '#ff6384', '#ff8e72'] - }; - - scope.$on('chart-create', function (evt, chart) { - datasets = chart.chart.config.data.datasets; - }); - - $compile(markup)(scope); - scope.$digest(); - - expect(datasets[0].hoverBackgroundColor).to.deep.equal(['#45b7cd', '#ff6384', '#ff8e72']); - expect(datasets[0].hoverBorderColor).to.deep.equal(['#45b7cd', '#ff6384', '#ff8e72']); - }); - }); - }); - - describe('lifecycle', function () { - it('watches the attributes of the chart', function () { - var markup = '
    ' + - '
    '; - - scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - - var spy = sandbox.spy(scope, '$watch'); - $compile(markup)(scope); - - // cannot get a hold of the child scope as it isn't created yet - // so cannot be more precise on expectations - expect(spy.calledThrice).to.be.true; - }); - - it('creates the chart only once', function () { - var markup = '
    ' + - '
    '; - var count = 0; - - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.series = ['Series A', 'Series B']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - scope.$on('chart-create', function () { - count++; - }); - - $compile(markup)(scope); - scope.$digest(); - - expect(count).to.equal(1); - }); - - it('updates the chart', function () { - var markup = '
    ' + - '
    '; - var count = 0; - - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.series = ['Series A', 'Series B']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - - scope.$on('chart-update', function () { - count++; - }); - - $compile(markup)(scope); - scope.$digest(); - - scope.data = [ - [28, 48, 40, 19, 86, 27, 90], - [65, 59, 80, 81, 56, 55, 40] - ]; - scope.$digest(); - - expect(count).to.equal(1); - }); - - it('destroy the chart if all data is removed', function () { - var markup = '
    ' + - '
    '; - var countCreate = 0, countUpdate = 0, countDestroy = 0; - - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - - scope.$on('chart-create', function () { - countCreate++; - }); - - scope.$on('chart-update', function () { - countUpdate++; - }); - - scope.$on('chart-destroy', function() { - countDestroy++; - }); - - $compile(markup)(scope); - scope.$digest(); - - scope.data = []; - scope.$digest(); - - expect(countCreate).to.equal(1); - expect(countUpdate).to.equal(0); - expect(countDestroy).to.equal(1); - }); - - it('re-create the chart if data added or removed', function () { - var markup = '
    ' + - '
    '; - var countCreate = 0, countUpdate = 0, countDestroy = 0; - - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - - scope.$on('chart-create', function () { - countCreate++; - }); - - scope.$on('chart-update', function () { - countUpdate++; - }); - - scope.$on('chart-destroy', function() { - countDestroy++; - }); - - $compile(markup)(scope); - scope.$digest(); - - scope.data = [ - [28, 48, 40, 19, 86, 27, 90], - [65, 59, 80, 81, 56, 55, 40], - [65, 59, 80, 81, 56, 55, 40] - ]; - scope.$digest(); - - expect(countCreate).to.equal(2); - expect(countUpdate).to.equal(0); - expect(countDestroy).to.equal(1); - }); - - it('should allow to set a configuration', function () { - ChartJsProvider.setOptions({responsive: false}); - expect(ChartJs.getOptions().responsive).to.equal(false); - expect(ChartJs.getOptions('Line').responsive).to.equal(false); - expect(ChartJsProvider.$get().Chart.defaults.responsive).to.equal(false); - ChartJsProvider.setOptions({responsive: true}); - expect(ChartJs.getOptions().responsive).to.equal(true); - expect(ChartJs.getOptions('Line').responsive).to.equal(true); - expect(ChartJsProvider.$get().Chart.defaults.responsive).to.equal(true); - }); - - it('should allow to set a configuration for a chart type', function () { - ChartJsProvider.setOptions('Line', {responsive: false}); - expect(ChartJs.getOptions('Line').responsive).to.equal(false); - ChartJsProvider.setOptions('Line', {responsive: true}); - expect(ChartJs.getOptions('Line').responsive).to.equal(true); - ChartJsProvider.setOptions('Line', {responsive: true}); - expect(ChartJsProvider.$get().Chart.defaults.Line.responsive).to.equal(true); - }); - - ['labels', 'colors', 'series', 'options'].forEach(function (attr) { - it('re-creates the chart on ' + attr + ' changes', function () { - var markup = '
    ' + - '
    '; - var count = 0; - - scope.options = { scaleShowVerticalLines: false }; - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.series = ['Series A', 'Series B']; - scope.colors = ['#45b7cd', '#ff6384']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - scope.$on('chart-create', function () { - count++; - }); - - $compile(markup)(scope); - scope.$digest(); - - switch (attr) { - case 'labels': - scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']; - break; - case 'colors': - scope.colors = ['#ff6384', '#ff8e72']; - break; - case 'series': - scope.series = ['Series C', 'Series D']; - break; - case 'options': - scope.options = { scaleShowVerticalLines: true }; - break; - } - scope.$digest(); - - expect(count).to.equal(2); - }); - }); - - ['labels', 'colors', 'series', 'options'].forEach(function (attr) { - it('does not re-create the chart on ' + attr + ' not changed', function () { - var markup = '
    ' + - '
    '; - var count = 0; - - scope.options = { scaleShowVerticalLines: false }; - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - scope.series = ['Series A', 'Series B']; - scope.colors = ['#45b7cd', '#ff6384']; - scope.data = [ - [65, 59, 80, 81, 56, 55, 40], - [28, 48, 40, 19, 86, 27, 90] - ]; - scope.$on('chart-create', function () { - count++; - }); - - $compile(markup)(scope); - scope.$digest(); - - switch (attr) { - case 'labels': - scope.labels = ['January', 'February', 'March', 'April', 'May', 'June', 'July']; - break; - case 'colors': - scope.colors = ['#45b7cd', '#ff6384']; - break; - case 'series': - scope.series = ['Series A', 'Series B']; - break; - case 'options': - scope.options = { scaleShowVerticalLines: false }; - break; - } - scope.$digest(); - - expect(count).to.equal(1); - }); - }); - }); -}); diff --git a/static/node_modules/angular-chart.js/tmp/Dockerfile-alpine b/static/node_modules/angular-chart.js/tmp/Dockerfile-alpine deleted file mode 100644 index d40b7720..00000000 --- a/static/node_modules/angular-chart.js/tmp/Dockerfile-alpine +++ /dev/null @@ -1,15 +0,0 @@ -#FROM rafakato/alpine-graphicsmagick -RUN apk add --update --no-cache \ - build-base \ - python \ - git \ - nodejs \ - curl \ - ca-certificates -WORKDIR /src -ADD . ./ -RUN adduser -S node -RUN chown -R node /src -USER node -RUN npm install && npm install bower && ./node_modules/bower/bin/bower install -CMD ["npm", "test"] diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/CONTRIBUTING.md b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/CONTRIBUTING.md deleted file mode 100644 index b8b96cbe..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/CONTRIBUTING.md +++ /dev/null @@ -1,64 +0,0 @@ -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/chartjs/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/chartjs/Chart.js/blob/master/docs/09-Advanced.md#writing-new-chart-types) in the documentation or consider [creating a plugin](https://github.com/chartjs/Chart.js/blob/master/docs/09-Advanced.md#creating-plugins). - -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 - - Please include a demonstration of the bug on a website such as [JS Bin](http://jsbin.com/), [JS Fiddle](http://jsfiddle.net/), or [Codepen](http://codepen.io/pen/). ([Template](http://codepen.io/pen?template=JXVYzq)) - -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. - - -Local development ------------------ - -Run `npm install` to install all the libraries, then run `gulp dev --test` to build and run tests as you make changes. - - -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. - -Guidelines: - - - Please create an issue first and/or talk with a team member: - - 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/chartjs/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/chartjs/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. - - We have a very active Slack community that you can join [here](https://chart-js-automation.herokuapp.com/). If you think you can help, we'd love to have you! - -License -------- - -By contributing your code, you agree to license your contribution under the [MIT license](https://github.com/chartjs/Chart.js/blob/master/LICENSE.md). diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/LICENSE.md b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/LICENSE.md deleted file mode 100644 index dc93bcc3..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/LICENSE.md +++ /dev/null @@ -1,8 +0,0 @@ -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. diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/MAINTAINING.md b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/MAINTAINING.md deleted file mode 100644 index 5e34f433..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/MAINTAINING.md +++ /dev/null @@ -1,36 +0,0 @@ -# Maintaining -## Release Process -Chart.js relies on [Travis CI](https://travis-ci.org/) to automate the library [releases](https://github.com/chartjs/Chart.js/releases). - -### Releasing a New Version - -1. draft release notes on [GitHub](https://github.com/chartjs/Chart.js/releases/new) for the upcoming tag -1. update `master` `package.json` version using [semver](http://semver.org/) semantic -1. merge `master` into the `release` branch -1. follow the build process on [Travis CI](https://travis-ci.org/chartjs/Chart.js) - -> **Note:** if `master` is merged in `release` with a `package.json` version that already exists, the tag -creation fails and the release process is aborted. - -### Automated Tasks -Merging into the `release` branch kicks off the automated release process: - -* build of the `dist/*.js` files -* `bower.json` is generated from `package.json` -* `dist/*.js` and `bower.json` are added to a detached branch -* a tag is created from the `package.json` version -* tag (with dist files) is pushed to GitHub - -Creation of this tag triggers a new build: - -* `Chart.js.zip` package is generated, containing dist files and examples -* `dist/*.js` and `Chart.js.zip` are attached to the GitHub release (downloads) -* a new npm package is published on [npmjs](https://www.npmjs.com/package/chart.js) - -Finally, [cdnjs](https://cdnjs.com/libraries/Chart.js) is automatically updated from the npm release. - -### Further Reading - -* [Travis GitHub releases](https://github.com/chartjs/Chart.js/pull/2555) -* [Bower support and dist/* files](https://github.com/chartjs/Chart.js/issues/3033) -* [cdnjs npm auto update](https://github.com/cdnjs/cdnjs/pull/8401) diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/README.md b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/README.md deleted file mode 100644 index 49d09c01..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# Chart.js - -[![Build Status](https://travis-ci.org/chartjs/Chart.js.svg?branch=master)](https://travis-ci.org/chartjs/Chart.js) [![Code Climate](https://codeclimate.com/github/nnnick/Chart.js/badges/gpa.svg)](https://codeclimate.com/github/nnnick/Chart.js) [![Coverage Status](https://coveralls.io/repos/github/chartjs/Chart.js/badge.svg?branch=master)](https://coveralls.io/github/chartjs/Chart.js?branch=master) - -[![Chart.js on Slack](https://img.shields.io/badge/slack-Chart.js-blue.svg)](https://chart-js-automation.herokuapp.com/) - -*Simple HTML5 Charts using the canvas element* [chartjs.org](http://www.chartjs.org) - -## Installation - -You can download the latest version of [Chart.js on GitHub](https://github.com/chartjs/Chart.js/releases/latest) or just use these [Chart.js CDN](https://cdnjs.com/libraries/Chart.js) links. - -To install via npm: - -```bash -npm install chart.js --save -``` - -To Install via bower, please follow [these instructions](http://www.chartjs.org/docs/#getting-started-installation). - -## Documentation - -You can find documentation at [www.chartjs.org/docs](http://www.chartjs.org/docs). The markdown files that build the site are available under `/docs`. Previous version documentation is available at [www.chartjs.org/docs/#notes-previous-versions](http://www.chartjs.org/docs/#notes-previous-versions). - -## 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/chartjs/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). - -## Building and Testing - -To build, run `gulp build`. - -To test, run `gulp test`. - -To test against code standards, run `gulp lint`. - -More information on building and testing can be found in [gulpfile.js](gulpfile.js). - -Thanks to [BrowserStack](https://browserstack.com) for allowing our team to test on thousands of browsers. - -## License - -Chart.js is available under the [MIT license](http://opensource.org/licenses/MIT). diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/bower.json b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/bower.json deleted file mode 100644 index 7d9c6414..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "chart.js", - "description": "Simple HTML5 charts using the canvas element.", - "homepage": "http://www.chartjs.org", - "license": "MIT", - "version": "2.3.0", - "main": "./dist/Chart.js" -} \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/composer.json b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/composer.json deleted file mode 100644 index 48d05b8d..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "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" - } - } -} diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/config.jshintrc b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/config.jshintrc deleted file mode 100644 index 00b42024..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/config.jshintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "node": true, - "unused": true, - "predef": [ "require", "module" ] -} \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.bundle.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.bundle.js deleted file mode 100644 index 2729d04b..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/dist/Chart.bundle.js +++ /dev/null @@ -1,14868 +0,0 @@ -/*! - * Chart.js - * http://chartjs.org/ - * Version: 2.3.0 - * - * Copyright 2016 Nick Downie - * Released under the MIT license - * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md - */ -(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Chart = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - dark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.values.rgb; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - light: function () { - return !this.dark(); - }, - - negate: function () { - var rgb = []; - for (var i = 0; i < 3; i++) { - rgb[i] = 255 - this.values.rgb[i]; - } - this.setValues('rgb', rgb); - return this; - }, - - lighten: function (ratio) { - var hsl = this.values.hsl; - hsl[2] += hsl[2] * ratio; - this.setValues('hsl', hsl); - return this; - }, - - darken: function (ratio) { - var hsl = this.values.hsl; - hsl[2] -= hsl[2] * ratio; - this.setValues('hsl', hsl); - return this; - }, - - saturate: function (ratio) { - var hsl = this.values.hsl; - hsl[1] += hsl[1] * ratio; - this.setValues('hsl', hsl); - return this; - }, - - desaturate: function (ratio) { - var hsl = this.values.hsl; - hsl[1] -= hsl[1] * ratio; - this.setValues('hsl', hsl); - return this; - }, - - whiten: function (ratio) { - var hwb = this.values.hwb; - hwb[1] += hwb[1] * ratio; - this.setValues('hwb', hwb); - return this; - }, - - blacken: function (ratio) { - var hwb = this.values.hwb; - hwb[2] += hwb[2] * ratio; - this.setValues('hwb', hwb); - return this; - }, - - greyscale: function () { - var rgb = this.values.rgb; - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - this.setValues('rgb', [val, val, val]); - return this; - }, - - clearer: function (ratio) { - var alpha = this.values.alpha; - this.setValues('alpha', alpha - (alpha * ratio)); - return this; - }, - - opaquer: function (ratio) { - var alpha = this.values.alpha; - this.setValues('alpha', alpha + (alpha * ratio)); - return this; - }, - - rotate: function (degrees) { - var hsl = this.values.hsl; - var hue = (hsl[0] + degrees) % 360; - hsl[0] = hue < 0 ? 360 + hue : hue; - this.setValues('hsl', hsl); - return this; - }, - - /** - * Ported from sass implementation in C - * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - */ - mix: function (mixinColor, weight) { - var color1 = this; - var color2 = mixinColor; - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return this - .rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue() - ) - .alpha(color1.alpha() * p + color2.alpha() * (1 - p)); - }, - - toJSON: function () { - return this.rgb(); - }, - - clone: function () { - // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify, - // making the final build way to big to embed in Chart.js. So let's do it manually, - // assuming that values to clone are 1 dimension arrays containing only numbers, - // except 'alpha' which is a number. - var result = new Color(); - var source = this.values; - var target = result.values; - var value, type; - - for (var prop in source) { - if (source.hasOwnProperty(prop)) { - value = source[prop]; - type = ({}).toString.call(value); - if (type === '[object Array]') { - target[prop] = value.slice(0); - } else if (type === '[object Number]') { - target[prop] = value; - } else { - console.error('unexpected color value:', value); - } - } - } - - return result; - } -}; - -Color.prototype.spaces = { - rgb: ['red', 'green', 'blue'], - hsl: ['hue', 'saturation', 'lightness'], - hsv: ['hue', 'saturation', 'value'], - hwb: ['hue', 'whiteness', 'blackness'], - cmyk: ['cyan', 'magenta', 'yellow', 'black'] -}; - -Color.prototype.maxes = { - rgb: [255, 255, 255], - hsl: [360, 100, 100], - hsv: [360, 100, 100], - hwb: [360, 100, 100], - cmyk: [100, 100, 100, 100] -}; - -Color.prototype.getValues = function (space) { - var values = this.values; - var vals = {}; - - for (var i = 0; i < space.length; i++) { - vals[space.charAt(i)] = values[space][i]; - } - - if (values.alpha !== 1) { - vals.a = values.alpha; - } - - // {r: 255, g: 255, b: 255, a: 0.4} - return vals; -}; - -Color.prototype.setValues = function (space, vals) { - var values = this.values; - var spaces = this.spaces; - var maxes = this.maxes; - var alpha = 1; - var i; - - if (space === 'alpha') { - alpha = vals; - } else if (vals.length) { - // [10, 10, 10] - values[space] = vals.slice(0, space.length); - alpha = vals[space.length]; - } else if (vals[space.charAt(0)] !== undefined) { - // {r: 10, g: 10, b: 10} - for (i = 0; i < space.length; i++) { - values[space][i] = vals[space.charAt(i)]; - } - - alpha = vals.a; - } else if (vals[spaces[space][0]] !== undefined) { - // {red: 10, green: 10, blue: 10} - var chans = spaces[space]; - - for (i = 0; i < space.length; i++) { - values[space][i] = vals[chans[i]]; - } - - alpha = vals.alpha; - } - - values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha))); - - if (space === 'alpha') { - return false; - } - - var capped; - - // cap values of the space prior converting all values - for (i = 0; i < space.length; i++) { - capped = Math.max(0, Math.min(maxes[space][i], values[space][i])); - values[space][i] = Math.round(capped); - } - - // convert to all the other color spaces - for (var sname in spaces) { - if (sname !== space) { - values[sname] = convert[space][sname](values[space]); - } - } - - return true; -}; - -Color.prototype.setSpace = function (space, args) { - var vals = args[0]; - - if (vals === undefined) { - // color.rgb() - return this.getValues(space); - } - - // color.rgb(10, 10, 10) - if (typeof vals === 'number') { - vals = Array.prototype.slice.call(args); - } - - this.setValues(space, vals); - return this; -}; - -Color.prototype.setChannel = function (space, index, val) { - var svalues = this.values[space]; - if (val === undefined) { - // color.red() - return svalues[index]; - } else if (val === svalues[index]) { - // color.red(color.red()) - return this; - } - - // color.red(100) - svalues[index] = val; - this.setValues(space, svalues); - - return this; -}; - -if (typeof window !== 'undefined') { - window.Color = Color; -} - -module.exports = Color; - -},{"1":1,"4":4}],3:[function(require,module,exports){ -/* MIT license */ - -module.exports = { - rgb2hsl: rgb2hsl, - rgb2hsv: rgb2hsv, - rgb2hwb: rgb2hwb, - rgb2cmyk: rgb2cmyk, - rgb2keyword: rgb2keyword, - rgb2xyz: rgb2xyz, - rgb2lab: rgb2lab, - rgb2lch: rgb2lch, - - hsl2rgb: hsl2rgb, - hsl2hsv: hsl2hsv, - hsl2hwb: hsl2hwb, - hsl2cmyk: hsl2cmyk, - hsl2keyword: hsl2keyword, - - hsv2rgb: hsv2rgb, - hsv2hsl: hsv2hsl, - hsv2hwb: hsv2hwb, - hsv2cmyk: hsv2cmyk, - hsv2keyword: hsv2keyword, - - hwb2rgb: hwb2rgb, - hwb2hsl: hwb2hsl, - hwb2hsv: hwb2hsv, - hwb2cmyk: hwb2cmyk, - hwb2keyword: hwb2keyword, - - cmyk2rgb: cmyk2rgb, - cmyk2hsl: cmyk2hsl, - cmyk2hsv: cmyk2hsv, - cmyk2hwb: cmyk2hwb, - cmyk2keyword: cmyk2keyword, - - keyword2rgb: keyword2rgb, - keyword2hsl: keyword2hsl, - keyword2hsv: keyword2hsv, - keyword2hwb: keyword2hwb, - keyword2cmyk: keyword2cmyk, - keyword2lab: keyword2lab, - keyword2xyz: keyword2xyz, - - xyz2rgb: xyz2rgb, - xyz2lab: xyz2lab, - xyz2lch: xyz2lch, - - lab2xyz: lab2xyz, - lab2rgb: lab2rgb, - lab2lch: lab2lch, - - lch2lab: lch2lab, - lch2xyz: lch2xyz, - lch2rgb: lch2rgb -} - - -function rgb2hsl(rgb) { - var r = rgb[0]/255, - g = rgb[1]/255, - b = rgb[2]/255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, l; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g)/ delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - l = (min + max) / 2; - - if (max == min) - s = 0; - else if (l <= 0.5) - s = delta / (max + min); - else - s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; -} - -function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, v; - - if (max == 0) - s = 0; - else - s = (delta/max * 1000)/10; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; -} - -function rgb2hwb(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - h = rgb2hsl(rgb)[0], - w = 1/255 * Math.min(r, Math.min(g, b)), - b = 1 - 1/255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -} - -function rgb2cmyk(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - c, m, y, k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - return [c * 100, m * 100, y * 100, k * 100]; -} - -function rgb2keyword(rgb) { - return reverseKeywords[JSON.stringify(rgb)]; -} - -function rgb2xyz(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y *100, z * 100]; -} - -function rgb2lab(rgb) { - var xyz = rgb2xyz(rgb), - x = xyz[0], - y = xyz[1], - z = xyz[2], - l, a, b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -} - -function rgb2lch(args) { - return lab2lch(rgb2lab(args)); -} - -function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, t2, t3, rgb, val; - - if (s == 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) - t2 = l * (1 + s); - else - t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * - (i - 1); - t3 < 0 && t3++; - t3 > 1 && t3--; - - if (6 * t3 < 1) - val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) - val = t2; - else if (3 * t3 < 2) - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else - val = t1; - - rgb[i] = val * 255; - } - - return rgb; -} - -function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, v; - - if(l === 0) { - // no need to do calc on black - // also avoids divide by 0 error - return [0, 0, 0]; - } - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; -} - -function hsl2hwb(args) { - return rgb2hwb(hsl2rgb(args)); -} - -function hsl2cmyk(args) { - return rgb2cmyk(hsl2rgb(args)); -} - -function hsl2keyword(args) { - return rgb2keyword(hsl2rgb(args)); -} - - -function hsv2rgb(hsv) { - var h = hsv[0] / 60, - s = hsv[1] / 100, - v = hsv[2] / 100, - hi = Math.floor(h) % 6; - - var f = h - Math.floor(h), - p = 255 * v * (1 - s), - q = 255 * v * (1 - (s * f)), - t = 255 * v * (1 - (s * (1 - f))), - v = 255 * v; - - switch(hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -} - -function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, l; - - l = (2 - s) * v; - sl = s * v; - sl /= (l <= 1) ? l : 2 - l; - sl = sl || 0; - l /= 2; - return [h, sl * 100, l * 100]; -} - -function hsv2hwb(args) { - return rgb2hwb(hsv2rgb(args)) -} - -function hsv2cmyk(args) { - return rgb2cmyk(hsv2rgb(args)); -} - -function hsv2keyword(args) { - return rgb2keyword(hsv2rgb(args)); -} - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -function hwb2rgb(hwb) { - var h = hwb[0] / 360, - wh = hwb[1] / 100, - bl = hwb[2] / 100, - ratio = wh + bl, - i, v, f, n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - if ((i & 0x01) != 0) { - f = 1 - f; - } - n = wh + f * (v - wh); // linear interpolation - - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; -} - -function hwb2hsl(args) { - return rgb2hsl(hwb2rgb(args)); -} - -function hwb2hsv(args) { - return rgb2hsv(hwb2rgb(args)); -} - -function hwb2cmyk(args) { - return rgb2cmyk(hwb2rgb(args)); -} - -function hwb2keyword(args) { - return rgb2keyword(hwb2rgb(args)); -} - -function cmyk2rgb(cmyk) { - var c = cmyk[0] / 100, - m = cmyk[1] / 100, - y = cmyk[2] / 100, - k = cmyk[3] / 100, - r, g, b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - return [r * 255, g * 255, b * 255]; -} - -function cmyk2hsl(args) { - return rgb2hsl(cmyk2rgb(args)); -} - -function cmyk2hsv(args) { - return rgb2hsv(cmyk2rgb(args)); -} - -function cmyk2hwb(args) { - return rgb2hwb(cmyk2rgb(args)); -} - -function cmyk2keyword(args) { - return rgb2keyword(cmyk2rgb(args)); -} - - -function xyz2rgb(xyz) { - var x = xyz[0] / 100, - y = xyz[1] / 100, - z = xyz[2] / 100, - r, g, b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r = (r * 12.92); - - g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g = (g * 12.92); - - b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b = (b * 12.92); - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -} - -function xyz2lab(xyz) { - var x = xyz[0], - y = xyz[1], - z = xyz[2], - l, a, b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -} - -function xyz2lch(args) { - return lab2lch(xyz2lab(args)); -} - -function lab2xyz(lab) { - var l = lab[0], - a = lab[1], - b = lab[2], - x, y, z, y2; - - if (l <= 8) { - y = (l * 100) / 903.3; - y2 = (7.787 * (y / 100)) + (16 / 116); - } else { - y = 100 * Math.pow((l + 16) / 116, 3); - y2 = Math.pow(y / 100, 1/3); - } - - x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3); - - z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3); - - return [x, y, z]; -} - -function lab2lch(lab) { - var l = lab[0], - a = lab[1], - b = lab[2], - hr, h, c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - if (h < 0) { - h += 360; - } - c = Math.sqrt(a * a + b * b); - return [l, c, h]; -} - -function lab2rgb(args) { - return xyz2rgb(lab2xyz(args)); -} - -function lch2lab(lch) { - var l = lch[0], - c = lch[1], - h = lch[2], - a, b, hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - return [l, a, b]; -} - -function lch2xyz(args) { - return lab2xyz(lch2lab(args)); -} - -function lch2rgb(args) { - return lab2rgb(lch2lab(args)); -} - -function keyword2rgb(keyword) { - return cssKeywords[keyword]; -} - -function keyword2hsl(args) { - return rgb2hsl(keyword2rgb(args)); -} - -function keyword2hsv(args) { - return rgb2hsv(keyword2rgb(args)); -} - -function keyword2hwb(args) { - return rgb2hwb(keyword2rgb(args)); -} - -function keyword2cmyk(args) { - return rgb2cmyk(keyword2rgb(args)); -} - -function keyword2lab(args) { - return rgb2lab(keyword2rgb(args)); -} - -function keyword2xyz(args) { - return rgb2xyz(keyword2rgb(args)); -} - -var cssKeywords = { - aliceblue: [240,248,255], - antiquewhite: [250,235,215], - aqua: [0,255,255], - aquamarine: [127,255,212], - azure: [240,255,255], - beige: [245,245,220], - bisque: [255,228,196], - black: [0,0,0], - blanchedalmond: [255,235,205], - blue: [0,0,255], - blueviolet: [138,43,226], - brown: [165,42,42], - burlywood: [222,184,135], - cadetblue: [95,158,160], - chartreuse: [127,255,0], - chocolate: [210,105,30], - coral: [255,127,80], - cornflowerblue: [100,149,237], - cornsilk: [255,248,220], - crimson: [220,20,60], - cyan: [0,255,255], - darkblue: [0,0,139], - darkcyan: [0,139,139], - darkgoldenrod: [184,134,11], - darkgray: [169,169,169], - darkgreen: [0,100,0], - darkgrey: [169,169,169], - darkkhaki: [189,183,107], - darkmagenta: [139,0,139], - darkolivegreen: [85,107,47], - darkorange: [255,140,0], - darkorchid: [153,50,204], - darkred: [139,0,0], - darksalmon: [233,150,122], - darkseagreen: [143,188,143], - darkslateblue: [72,61,139], - darkslategray: [47,79,79], - darkslategrey: [47,79,79], - darkturquoise: [0,206,209], - darkviolet: [148,0,211], - deeppink: [255,20,147], - deepskyblue: [0,191,255], - dimgray: [105,105,105], - dimgrey: [105,105,105], - dodgerblue: [30,144,255], - firebrick: [178,34,34], - floralwhite: [255,250,240], - forestgreen: [34,139,34], - fuchsia: [255,0,255], - gainsboro: [220,220,220], - ghostwhite: [248,248,255], - gold: [255,215,0], - goldenrod: [218,165,32], - gray: [128,128,128], - green: [0,128,0], - greenyellow: [173,255,47], - grey: [128,128,128], - honeydew: [240,255,240], - hotpink: [255,105,180], - indianred: [205,92,92], - indigo: [75,0,130], - ivory: [255,255,240], - khaki: [240,230,140], - lavender: [230,230,250], - lavenderblush: [255,240,245], - lawngreen: [124,252,0], - lemonchiffon: [255,250,205], - lightblue: [173,216,230], - lightcoral: [240,128,128], - lightcyan: [224,255,255], - lightgoldenrodyellow: [250,250,210], - lightgray: [211,211,211], - lightgreen: [144,238,144], - lightgrey: [211,211,211], - lightpink: [255,182,193], - lightsalmon: [255,160,122], - lightseagreen: [32,178,170], - lightskyblue: [135,206,250], - lightslategray: [119,136,153], - lightslategrey: [119,136,153], - lightsteelblue: [176,196,222], - lightyellow: [255,255,224], - lime: [0,255,0], - limegreen: [50,205,50], - linen: [250,240,230], - magenta: [255,0,255], - maroon: [128,0,0], - mediumaquamarine: [102,205,170], - mediumblue: [0,0,205], - mediumorchid: [186,85,211], - mediumpurple: [147,112,219], - mediumseagreen: [60,179,113], - mediumslateblue: [123,104,238], - mediumspringgreen: [0,250,154], - mediumturquoise: [72,209,204], - mediumvioletred: [199,21,133], - midnightblue: [25,25,112], - mintcream: [245,255,250], - mistyrose: [255,228,225], - moccasin: [255,228,181], - navajowhite: [255,222,173], - navy: [0,0,128], - oldlace: [253,245,230], - olive: [128,128,0], - olivedrab: [107,142,35], - orange: [255,165,0], - orangered: [255,69,0], - orchid: [218,112,214], - palegoldenrod: [238,232,170], - palegreen: [152,251,152], - paleturquoise: [175,238,238], - palevioletred: [219,112,147], - papayawhip: [255,239,213], - peachpuff: [255,218,185], - peru: [205,133,63], - pink: [255,192,203], - plum: [221,160,221], - powderblue: [176,224,230], - purple: [128,0,128], - rebeccapurple: [102, 51, 153], - red: [255,0,0], - rosybrown: [188,143,143], - royalblue: [65,105,225], - saddlebrown: [139,69,19], - salmon: [250,128,114], - sandybrown: [244,164,96], - seagreen: [46,139,87], - seashell: [255,245,238], - sienna: [160,82,45], - silver: [192,192,192], - skyblue: [135,206,235], - slateblue: [106,90,205], - slategray: [112,128,144], - slategrey: [112,128,144], - snow: [255,250,250], - springgreen: [0,255,127], - steelblue: [70,130,180], - tan: [210,180,140], - teal: [0,128,128], - thistle: [216,191,216], - tomato: [255,99,71], - turquoise: [64,224,208], - violet: [238,130,238], - wheat: [245,222,179], - white: [255,255,255], - whitesmoke: [245,245,245], - yellow: [255,255,0], - yellowgreen: [154,205,50] -}; - -var reverseKeywords = {}; -for (var key in cssKeywords) { - reverseKeywords[JSON.stringify(cssKeywords[key])] = key; -} - -},{}],4:[function(require,module,exports){ -var conversions = require(3); - -var convert = function() { - return new Converter(); -} - -for (var func in conversions) { - // export Raw versions - convert[func + "Raw"] = (function(func) { - // accept array or plain args - return function(arg) { - if (typeof arg == "number") - arg = Array.prototype.slice.call(arguments); - return conversions[func](arg); - } - })(func); - - var pair = /(\w+)2(\w+)/.exec(func), - from = pair[1], - to = pair[2]; - - // export rgb2hsl and ["rgb"]["hsl"] - convert[from] = convert[from] || {}; - - convert[from][to] = convert[func] = (function(func) { - return function(arg) { - if (typeof arg == "number") - arg = Array.prototype.slice.call(arguments); - - var val = conversions[func](arg); - if (typeof val == "string" || val === undefined) - return val; // keyword - - for (var i = 0; i < val.length; i++) - val[i] = Math.round(val[i]); - return val; - } - })(func); -} - - -/* Converter does lazy conversion and caching */ -var Converter = function() { - this.convs = {}; -}; - -/* Either get the values for a space or - set the values for a space, depending on args */ -Converter.prototype.routeSpace = function(space, args) { - var values = args[0]; - if (values === undefined) { - // color.rgb() - return this.getValues(space); - } - // color.rgb(10, 10, 10) - if (typeof values == "number") { - values = Array.prototype.slice.call(args); - } - - return this.setValues(space, values); -}; - -/* Set the values for a space, invalidating cache */ -Converter.prototype.setValues = function(space, values) { - this.space = space; - this.convs = {}; - this.convs[space] = values; - return this; -}; - -/* Get the values for a space. If there's already - a conversion for the space, fetch it, otherwise - compute it */ -Converter.prototype.getValues = function(space) { - var vals = this.convs[space]; - if (!vals) { - var fspace = this.space, - from = this.convs[fspace]; - vals = convert[fspace][space](from); - - this.convs[space] = vals; - } - return vals; -}; - -["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) { - Converter.prototype[space] = function(vals) { - return this.routeSpace(space, arguments); - } -}); - -module.exports = convert; -},{"3":3}],5:[function(require,module,exports){ -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; -},{}],6:[function(require,module,exports){ -//! moment.js -//! version : 2.15.1 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - -;(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : - typeof define === 'function' && define.amd ? define(factory) : - global.moment = factory() -}(this, function () { 'use strict'; - - var hookCallback; - - function utils_hooks__hooks () { - return hookCallback.apply(null, arguments); - } - - // This is done to register the method called with moment() - // without creating circular dependencies. - function setHookCallback (callback) { - hookCallback = callback; - } - - function isArray(input) { - return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]'; - } - - function isObject(input) { - // IE8 will treat undefined and null as object if it wasn't for - // input != null - return input != null && Object.prototype.toString.call(input) === '[object Object]'; - } - - function isObjectEmpty(obj) { - var k; - for (k in obj) { - // even if its not own property I'd still call it non-empty - return false; - } - return true; - } - - function isDate(input) { - return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]'; - } - - function map(arr, fn) { - var res = [], i; - for (i = 0; i < arr.length; ++i) { - res.push(fn(arr[i], i)); - } - return res; - } - - function hasOwnProp(a, b) { - return Object.prototype.hasOwnProperty.call(a, b); - } - - function extend(a, b) { - for (var i in b) { - if (hasOwnProp(b, i)) { - a[i] = b[i]; - } - } - - if (hasOwnProp(b, 'toString')) { - a.toString = b.toString; - } - - if (hasOwnProp(b, 'valueOf')) { - a.valueOf = b.valueOf; - } - - return a; - } - - function create_utc__createUTC (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, true).utc(); - } - - function defaultParsingFlags() { - // We need to deep clone this object. - return { - empty : false, - unusedTokens : [], - unusedInput : [], - overflow : -2, - charsLeftOver : 0, - nullInput : false, - invalidMonth : null, - invalidFormat : false, - userInvalidated : false, - iso : false, - parsedDateParts : [], - meridiem : null - }; - } - - function getParsingFlags(m) { - if (m._pf == null) { - m._pf = defaultParsingFlags(); - } - return m._pf; - } - - var some; - if (Array.prototype.some) { - some = Array.prototype.some; - } else { - some = function (fun) { - var t = Object(this); - var len = t.length >>> 0; - - for (var i = 0; i < len; i++) { - if (i in t && fun.call(this, t[i], i, t)) { - return true; - } - } - - return false; - }; - } - - function valid__isValid(m) { - if (m._isValid == null) { - var flags = getParsingFlags(m); - var parsedParts = some.call(flags.parsedDateParts, function (i) { - return i != null; - }); - var isNowValid = !isNaN(m._d.getTime()) && - flags.overflow < 0 && - !flags.empty && - !flags.invalidMonth && - !flags.invalidWeekday && - !flags.nullInput && - !flags.invalidFormat && - !flags.userInvalidated && - (!flags.meridiem || (flags.meridiem && parsedParts)); - - if (m._strict) { - isNowValid = isNowValid && - flags.charsLeftOver === 0 && - flags.unusedTokens.length === 0 && - flags.bigHour === undefined; - } - - if (Object.isFrozen == null || !Object.isFrozen(m)) { - m._isValid = isNowValid; - } - else { - return isNowValid; - } - } - return m._isValid; - } - - function valid__createInvalid (flags) { - var m = create_utc__createUTC(NaN); - if (flags != null) { - extend(getParsingFlags(m), flags); - } - else { - getParsingFlags(m).userInvalidated = true; - } - - return m; - } - - function isUndefined(input) { - return input === void 0; - } - - // Plugins that add properties should also add the key here (null value), - // so we can properly clone ourselves. - var momentProperties = utils_hooks__hooks.momentProperties = []; - - function copyConfig(to, from) { - var i, prop, val; - - if (!isUndefined(from._isAMomentObject)) { - to._isAMomentObject = from._isAMomentObject; - } - if (!isUndefined(from._i)) { - to._i = from._i; - } - if (!isUndefined(from._f)) { - to._f = from._f; - } - if (!isUndefined(from._l)) { - to._l = from._l; - } - if (!isUndefined(from._strict)) { - to._strict = from._strict; - } - if (!isUndefined(from._tzm)) { - to._tzm = from._tzm; - } - if (!isUndefined(from._isUTC)) { - to._isUTC = from._isUTC; - } - if (!isUndefined(from._offset)) { - to._offset = from._offset; - } - if (!isUndefined(from._pf)) { - to._pf = getParsingFlags(from); - } - if (!isUndefined(from._locale)) { - to._locale = from._locale; - } - - if (momentProperties.length > 0) { - for (i in momentProperties) { - prop = momentProperties[i]; - val = from[prop]; - if (!isUndefined(val)) { - to[prop] = val; - } - } - } - - return to; - } - - var updateInProgress = false; - - // Moment prototype object - function Moment(config) { - copyConfig(this, config); - this._d = new Date(config._d != null ? config._d.getTime() : NaN); - // Prevent infinite loop in case updateOffset creates new moment - // objects. - if (updateInProgress === false) { - updateInProgress = true; - utils_hooks__hooks.updateOffset(this); - updateInProgress = false; - } - } - - function isMoment (obj) { - return obj instanceof Moment || (obj != null && obj._isAMomentObject != null); - } - - function absFloor (number) { - if (number < 0) { - // -0 -> 0 - return Math.ceil(number) || 0; - } else { - return Math.floor(number); - } - } - - function toInt(argumentForCoercion) { - var coercedNumber = +argumentForCoercion, - value = 0; - - if (coercedNumber !== 0 && isFinite(coercedNumber)) { - value = absFloor(coercedNumber); - } - - return value; - } - - // compare two arrays, return the number of differences - function compareArrays(array1, array2, dontConvert) { - var len = Math.min(array1.length, array2.length), - lengthDiff = Math.abs(array1.length - array2.length), - diffs = 0, - i; - for (i = 0; i < len; i++) { - if ((dontConvert && array1[i] !== array2[i]) || - (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { - diffs++; - } - } - return diffs + lengthDiff; - } - - function warn(msg) { - if (utils_hooks__hooks.suppressDeprecationWarnings === false && - (typeof console !== 'undefined') && console.warn) { - console.warn('Deprecation warning: ' + msg); - } - } - - function deprecate(msg, fn) { - var firstTime = true; - - return extend(function () { - if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(null, msg); - } - if (firstTime) { - var args = []; - var arg; - for (var i = 0; i < arguments.length; i++) { - arg = ''; - if (typeof arguments[i] === 'object') { - arg += '\n[' + i + '] '; - for (var key in arguments[0]) { - arg += key + ': ' + arguments[0][key] + ', '; - } - arg = arg.slice(0, -2); // Remove trailing comma and space - } else { - arg = arguments[i]; - } - args.push(arg); - } - warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack); - firstTime = false; - } - return fn.apply(this, arguments); - }, fn); - } - - var deprecations = {}; - - function deprecateSimple(name, msg) { - if (utils_hooks__hooks.deprecationHandler != null) { - utils_hooks__hooks.deprecationHandler(name, msg); - } - if (!deprecations[name]) { - warn(msg); - deprecations[name] = true; - } - } - - utils_hooks__hooks.suppressDeprecationWarnings = false; - utils_hooks__hooks.deprecationHandler = null; - - function isFunction(input) { - return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]'; - } - - function locale_set__set (config) { - var prop, i; - for (i in config) { - prop = config[i]; - if (isFunction(prop)) { - this[i] = prop; - } else { - this['_' + i] = prop; - } - } - this._config = config; - // Lenient ordinal parsing accepts just a number in addition to - // number + (possibly) stuff coming from _ordinalParseLenient. - this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + (/\d{1,2}/).source); - } - - function mergeConfigs(parentConfig, childConfig) { - var res = extend({}, parentConfig), prop; - for (prop in childConfig) { - if (hasOwnProp(childConfig, prop)) { - if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) { - res[prop] = {}; - extend(res[prop], parentConfig[prop]); - extend(res[prop], childConfig[prop]); - } else if (childConfig[prop] != null) { - res[prop] = childConfig[prop]; - } else { - delete res[prop]; - } - } - } - for (prop in parentConfig) { - if (hasOwnProp(parentConfig, prop) && - !hasOwnProp(childConfig, prop) && - isObject(parentConfig[prop])) { - // make sure changes to properties don't modify parent config - res[prop] = extend({}, res[prop]); - } - } - return res; - } - - function Locale(config) { - if (config != null) { - this.set(config); - } - } - - var keys; - - if (Object.keys) { - keys = Object.keys; - } else { - keys = function (obj) { - var i, res = []; - for (i in obj) { - if (hasOwnProp(obj, i)) { - res.push(i); - } - } - return res; - }; - } - - var defaultCalendar = { - sameDay : '[Today at] LT', - nextDay : '[Tomorrow at] LT', - nextWeek : 'dddd [at] LT', - lastDay : '[Yesterday at] LT', - lastWeek : '[Last] dddd [at] LT', - sameElse : 'L' - }; - - function locale_calendar__calendar (key, mom, now) { - var output = this._calendar[key] || this._calendar['sameElse']; - return isFunction(output) ? output.call(mom, now) : output; - } - - var defaultLongDateFormat = { - LTS : 'h:mm:ss A', - LT : 'h:mm A', - L : 'MM/DD/YYYY', - LL : 'MMMM D, YYYY', - LLL : 'MMMM D, YYYY h:mm A', - LLLL : 'dddd, MMMM D, YYYY h:mm A' - }; - - function longDateFormat (key) { - var format = this._longDateFormat[key], - formatUpper = this._longDateFormat[key.toUpperCase()]; - - if (format || !formatUpper) { - return format; - } - - this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) { - return val.slice(1); - }); - - return this._longDateFormat[key]; - } - - var defaultInvalidDate = 'Invalid date'; - - function invalidDate () { - return this._invalidDate; - } - - var defaultOrdinal = '%d'; - var defaultOrdinalParse = /\d{1,2}/; - - function ordinal (number) { - return this._ordinal.replace('%d', number); - } - - var defaultRelativeTime = { - future : 'in %s', - past : '%s ago', - s : 'a few seconds', - m : 'a minute', - mm : '%d minutes', - h : 'an hour', - hh : '%d hours', - d : 'a day', - dd : '%d days', - M : 'a month', - MM : '%d months', - y : 'a year', - yy : '%d years' - }; - - function relative__relativeTime (number, withoutSuffix, string, isFuture) { - var output = this._relativeTime[string]; - return (isFunction(output)) ? - output(number, withoutSuffix, string, isFuture) : - output.replace(/%d/i, number); - } - - function pastFuture (diff, output) { - var format = this._relativeTime[diff > 0 ? 'future' : 'past']; - return isFunction(format) ? format(output) : format.replace(/%s/i, output); - } - - var aliases = {}; - - function addUnitAlias (unit, shorthand) { - var lowerCase = unit.toLowerCase(); - aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; - } - - function normalizeUnits(units) { - return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; - } - - function normalizeObjectUnits(inputObject) { - var normalizedInput = {}, - normalizedProp, - prop; - - for (prop in inputObject) { - if (hasOwnProp(inputObject, prop)) { - normalizedProp = normalizeUnits(prop); - if (normalizedProp) { - normalizedInput[normalizedProp] = inputObject[prop]; - } - } - } - - return normalizedInput; - } - - var priorities = {}; - - function addUnitPriority(unit, priority) { - priorities[unit] = priority; - } - - function getPrioritizedUnits(unitsObj) { - var units = []; - for (var u in unitsObj) { - units.push({unit: u, priority: priorities[u]}); - } - units.sort(function (a, b) { - return a.priority - b.priority; - }); - return units; - } - - function makeGetSet (unit, keepTime) { - return function (value) { - if (value != null) { - get_set__set(this, unit, value); - utils_hooks__hooks.updateOffset(this, keepTime); - return this; - } else { - return get_set__get(this, unit); - } - }; - } - - function get_set__get (mom, unit) { - return mom.isValid() ? - mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN; - } - - function get_set__set (mom, unit, value) { - if (mom.isValid()) { - mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); - } - } - - // MOMENTS - - function stringGet (units) { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](); - } - return this; - } - - - function stringSet (units, value) { - if (typeof units === 'object') { - units = normalizeObjectUnits(units); - var prioritized = getPrioritizedUnits(units); - for (var i = 0; i < prioritized.length; i++) { - this[prioritized[i].unit](units[prioritized[i].unit]); - } - } else { - units = normalizeUnits(units); - if (isFunction(this[units])) { - return this[units](value); - } - } - return this; - } - - function zeroFill(number, targetLength, forceSign) { - var absNumber = '' + Math.abs(number), - zerosToFill = targetLength - absNumber.length, - sign = number >= 0; - return (sign ? (forceSign ? '+' : '') : '-') + - Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber; - } - - var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g; - - var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; - - var formatFunctions = {}; - - var formatTokenFunctions = {}; - - // token: 'M' - // padded: ['MM', 2] - // ordinal: 'Mo' - // callback: function () { this.month() + 1 } - function addFormatToken (token, padded, ordinal, callback) { - var func = callback; - if (typeof callback === 'string') { - func = function () { - return this[callback](); - }; - } - if (token) { - formatTokenFunctions[token] = func; - } - if (padded) { - formatTokenFunctions[padded[0]] = function () { - return zeroFill(func.apply(this, arguments), padded[1], padded[2]); - }; - } - if (ordinal) { - formatTokenFunctions[ordinal] = function () { - return this.localeData().ordinal(func.apply(this, arguments), token); - }; - } - } - - function removeFormattingTokens(input) { - if (input.match(/\[[\s\S]/)) { - return input.replace(/^\[|\]$/g, ''); - } - return input.replace(/\\/g, ''); - } - - function makeFormatFunction(format) { - var array = format.match(formattingTokens), i, length; - - for (i = 0, length = array.length; i < length; i++) { - if (formatTokenFunctions[array[i]]) { - array[i] = formatTokenFunctions[array[i]]; - } else { - array[i] = removeFormattingTokens(array[i]); - } - } - - return function (mom) { - var output = '', i; - for (i = 0; i < length; i++) { - output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; - } - return output; - }; - } - - // format date using native date object - function formatMoment(m, format) { - if (!m.isValid()) { - return m.localeData().invalidDate(); - } - - format = expandFormat(format, m.localeData()); - formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format); - - return formatFunctions[format](m); - } - - function expandFormat(format, locale) { - var i = 5; - - function replaceLongDateFormatTokens(input) { - return locale.longDateFormat(input) || input; - } - - localFormattingTokens.lastIndex = 0; - while (i >= 0 && localFormattingTokens.test(format)) { - format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); - localFormattingTokens.lastIndex = 0; - i -= 1; - } - - return format; - } - - var match1 = /\d/; // 0 - 9 - var match2 = /\d\d/; // 00 - 99 - var match3 = /\d{3}/; // 000 - 999 - var match4 = /\d{4}/; // 0000 - 9999 - var match6 = /[+-]?\d{6}/; // -999999 - 999999 - var match1to2 = /\d\d?/; // 0 - 99 - var match3to4 = /\d\d\d\d?/; // 999 - 9999 - var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999 - var match1to3 = /\d{1,3}/; // 0 - 999 - var match1to4 = /\d{1,4}/; // 0 - 9999 - var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 - - var matchUnsigned = /\d+/; // 0 - inf - var matchSigned = /[+-]?\d+/; // -inf - inf - - var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z - var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z - - var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 - - // any word (or two) characters or numbers including two/three word month in arabic. - // includes scottish gaelic two word and hyphenated months - var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; - - - var regexes = {}; - - function addRegexToken (token, regex, strictRegex) { - regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) { - return (isStrict && strictRegex) ? strictRegex : regex; - }; - } - - function getParseRegexForToken (token, config) { - if (!hasOwnProp(regexes, token)) { - return new RegExp(unescapeFormat(token)); - } - - return regexes[token](config._strict, config._locale); - } - - // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - function unescapeFormat(s) { - return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { - return p1 || p2 || p3 || p4; - })); - } - - function regexEscape(s) { - return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); - } - - var tokens = {}; - - function addParseToken (token, callback) { - var i, func = callback; - if (typeof token === 'string') { - token = [token]; - } - if (typeof callback === 'number') { - func = function (input, array) { - array[callback] = toInt(input); - }; - } - for (i = 0; i < token.length; i++) { - tokens[token[i]] = func; - } - } - - function addWeekParseToken (token, callback) { - addParseToken(token, function (input, array, config, token) { - config._w = config._w || {}; - callback(input, config._w, config, token); - }); - } - - function addTimeToArrayFromToken(token, input, config) { - if (input != null && hasOwnProp(tokens, token)) { - tokens[token](input, config._a, config, token); - } - } - - var YEAR = 0; - var MONTH = 1; - var DATE = 2; - var HOUR = 3; - var MINUTE = 4; - var SECOND = 5; - var MILLISECOND = 6; - var WEEK = 7; - var WEEKDAY = 8; - - var indexOf; - - if (Array.prototype.indexOf) { - indexOf = Array.prototype.indexOf; - } else { - indexOf = function (o) { - // I know - var i; - for (i = 0; i < this.length; ++i) { - if (this[i] === o) { - return i; - } - } - return -1; - }; - } - - function daysInMonth(year, month) { - return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); - } - - // FORMATTING - - addFormatToken('M', ['MM', 2], 'Mo', function () { - return this.month() + 1; - }); - - addFormatToken('MMM', 0, 0, function (format) { - return this.localeData().monthsShort(this, format); - }); - - addFormatToken('MMMM', 0, 0, function (format) { - return this.localeData().months(this, format); - }); - - // ALIASES - - addUnitAlias('month', 'M'); - - // PRIORITY - - addUnitPriority('month', 8); - - // PARSING - - addRegexToken('M', match1to2); - addRegexToken('MM', match1to2, match2); - addRegexToken('MMM', function (isStrict, locale) { - return locale.monthsShortRegex(isStrict); - }); - addRegexToken('MMMM', function (isStrict, locale) { - return locale.monthsRegex(isStrict); - }); - - addParseToken(['M', 'MM'], function (input, array) { - array[MONTH] = toInt(input) - 1; - }); - - addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { - var month = config._locale.monthsParse(input, token, config._strict); - // if we didn't find a month name, mark the date as invalid. - if (month != null) { - array[MONTH] = month; - } else { - getParsingFlags(config).invalidMonth = input; - } - }); - - // LOCALES - - var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/; - var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); - function localeMonths (m, format) { - if (!m) { - return this._months; - } - return isArray(this._months) ? this._months[m.month()] : - this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()]; - } - - var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); - function localeMonthsShort (m, format) { - if (!m) { - return this._monthsShort; - } - return isArray(this._monthsShort) ? this._monthsShort[m.month()] : - this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()]; - } - - function units_month__handleStrictParse(monthName, format, strict) { - var i, ii, mom, llc = monthName.toLocaleLowerCase(); - if (!this._monthsParse) { - // this is not used - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - for (i = 0; i < 12; ++i) { - mom = create_utc__createUTC([2000, i]); - this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase(); - this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase(); - } - } - - if (strict) { - if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; - } - } else { - if (format === 'MMM') { - ii = indexOf.call(this._shortMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._longMonthsParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._longMonthsParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortMonthsParse, llc); - return ii !== -1 ? ii : null; - } - } - } - - function localeMonthsParse (monthName, format, strict) { - var i, mom, regex; - - if (this._monthsParseExact) { - return units_month__handleStrictParse.call(this, monthName, format, strict); - } - - if (!this._monthsParse) { - this._monthsParse = []; - this._longMonthsParse = []; - this._shortMonthsParse = []; - } - - // TODO: add sorting - // Sorting makes sure if one month (or abbr) is a prefix of another - // see sorting in computeMonthsParse - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - if (strict && !this._longMonthsParse[i]) { - this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); - this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); - } - if (!strict && !this._monthsParse[i]) { - regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); - this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { - return i; - } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { - return i; - } else if (!strict && this._monthsParse[i].test(monthName)) { - return i; - } - } - } - - // MOMENTS - - function setMonth (mom, value) { - var dayOfMonth; - - if (!mom.isValid()) { - // No op - return mom; - } - - if (typeof value === 'string') { - if (/^\d+$/.test(value)) { - value = toInt(value); - } else { - value = mom.localeData().monthsParse(value); - // TODO: Another silent failure? - if (typeof value !== 'number') { - return mom; - } - } - } - - dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); - mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); - return mom; - } - - function getSetMonth (value) { - if (value != null) { - setMonth(this, value); - utils_hooks__hooks.updateOffset(this, true); - return this; - } else { - return get_set__get(this, 'Month'); - } - } - - function getDaysInMonth () { - return daysInMonth(this.year(), this.month()); - } - - var defaultMonthsShortRegex = matchWord; - function monthsShortRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsShortStrictRegex; - } else { - return this._monthsShortRegex; - } - } else { - if (!hasOwnProp(this, '_monthsShortRegex')) { - this._monthsShortRegex = defaultMonthsShortRegex; - } - return this._monthsShortStrictRegex && isStrict ? - this._monthsShortStrictRegex : this._monthsShortRegex; - } - } - - var defaultMonthsRegex = matchWord; - function monthsRegex (isStrict) { - if (this._monthsParseExact) { - if (!hasOwnProp(this, '_monthsRegex')) { - computeMonthsParse.call(this); - } - if (isStrict) { - return this._monthsStrictRegex; - } else { - return this._monthsRegex; - } - } else { - if (!hasOwnProp(this, '_monthsRegex')) { - this._monthsRegex = defaultMonthsRegex; - } - return this._monthsStrictRegex && isStrict ? - this._monthsStrictRegex : this._monthsRegex; - } - } - - function computeMonthsParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var shortPieces = [], longPieces = [], mixedPieces = [], - i, mom; - for (i = 0; i < 12; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, i]); - shortPieces.push(this.monthsShort(mom, '')); - longPieces.push(this.months(mom, '')); - mixedPieces.push(this.months(mom, '')); - mixedPieces.push(this.monthsShort(mom, '')); - } - // Sorting makes sure if one month (or abbr) is a prefix of another it - // will match the longer piece. - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 12; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - } - for (i = 0; i < 24; i++) { - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._monthsShortRegex = this._monthsRegex; - this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - } - - // FORMATTING - - addFormatToken('Y', 0, 0, function () { - var y = this.year(); - return y <= 9999 ? '' + y : '+' + y; - }); - - addFormatToken(0, ['YY', 2], 0, function () { - return this.year() % 100; - }); - - addFormatToken(0, ['YYYY', 4], 0, 'year'); - addFormatToken(0, ['YYYYY', 5], 0, 'year'); - addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); - - // ALIASES - - addUnitAlias('year', 'y'); - - // PRIORITIES - - addUnitPriority('year', 1); - - // PARSING - - addRegexToken('Y', matchSigned); - addRegexToken('YY', match1to2, match2); - addRegexToken('YYYY', match1to4, match4); - addRegexToken('YYYYY', match1to6, match6); - addRegexToken('YYYYYY', match1to6, match6); - - addParseToken(['YYYYY', 'YYYYYY'], YEAR); - addParseToken('YYYY', function (input, array) { - array[YEAR] = input.length === 2 ? utils_hooks__hooks.parseTwoDigitYear(input) : toInt(input); - }); - addParseToken('YY', function (input, array) { - array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - addParseToken('Y', function (input, array) { - array[YEAR] = parseInt(input, 10); - }); - - // HELPERS - - function daysInYear(year) { - return isLeapYear(year) ? 366 : 365; - } - - function isLeapYear(year) { - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - // HOOKS - - utils_hooks__hooks.parseTwoDigitYear = function (input) { - return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); - }; - - // MOMENTS - - var getSetYear = makeGetSet('FullYear', true); - - function getIsLeapYear () { - return isLeapYear(this.year()); - } - - function createDate (y, m, d, h, M, s, ms) { - //can't just apply() to create a date: - //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply - var date = new Date(y, m, d, h, M, s, ms); - - //the date constructor remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getFullYear())) { - date.setFullYear(y); - } - return date; - } - - function createUTCDate (y) { - var date = new Date(Date.UTC.apply(null, arguments)); - - //the Date.UTC function remaps years 0-99 to 1900-1999 - if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) { - date.setUTCFullYear(y); - } - return date; - } - - // start-of-first-week - start-of-year - function firstWeekOffset(year, dow, doy) { - var // first-week day -- which january is always in the first week (4 for iso, 1 for other) - fwd = 7 + dow - doy, - // first-week day local weekday -- which local weekday is fwd - fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7; - - return -fwdlw + fwd - 1; - } - - //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday - function dayOfYearFromWeeks(year, week, weekday, dow, doy) { - var localWeekday = (7 + weekday - dow) % 7, - weekOffset = firstWeekOffset(year, dow, doy), - dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, - resYear, resDayOfYear; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } - - return { - year: resYear, - dayOfYear: resDayOfYear - }; - } - - function weekOfYear(mom, dow, doy) { - var weekOffset = firstWeekOffset(mom.year(), dow, doy), - week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1, - resWeek, resYear; - - if (week < 1) { - resYear = mom.year() - 1; - resWeek = week + weeksInYear(resYear, dow, doy); - } else if (week > weeksInYear(mom.year(), dow, doy)) { - resWeek = week - weeksInYear(mom.year(), dow, doy); - resYear = mom.year() + 1; - } else { - resYear = mom.year(); - resWeek = week; - } - - return { - week: resWeek, - year: resYear - }; - } - - function weeksInYear(year, dow, doy) { - var weekOffset = firstWeekOffset(year, dow, doy), - weekOffsetNext = firstWeekOffset(year + 1, dow, doy); - return (daysInYear(year) - weekOffset + weekOffsetNext) / 7; - } - - // FORMATTING - - addFormatToken('w', ['ww', 2], 'wo', 'week'); - addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); - - // ALIASES - - addUnitAlias('week', 'w'); - addUnitAlias('isoWeek', 'W'); - - // PRIORITIES - - addUnitPriority('week', 5); - addUnitPriority('isoWeek', 5); - - // PARSING - - addRegexToken('w', match1to2); - addRegexToken('ww', match1to2, match2); - addRegexToken('W', match1to2); - addRegexToken('WW', match1to2, match2); - - addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { - week[token.substr(0, 1)] = toInt(input); - }); - - // HELPERS - - // LOCALES - - function localeWeek (mom) { - return weekOfYear(mom, this._week.dow, this._week.doy).week; - } - - var defaultLocaleWeek = { - dow : 0, // Sunday is the first day of the week. - doy : 6 // The week that contains Jan 1st is the first week of the year. - }; - - function localeFirstDayOfWeek () { - return this._week.dow; - } - - function localeFirstDayOfYear () { - return this._week.doy; - } - - // MOMENTS - - function getSetWeek (input) { - var week = this.localeData().week(this); - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - function getSetISOWeek (input) { - var week = weekOfYear(this, 1, 4).week; - return input == null ? week : this.add((input - week) * 7, 'd'); - } - - // FORMATTING - - addFormatToken('d', 0, 'do', 'day'); - - addFormatToken('dd', 0, 0, function (format) { - return this.localeData().weekdaysMin(this, format); - }); - - addFormatToken('ddd', 0, 0, function (format) { - return this.localeData().weekdaysShort(this, format); - }); - - addFormatToken('dddd', 0, 0, function (format) { - return this.localeData().weekdays(this, format); - }); - - addFormatToken('e', 0, 0, 'weekday'); - addFormatToken('E', 0, 0, 'isoWeekday'); - - // ALIASES - - addUnitAlias('day', 'd'); - addUnitAlias('weekday', 'e'); - addUnitAlias('isoWeekday', 'E'); - - // PRIORITY - addUnitPriority('day', 11); - addUnitPriority('weekday', 11); - addUnitPriority('isoWeekday', 11); - - // PARSING - - addRegexToken('d', match1to2); - addRegexToken('e', match1to2); - addRegexToken('E', match1to2); - addRegexToken('dd', function (isStrict, locale) { - return locale.weekdaysMinRegex(isStrict); - }); - addRegexToken('ddd', function (isStrict, locale) { - return locale.weekdaysShortRegex(isStrict); - }); - addRegexToken('dddd', function (isStrict, locale) { - return locale.weekdaysRegex(isStrict); - }); - - addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) { - var weekday = config._locale.weekdaysParse(input, token, config._strict); - // if we didn't get a weekday name, mark the date as invalid - if (weekday != null) { - week.d = weekday; - } else { - getParsingFlags(config).invalidWeekday = input; - } - }); - - addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { - week[token] = toInt(input); - }); - - // HELPERS - - function parseWeekday(input, locale) { - if (typeof input !== 'string') { - return input; - } - - if (!isNaN(input)) { - return parseInt(input, 10); - } - - input = locale.weekdaysParse(input); - if (typeof input === 'number') { - return input; - } - - return null; - } - - function parseIsoWeekday(input, locale) { - if (typeof input === 'string') { - return locale.weekdaysParse(input) % 7 || 7; - } - return isNaN(input) ? null : input; - } - - // LOCALES - - var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); - function localeWeekdays (m, format) { - if (!m) { - return this._weekdays; - } - return isArray(this._weekdays) ? this._weekdays[m.day()] : - this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()]; - } - - var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); - function localeWeekdaysShort (m) { - return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort; - } - - var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); - function localeWeekdaysMin (m) { - return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin; - } - - function day_of_week__handleStrictParse(weekdayName, format, strict) { - var i, ii, mom, llc = weekdayName.toLocaleLowerCase(); - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._shortWeekdaysParse = []; - this._minWeekdaysParse = []; - - for (i = 0; i < 7; ++i) { - mom = create_utc__createUTC([2000, 1]).day(i); - this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase(); - this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase(); - this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase(); - } - } - - if (strict) { - if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - return ii !== -1 ? ii : null; - } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } - } else { - if (format === 'dddd') { - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else if (format === 'ddd') { - ii = indexOf.call(this._shortWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._minWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } else { - ii = indexOf.call(this._minWeekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._weekdaysParse, llc); - if (ii !== -1) { - return ii; - } - ii = indexOf.call(this._shortWeekdaysParse, llc); - return ii !== -1 ? ii : null; - } - } - } - - function localeWeekdaysParse (weekdayName, format, strict) { - var i, mom, regex; - - if (this._weekdaysParseExact) { - return day_of_week__handleStrictParse.call(this, weekdayName, format, strict); - } - - if (!this._weekdaysParse) { - this._weekdaysParse = []; - this._minWeekdaysParse = []; - this._shortWeekdaysParse = []; - this._fullWeekdaysParse = []; - } - - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - - mom = create_utc__createUTC([2000, 1]).day(i); - if (strict && !this._fullWeekdaysParse[i]) { - this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i'); - this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i'); - this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i'); - } - if (!this._weekdaysParse[i]) { - regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); - this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); - } - // test the regex - if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) { - return i; - } else if (!strict && this._weekdaysParse[i].test(weekdayName)) { - return i; - } - } - } - - // MOMENTS - - function getSetDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); - if (input != null) { - input = parseWeekday(input, this.localeData()); - return this.add(input - day, 'd'); - } else { - return day; - } - } - - function getSetLocaleDayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; - return input == null ? weekday : this.add(input - weekday, 'd'); - } - - function getSetISODayOfWeek (input) { - if (!this.isValid()) { - return input != null ? this : NaN; - } - - // behaves the same as moment#day except - // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) - // as a setter, sunday should belong to the previous week. - - if (input != null) { - var weekday = parseIsoWeekday(input, this.localeData()); - return this.day(this.day() % 7 ? weekday : weekday - 7); - } else { - return this.day() || 7; - } - } - - var defaultWeekdaysRegex = matchWord; - function weekdaysRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysStrictRegex; - } else { - return this._weekdaysRegex; - } - } else { - if (!hasOwnProp(this, '_weekdaysRegex')) { - this._weekdaysRegex = defaultWeekdaysRegex; - } - return this._weekdaysStrictRegex && isStrict ? - this._weekdaysStrictRegex : this._weekdaysRegex; - } - } - - var defaultWeekdaysShortRegex = matchWord; - function weekdaysShortRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysShortStrictRegex; - } else { - return this._weekdaysShortRegex; - } - } else { - if (!hasOwnProp(this, '_weekdaysShortRegex')) { - this._weekdaysShortRegex = defaultWeekdaysShortRegex; - } - return this._weekdaysShortStrictRegex && isStrict ? - this._weekdaysShortStrictRegex : this._weekdaysShortRegex; - } - } - - var defaultWeekdaysMinRegex = matchWord; - function weekdaysMinRegex (isStrict) { - if (this._weekdaysParseExact) { - if (!hasOwnProp(this, '_weekdaysRegex')) { - computeWeekdaysParse.call(this); - } - if (isStrict) { - return this._weekdaysMinStrictRegex; - } else { - return this._weekdaysMinRegex; - } - } else { - if (!hasOwnProp(this, '_weekdaysMinRegex')) { - this._weekdaysMinRegex = defaultWeekdaysMinRegex; - } - return this._weekdaysMinStrictRegex && isStrict ? - this._weekdaysMinStrictRegex : this._weekdaysMinRegex; - } - } - - - function computeWeekdaysParse () { - function cmpLenRev(a, b) { - return b.length - a.length; - } - - var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [], - i, mom, minp, shortp, longp; - for (i = 0; i < 7; i++) { - // make the regex if we don't have it already - mom = create_utc__createUTC([2000, 1]).day(i); - minp = this.weekdaysMin(mom, ''); - shortp = this.weekdaysShort(mom, ''); - longp = this.weekdays(mom, ''); - minPieces.push(minp); - shortPieces.push(shortp); - longPieces.push(longp); - mixedPieces.push(minp); - mixedPieces.push(shortp); - mixedPieces.push(longp); - } - // Sorting makes sure if one weekday (or abbr) is a prefix of another it - // will match the longer piece. - minPieces.sort(cmpLenRev); - shortPieces.sort(cmpLenRev); - longPieces.sort(cmpLenRev); - mixedPieces.sort(cmpLenRev); - for (i = 0; i < 7; i++) { - shortPieces[i] = regexEscape(shortPieces[i]); - longPieces[i] = regexEscape(longPieces[i]); - mixedPieces[i] = regexEscape(mixedPieces[i]); - } - - this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i'); - this._weekdaysShortRegex = this._weekdaysRegex; - this._weekdaysMinRegex = this._weekdaysRegex; - - this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i'); - this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i'); - this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i'); - } - - // FORMATTING - - function hFormat() { - return this.hours() % 12 || 12; - } - - function kFormat() { - return this.hours() || 24; - } - - addFormatToken('H', ['HH', 2], 0, 'hour'); - addFormatToken('h', ['hh', 2], 0, hFormat); - addFormatToken('k', ['kk', 2], 0, kFormat); - - addFormatToken('hmm', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2); - }); - - addFormatToken('hmmss', 0, 0, function () { - return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - addFormatToken('Hmm', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2); - }); - - addFormatToken('Hmmss', 0, 0, function () { - return '' + this.hours() + zeroFill(this.minutes(), 2) + - zeroFill(this.seconds(), 2); - }); - - function meridiem (token, lowercase) { - addFormatToken(token, 0, 0, function () { - return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); - }); - } - - meridiem('a', true); - meridiem('A', false); - - // ALIASES - - addUnitAlias('hour', 'h'); - - // PRIORITY - addUnitPriority('hour', 13); - - // PARSING - - function matchMeridiem (isStrict, locale) { - return locale._meridiemParse; - } - - addRegexToken('a', matchMeridiem); - addRegexToken('A', matchMeridiem); - addRegexToken('H', match1to2); - addRegexToken('h', match1to2); - addRegexToken('HH', match1to2, match2); - addRegexToken('hh', match1to2, match2); - - addRegexToken('hmm', match3to4); - addRegexToken('hmmss', match5to6); - addRegexToken('Hmm', match3to4); - addRegexToken('Hmmss', match5to6); - - addParseToken(['H', 'HH'], HOUR); - addParseToken(['a', 'A'], function (input, array, config) { - config._isPm = config._locale.isPM(input); - config._meridiem = input; - }); - addParseToken(['h', 'hh'], function (input, array, config) { - array[HOUR] = toInt(input); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - getParsingFlags(config).bigHour = true; - }); - addParseToken('Hmm', function (input, array, config) { - var pos = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos)); - array[MINUTE] = toInt(input.substr(pos)); - }); - addParseToken('Hmmss', function (input, array, config) { - var pos1 = input.length - 4; - var pos2 = input.length - 2; - array[HOUR] = toInt(input.substr(0, pos1)); - array[MINUTE] = toInt(input.substr(pos1, 2)); - array[SECOND] = toInt(input.substr(pos2)); - }); - - // LOCALES - - function localeIsPM (input) { - // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays - // Using charAt should be more compatible. - return ((input + '').toLowerCase().charAt(0) === 'p'); - } - - var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; - function localeMeridiem (hours, minutes, isLower) { - if (hours > 11) { - return isLower ? 'pm' : 'PM'; - } else { - return isLower ? 'am' : 'AM'; - } - } - - - // MOMENTS - - // Setting the hour should keep the time, because the user explicitly - // specified which hour he wants. So trying to maintain the same hour (in - // a new timezone) makes sense. Adding/subtracting hours does not follow - // this rule. - var getSetHour = makeGetSet('Hours', true); - - var baseConfig = { - calendar: defaultCalendar, - longDateFormat: defaultLongDateFormat, - invalidDate: defaultInvalidDate, - ordinal: defaultOrdinal, - ordinalParse: defaultOrdinalParse, - relativeTime: defaultRelativeTime, - - months: defaultLocaleMonths, - monthsShort: defaultLocaleMonthsShort, - - week: defaultLocaleWeek, - - weekdays: defaultLocaleWeekdays, - weekdaysMin: defaultLocaleWeekdaysMin, - weekdaysShort: defaultLocaleWeekdaysShort, - - meridiemParse: defaultLocaleMeridiemParse - }; - - // internal storage for locale config files - var locales = {}; - var globalLocale; - - function normalizeLocale(key) { - return key ? key.toLowerCase().replace('_', '-') : key; - } - - // pick the locale from the array - // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each - // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root - function chooseLocale(names) { - var i = 0, j, next, locale, split; - - while (i < names.length) { - split = normalizeLocale(names[i]).split('-'); - j = split.length; - next = normalizeLocale(names[i + 1]); - next = next ? next.split('-') : null; - while (j > 0) { - locale = loadLocale(split.slice(0, j).join('-')); - if (locale) { - return locale; - } - if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { - //the next array item is better than a shallower substring of this one - break; - } - j--; - } - i++; - } - return null; - } - - function loadLocale(name) { - var oldLocale = null; - // TODO: Find a better way to register and load all the locales in Node - if (!locales[name] && (typeof module !== 'undefined') && - module && module.exports) { - try { - oldLocale = globalLocale._abbr; - require('./locale/' + name); - // because defineLocale currently also sets the global locale, we - // want to undo that for lazy loaded locales - locale_locales__getSetGlobalLocale(oldLocale); - } catch (e) { } - } - return locales[name]; - } - - // This function will load locale and then set the global locale. If - // no arguments are passed in, it will simply return the current global - // locale key. - function locale_locales__getSetGlobalLocale (key, values) { - var data; - if (key) { - if (isUndefined(values)) { - data = locale_locales__getLocale(key); - } - else { - data = defineLocale(key, values); - } - - if (data) { - // moment.duration._locale = moment._locale = data; - globalLocale = data; - } - } - - return globalLocale._abbr; - } - - function defineLocale (name, config) { - if (config !== null) { - var parentConfig = baseConfig; - config.abbr = name; - if (locales[name] != null) { - deprecateSimple('defineLocaleOverride', - 'use moment.updateLocale(localeName, config) to change ' + - 'an existing locale. moment.defineLocale(localeName, ' + - 'config) should only be used for creating a new locale ' + - 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'); - parentConfig = locales[name]._config; - } else if (config.parentLocale != null) { - if (locales[config.parentLocale] != null) { - parentConfig = locales[config.parentLocale]._config; - } else { - // treat as if there is no base config - deprecateSimple('parentLocaleUndefined', - 'specified parentLocale is not defined yet. See http://momentjs.com/guides/#/warnings/parent-locale/'); - } - } - locales[name] = new Locale(mergeConfigs(parentConfig, config)); - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - - return locales[name]; - } else { - // useful for testing - delete locales[name]; - return null; - } - } - - function updateLocale(name, config) { - if (config != null) { - var locale, parentConfig = baseConfig; - // MERGE - if (locales[name] != null) { - parentConfig = locales[name]._config; - } - config = mergeConfigs(parentConfig, config); - locale = new Locale(config); - locale.parentLocale = locales[name]; - locales[name] = locale; - - // backwards compat for now: also set the locale - locale_locales__getSetGlobalLocale(name); - } else { - // pass null for config to unupdate, useful for tests - if (locales[name] != null) { - if (locales[name].parentLocale != null) { - locales[name] = locales[name].parentLocale; - } else if (locales[name] != null) { - delete locales[name]; - } - } - } - return locales[name]; - } - - // returns locale data - function locale_locales__getLocale (key) { - var locale; - - if (key && key._locale && key._locale._abbr) { - key = key._locale._abbr; - } - - if (!key) { - return globalLocale; - } - - if (!isArray(key)) { - //short-circuit everything else - locale = loadLocale(key); - if (locale) { - return locale; - } - key = [key]; - } - - return chooseLocale(key); - } - - function locale_locales__listLocales() { - return keys(locales); - } - - function checkOverflow (m) { - var overflow; - var a = m._a; - - if (a && getParsingFlags(m).overflow === -2) { - overflow = - a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : - a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : - a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : - a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : - a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : - a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : - -1; - - if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { - overflow = DATE; - } - if (getParsingFlags(m)._overflowWeeks && overflow === -1) { - overflow = WEEK; - } - if (getParsingFlags(m)._overflowWeekday && overflow === -1) { - overflow = WEEKDAY; - } - - getParsingFlags(m).overflow = overflow; - } - - return m; - } - - // iso 8601 regex - // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) - var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?/; - - var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/; - - var isoDates = [ - ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/], - ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/], - ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/], - ['GGGG-[W]WW', /\d{4}-W\d\d/, false], - ['YYYY-DDD', /\d{4}-\d{3}/], - ['YYYY-MM', /\d{4}-\d\d/, false], - ['YYYYYYMMDD', /[+-]\d{10}/], - ['YYYYMMDD', /\d{8}/], - // YYYYMM is NOT allowed by the standard - ['GGGG[W]WWE', /\d{4}W\d{3}/], - ['GGGG[W]WW', /\d{4}W\d{2}/, false], - ['YYYYDDD', /\d{7}/] - ]; - - // iso time formats and regexes - var isoTimes = [ - ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/], - ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/], - ['HH:mm:ss', /\d\d:\d\d:\d\d/], - ['HH:mm', /\d\d:\d\d/], - ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/], - ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/], - ['HHmmss', /\d\d\d\d\d\d/], - ['HHmm', /\d\d\d\d/], - ['HH', /\d\d/] - ]; - - var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; - - // date from iso format - function configFromISO(config) { - var i, l, - string = config._i, - match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string), - allowTime, dateFormat, timeFormat, tzFormat; - - if (match) { - getParsingFlags(config).iso = true; - - for (i = 0, l = isoDates.length; i < l; i++) { - if (isoDates[i][1].exec(match[1])) { - dateFormat = isoDates[i][0]; - allowTime = isoDates[i][2] !== false; - break; - } - } - if (dateFormat == null) { - config._isValid = false; - return; - } - if (match[3]) { - for (i = 0, l = isoTimes.length; i < l; i++) { - if (isoTimes[i][1].exec(match[3])) { - // match[2] should be 'T' or space - timeFormat = (match[2] || ' ') + isoTimes[i][0]; - break; - } - } - if (timeFormat == null) { - config._isValid = false; - return; - } - } - if (!allowTime && timeFormat != null) { - config._isValid = false; - return; - } - if (match[4]) { - if (tzRegex.exec(match[4])) { - tzFormat = 'Z'; - } else { - config._isValid = false; - return; - } - } - config._f = dateFormat + (timeFormat || '') + (tzFormat || ''); - configFromStringAndFormat(config); - } else { - config._isValid = false; - } - } - - // date from iso format or fallback - function configFromString(config) { - var matched = aspNetJsonRegex.exec(config._i); - - if (matched !== null) { - config._d = new Date(+matched[1]); - return; - } - - configFromISO(config); - if (config._isValid === false) { - delete config._isValid; - utils_hooks__hooks.createFromInputFallback(config); - } - } - - utils_hooks__hooks.createFromInputFallback = deprecate( - 'value provided is not in a recognized ISO format. moment construction falls back to js Date(), ' + - 'which is not reliable across all browsers and versions. Non ISO date formats are ' + - 'discouraged and will be removed in an upcoming major release. Please refer to ' + - 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', - function (config) { - config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); - } - ); - - // Pick the first defined of two or three arguments. - function defaults(a, b, c) { - if (a != null) { - return a; - } - if (b != null) { - return b; - } - return c; - } - - function currentDateArray(config) { - // hooks is actually the exported moment object - var nowValue = new Date(utils_hooks__hooks.now()); - if (config._useUTC) { - return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()]; - } - return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()]; - } - - // convert an array to a date. - // the array should mirror the parameters below - // note: all values past the year are optional and will default to the lowest possible value. - // [year, month, day , hour, minute, second, millisecond] - function configFromArray (config) { - var i, date, input = [], currentDate, yearToUse; - - if (config._d) { - return; - } - - currentDate = currentDateArray(config); - - //compute day of the year from weeks and weekdays - if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { - dayOfYearFromWeekInfo(config); - } - - //if the day of the year is set, figure out what it is - if (config._dayOfYear) { - yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); - - if (config._dayOfYear > daysInYear(yearToUse)) { - getParsingFlags(config)._overflowDayOfYear = true; - } - - date = createUTCDate(yearToUse, 0, config._dayOfYear); - config._a[MONTH] = date.getUTCMonth(); - config._a[DATE] = date.getUTCDate(); - } - - // Default to current date. - // * if no year, month, day of month are given, default to today - // * if day of month is given, default month and year - // * if month is given, default only year - // * if year is given, don't default anything - for (i = 0; i < 3 && config._a[i] == null; ++i) { - config._a[i] = input[i] = currentDate[i]; - } - - // Zero out whatever was not defaulted, including time - for (; i < 7; i++) { - config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; - } - - // Check for 24:00:00.000 - if (config._a[HOUR] === 24 && - config._a[MINUTE] === 0 && - config._a[SECOND] === 0 && - config._a[MILLISECOND] === 0) { - config._nextDay = true; - config._a[HOUR] = 0; - } - - config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); - // Apply timezone offset from input. The actual utcOffset can be changed - // with parseZone. - if (config._tzm != null) { - config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); - } - - if (config._nextDay) { - config._a[HOUR] = 24; - } - } - - function dayOfYearFromWeekInfo(config) { - var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow; - - w = config._w; - if (w.GG != null || w.W != null || w.E != null) { - dow = 1; - doy = 4; - - // TODO: We need to take the current isoWeekYear, but that depends on - // how we interpret now (local, utc, fixed offset). So create - // a now version of current config (take local/utc/offset flags, and - // create now). - weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); - week = defaults(w.W, 1); - weekday = defaults(w.E, 1); - if (weekday < 1 || weekday > 7) { - weekdayOverflow = true; - } - } else { - dow = config._locale._week.dow; - doy = config._locale._week.doy; - - weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); - week = defaults(w.w, 1); - - if (w.d != null) { - // weekday -- low day numbers are considered next week - weekday = w.d; - if (weekday < 0 || weekday > 6) { - weekdayOverflow = true; - } - } else if (w.e != null) { - // local weekday -- counting starts from begining of week - weekday = w.e + dow; - if (w.e < 0 || w.e > 6) { - weekdayOverflow = true; - } - } else { - // default to begining of week - weekday = dow; - } - } - if (week < 1 || week > weeksInYear(weekYear, dow, doy)) { - getParsingFlags(config)._overflowWeeks = true; - } else if (weekdayOverflow != null) { - getParsingFlags(config)._overflowWeekday = true; - } else { - temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy); - config._a[YEAR] = temp.year; - config._dayOfYear = temp.dayOfYear; - } - } - - // constant that refers to the ISO standard - utils_hooks__hooks.ISO_8601 = function () {}; - - // date from string and format string - function configFromStringAndFormat(config) { - // TODO: Move this to another part of the creation flow to prevent circular deps - if (config._f === utils_hooks__hooks.ISO_8601) { - configFromISO(config); - return; - } - - config._a = []; - getParsingFlags(config).empty = true; - - // This array is used to make a Date, either with `new Date` or `Date.UTC` - var string = '' + config._i, - i, parsedInput, tokens, token, skipped, - stringLength = string.length, - totalParsedInputLength = 0; - - tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; - - for (i = 0; i < tokens.length; i++) { - token = tokens[i]; - parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; - // console.log('token', token, 'parsedInput', parsedInput, - // 'regex', getParseRegexForToken(token, config)); - if (parsedInput) { - skipped = string.substr(0, string.indexOf(parsedInput)); - if (skipped.length > 0) { - getParsingFlags(config).unusedInput.push(skipped); - } - string = string.slice(string.indexOf(parsedInput) + parsedInput.length); - totalParsedInputLength += parsedInput.length; - } - // don't parse if it's not a known token - if (formatTokenFunctions[token]) { - if (parsedInput) { - getParsingFlags(config).empty = false; - } - else { - getParsingFlags(config).unusedTokens.push(token); - } - addTimeToArrayFromToken(token, parsedInput, config); - } - else if (config._strict && !parsedInput) { - getParsingFlags(config).unusedTokens.push(token); - } - } - - // add remaining unparsed input length to the string - getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength; - if (string.length > 0) { - getParsingFlags(config).unusedInput.push(string); - } - - // clear _12h flag if hour is <= 12 - if (config._a[HOUR] <= 12 && - getParsingFlags(config).bigHour === true && - config._a[HOUR] > 0) { - getParsingFlags(config).bigHour = undefined; - } - - getParsingFlags(config).parsedDateParts = config._a.slice(0); - getParsingFlags(config).meridiem = config._meridiem; - // handle meridiem - config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); - - configFromArray(config); - checkOverflow(config); - } - - - function meridiemFixWrap (locale, hour, meridiem) { - var isPm; - - if (meridiem == null) { - // nothing to do - return hour; - } - if (locale.meridiemHour != null) { - return locale.meridiemHour(hour, meridiem); - } else if (locale.isPM != null) { - // Fallback - isPm = locale.isPM(meridiem); - if (isPm && hour < 12) { - hour += 12; - } - if (!isPm && hour === 12) { - hour = 0; - } - return hour; - } else { - // this is not supposed to happen - return hour; - } - } - - // date from string and array of format strings - function configFromStringAndArray(config) { - var tempConfig, - bestMoment, - - scoreToBeat, - i, - currentScore; - - if (config._f.length === 0) { - getParsingFlags(config).invalidFormat = true; - config._d = new Date(NaN); - return; - } - - for (i = 0; i < config._f.length; i++) { - currentScore = 0; - tempConfig = copyConfig({}, config); - if (config._useUTC != null) { - tempConfig._useUTC = config._useUTC; - } - tempConfig._f = config._f[i]; - configFromStringAndFormat(tempConfig); - - if (!valid__isValid(tempConfig)) { - continue; - } - - // if there is any input that was not parsed add a penalty for that format - currentScore += getParsingFlags(tempConfig).charsLeftOver; - - //or tokens - currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10; - - getParsingFlags(tempConfig).score = currentScore; - - if (scoreToBeat == null || currentScore < scoreToBeat) { - scoreToBeat = currentScore; - bestMoment = tempConfig; - } - } - - extend(config, bestMoment || tempConfig); - } - - function configFromObject(config) { - if (config._d) { - return; - } - - var i = normalizeObjectUnits(config._i); - config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) { - return obj && parseInt(obj, 10); - }); - - configFromArray(config); - } - - function createFromConfig (config) { - var res = new Moment(checkOverflow(prepareConfig(config))); - if (res._nextDay) { - // Adding is smart enough around DST - res.add(1, 'd'); - res._nextDay = undefined; - } - - return res; - } - - function prepareConfig (config) { - var input = config._i, - format = config._f; - - config._locale = config._locale || locale_locales__getLocale(config._l); - - if (input === null || (format === undefined && input === '')) { - return valid__createInvalid({nullInput: true}); - } - - if (typeof input === 'string') { - config._i = input = config._locale.preparse(input); - } - - if (isMoment(input)) { - return new Moment(checkOverflow(input)); - } else if (isArray(format)) { - configFromStringAndArray(config); - } else if (isDate(input)) { - config._d = input; - } else if (format) { - configFromStringAndFormat(config); - } else { - configFromInput(config); - } - - if (!valid__isValid(config)) { - config._d = null; - } - - return config; - } - - function configFromInput(config) { - var input = config._i; - if (input === undefined) { - config._d = new Date(utils_hooks__hooks.now()); - } else if (isDate(input)) { - config._d = new Date(input.valueOf()); - } else if (typeof input === 'string') { - configFromString(config); - } else if (isArray(input)) { - config._a = map(input.slice(0), function (obj) { - return parseInt(obj, 10); - }); - configFromArray(config); - } else if (typeof(input) === 'object') { - configFromObject(config); - } else if (typeof(input) === 'number') { - // from milliseconds - config._d = new Date(input); - } else { - utils_hooks__hooks.createFromInputFallback(config); - } - } - - function createLocalOrUTC (input, format, locale, strict, isUTC) { - var c = {}; - - if (typeof(locale) === 'boolean') { - strict = locale; - locale = undefined; - } - - if ((isObject(input) && isObjectEmpty(input)) || - (isArray(input) && input.length === 0)) { - input = undefined; - } - // object construction must be done this way. - // https://github.com/moment/moment/issues/1423 - c._isAMomentObject = true; - c._useUTC = c._isUTC = isUTC; - c._l = locale; - c._i = input; - c._f = format; - c._strict = strict; - - return createFromConfig(c); - } - - function local__createLocal (input, format, locale, strict) { - return createLocalOrUTC(input, format, locale, strict, false); - } - - var prototypeMin = deprecate( - 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other < this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - var prototypeMax = deprecate( - 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', - function () { - var other = local__createLocal.apply(null, arguments); - if (this.isValid() && other.isValid()) { - return other > this ? this : other; - } else { - return valid__createInvalid(); - } - } - ); - - // Pick a moment m from moments so that m[fn](other) is true for all - // other. This relies on the function fn to be transitive. - // - // moments should either be an array of moment objects or an array, whose - // first element is an array of moment objects. - function pickBy(fn, moments) { - var res, i; - if (moments.length === 1 && isArray(moments[0])) { - moments = moments[0]; - } - if (!moments.length) { - return local__createLocal(); - } - res = moments[0]; - for (i = 1; i < moments.length; ++i) { - if (!moments[i].isValid() || moments[i][fn](res)) { - res = moments[i]; - } - } - return res; - } - - // TODO: Use [].sort instead? - function min () { - var args = [].slice.call(arguments, 0); - - return pickBy('isBefore', args); - } - - function max () { - var args = [].slice.call(arguments, 0); - - return pickBy('isAfter', args); - } - - var now = function () { - return Date.now ? Date.now() : +(new Date()); - }; - - function Duration (duration) { - var normalizedInput = normalizeObjectUnits(duration), - years = normalizedInput.year || 0, - quarters = normalizedInput.quarter || 0, - months = normalizedInput.month || 0, - weeks = normalizedInput.week || 0, - days = normalizedInput.day || 0, - hours = normalizedInput.hour || 0, - minutes = normalizedInput.minute || 0, - seconds = normalizedInput.second || 0, - milliseconds = normalizedInput.millisecond || 0; - - // representation for dateAddRemove - this._milliseconds = +milliseconds + - seconds * 1e3 + // 1000 - minutes * 6e4 + // 1000 * 60 - hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978 - // Because of dateAddRemove treats 24 hours as different from a - // day when working around DST, we need to store them separately - this._days = +days + - weeks * 7; - // It is impossible translate months into days without knowing - // which months you are are talking about, so we have to store - // it separately. - this._months = +months + - quarters * 3 + - years * 12; - - this._data = {}; - - this._locale = locale_locales__getLocale(); - - this._bubble(); - } - - function isDuration (obj) { - return obj instanceof Duration; - } - - function absRound (number) { - if (number < 0) { - return Math.round(-1 * number) * -1; - } else { - return Math.round(number); - } - } - - // FORMATTING - - function offset (token, separator) { - addFormatToken(token, 0, 0, function () { - var offset = this.utcOffset(); - var sign = '+'; - if (offset < 0) { - offset = -offset; - sign = '-'; - } - return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); - }); - } - - offset('Z', ':'); - offset('ZZ', ''); - - // PARSING - - addRegexToken('Z', matchShortOffset); - addRegexToken('ZZ', matchShortOffset); - addParseToken(['Z', 'ZZ'], function (input, array, config) { - config._useUTC = true; - config._tzm = offsetFromString(matchShortOffset, input); - }); - - // HELPERS - - // timezone chunker - // '+10:00' > ['10', '00'] - // '-1530' > ['-15', '30'] - var chunkOffset = /([\+\-]|\d\d)/gi; - - function offsetFromString(matcher, string) { - var matches = ((string || '').match(matcher) || []); - var chunk = matches[matches.length - 1] || []; - var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; - var minutes = +(parts[1] * 60) + toInt(parts[2]); - - return parts[0] === '+' ? minutes : -minutes; - } - - // Return a moment from input, that is local/utc/zone equivalent to model. - function cloneWithOffset(input, model) { - var res, diff; - if (model._isUTC) { - res = model.clone(); - diff = (isMoment(input) || isDate(input) ? input.valueOf() : local__createLocal(input).valueOf()) - res.valueOf(); - // Use low-level api, because this fn is low-level api. - res._d.setTime(res._d.valueOf() + diff); - utils_hooks__hooks.updateOffset(res, false); - return res; - } else { - return local__createLocal(input).local(); - } - } - - function getDateOffset (m) { - // On Firefox.24 Date#getTimezoneOffset returns a floating point. - // https://github.com/moment/moment/pull/1871 - return -Math.round(m._d.getTimezoneOffset() / 15) * 15; - } - - // HOOKS - - // This function will be called whenever a moment is mutated. - // It is intended to keep the offset in sync with the timezone. - utils_hooks__hooks.updateOffset = function () {}; - - // MOMENTS - - // keepLocalTime = true means only change the timezone, without - // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> - // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset - // +0200, so we adjust the time as needed, to be valid. - // - // Keeping the time actually adds/subtracts (one hour) - // from the actual represented time. That is why we call updateOffset - // a second time. In case it wants us to change the offset again - // _changeInProgress == true case, then we have to adjust, because - // there is no such time in the given timezone. - function getSetOffset (input, keepLocalTime) { - var offset = this._offset || 0, - localAdjust; - if (!this.isValid()) { - return input != null ? this : NaN; - } - if (input != null) { - if (typeof input === 'string') { - input = offsetFromString(matchShortOffset, input); - } else if (Math.abs(input) < 16) { - input = input * 60; - } - if (!this._isUTC && keepLocalTime) { - localAdjust = getDateOffset(this); - } - this._offset = input; - this._isUTC = true; - if (localAdjust != null) { - this.add(localAdjust, 'm'); - } - if (offset !== input) { - if (!keepLocalTime || this._changeInProgress) { - add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); - } else if (!this._changeInProgress) { - this._changeInProgress = true; - utils_hooks__hooks.updateOffset(this, true); - this._changeInProgress = null; - } - } - return this; - } else { - return this._isUTC ? offset : getDateOffset(this); - } - } - - function getSetZone (input, keepLocalTime) { - if (input != null) { - if (typeof input !== 'string') { - input = -input; - } - - this.utcOffset(input, keepLocalTime); - - return this; - } else { - return -this.utcOffset(); - } - } - - function setOffsetToUTC (keepLocalTime) { - return this.utcOffset(0, keepLocalTime); - } - - function setOffsetToLocal (keepLocalTime) { - if (this._isUTC) { - this.utcOffset(0, keepLocalTime); - this._isUTC = false; - - if (keepLocalTime) { - this.subtract(getDateOffset(this), 'm'); - } - } - return this; - } - - function setOffsetToParsedOffset () { - if (this._tzm) { - this.utcOffset(this._tzm); - } else if (typeof this._i === 'string') { - var tZone = offsetFromString(matchOffset, this._i); - - if (tZone === 0) { - this.utcOffset(0, true); - } else { - this.utcOffset(offsetFromString(matchOffset, this._i)); - } - } - return this; - } - - function hasAlignedHourOffset (input) { - if (!this.isValid()) { - return false; - } - input = input ? local__createLocal(input).utcOffset() : 0; - - return (this.utcOffset() - input) % 60 === 0; - } - - function isDaylightSavingTime () { - return ( - this.utcOffset() > this.clone().month(0).utcOffset() || - this.utcOffset() > this.clone().month(5).utcOffset() - ); - } - - function isDaylightSavingTimeShifted () { - if (!isUndefined(this._isDSTShifted)) { - return this._isDSTShifted; - } - - var c = {}; - - copyConfig(c, this); - c = prepareConfig(c); - - if (c._a) { - var other = c._isUTC ? create_utc__createUTC(c._a) : local__createLocal(c._a); - this._isDSTShifted = this.isValid() && - compareArrays(c._a, other.toArray()) > 0; - } else { - this._isDSTShifted = false; - } - - return this._isDSTShifted; - } - - function isLocal () { - return this.isValid() ? !this._isUTC : false; - } - - function isUtcOffset () { - return this.isValid() ? this._isUTC : false; - } - - function isUtc () { - return this.isValid() ? this._isUTC && this._offset === 0 : false; - } - - // ASP.NET json date format regex - var aspNetRegex = /^(\-)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/; - - // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html - // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere - // and further modified to allow for strings containing both week and day - var isoRegex = /^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/; - - function create__createDuration (input, key) { - var duration = input, - // matching against regexp is expensive, do it on demand - match = null, - sign, - ret, - diffRes; - - if (isDuration(input)) { - duration = { - ms : input._milliseconds, - d : input._days, - M : input._months - }; - } else if (typeof input === 'number') { - duration = {}; - if (key) { - duration[key] = input; - } else { - duration.milliseconds = input; - } - } else if (!!(match = aspNetRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : 0, - d : toInt(match[DATE]) * sign, - h : toInt(match[HOUR]) * sign, - m : toInt(match[MINUTE]) * sign, - s : toInt(match[SECOND]) * sign, - ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match - }; - } else if (!!(match = isoRegex.exec(input))) { - sign = (match[1] === '-') ? -1 : 1; - duration = { - y : parseIso(match[2], sign), - M : parseIso(match[3], sign), - w : parseIso(match[4], sign), - d : parseIso(match[5], sign), - h : parseIso(match[6], sign), - m : parseIso(match[7], sign), - s : parseIso(match[8], sign) - }; - } else if (duration == null) {// checks for null or undefined - duration = {}; - } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { - diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); - - duration = {}; - duration.ms = diffRes.milliseconds; - duration.M = diffRes.months; - } - - ret = new Duration(duration); - - if (isDuration(input) && hasOwnProp(input, '_locale')) { - ret._locale = input._locale; - } - - return ret; - } - - create__createDuration.fn = Duration.prototype; - - function parseIso (inp, sign) { - // We'd normally use ~~inp for this, but unfortunately it also - // converts floats to ints. - // inp may be undefined, so careful calling replace on it. - var res = inp && parseFloat(inp.replace(',', '.')); - // apply sign while we're at it - return (isNaN(res) ? 0 : res) * sign; - } - - function positiveMomentsDifference(base, other) { - var res = {milliseconds: 0, months: 0}; - - res.months = other.month() - base.month() + - (other.year() - base.year()) * 12; - if (base.clone().add(res.months, 'M').isAfter(other)) { - --res.months; - } - - res.milliseconds = +other - +(base.clone().add(res.months, 'M')); - - return res; - } - - function momentsDifference(base, other) { - var res; - if (!(base.isValid() && other.isValid())) { - return {milliseconds: 0, months: 0}; - } - - other = cloneWithOffset(other, base); - if (base.isBefore(other)) { - res = positiveMomentsDifference(base, other); - } else { - res = positiveMomentsDifference(other, base); - res.milliseconds = -res.milliseconds; - res.months = -res.months; - } - - return res; - } - - // TODO: remove 'name' arg after deprecation is removed - function createAdder(direction, name) { - return function (val, period) { - var dur, tmp; - //invert the arguments, but complain about it - if (period !== null && !isNaN(+period)) { - deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + - 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'); - tmp = val; val = period; period = tmp; - } - - val = typeof val === 'string' ? +val : val; - dur = create__createDuration(val, period); - add_subtract__addSubtract(this, dur, direction); - return this; - }; - } - - function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { - var milliseconds = duration._milliseconds, - days = absRound(duration._days), - months = absRound(duration._months); - - if (!mom.isValid()) { - // No op - return; - } - - updateOffset = updateOffset == null ? true : updateOffset; - - if (milliseconds) { - mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding); - } - if (days) { - get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); - } - if (months) { - setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); - } - if (updateOffset) { - utils_hooks__hooks.updateOffset(mom, days || months); - } - } - - var add_subtract__add = createAdder(1, 'add'); - var add_subtract__subtract = createAdder(-1, 'subtract'); - - function getCalendarFormat(myMoment, now) { - var diff = myMoment.diff(now, 'days', true); - return diff < -6 ? 'sameElse' : - diff < -1 ? 'lastWeek' : - diff < 0 ? 'lastDay' : - diff < 1 ? 'sameDay' : - diff < 2 ? 'nextDay' : - diff < 7 ? 'nextWeek' : 'sameElse'; - } - - function moment_calendar__calendar (time, formats) { - // We want to compare the start of today, vs this. - // Getting start-of-today depends on whether we're local/utc/offset or not. - var now = time || local__createLocal(), - sod = cloneWithOffset(now, this).startOf('day'), - format = utils_hooks__hooks.calendarFormat(this, sod) || 'sameElse'; - - var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]); - - return this.format(output || this.localeData().calendar(format, this, local__createLocal(now))); - } - - function clone () { - return new Moment(this); - } - - function isAfter (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() > localInput.valueOf(); - } else { - return localInput.valueOf() < this.clone().startOf(units).valueOf(); - } - } - - function isBefore (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input); - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(!isUndefined(units) ? units : 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() < localInput.valueOf(); - } else { - return this.clone().endOf(units).valueOf() < localInput.valueOf(); - } - } - - function isBetween (from, to, units, inclusivity) { - inclusivity = inclusivity || '()'; - return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) && - (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units)); - } - - function isSame (input, units) { - var localInput = isMoment(input) ? input : local__createLocal(input), - inputMs; - if (!(this.isValid() && localInput.isValid())) { - return false; - } - units = normalizeUnits(units || 'millisecond'); - if (units === 'millisecond') { - return this.valueOf() === localInput.valueOf(); - } else { - inputMs = localInput.valueOf(); - return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf(); - } - } - - function isSameOrAfter (input, units) { - return this.isSame(input, units) || this.isAfter(input,units); - } - - function isSameOrBefore (input, units) { - return this.isSame(input, units) || this.isBefore(input,units); - } - - function diff (input, units, asFloat) { - var that, - zoneDelta, - delta, output; - - if (!this.isValid()) { - return NaN; - } - - that = cloneWithOffset(input, this); - - if (!that.isValid()) { - return NaN; - } - - zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4; - - units = normalizeUnits(units); - - if (units === 'year' || units === 'month' || units === 'quarter') { - output = monthDiff(this, that); - if (units === 'quarter') { - output = output / 3; - } else if (units === 'year') { - output = output / 12; - } - } else { - delta = this - that; - output = units === 'second' ? delta / 1e3 : // 1000 - units === 'minute' ? delta / 6e4 : // 1000 * 60 - units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 - units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst - units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst - delta; - } - return asFloat ? output : absFloor(output); - } - - function monthDiff (a, b) { - // difference in months - var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), - // b is in (anchor - 1 month, anchor + 1 month) - anchor = a.clone().add(wholeMonthDiff, 'months'), - anchor2, adjust; - - if (b - anchor < 0) { - anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor - anchor2); - } else { - anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); - // linear across the month - adjust = (b - anchor) / (anchor2 - anchor); - } - - //check for negative zero, return zero if negative zero - return -(wholeMonthDiff + adjust) || 0; - } - - utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; - utils_hooks__hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]'; - - function toString () { - return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); - } - - function moment_format__toISOString () { - var m = this.clone().utc(); - if (0 < m.year() && m.year() <= 9999) { - if (isFunction(Date.prototype.toISOString)) { - // native implementation is ~50x faster, use it when we can - return this.toDate().toISOString(); - } else { - return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } else { - return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); - } - } - - function format (inputString) { - if (!inputString) { - inputString = this.isUtc() ? utils_hooks__hooks.defaultFormatUtc : utils_hooks__hooks.defaultFormat; - } - var output = formatMoment(this, inputString); - return this.localeData().postformat(output); - } - - function from (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function fromNow (withoutSuffix) { - return this.from(local__createLocal(), withoutSuffix); - } - - function to (time, withoutSuffix) { - if (this.isValid() && - ((isMoment(time) && time.isValid()) || - local__createLocal(time).isValid())) { - return create__createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix); - } else { - return this.localeData().invalidDate(); - } - } - - function toNow (withoutSuffix) { - return this.to(local__createLocal(), withoutSuffix); - } - - // If passed a locale key, it will set the locale for this - // instance. Otherwise, it will return the locale configuration - // variables for this instance. - function locale (key) { - var newLocaleData; - - if (key === undefined) { - return this._locale._abbr; - } else { - newLocaleData = locale_locales__getLocale(key); - if (newLocaleData != null) { - this._locale = newLocaleData; - } - return this; - } - } - - var lang = deprecate( - 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', - function (key) { - if (key === undefined) { - return this.localeData(); - } else { - return this.locale(key); - } - } - ); - - function localeData () { - return this._locale; - } - - function startOf (units) { - units = normalizeUnits(units); - // the following switch intentionally omits break keywords - // to utilize falling through the cases. - switch (units) { - case 'year': - this.month(0); - /* falls through */ - case 'quarter': - case 'month': - this.date(1); - /* falls through */ - case 'week': - case 'isoWeek': - case 'day': - case 'date': - this.hours(0); - /* falls through */ - case 'hour': - this.minutes(0); - /* falls through */ - case 'minute': - this.seconds(0); - /* falls through */ - case 'second': - this.milliseconds(0); - } - - // weeks are a special case - if (units === 'week') { - this.weekday(0); - } - if (units === 'isoWeek') { - this.isoWeekday(1); - } - - // quarters are also special - if (units === 'quarter') { - this.month(Math.floor(this.month() / 3) * 3); - } - - return this; - } - - function endOf (units) { - units = normalizeUnits(units); - if (units === undefined || units === 'millisecond') { - return this; - } - - // 'date' is an alias for 'day', so it should be considered as such. - if (units === 'date') { - units = 'day'; - } - - return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); - } - - function to_type__valueOf () { - return this._d.valueOf() - ((this._offset || 0) * 60000); - } - - function unix () { - return Math.floor(this.valueOf() / 1000); - } - - function toDate () { - return new Date(this.valueOf()); - } - - function toArray () { - var m = this; - return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; - } - - function toObject () { - var m = this; - return { - years: m.year(), - months: m.month(), - date: m.date(), - hours: m.hours(), - minutes: m.minutes(), - seconds: m.seconds(), - milliseconds: m.milliseconds() - }; - } - - function toJSON () { - // new Date(NaN).toJSON() === null - return this.isValid() ? this.toISOString() : null; - } - - function moment_valid__isValid () { - return valid__isValid(this); - } - - function parsingFlags () { - return extend({}, getParsingFlags(this)); - } - - function invalidAt () { - return getParsingFlags(this).overflow; - } - - function creationData() { - return { - input: this._i, - format: this._f, - locale: this._locale, - isUTC: this._isUTC, - strict: this._strict - }; - } - - // FORMATTING - - addFormatToken(0, ['gg', 2], 0, function () { - return this.weekYear() % 100; - }); - - addFormatToken(0, ['GG', 2], 0, function () { - return this.isoWeekYear() % 100; - }); - - function addWeekYearFormatToken (token, getter) { - addFormatToken(0, [token, token.length], 0, getter); - } - - addWeekYearFormatToken('gggg', 'weekYear'); - addWeekYearFormatToken('ggggg', 'weekYear'); - addWeekYearFormatToken('GGGG', 'isoWeekYear'); - addWeekYearFormatToken('GGGGG', 'isoWeekYear'); - - // ALIASES - - addUnitAlias('weekYear', 'gg'); - addUnitAlias('isoWeekYear', 'GG'); - - // PRIORITY - - addUnitPriority('weekYear', 1); - addUnitPriority('isoWeekYear', 1); - - - // PARSING - - addRegexToken('G', matchSigned); - addRegexToken('g', matchSigned); - addRegexToken('GG', match1to2, match2); - addRegexToken('gg', match1to2, match2); - addRegexToken('GGGG', match1to4, match4); - addRegexToken('gggg', match1to4, match4); - addRegexToken('GGGGG', match1to6, match6); - addRegexToken('ggggg', match1to6, match6); - - addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { - week[token.substr(0, 2)] = toInt(input); - }); - - addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { - week[token] = utils_hooks__hooks.parseTwoDigitYear(input); - }); - - // MOMENTS - - function getSetWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, - this.week(), - this.weekday(), - this.localeData()._week.dow, - this.localeData()._week.doy); - } - - function getSetISOWeekYear (input) { - return getSetWeekYearHelper.call(this, - input, this.isoWeek(), this.isoWeekday(), 1, 4); - } - - function getISOWeeksInYear () { - return weeksInYear(this.year(), 1, 4); - } - - function getWeeksInYear () { - var weekInfo = this.localeData()._week; - return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); - } - - function getSetWeekYearHelper(input, week, weekday, dow, doy) { - var weeksTarget; - if (input == null) { - return weekOfYear(this, dow, doy).year; - } else { - weeksTarget = weeksInYear(input, dow, doy); - if (week > weeksTarget) { - week = weeksTarget; - } - return setWeekAll.call(this, input, week, weekday, dow, doy); - } - } - - function setWeekAll(weekYear, week, weekday, dow, doy) { - var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy), - date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear); - - this.year(date.getUTCFullYear()); - this.month(date.getUTCMonth()); - this.date(date.getUTCDate()); - return this; - } - - // FORMATTING - - addFormatToken('Q', 0, 'Qo', 'quarter'); - - // ALIASES - - addUnitAlias('quarter', 'Q'); - - // PRIORITY - - addUnitPriority('quarter', 7); - - // PARSING - - addRegexToken('Q', match1); - addParseToken('Q', function (input, array) { - array[MONTH] = (toInt(input) - 1) * 3; - }); - - // MOMENTS - - function getSetQuarter (input) { - return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); - } - - // FORMATTING - - addFormatToken('D', ['DD', 2], 'Do', 'date'); - - // ALIASES - - addUnitAlias('date', 'D'); - - // PRIOROITY - addUnitPriority('date', 9); - - // PARSING - - addRegexToken('D', match1to2); - addRegexToken('DD', match1to2, match2); - addRegexToken('Do', function (isStrict, locale) { - return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; - }); - - addParseToken(['D', 'DD'], DATE); - addParseToken('Do', function (input, array) { - array[DATE] = toInt(input.match(match1to2)[0], 10); - }); - - // MOMENTS - - var getSetDayOfMonth = makeGetSet('Date', true); - - // FORMATTING - - addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); - - // ALIASES - - addUnitAlias('dayOfYear', 'DDD'); - - // PRIORITY - addUnitPriority('dayOfYear', 4); - - // PARSING - - addRegexToken('DDD', match1to3); - addRegexToken('DDDD', match3); - addParseToken(['DDD', 'DDDD'], function (input, array, config) { - config._dayOfYear = toInt(input); - }); - - // HELPERS - - // MOMENTS - - function getSetDayOfYear (input) { - var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; - return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); - } - - // FORMATTING - - addFormatToken('m', ['mm', 2], 0, 'minute'); - - // ALIASES - - addUnitAlias('minute', 'm'); - - // PRIORITY - - addUnitPriority('minute', 14); - - // PARSING - - addRegexToken('m', match1to2); - addRegexToken('mm', match1to2, match2); - addParseToken(['m', 'mm'], MINUTE); - - // MOMENTS - - var getSetMinute = makeGetSet('Minutes', false); - - // FORMATTING - - addFormatToken('s', ['ss', 2], 0, 'second'); - - // ALIASES - - addUnitAlias('second', 's'); - - // PRIORITY - - addUnitPriority('second', 15); - - // PARSING - - addRegexToken('s', match1to2); - addRegexToken('ss', match1to2, match2); - addParseToken(['s', 'ss'], SECOND); - - // MOMENTS - - var getSetSecond = makeGetSet('Seconds', false); - - // FORMATTING - - addFormatToken('S', 0, 0, function () { - return ~~(this.millisecond() / 100); - }); - - addFormatToken(0, ['SS', 2], 0, function () { - return ~~(this.millisecond() / 10); - }); - - addFormatToken(0, ['SSS', 3], 0, 'millisecond'); - addFormatToken(0, ['SSSS', 4], 0, function () { - return this.millisecond() * 10; - }); - addFormatToken(0, ['SSSSS', 5], 0, function () { - return this.millisecond() * 100; - }); - addFormatToken(0, ['SSSSSS', 6], 0, function () { - return this.millisecond() * 1000; - }); - addFormatToken(0, ['SSSSSSS', 7], 0, function () { - return this.millisecond() * 10000; - }); - addFormatToken(0, ['SSSSSSSS', 8], 0, function () { - return this.millisecond() * 100000; - }); - addFormatToken(0, ['SSSSSSSSS', 9], 0, function () { - return this.millisecond() * 1000000; - }); - - - // ALIASES - - addUnitAlias('millisecond', 'ms'); - - // PRIORITY - - addUnitPriority('millisecond', 16); - - // PARSING - - addRegexToken('S', match1to3, match1); - addRegexToken('SS', match1to3, match2); - addRegexToken('SSS', match1to3, match3); - - var token; - for (token = 'SSSS'; token.length <= 9; token += 'S') { - addRegexToken(token, matchUnsigned); - } - - function parseMs(input, array) { - array[MILLISECOND] = toInt(('0.' + input) * 1000); - } - - for (token = 'S'; token.length <= 9; token += 'S') { - addParseToken(token, parseMs); - } - // MOMENTS - - var getSetMillisecond = makeGetSet('Milliseconds', false); - - // FORMATTING - - addFormatToken('z', 0, 0, 'zoneAbbr'); - addFormatToken('zz', 0, 0, 'zoneName'); - - // MOMENTS - - function getZoneAbbr () { - return this._isUTC ? 'UTC' : ''; - } - - function getZoneName () { - return this._isUTC ? 'Coordinated Universal Time' : ''; - } - - var momentPrototype__proto = Moment.prototype; - - momentPrototype__proto.add = add_subtract__add; - momentPrototype__proto.calendar = moment_calendar__calendar; - momentPrototype__proto.clone = clone; - momentPrototype__proto.diff = diff; - momentPrototype__proto.endOf = endOf; - momentPrototype__proto.format = format; - momentPrototype__proto.from = from; - momentPrototype__proto.fromNow = fromNow; - momentPrototype__proto.to = to; - momentPrototype__proto.toNow = toNow; - momentPrototype__proto.get = stringGet; - momentPrototype__proto.invalidAt = invalidAt; - momentPrototype__proto.isAfter = isAfter; - momentPrototype__proto.isBefore = isBefore; - momentPrototype__proto.isBetween = isBetween; - momentPrototype__proto.isSame = isSame; - momentPrototype__proto.isSameOrAfter = isSameOrAfter; - momentPrototype__proto.isSameOrBefore = isSameOrBefore; - momentPrototype__proto.isValid = moment_valid__isValid; - momentPrototype__proto.lang = lang; - momentPrototype__proto.locale = locale; - momentPrototype__proto.localeData = localeData; - momentPrototype__proto.max = prototypeMax; - momentPrototype__proto.min = prototypeMin; - momentPrototype__proto.parsingFlags = parsingFlags; - momentPrototype__proto.set = stringSet; - momentPrototype__proto.startOf = startOf; - momentPrototype__proto.subtract = add_subtract__subtract; - momentPrototype__proto.toArray = toArray; - momentPrototype__proto.toObject = toObject; - momentPrototype__proto.toDate = toDate; - momentPrototype__proto.toISOString = moment_format__toISOString; - momentPrototype__proto.toJSON = toJSON; - momentPrototype__proto.toString = toString; - momentPrototype__proto.unix = unix; - momentPrototype__proto.valueOf = to_type__valueOf; - momentPrototype__proto.creationData = creationData; - - // Year - momentPrototype__proto.year = getSetYear; - momentPrototype__proto.isLeapYear = getIsLeapYear; - - // Week Year - momentPrototype__proto.weekYear = getSetWeekYear; - momentPrototype__proto.isoWeekYear = getSetISOWeekYear; - - // Quarter - momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; - - // Month - momentPrototype__proto.month = getSetMonth; - momentPrototype__proto.daysInMonth = getDaysInMonth; - - // Week - momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; - momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; - momentPrototype__proto.weeksInYear = getWeeksInYear; - momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; - - // Day - momentPrototype__proto.date = getSetDayOfMonth; - momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; - momentPrototype__proto.weekday = getSetLocaleDayOfWeek; - momentPrototype__proto.isoWeekday = getSetISODayOfWeek; - momentPrototype__proto.dayOfYear = getSetDayOfYear; - - // Hour - momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; - - // Minute - momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; - - // Second - momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; - - // Millisecond - momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; - - // Offset - momentPrototype__proto.utcOffset = getSetOffset; - momentPrototype__proto.utc = setOffsetToUTC; - momentPrototype__proto.local = setOffsetToLocal; - momentPrototype__proto.parseZone = setOffsetToParsedOffset; - momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; - momentPrototype__proto.isDST = isDaylightSavingTime; - momentPrototype__proto.isLocal = isLocal; - momentPrototype__proto.isUtcOffset = isUtcOffset; - momentPrototype__proto.isUtc = isUtc; - momentPrototype__proto.isUTC = isUtc; - - // Timezone - momentPrototype__proto.zoneAbbr = getZoneAbbr; - momentPrototype__proto.zoneName = getZoneName; - - // Deprecations - momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); - momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); - momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); - momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone); - momentPrototype__proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted); - - var momentPrototype = momentPrototype__proto; - - function moment__createUnix (input) { - return local__createLocal(input * 1000); - } - - function moment__createInZone () { - return local__createLocal.apply(null, arguments).parseZone(); - } - - function preParsePostFormat (string) { - return string; - } - - var prototype__proto = Locale.prototype; - - prototype__proto.calendar = locale_calendar__calendar; - prototype__proto.longDateFormat = longDateFormat; - prototype__proto.invalidDate = invalidDate; - prototype__proto.ordinal = ordinal; - prototype__proto.preparse = preParsePostFormat; - prototype__proto.postformat = preParsePostFormat; - prototype__proto.relativeTime = relative__relativeTime; - prototype__proto.pastFuture = pastFuture; - prototype__proto.set = locale_set__set; - - // Month - prototype__proto.months = localeMonths; - prototype__proto.monthsShort = localeMonthsShort; - prototype__proto.monthsParse = localeMonthsParse; - prototype__proto.monthsRegex = monthsRegex; - prototype__proto.monthsShortRegex = monthsShortRegex; - - // Week - prototype__proto.week = localeWeek; - prototype__proto.firstDayOfYear = localeFirstDayOfYear; - prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; - - // Day of Week - prototype__proto.weekdays = localeWeekdays; - prototype__proto.weekdaysMin = localeWeekdaysMin; - prototype__proto.weekdaysShort = localeWeekdaysShort; - prototype__proto.weekdaysParse = localeWeekdaysParse; - - prototype__proto.weekdaysRegex = weekdaysRegex; - prototype__proto.weekdaysShortRegex = weekdaysShortRegex; - prototype__proto.weekdaysMinRegex = weekdaysMinRegex; - - // Hours - prototype__proto.isPM = localeIsPM; - prototype__proto.meridiem = localeMeridiem; - - function lists__get (format, index, field, setter) { - var locale = locale_locales__getLocale(); - var utc = create_utc__createUTC().set(setter, index); - return locale[field](utc, format); - } - - function listMonthsImpl (format, index, field) { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - - if (index != null) { - return lists__get(format, index, field, 'month'); - } - - var i; - var out = []; - for (i = 0; i < 12; i++) { - out[i] = lists__get(format, i, field, 'month'); - } - return out; - } - - // () - // (5) - // (fmt, 5) - // (fmt) - // (true) - // (true, 5) - // (true, fmt, 5) - // (true, fmt) - function listWeekdaysImpl (localeSorted, format, index, field) { - if (typeof localeSorted === 'boolean') { - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - } else { - format = localeSorted; - index = format; - localeSorted = false; - - if (typeof format === 'number') { - index = format; - format = undefined; - } - - format = format || ''; - } - - var locale = locale_locales__getLocale(), - shift = localeSorted ? locale._week.dow : 0; - - if (index != null) { - return lists__get(format, (index + shift) % 7, field, 'day'); - } - - var i; - var out = []; - for (i = 0; i < 7; i++) { - out[i] = lists__get(format, (i + shift) % 7, field, 'day'); - } - return out; - } - - function lists__listMonths (format, index) { - return listMonthsImpl(format, index, 'months'); - } - - function lists__listMonthsShort (format, index) { - return listMonthsImpl(format, index, 'monthsShort'); - } - - function lists__listWeekdays (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdays'); - } - - function lists__listWeekdaysShort (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort'); - } - - function lists__listWeekdaysMin (localeSorted, format, index) { - return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin'); - } - - locale_locales__getSetGlobalLocale('en', { - ordinalParse: /\d{1,2}(th|st|nd|rd)/, - ordinal : function (number) { - var b = number % 10, - output = (toInt(number % 100 / 10) === 1) ? 'th' : - (b === 1) ? 'st' : - (b === 2) ? 'nd' : - (b === 3) ? 'rd' : 'th'; - return number + output; - } - }); - - // Side effect imports - utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); - utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); - - var mathAbs = Math.abs; - - function duration_abs__abs () { - var data = this._data; - - this._milliseconds = mathAbs(this._milliseconds); - this._days = mathAbs(this._days); - this._months = mathAbs(this._months); - - data.milliseconds = mathAbs(data.milliseconds); - data.seconds = mathAbs(data.seconds); - data.minutes = mathAbs(data.minutes); - data.hours = mathAbs(data.hours); - data.months = mathAbs(data.months); - data.years = mathAbs(data.years); - - return this; - } - - function duration_add_subtract__addSubtract (duration, input, value, direction) { - var other = create__createDuration(input, value); - - duration._milliseconds += direction * other._milliseconds; - duration._days += direction * other._days; - duration._months += direction * other._months; - - return duration._bubble(); - } - - // supports only 2.0-style add(1, 's') or add(duration) - function duration_add_subtract__add (input, value) { - return duration_add_subtract__addSubtract(this, input, value, 1); - } - - // supports only 2.0-style subtract(1, 's') or subtract(duration) - function duration_add_subtract__subtract (input, value) { - return duration_add_subtract__addSubtract(this, input, value, -1); - } - - function absCeil (number) { - if (number < 0) { - return Math.floor(number); - } else { - return Math.ceil(number); - } - } - - function bubble () { - var milliseconds = this._milliseconds; - var days = this._days; - var months = this._months; - var data = this._data; - var seconds, minutes, hours, years, monthsFromDays; - - // if we have a mix of positive and negative values, bubble down first - // check: https://github.com/moment/moment/issues/2166 - if (!((milliseconds >= 0 && days >= 0 && months >= 0) || - (milliseconds <= 0 && days <= 0 && months <= 0))) { - milliseconds += absCeil(monthsToDays(months) + days) * 864e5; - days = 0; - months = 0; - } - - // The following code bubbles up values, see the tests for - // examples of what that means. - data.milliseconds = milliseconds % 1000; - - seconds = absFloor(milliseconds / 1000); - data.seconds = seconds % 60; - - minutes = absFloor(seconds / 60); - data.minutes = minutes % 60; - - hours = absFloor(minutes / 60); - data.hours = hours % 24; - - days += absFloor(hours / 24); - - // convert days to months - monthsFromDays = absFloor(daysToMonths(days)); - months += monthsFromDays; - days -= absCeil(monthsToDays(monthsFromDays)); - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - data.days = days; - data.months = months; - data.years = years; - - return this; - } - - function daysToMonths (days) { - // 400 years have 146097 days (taking into account leap year rules) - // 400 years have 12 months === 4800 - return days * 4800 / 146097; - } - - function monthsToDays (months) { - // the reverse of daysToMonths - return months * 146097 / 4800; - } - - function as (units) { - var days; - var months; - var milliseconds = this._milliseconds; - - units = normalizeUnits(units); - - if (units === 'month' || units === 'year') { - days = this._days + milliseconds / 864e5; - months = this._months + daysToMonths(days); - return units === 'month' ? months : months / 12; - } else { - // handle milliseconds separately because of floating point math errors (issue #1867) - days = this._days + Math.round(monthsToDays(this._months)); - switch (units) { - case 'week' : return days / 7 + milliseconds / 6048e5; - case 'day' : return days + milliseconds / 864e5; - case 'hour' : return days * 24 + milliseconds / 36e5; - case 'minute' : return days * 1440 + milliseconds / 6e4; - case 'second' : return days * 86400 + milliseconds / 1000; - // Math.floor prevents floating point math errors here - case 'millisecond': return Math.floor(days * 864e5) + milliseconds; - default: throw new Error('Unknown unit ' + units); - } - } - } - - // TODO: Use this.as('ms')? - function duration_as__valueOf () { - return ( - this._milliseconds + - this._days * 864e5 + - (this._months % 12) * 2592e6 + - toInt(this._months / 12) * 31536e6 - ); - } - - function makeAs (alias) { - return function () { - return this.as(alias); - }; - } - - var asMilliseconds = makeAs('ms'); - var asSeconds = makeAs('s'); - var asMinutes = makeAs('m'); - var asHours = makeAs('h'); - var asDays = makeAs('d'); - var asWeeks = makeAs('w'); - var asMonths = makeAs('M'); - var asYears = makeAs('y'); - - function duration_get__get (units) { - units = normalizeUnits(units); - return this[units + 's'](); - } - - function makeGetter(name) { - return function () { - return this._data[name]; - }; - } - - var milliseconds = makeGetter('milliseconds'); - var seconds = makeGetter('seconds'); - var minutes = makeGetter('minutes'); - var hours = makeGetter('hours'); - var days = makeGetter('days'); - var months = makeGetter('months'); - var years = makeGetter('years'); - - function weeks () { - return absFloor(this.days() / 7); - } - - var round = Math.round; - var thresholds = { - s: 45, // seconds to minute - m: 45, // minutes to hour - h: 22, // hours to day - d: 26, // days to month - M: 11 // months to year - }; - - // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize - function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { - return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); - } - - function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { - var duration = create__createDuration(posNegDuration).abs(); - var seconds = round(duration.as('s')); - var minutes = round(duration.as('m')); - var hours = round(duration.as('h')); - var days = round(duration.as('d')); - var months = round(duration.as('M')); - var years = round(duration.as('y')); - - var a = seconds < thresholds.s && ['s', seconds] || - minutes <= 1 && ['m'] || - minutes < thresholds.m && ['mm', minutes] || - hours <= 1 && ['h'] || - hours < thresholds.h && ['hh', hours] || - days <= 1 && ['d'] || - days < thresholds.d && ['dd', days] || - months <= 1 && ['M'] || - months < thresholds.M && ['MM', months] || - years <= 1 && ['y'] || ['yy', years]; - - a[2] = withoutSuffix; - a[3] = +posNegDuration > 0; - a[4] = locale; - return substituteTimeAgo.apply(null, a); - } - - // This function allows you to set the rounding function for relative time strings - function duration_humanize__getSetRelativeTimeRounding (roundingFunction) { - if (roundingFunction === undefined) { - return round; - } - if (typeof(roundingFunction) === 'function') { - round = roundingFunction; - return true; - } - return false; - } - - // This function allows you to set a threshold for relative time strings - function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { - if (thresholds[threshold] === undefined) { - return false; - } - if (limit === undefined) { - return thresholds[threshold]; - } - thresholds[threshold] = limit; - return true; - } - - function humanize (withSuffix) { - var locale = this.localeData(); - var output = duration_humanize__relativeTime(this, !withSuffix, locale); - - if (withSuffix) { - output = locale.pastFuture(+this, output); - } - - return locale.postformat(output); - } - - var iso_string__abs = Math.abs; - - function iso_string__toISOString() { - // for ISO strings we do not use the normal bubbling rules: - // * milliseconds bubble up until they become hours - // * days do not bubble at all - // * months bubble up until they become years - // This is because there is no context-free conversion between hours and days - // (think of clock changes) - // and also not between days and months (28-31 days per month) - var seconds = iso_string__abs(this._milliseconds) / 1000; - var days = iso_string__abs(this._days); - var months = iso_string__abs(this._months); - var minutes, hours, years; - - // 3600 seconds -> 60 minutes -> 1 hour - minutes = absFloor(seconds / 60); - hours = absFloor(minutes / 60); - seconds %= 60; - minutes %= 60; - - // 12 months -> 1 year - years = absFloor(months / 12); - months %= 12; - - - // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js - var Y = years; - var M = months; - var D = days; - var h = hours; - var m = minutes; - var s = seconds; - var total = this.asSeconds(); - - if (!total) { - // this is the same as C#'s (Noda) and python (isodate)... - // but not other JS (goog.date) - return 'P0D'; - } - - return (total < 0 ? '-' : '') + - 'P' + - (Y ? Y + 'Y' : '') + - (M ? M + 'M' : '') + - (D ? D + 'D' : '') + - ((h || m || s) ? 'T' : '') + - (h ? h + 'H' : '') + - (m ? m + 'M' : '') + - (s ? s + 'S' : ''); - } - - var duration_prototype__proto = Duration.prototype; - - duration_prototype__proto.abs = duration_abs__abs; - duration_prototype__proto.add = duration_add_subtract__add; - duration_prototype__proto.subtract = duration_add_subtract__subtract; - duration_prototype__proto.as = as; - duration_prototype__proto.asMilliseconds = asMilliseconds; - duration_prototype__proto.asSeconds = asSeconds; - duration_prototype__proto.asMinutes = asMinutes; - duration_prototype__proto.asHours = asHours; - duration_prototype__proto.asDays = asDays; - duration_prototype__proto.asWeeks = asWeeks; - duration_prototype__proto.asMonths = asMonths; - duration_prototype__proto.asYears = asYears; - duration_prototype__proto.valueOf = duration_as__valueOf; - duration_prototype__proto._bubble = bubble; - duration_prototype__proto.get = duration_get__get; - duration_prototype__proto.milliseconds = milliseconds; - duration_prototype__proto.seconds = seconds; - duration_prototype__proto.minutes = minutes; - duration_prototype__proto.hours = hours; - duration_prototype__proto.days = days; - duration_prototype__proto.weeks = weeks; - duration_prototype__proto.months = months; - duration_prototype__proto.years = years; - duration_prototype__proto.humanize = humanize; - duration_prototype__proto.toISOString = iso_string__toISOString; - duration_prototype__proto.toString = iso_string__toISOString; - duration_prototype__proto.toJSON = iso_string__toISOString; - duration_prototype__proto.locale = locale; - duration_prototype__proto.localeData = localeData; - - // Deprecations - duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); - duration_prototype__proto.lang = lang; - - // Side effect imports - - // FORMATTING - - addFormatToken('X', 0, 0, 'unix'); - addFormatToken('x', 0, 0, 'valueOf'); - - // PARSING - - addRegexToken('x', matchSigned); - addRegexToken('X', matchTimestamp); - addParseToken('X', function (input, array, config) { - config._d = new Date(parseFloat(input, 10) * 1000); - }); - addParseToken('x', function (input, array, config) { - config._d = new Date(toInt(input)); - }); - - // Side effect imports - - - utils_hooks__hooks.version = '2.15.1'; - - setHookCallback(local__createLocal); - - utils_hooks__hooks.fn = momentPrototype; - utils_hooks__hooks.min = min; - utils_hooks__hooks.max = max; - utils_hooks__hooks.now = now; - utils_hooks__hooks.utc = create_utc__createUTC; - utils_hooks__hooks.unix = moment__createUnix; - utils_hooks__hooks.months = lists__listMonths; - utils_hooks__hooks.isDate = isDate; - utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; - utils_hooks__hooks.invalid = valid__createInvalid; - utils_hooks__hooks.duration = create__createDuration; - utils_hooks__hooks.isMoment = isMoment; - utils_hooks__hooks.weekdays = lists__listWeekdays; - utils_hooks__hooks.parseZone = moment__createInZone; - utils_hooks__hooks.localeData = locale_locales__getLocale; - utils_hooks__hooks.isDuration = isDuration; - utils_hooks__hooks.monthsShort = lists__listMonthsShort; - utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; - utils_hooks__hooks.defineLocale = defineLocale; - utils_hooks__hooks.updateLocale = updateLocale; - utils_hooks__hooks.locales = locale_locales__listLocales; - utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; - utils_hooks__hooks.normalizeUnits = normalizeUnits; - utils_hooks__hooks.relativeTimeRounding = duration_humanize__getSetRelativeTimeRounding; - utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; - utils_hooks__hooks.calendarFormat = getCalendarFormat; - utils_hooks__hooks.prototype = momentPrototype; - - var _moment = utils_hooks__hooks; - - return _moment; - -})); -},{}],7:[function(require,module,exports){ -/** - * @namespace Chart - */ -var Chart = require(27)(); - -require(26)(Chart); -require(22)(Chart); -require(25)(Chart); -require(21)(Chart); -require(23)(Chart); -require(24)(Chart); -require(28)(Chart); -require(32)(Chart); -require(30)(Chart); -require(31)(Chart); -require(33)(Chart); -require(29)(Chart); -require(34)(Chart); - -require(35)(Chart); -require(36)(Chart); -require(37)(Chart); -require(38)(Chart); - -require(41)(Chart); -require(39)(Chart); -require(40)(Chart); -require(42)(Chart); -require(43)(Chart); -require(44)(Chart); - -// Controllers must be loaded after elements -// See Chart.core.datasetController.dataElementType -require(15)(Chart); -require(16)(Chart); -require(17)(Chart); -require(18)(Chart); -require(19)(Chart); -require(20)(Chart); - -require(8)(Chart); -require(9)(Chart); -require(10)(Chart); -require(11)(Chart); -require(12)(Chart); -require(13)(Chart); -require(14)(Chart); - -window.Chart = module.exports = Chart; - -},{"10":10,"11":11,"12":12,"13":13,"14":14,"15":15,"16":16,"17":17,"18":18,"19":19,"20":20,"21":21,"22":22,"23":23,"24":24,"25":25,"26":26,"27":27,"28":28,"29":29,"30":30,"31":31,"32":32,"33":33,"34":34,"35":35,"36":36,"37":37,"38":38,"39":39,"40":40,"41":41,"42":42,"43":43,"44":44,"8":8,"9":9}],8:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.Bar = function(context, config) { - config.type = 'bar'; - - return new Chart(context, config); - }; - -}; - -},{}],9:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.Bubble = function(context, config) { - config.type = 'bubble'; - return new Chart(context, config); - }; - -}; - -},{}],10:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.Doughnut = function(context, config) { - config.type = 'doughnut'; - - return new Chart(context, config); - }; - -}; - -},{}],11:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.Line = function(context, config) { - config.type = 'line'; - - return new Chart(context, config); - }; - -}; - -},{}],12:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.PolarArea = function(context, config) { - config.type = 'polarArea'; - - return new Chart(context, config); - }; - -}; - -},{}],13:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - Chart.Radar = function(context, config) { - config.options = Chart.helpers.configMerge({aspectRatio: 1}, config.options); - config.type = 'radar'; - - return new Chart(context, config); - }; - -}; - -},{}],14:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var defaultConfig = { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - type: 'linear', // scatter should not use a category axis - position: 'bottom', - id: 'x-axis-1' // need an ID so datasets can reference the scale - }], - yAxes: [{ - type: 'linear', - position: 'left', - id: 'y-axis-1' - }] - }, - - tooltips: { - callbacks: { - title: function() { - // Title doesn't make sense for scatter since we format the data as a point - return ''; - }, - label: function(tooltipItem) { - return '(' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ')'; - } - } - } - }; - - // Register the default config for this type - Chart.defaults.scatter = defaultConfig; - - // Scatter charts use line controllers - Chart.controllers.scatter = Chart.controllers.line; - - Chart.Scatter = function(context, config) { - config.type = 'scatter'; - return new Chart(context, config); - }; - -}; - -},{}],15:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.bar = { - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - - // Specific to Bar Controller - categoryPercentage: 0.8, - barPercentage: 0.9, - - // grid line settings - gridLines: { - offsetGridLines: true - } - }], - yAxes: [{ - type: 'linear' - }] - } - }; - - Chart.controllers.bar = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Rectangle, - - initialize: function(chart, datasetIndex) { - Chart.DatasetController.prototype.initialize.call(this, chart, datasetIndex); - - // Use this to indicate that this is a bar dataset. - this.getMeta().bar = true; - }, - - // Get the number of datasets that display bars. We use this to correctly calculate the bar width - getBarCount: function() { - var me = this; - var barCount = 0; - helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) { - var meta = me.chart.getDatasetMeta(datasetIndex); - if (meta.bar && me.chart.isDatasetVisible(datasetIndex)) { - ++barCount; - } - }, me); - return barCount; - }, - - update: function(reset) { - var me = this; - helpers.each(me.getMeta().data, function(rectangle, index) { - me.updateElement(rectangle, index, reset); - }, me); - }, - - updateElement: function(rectangle, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - var scaleBase = yScale.getBasePixel(); - var rectangleElementOptions = me.chart.options.elements.rectangle; - var custom = rectangle.custom || {}; - var dataset = me.getDataset(); - - helpers.extend(rectangle, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: me.calculateBarX(index, me.index), - y: reset ? scaleBase : me.calculateBarY(index, me.index), - - // Tooltip - label: me.chart.data.labels[index], - datasetLabel: dataset.label, - - // Appearance - base: reset ? scaleBase : me.calculateBarBase(me.index, index), - width: me.calculateBarWidth(index), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor), - borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped, - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth) - } - }); - rectangle.pivot(); - }, - - calculateBarBase: function(datasetIndex, index) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var base = 0; - - if (yScale.options.stacked) { - var chart = me.chart; - var datasets = chart.data.datasets; - var value = Number(datasets[datasetIndex].data[index]); - - for (var i = 0; i < datasetIndex; i++) { - var currentDs = datasets[i]; - var currentDsMeta = chart.getDatasetMeta(i); - if (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) { - var currentVal = Number(currentDs.data[index]); - base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0); - } - } - - return yScale.getPixelForValue(base); - } - - return yScale.getBasePixel(); - }, - - getRuler: function(index) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var datasetCount = me.getBarCount(); - - var tickWidth; - - if (xScale.options.type === 'category') { - tickWidth = xScale.getPixelForTick(index + 1) - xScale.getPixelForTick(index); - } else { - // Average width - tickWidth = xScale.width / xScale.ticks.length; - } - var categoryWidth = tickWidth * xScale.options.categoryPercentage; - var categorySpacing = (tickWidth - (tickWidth * xScale.options.categoryPercentage)) / 2; - var fullBarWidth = categoryWidth / datasetCount; - - if (xScale.ticks.length !== me.chart.data.labels.length) { - var perc = xScale.ticks.length / me.chart.data.labels.length; - fullBarWidth = fullBarWidth * perc; - } - - var barWidth = fullBarWidth * xScale.options.barPercentage; - var barSpacing = fullBarWidth - (fullBarWidth * xScale.options.barPercentage); - - return { - datasetCount: datasetCount, - tickWidth: tickWidth, - categoryWidth: categoryWidth, - categorySpacing: categorySpacing, - fullBarWidth: fullBarWidth, - barWidth: barWidth, - barSpacing: barSpacing - }; - }, - - calculateBarWidth: function(index) { - var xScale = this.getScaleForId(this.getMeta().xAxisID); - if (xScale.options.barThickness) { - return xScale.options.barThickness; - } - var ruler = this.getRuler(index); - return xScale.options.stacked ? ruler.categoryWidth : ruler.barWidth; - }, - - // Get bar index from the given dataset index accounting for the fact that not all bars are visible - getBarIndex: function(datasetIndex) { - var barIndex = 0; - var meta, j; - - for (j = 0; j < datasetIndex; ++j) { - meta = this.chart.getDatasetMeta(j); - if (meta.bar && this.chart.isDatasetVisible(j)) { - ++barIndex; - } - } - - return barIndex; - }, - - calculateBarX: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var barIndex = me.getBarIndex(datasetIndex); - - var ruler = me.getRuler(index); - var leftTick = xScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo); - leftTick -= me.chart.isCombo ? (ruler.tickWidth / 2) : 0; - - if (xScale.options.stacked) { - return leftTick + (ruler.categoryWidth / 2) + ruler.categorySpacing; - } - - return leftTick + - (ruler.barWidth / 2) + - ruler.categorySpacing + - (ruler.barWidth * barIndex) + - (ruler.barSpacing / 2) + - (ruler.barSpacing * barIndex); - }, - - calculateBarY: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var value = Number(me.getDataset().data[index]); - - if (yScale.options.stacked) { - - var sumPos = 0, - sumNeg = 0; - - for (var i = 0; i < datasetIndex; i++) { - var ds = me.chart.data.datasets[i]; - var dsMeta = me.chart.getDatasetMeta(i); - if (dsMeta.bar && dsMeta.yAxisID === yScale.id && me.chart.isDatasetVisible(i)) { - var stackedVal = Number(ds.data[index]); - if (stackedVal < 0) { - sumNeg += stackedVal || 0; - } else { - sumPos += stackedVal || 0; - } - } - } - - if (value < 0) { - return yScale.getPixelForValue(sumNeg + value); - } - return yScale.getPixelForValue(sumPos + value); - } - - return yScale.getPixelForValue(value); - }, - - draw: function(ease) { - var me = this; - var easingDecimal = ease || 1; - helpers.each(me.getMeta().data, function(rectangle, index) { - var d = me.getDataset().data[index]; - if (d !== null && d !== undefined && !isNaN(d)) { - rectangle.transition(easingDecimal).draw(); - } - }, me); - }, - - setHoverStyle: function(rectangle) { - var dataset = this.chart.data.datasets[rectangle._datasetIndex]; - var index = rectangle._index; - - var custom = rectangle.custom || {}; - var model = rectangle._model; - model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth); - }, - - removeHoverStyle: function(rectangle) { - var dataset = this.chart.data.datasets[rectangle._datasetIndex]; - var index = rectangle._index; - var custom = rectangle.custom || {}; - var model = rectangle._model; - var rectangleElementOptions = this.chart.options.elements.rectangle; - - model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor); - model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor); - model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth); - } - - }); - - - // including horizontalBar in the bar file, instead of a file of its own - // it extends bar (like pie extends doughnut) - Chart.defaults.horizontalBar = { - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }], - yAxes: [{ - position: 'left', - type: 'category', - - // Specific to Horizontal Bar Controller - categoryPercentage: 0.8, - barPercentage: 0.9, - - // grid line settings - gridLines: { - offsetGridLines: true - } - }] - }, - elements: { - rectangle: { - borderSkipped: 'left' - } - }, - tooltips: { - callbacks: { - title: function(tooltipItems, data) { - // Pick first xLabel for now - var title = ''; - - if (tooltipItems.length > 0) { - if (tooltipItems[0].yLabel) { - title = tooltipItems[0].yLabel; - } else if (data.labels.length > 0 && tooltipItems[0].index < data.labels.length) { - title = data.labels[tooltipItems[0].index]; - } - } - - return title; - }, - label: function(tooltipItem, data) { - var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || ''; - return datasetLabel + ': ' + tooltipItem.xLabel; - } - } - } - }; - - Chart.controllers.horizontalBar = Chart.controllers.bar.extend({ - updateElement: function(rectangle, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - var scaleBase = xScale.getBasePixel(); - var custom = rectangle.custom || {}; - var dataset = me.getDataset(); - var rectangleElementOptions = me.chart.options.elements.rectangle; - - helpers.extend(rectangle, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: reset ? scaleBase : me.calculateBarX(index, me.index), - y: me.calculateBarY(index, me.index), - - // Tooltip - label: me.chart.data.labels[index], - datasetLabel: dataset.label, - - // Appearance - base: reset ? scaleBase : me.calculateBarBase(me.index, index), - height: me.calculateBarHeight(index), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor), - borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped, - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth) - }, - - draw: function() { - var ctx = this._chart.ctx; - var vm = this._view; - - var halfHeight = vm.height / 2, - topY = vm.y - halfHeight, - bottomY = vm.y + halfHeight, - right = vm.base - (vm.base - vm.x), - halfStroke = vm.borderWidth / 2; - - // Canvas doesn't allow us to stroke inside the width so we can - // adjust the sizes to fit if we're setting a stroke on the line - if (vm.borderWidth) { - topY += halfStroke; - bottomY -= halfStroke; - right += halfStroke; - } - - ctx.beginPath(); - - ctx.fillStyle = vm.backgroundColor; - ctx.strokeStyle = vm.borderColor; - ctx.lineWidth = vm.borderWidth; - - // Corner points, from bottom-left to bottom-right clockwise - // | 1 2 | - // | 0 3 | - var corners = [ - [vm.base, bottomY], - [vm.base, topY], - [right, topY], - [right, bottomY] - ]; - - // Find first (starting) corner with fallback to 'bottom' - var borders = ['bottom', 'left', 'top', 'right']; - var startCorner = borders.indexOf(vm.borderSkipped, 0); - if (startCorner === -1) { - startCorner = 0; - } - - function cornerAt(cornerIndex) { - return corners[(startCorner + cornerIndex) % 4]; - } - - // Draw rectangle from 'startCorner' - ctx.moveTo.apply(ctx, cornerAt(0)); - for (var i = 1; i < 4; i++) { - ctx.lineTo.apply(ctx, cornerAt(i)); - } - - ctx.fill(); - if (vm.borderWidth) { - ctx.stroke(); - } - }, - - inRange: function(mouseX, mouseY) { - var vm = this._view; - var inRange = false; - - if (vm) { - if (vm.x < vm.base) { - inRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.x && mouseX <= vm.base); - } else { - inRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.base && mouseX <= vm.x); - } - } - - return inRange; - } - }); - - rectangle.pivot(); - }, - - calculateBarBase: function(datasetIndex, index) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var base = 0; - - if (xScale.options.stacked) { - var chart = me.chart; - var datasets = chart.data.datasets; - var value = Number(datasets[datasetIndex].data[index]); - - for (var i = 0; i < datasetIndex; i++) { - var currentDs = datasets[i]; - var currentDsMeta = chart.getDatasetMeta(i); - if (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i)) { - var currentVal = Number(currentDs.data[index]); - base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0); - } - } - - return xScale.getPixelForValue(base); - } - - return xScale.getBasePixel(); - }, - - getRuler: function(index) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var datasetCount = me.getBarCount(); - - var tickHeight; - if (yScale.options.type === 'category') { - tickHeight = yScale.getPixelForTick(index + 1) - yScale.getPixelForTick(index); - } else { - // Average width - tickHeight = yScale.width / yScale.ticks.length; - } - var categoryHeight = tickHeight * yScale.options.categoryPercentage; - var categorySpacing = (tickHeight - (tickHeight * yScale.options.categoryPercentage)) / 2; - var fullBarHeight = categoryHeight / datasetCount; - - if (yScale.ticks.length !== me.chart.data.labels.length) { - var perc = yScale.ticks.length / me.chart.data.labels.length; - fullBarHeight = fullBarHeight * perc; - } - - var barHeight = fullBarHeight * yScale.options.barPercentage; - var barSpacing = fullBarHeight - (fullBarHeight * yScale.options.barPercentage); - - return { - datasetCount: datasetCount, - tickHeight: tickHeight, - categoryHeight: categoryHeight, - categorySpacing: categorySpacing, - fullBarHeight: fullBarHeight, - barHeight: barHeight, - barSpacing: barSpacing - }; - }, - - calculateBarHeight: function(index) { - var me = this; - var yScale = me.getScaleForId(me.getMeta().yAxisID); - if (yScale.options.barThickness) { - return yScale.options.barThickness; - } - var ruler = me.getRuler(index); - return yScale.options.stacked ? ruler.categoryHeight : ruler.barHeight; - }, - - calculateBarX: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var value = Number(me.getDataset().data[index]); - - if (xScale.options.stacked) { - - var sumPos = 0, - sumNeg = 0; - - for (var i = 0; i < datasetIndex; i++) { - var ds = me.chart.data.datasets[i]; - var dsMeta = me.chart.getDatasetMeta(i); - if (dsMeta.bar && dsMeta.xAxisID === xScale.id && me.chart.isDatasetVisible(i)) { - var stackedVal = Number(ds.data[index]); - if (stackedVal < 0) { - sumNeg += stackedVal || 0; - } else { - sumPos += stackedVal || 0; - } - } - } - - if (value < 0) { - return xScale.getPixelForValue(sumNeg + value); - } - return xScale.getPixelForValue(sumPos + value); - } - - return xScale.getPixelForValue(value); - }, - - calculateBarY: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var barIndex = me.getBarIndex(datasetIndex); - - var ruler = me.getRuler(index); - var topTick = yScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo); - topTick -= me.chart.isCombo ? (ruler.tickHeight / 2) : 0; - - if (yScale.options.stacked) { - return topTick + (ruler.categoryHeight / 2) + ruler.categorySpacing; - } - - return topTick + - (ruler.barHeight / 2) + - ruler.categorySpacing + - (ruler.barHeight * barIndex) + - (ruler.barSpacing / 2) + - (ruler.barSpacing * barIndex); - } - }); -}; - -},{}],16:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.bubble = { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - type: 'linear', // bubble should probably use a linear scale by default - position: 'bottom', - id: 'x-axis-0' // need an ID so datasets can reference the scale - }], - yAxes: [{ - type: 'linear', - position: 'left', - id: 'y-axis-0' - }] - }, - - tooltips: { - callbacks: { - title: function() { - // Title doesn't make sense for scatter since we format the data as a point - return ''; - }, - label: function(tooltipItem, data) { - var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || ''; - var dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; - return datasetLabel + ': (' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.r + ')'; - } - } - } - }; - - Chart.controllers.bubble = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Point, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var points = meta.data; - - // Update Points - helpers.each(points, function(point, index) { - me.updateElement(point, index, reset); - }); - }, - - updateElement: function(point, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - - var custom = point.custom || {}; - var dataset = me.getDataset(); - var data = dataset.data[index]; - var pointElementOptions = me.chart.options.elements.point; - var dsIndex = me.index; - - helpers.extend(point, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: dsIndex, - _index: index, - - // Desired view properties - _model: { - x: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo), - y: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex), - // Appearance - radius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data), - - // Tooltip - hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius) - } - }); - - // Trick to reset the styles of the point - Chart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions); - - var model = point._model; - model.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y)); - - point.pivot(); - }, - - getRadius: function(value) { - return value.r || this.chart.options.elements.point.radius; - }, - - setHoverStyle: function(point) { - var me = this; - Chart.DatasetController.prototype.setHoverStyle.call(me, point); - - // Radius - var dataset = me.chart.data.datasets[point._datasetIndex]; - var index = point._index; - var custom = point.custom || {}; - var model = point._model; - model.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]); - }, - - removeHoverStyle: function(point) { - var me = this; - Chart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point); - - var dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index]; - var custom = point.custom || {}; - var model = point._model; - - model.radius = custom.radius ? custom.radius : me.getRadius(dataVal); - } - }); -}; - -},{}],17:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers, - defaults = Chart.defaults; - - defaults.doughnut = { - animation: { - // Boolean - Whether we animate the rotation of the Doughnut - animateRotate: true, - // Boolean - Whether we animate scaling the Doughnut from the centre - animateScale: false - }, - aspectRatio: 1, - hover: { - mode: 'single' - }, - legendCallback: function(chart) { - var text = []; - text.push('
      '); - - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - - if (datasets.length) { - for (var i = 0; i < datasets[0].data.length; ++i) { - text.push('
    • '); - if (labels[i]) { - text.push(labels[i]); - } - text.push('
    • '); - } - } - - text.push('
    '); - return text.join(''); - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var ds = data.datasets[0]; - var arc = meta.data[i]; - var custom = arc && arc.custom || {}; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); - - return { - text: label, - fillStyle: fill, - strokeStyle: stroke, - lineWidth: bw, - hidden: isNaN(ds.data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - // toggle visibility of index if exists - if (meta.data[index]) { - meta.data[index].hidden = !meta.data[index].hidden; - } - } - - chart.update(); - } - }, - - // The percentage of the chart that we cut out of the middle. - cutoutPercentage: 50, - - // The rotation of the chart, where the first data arc begins. - rotation: Math.PI * -0.5, - - // The total circumference of the chart. - circumference: Math.PI * 2.0, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(tooltipItem, data) { - return data.labels[tooltipItem.index] + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; - } - } - } - }; - - defaults.pie = helpers.clone(defaults.doughnut); - helpers.extend(defaults.pie, { - cutoutPercentage: 0 - }); - - - Chart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Arc, - - linkScales: helpers.noop, - - // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly - getRingIndex: function(datasetIndex) { - var ringIndex = 0; - - for (var j = 0; j < datasetIndex; ++j) { - if (this.chart.isDatasetVisible(j)) { - ++ringIndex; - } - } - - return ringIndex; - }, - - update: function(reset) { - var me = this; - var chart = me.chart, - chartArea = chart.chartArea, - opts = chart.options, - arcOpts = opts.elements.arc, - availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth, - availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth, - minSize = Math.min(availableWidth, availableHeight), - offset = { - x: 0, - y: 0 - }, - meta = me.getMeta(), - cutoutPercentage = opts.cutoutPercentage, - circumference = opts.circumference; - - // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc - if (circumference < Math.PI * 2.0) { - var startAngle = opts.rotation % (Math.PI * 2.0); - startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0); - var endAngle = startAngle + circumference; - var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)}; - var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)}; - var contains0 = (startAngle <= 0 && 0 <= endAngle) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle); - var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle); - var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle); - var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle); - var cutout = cutoutPercentage / 100.0; - var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))}; - var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))}; - var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5}; - minSize = Math.min(availableWidth / size.width, availableHeight / size.height); - offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5}; - } - - chart.borderWidth = me.getMaxBorderWidth(meta.data); - chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0); - chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 1, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); - chart.offsetX = offset.x * chart.outerRadius; - chart.offsetY = offset.y * chart.outerRadius; - - meta.total = me.calculateTotal(); - - me.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index)); - me.innerRadius = me.outerRadius - chart.radiusLength; - - helpers.each(meta.data, function(arc, index) { - me.updateElement(arc, index, reset); - }); - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart, - chartArea = chart.chartArea, - opts = chart.options, - animationOpts = opts.animation, - centerX = (chartArea.left + chartArea.right) / 2, - centerY = (chartArea.top + chartArea.bottom) / 2, - startAngle = opts.rotation, // non reset case handled later - endAngle = opts.rotation, // non reset case handled later - dataset = me.getDataset(), - circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)), - innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius, - outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius, - valueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - - helpers.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: centerX + chart.offsetX, - y: centerY + chart.offsetY, - startAngle: startAngle, - endAngle: endAngle, - circumference: circumference, - outerRadius: outerRadius, - innerRadius: innerRadius, - label: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) - } - }); - - var model = arc._model; - // Resets the visual styles - this.removeHoverStyle(arc); - - // Set correct angles if not resetting - if (!reset || !animationOpts.animateRotate) { - if (index === 0) { - model.startAngle = opts.rotation; - } else { - model.startAngle = me.getMeta().data[index - 1]._model.endAngle; - } - - model.endAngle = model.startAngle + model.circumference; - } - - arc.pivot(); - }, - - removeHoverStyle: function(arc) { - Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc); - }, - - calculateTotal: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var total = 0; - var value; - - helpers.each(meta.data, function(element, index) { - value = dataset.data[index]; - if (!isNaN(value) && !element.hidden) { - total += Math.abs(value); - } - }); - - /* if (total === 0) { - total = NaN; - }*/ - - return total; - }, - - calculateCircumference: function(value) { - var total = this.getMeta().total; - if (total > 0 && !isNaN(value)) { - return (Math.PI * 2.0) * (value / total); - } - return 0; - }, - - // gets the max border or hover width to properly scale pie charts - getMaxBorderWidth: function(elements) { - var max = 0, - index = this.index, - length = elements.length, - borderWidth, - hoverWidth; - - for (var i = 0; i < length; i++) { - borderWidth = elements[i]._model ? elements[i]._model.borderWidth : 0; - hoverWidth = elements[i]._chart ? elements[i]._chart.config.data.datasets[index].hoverBorderWidth : 0; - - max = borderWidth > max ? borderWidth : max; - max = hoverWidth > max ? hoverWidth : max; - } - return max; - } - }); -}; - -},{}],18:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.line = { - showLines: true, - spanGaps: false, - - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - id: 'x-axis-0' - }], - yAxes: [{ - type: 'linear', - id: 'y-axis-0' - }] - } - }; - - function lineEnabled(dataset, options) { - return helpers.getValueOrDefault(dataset.showLine, options.showLines); - } - - Chart.controllers.line = Chart.DatasetController.extend({ - - datasetElementType: Chart.elements.Line, - - dataElementType: Chart.elements.Point, - - addElementAndReset: function(index) { - var me = this; - var options = me.chart.options; - var meta = me.getMeta(); - - Chart.DatasetController.prototype.addElementAndReset.call(me, index); - - // Make sure bezier control points are updated - if (lineEnabled(me.getDataset(), options) && meta.dataset._model.tension !== 0) { - me.updateBezierControlPoints(); - } - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data || []; - var options = me.chart.options; - var lineElementOptions = options.elements.line; - var scale = me.getScaleForId(meta.yAxisID); - var i, ilen, custom; - var dataset = me.getDataset(); - var showLine = lineEnabled(dataset, options); - - // Update Line - if (showLine) { - custom = line.custom || {}; - - // Compatibility: If the properties are defined with only the old name, use those values - if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { - dataset.lineTension = dataset.tension; - } - - // Utility - line._scale = scale; - line._datasetIndex = me.index; - // Data - line._children = points; - // Model - line._model = { - // Appearance - // The default behavior of lines is to break at null values, according - // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158 - // This option gives linse the ability to span gaps - spanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps, - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor), - borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth), - borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor), - borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle), - borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash), - borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset), - borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle), - fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill), - steppedLine: custom.steppedLine ? custom.steppedLine : helpers.getValueOrDefault(dataset.steppedLine, lineElementOptions.stepped), - cubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.getValueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode), - // Scale - scaleTop: scale.top, - scaleBottom: scale.bottom, - scaleZero: scale.getBasePixel() - }; - - line.pivot(); - } - - // Update Points - for (i=0, ilen=points.length; i'); - - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - - if (datasets.length) { - for (var i = 0; i < datasets[0].data.length; ++i) { - text.push('
  • '); - if (labels[i]) { - text.push(labels[i]); - } - text.push('
  • '); - } - } - - text.push(''); - return text.join(''); - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var ds = data.datasets[0]; - var arc = meta.data[i]; - var custom = arc.custom || {}; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); - - return { - text: label, - fillStyle: fill, - strokeStyle: stroke, - lineWidth: bw, - hidden: isNaN(ds.data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - meta.data[index].hidden = !meta.data[index].hidden; - } - - chart.update(); - } - }, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(tooltipItem, data) { - return data.labels[tooltipItem.index] + ': ' + tooltipItem.yLabel; - } - } - } - }; - - Chart.controllers.polarArea = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Arc, - - linkScales: helpers.noop, - - update: function(reset) { - var me = this; - var chart = me.chart; - var chartArea = chart.chartArea; - var meta = me.getMeta(); - var opts = chart.options; - var arcOpts = opts.elements.arc; - var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); - chart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0); - chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); - - me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index); - me.innerRadius = me.outerRadius - chart.radiusLength; - - meta.count = me.countVisibleElements(); - - helpers.each(meta.data, function(arc, index) { - me.updateElement(arc, index, reset); - }); - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart; - var dataset = me.getDataset(); - var opts = chart.options; - var animationOpts = opts.animation; - var scale = chart.scale; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var labels = chart.data.labels; - - var circumference = me.calculateCircumference(dataset.data[index]); - var centerX = scale.xCenter; - var centerY = scale.yCenter; - - // If there is NaN data before us, we need to calculate the starting angle correctly. - // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data - var visibleCount = 0; - var meta = me.getMeta(); - for (var i = 0; i < index; ++i) { - if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { - ++visibleCount; - } - } - - // var negHalfPI = -0.5 * Math.PI; - var datasetStartAngle = opts.startAngle; - var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = datasetStartAngle + (circumference * visibleCount); - var endAngle = startAngle + (arc.hidden ? 0 : circumference); - - var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - - helpers.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - _scale: scale, - - // Desired view properties - _model: { - x: centerX, - y: centerY, - innerRadius: 0, - outerRadius: reset ? resetRadius : distance, - startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle, - endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle, - label: getValueAtIndexOrDefault(labels, index, labels[index]) - } - }); - - // Apply border and fill style - me.removeHoverStyle(arc); - - arc.pivot(); - }, - - removeHoverStyle: function(arc) { - Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc); - }, - - countVisibleElements: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var count = 0; - - helpers.each(meta.data, function(element, index) { - if (!isNaN(dataset.data[index]) && !element.hidden) { - count++; - } - }); - - return count; - }, - - calculateCircumference: function(value) { - var count = this.getMeta().count; - if (count > 0 && !isNaN(value)) { - return (2 * Math.PI) / count; - } - return 0; - } - }); -}; - -},{}],20:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.radar = { - scale: { - type: 'radialLinear' - }, - elements: { - line: { - tension: 0 // no bezier in radar - } - } - }; - - Chart.controllers.radar = Chart.DatasetController.extend({ - - datasetElementType: Chart.elements.Line, - - dataElementType: Chart.elements.Point, - - linkScales: helpers.noop, - - addElementAndReset: function(index) { - Chart.DatasetController.prototype.addElementAndReset.call(this, index); - - // Make sure bezier control points are updated - this.updateBezierControlPoints(); - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data; - var custom = line.custom || {}; - var dataset = me.getDataset(); - var lineElementOptions = me.chart.options.elements.line; - var scale = me.chart.scale; - - // Compatibility: If the properties are defined with only the old name, use those values - if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { - dataset.lineTension = dataset.tension; - } - - helpers.extend(meta.dataset, { - // Utility - _datasetIndex: me.index, - // Data - _children: points, - _loop: true, - // Model - _model: { - // Appearance - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor), - borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth), - borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor), - fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill), - borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle), - borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash), - borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset), - borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle), - - // Scale - scaleTop: scale.top, - scaleBottom: scale.bottom, - scaleZero: scale.getBasePosition() - } - }); - - meta.dataset.pivot(); - - // Update Points - helpers.each(points, function(point, index) { - me.updateElement(point, index, reset); - }, me); - - - // Update bezier control points - me.updateBezierControlPoints(); - }, - updateElement: function(point, index, reset) { - var me = this; - var custom = point.custom || {}; - var dataset = me.getDataset(); - var scale = me.chart.scale; - var pointElementOptions = me.chart.options.elements.point; - var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]); - - helpers.extend(point, { - // Utility - _datasetIndex: me.index, - _index: index, - _scale: scale, - - // Desired view properties - _model: { - x: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales - y: reset ? scale.yCenter : pointPosition.y, - - // Appearance - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.tension, me.chart.options.elements.line.tension), - radius: custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor), - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth), - pointStyle: custom.pointStyle ? custom.pointStyle : helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle), - - // Tooltip - hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius) - } - }); - - point._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y)); - }, - updateBezierControlPoints: function() { - var chartArea = this.chart.chartArea; - var meta = this.getMeta(); - - helpers.each(meta.data, function(point, index) { - var model = point._model; - var controlPoints = helpers.splineCurve( - helpers.previousItem(meta.data, index, true)._model, - model, - helpers.nextItem(meta.data, index, true)._model, - model.tension - ); - - // Prevent the bezier going outside of the bounds of the graph - model.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left); - model.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top); - - model.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left); - model.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top); - - // Now pivot the point for animation - point.pivot(); - }); - }, - - draw: function(ease) { - var meta = this.getMeta(); - var easingDecimal = ease || 1; - - // Transition Point Locations - helpers.each(meta.data, function(point) { - point.transition(easingDecimal); - }); - - // Transition and Draw the line - meta.dataset.transition(easingDecimal).draw(); - - // Draw the points - helpers.each(meta.data, function(point) { - point.draw(); - }); - }, - - setHoverStyle: function(point) { - // Point - var dataset = this.chart.data.datasets[point._datasetIndex]; - var custom = point.custom || {}; - var index = point._index; - var model = point._model; - - model.radius = custom.hoverRadius ? custom.hoverRadius : helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius); - model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth); - }, - - removeHoverStyle: function(point) { - var dataset = this.chart.data.datasets[point._datasetIndex]; - var custom = point.custom || {}; - var index = point._index; - var model = point._model; - var pointElementOptions = this.chart.options.elements.point; - - model.radius = custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.radius, index, pointElementOptions.radius); - model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor); - model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor); - model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth); - } - }); -}; - -},{}],21:[function(require,module,exports){ -/* global window: false */ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.global.animation = { - duration: 1000, - easing: 'easeOutQuart', - onProgress: helpers.noop, - onComplete: helpers.noop - }; - - Chart.Animation = Chart.Element.extend({ - currentStep: null, // the current animation step - numSteps: 60, // default number of steps - easing: '', // the easing to use for this animation - render: null, // render function used by the animation service - - onAnimationProgress: null, // user specified callback to fire on each step of the animation - onAnimationComplete: null // user specified callback to fire when the animation finishes - }); - - Chart.animationService = { - frameDuration: 17, - animations: [], - dropFrames: 0, - request: null, - addAnimation: function(chartInstance, animationObject, duration, lazy) { - var me = this; - - if (!lazy) { - chartInstance.animating = true; - } - - for (var index = 0; index < me.animations.length; ++index) { - if (me.animations[index].chartInstance === chartInstance) { - // replacing an in progress animation - me.animations[index].animationObject = animationObject; - return; - } - } - - me.animations.push({ - chartInstance: chartInstance, - animationObject: animationObject - }); - - // If there are no animations queued, manually kickstart a digest, for lack of a better word - if (me.animations.length === 1) { - me.requestAnimationFrame(); - } - }, - // Cancel the animation for a given chart instance - cancelAnimation: function(chartInstance) { - var index = helpers.findIndex(this.animations, function(animationWrapper) { - return animationWrapper.chartInstance === chartInstance; - }); - - if (index !== -1) { - this.animations.splice(index, 1); - chartInstance.animating = false; - } - }, - requestAnimationFrame: function() { - var me = this; - if (me.request === null) { - // Skip animation frame requests until the active one is executed. - // This can happen when processing mouse events, e.g. 'mousemove' - // and 'mouseout' events will trigger multiple renders. - me.request = helpers.requestAnimFrame.call(window, function() { - me.request = null; - me.startDigest(); - }); - } - }, - startDigest: function() { - var me = this; - - var startTime = Date.now(); - var framesToDrop = 0; - - if (me.dropFrames > 1) { - framesToDrop = Math.floor(me.dropFrames); - me.dropFrames = me.dropFrames % 1; - } - - var i = 0; - while (i < me.animations.length) { - if (me.animations[i].animationObject.currentStep === null) { - me.animations[i].animationObject.currentStep = 0; - } - - me.animations[i].animationObject.currentStep += 1 + framesToDrop; - - if (me.animations[i].animationObject.currentStep > me.animations[i].animationObject.numSteps) { - me.animations[i].animationObject.currentStep = me.animations[i].animationObject.numSteps; - } - - me.animations[i].animationObject.render(me.animations[i].chartInstance, me.animations[i].animationObject); - if (me.animations[i].animationObject.onAnimationProgress && me.animations[i].animationObject.onAnimationProgress.call) { - me.animations[i].animationObject.onAnimationProgress.call(me.animations[i].chartInstance, me.animations[i]); - } - - if (me.animations[i].animationObject.currentStep === me.animations[i].animationObject.numSteps) { - if (me.animations[i].animationObject.onAnimationComplete && me.animations[i].animationObject.onAnimationComplete.call) { - me.animations[i].animationObject.onAnimationComplete.call(me.animations[i].chartInstance, me.animations[i]); - } - - // executed the last frame. Remove the animation. - me.animations[i].chartInstance.animating = false; - - me.animations.splice(i, 1); - } else { - ++i; - } - } - - var endTime = Date.now(); - var dropFrames = (endTime - startTime) / me.frameDuration; - - me.dropFrames += dropFrames; - - // Do we have more stuff to animate? - if (me.animations.length > 0) { - me.requestAnimationFrame(); - } - } - }; -}; - -},{}],22:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - // Global Chart canvas helpers object for drawing items to canvas - var helpers = Chart.canvasHelpers = {}; - - helpers.drawPoint = function(ctx, pointStyle, radius, x, y) { - var type, edgeLength, xOffset, yOffset, height, size; - - if (typeof pointStyle === 'object') { - type = pointStyle.toString(); - if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { - ctx.drawImage(pointStyle, x - pointStyle.width / 2, y - pointStyle.height / 2); - return; - } - } - - if (isNaN(radius) || radius <= 0) { - return; - } - - switch (pointStyle) { - // Default includes circle - default: - ctx.beginPath(); - ctx.arc(x, y, radius, 0, Math.PI * 2); - ctx.closePath(); - ctx.fill(); - break; - case 'triangle': - ctx.beginPath(); - edgeLength = 3 * radius / Math.sqrt(3); - height = edgeLength * Math.sqrt(3) / 2; - ctx.moveTo(x - edgeLength / 2, y + height / 3); - ctx.lineTo(x + edgeLength / 2, y + height / 3); - ctx.lineTo(x, y - 2 * height / 3); - ctx.closePath(); - ctx.fill(); - break; - case 'rect': - size = 1 / Math.SQRT2 * radius; - ctx.beginPath(); - ctx.fillRect(x - size, y - size, 2 * size, 2 * size); - ctx.strokeRect(x - size, y - size, 2 * size, 2 * size); - break; - case 'rectRot': - size = 1 / Math.SQRT2 * radius; - ctx.beginPath(); - ctx.moveTo(x - size, y); - ctx.lineTo(x, y + size); - ctx.lineTo(x + size, y); - ctx.lineTo(x, y - size); - ctx.closePath(); - ctx.fill(); - break; - case 'cross': - ctx.beginPath(); - ctx.moveTo(x, y + radius); - ctx.lineTo(x, y - radius); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - case 'crossRot': - ctx.beginPath(); - xOffset = Math.cos(Math.PI / 4) * radius; - yOffset = Math.sin(Math.PI / 4) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x - xOffset, y + yOffset); - ctx.lineTo(x + xOffset, y - yOffset); - ctx.closePath(); - break; - case 'star': - ctx.beginPath(); - ctx.moveTo(x, y + radius); - ctx.lineTo(x, y - radius); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - xOffset = Math.cos(Math.PI / 4) * radius; - yOffset = Math.sin(Math.PI / 4) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x - xOffset, y + yOffset); - ctx.lineTo(x + xOffset, y - yOffset); - ctx.closePath(); - break; - case 'line': - ctx.beginPath(); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - case 'dash': - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - } - - ctx.stroke(); - }; -}; - -},{}],23:[function(require,module,exports){ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - // Create a dictionary of chart types, to allow for extension of existing types - Chart.types = {}; - - // Store a reference to each instance - allowing us to globally resize chart instances on window resize. - // Destroy method on the chart will remove the instance of the chart from this reference. - Chart.instances = {}; - - // Controllers available for dataset visualization eg. bar, line, slice, etc. - Chart.controllers = {}; - - /** - * @class Chart.Controller - * The main controller of a chart. - */ - Chart.Controller = function(instance) { - - this.chart = instance; - this.config = instance.config; - this.options = this.config.options = helpers.configMerge(Chart.defaults.global, Chart.defaults[this.config.type], this.config.options || {}); - this.id = helpers.uid(); - - Object.defineProperty(this, 'data', { - get: function() { - return this.config.data; - } - }); - - // Add the chart instance to the global namespace - Chart.instances[this.id] = this; - - if (this.options.responsive) { - // Silent resize before chart draws - this.resize(true); - } - - this.initialize(); - - return this; - }; - - helpers.extend(Chart.Controller.prototype, /** @lends Chart.Controller */ { - - initialize: function() { - var me = this; - // Before init plugin notification - Chart.plugins.notify('beforeInit', [me]); - - me.bindEvents(); - - // Make sure controllers are built first so that each dataset is bound to an axis before the scales - // are built - me.ensureScalesHaveIDs(); - me.buildOrUpdateControllers(); - me.buildScales(); - me.updateLayout(); - me.resetElements(); - me.initToolTip(); - me.update(); - - // After init plugin notification - Chart.plugins.notify('afterInit', [me]); - - return me; - }, - - clear: function() { - helpers.clear(this.chart); - return this; - }, - - stop: function() { - // Stops any current animation loop occuring - Chart.animationService.cancelAnimation(this); - return this; - }, - - resize: function(silent) { - var me = this; - var chart = me.chart; - var canvas = chart.canvas; - var newWidth = helpers.getMaximumWidth(canvas); - var aspectRatio = chart.aspectRatio; - var newHeight = (me.options.maintainAspectRatio && isNaN(aspectRatio) === false && isFinite(aspectRatio) && aspectRatio !== 0) ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas); - - var sizeChanged = chart.width !== newWidth || chart.height !== newHeight; - - if (!sizeChanged) { - return me; - } - - canvas.width = chart.width = newWidth; - canvas.height = chart.height = newHeight; - - helpers.retinaScale(chart); - - // Notify any plugins about the resize - var newSize = {width: newWidth, height: newHeight}; - Chart.plugins.notify('resize', [me, newSize]); - - // Notify of resize - if (me.options.onResize) { - me.options.onResize(me, newSize); - } - - if (!silent) { - me.stop(); - me.update(me.options.responsiveAnimationDuration); - } - - return me; - }, - - ensureScalesHaveIDs: function() { - var options = this.options; - var scalesOptions = options.scales || {}; - var scaleOptions = options.scale; - - helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) { - xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index); - }); - - helpers.each(scalesOptions.yAxes, function(yAxisOptions, index) { - yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index); - }); - - if (scaleOptions) { - scaleOptions.id = scaleOptions.id || 'scale'; - } - }, - - /** - * Builds a map of scale ID to scale object for future lookup. - */ - buildScales: function() { - var me = this; - var options = me.options; - var scales = me.scales = {}; - var items = []; - - if (options.scales) { - items = items.concat( - (options.scales.xAxes || []).map(function(xAxisOptions) { - return {options: xAxisOptions, dtype: 'category'}; - }), - (options.scales.yAxes || []).map(function(yAxisOptions) { - return {options: yAxisOptions, dtype: 'linear'}; - }) - ); - } - - if (options.scale) { - items.push({options: options.scale, dtype: 'radialLinear', isDefault: true}); - } - - helpers.each(items, function(item) { - var scaleOptions = item.options; - var scaleType = helpers.getValueOrDefault(scaleOptions.type, item.dtype); - var scaleClass = Chart.scaleService.getScaleConstructor(scaleType); - if (!scaleClass) { - return; - } - - var scale = new scaleClass({ - id: scaleOptions.id, - options: scaleOptions, - ctx: me.chart.ctx, - chart: me - }); - - scales[scale.id] = scale; - - // TODO(SB): I think we should be able to remove this custom case (options.scale) - // and consider it as a regular scale part of the "scales"" map only! This would - // make the logic easier and remove some useless? custom code. - if (item.isDefault) { - me.scale = scale; - } - }); - - Chart.scaleService.addScalesToLayout(this); - }, - - updateLayout: function() { - Chart.layoutService.update(this, this.chart.width, this.chart.height); - }, - - buildOrUpdateControllers: function() { - var me = this; - var types = []; - var newControllers = []; - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - var meta = me.getDatasetMeta(datasetIndex); - if (!meta.type) { - meta.type = dataset.type || me.config.type; - } - - types.push(meta.type); - - if (meta.controller) { - meta.controller.updateIndex(datasetIndex); - } else { - meta.controller = new Chart.controllers[meta.type](me, datasetIndex); - newControllers.push(meta.controller); - } - }, me); - - if (types.length > 1) { - for (var i = 1; i < types.length; i++) { - if (types[i] !== types[i - 1]) { - me.isCombo = true; - break; - } - } - } - - return newControllers; - }, - - resetElements: function() { - var me = this; - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - me.getDatasetMeta(datasetIndex).controller.reset(); - }, me); - }, - - update: function(animationDuration, lazy) { - var me = this; - Chart.plugins.notify('beforeUpdate', [me]); - - // In case the entire data object changed - me.tooltip._data = me.data; - - // Make sure dataset controllers are updated and new controllers are reset - var newControllers = me.buildOrUpdateControllers(); - - // Make sure all dataset controllers have correct meta data counts - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements(); - }, me); - - Chart.layoutService.update(me, me.chart.width, me.chart.height); - - // Apply changes to the dataets that require the scales to have been calculated i.e BorderColor chages - Chart.plugins.notify('afterScaleUpdate', [me]); - - // Can only reset the new controllers after the scales have been updated - helpers.each(newControllers, function(controller) { - controller.reset(); - }); - - me.updateDatasets(); - - // Do this before render so that any plugins that need final scale updates can use it - Chart.plugins.notify('afterUpdate', [me]); - - me.render(animationDuration, lazy); - }, - - /** - * @method beforeDatasetsUpdate - * @description Called before all datasets are updated. If a plugin returns false, - * the datasets update will be cancelled until another chart update is triggered. - * @param {Object} instance the chart instance being updated. - * @returns {Boolean} false to cancel the datasets update. - * @memberof Chart.PluginBase - * @since version 2.1.5 - * @instance - */ - - /** - * @method afterDatasetsUpdate - * @description Called after all datasets have been updated. Note that this - * extension will not be called if the datasets update has been cancelled. - * @param {Object} instance the chart instance being updated. - * @memberof Chart.PluginBase - * @since version 2.1.5 - * @instance - */ - - /** - * Updates all datasets unless a plugin returns false to the beforeDatasetsUpdate - * extension, in which case no datasets will be updated and the afterDatasetsUpdate - * notification will be skipped. - * @protected - * @instance - */ - updateDatasets: function() { - var me = this; - var i, ilen; - - if (Chart.plugins.notify('beforeDatasetsUpdate', [me])) { - for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) { - me.getDatasetMeta(i).controller.update(); - } - - Chart.plugins.notify('afterDatasetsUpdate', [me]); - } - }, - - render: function(duration, lazy) { - var me = this; - Chart.plugins.notify('beforeRender', [me]); - - var animationOptions = me.options.animation; - if (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) { - var animation = new Chart.Animation(); - animation.numSteps = (duration || animationOptions.duration) / 16.66; // 60 fps - animation.easing = animationOptions.easing; - - // render function - animation.render = function(chartInstance, animationObject) { - var easingFunction = helpers.easingEffects[animationObject.easing]; - var stepDecimal = animationObject.currentStep / animationObject.numSteps; - var easeDecimal = easingFunction(stepDecimal); - - chartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep); - }; - - // user events - animation.onAnimationProgress = animationOptions.onProgress; - animation.onAnimationComplete = animationOptions.onComplete; - - Chart.animationService.addAnimation(me, animation, duration, lazy); - } else { - me.draw(); - if (animationOptions && animationOptions.onComplete && animationOptions.onComplete.call) { - animationOptions.onComplete.call(me); - } - } - return me; - }, - - draw: function(ease) { - var me = this; - var easingDecimal = ease || 1; - me.clear(); - - Chart.plugins.notify('beforeDraw', [me, easingDecimal]); - - // Draw all the scales - helpers.each(me.boxes, function(box) { - box.draw(me.chartArea); - }, me); - if (me.scale) { - me.scale.draw(); - } - - Chart.plugins.notify('beforeDatasetsDraw', [me, easingDecimal]); - - // Draw each dataset via its respective controller (reversed to support proper line stacking) - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - me.getDatasetMeta(datasetIndex).controller.draw(ease); - } - }, me, true); - - Chart.plugins.notify('afterDatasetsDraw', [me, easingDecimal]); - - // Finally draw the tooltip - me.tooltip.transition(easingDecimal).draw(); - - Chart.plugins.notify('afterDraw', [me, easingDecimal]); - }, - - // Get the single element that was clicked on - // @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw - getElementAtEvent: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex); - helpers.each(meta.data, function(element) { - if (element.inRange(eventPosition.x, eventPosition.y)) { - elementsArray.push(element); - return elementsArray; - } - }); - } - }); - - return elementsArray.slice(0, 1); - }, - - getElementsAtEvent: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - var found = function() { - if (me.data.datasets) { - for (var i = 0; i < me.data.datasets.length; i++) { - var meta = me.getDatasetMeta(i); - if (me.isDatasetVisible(i)) { - for (var j = 0; j < meta.data.length; j++) { - if (meta.data[j].inRange(eventPosition.x, eventPosition.y)) { - return meta.data[j]; - } - } - } - } - } - }.call(me); - - if (!found) { - return elementsArray; - } - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex), - element = meta.data[found._index]; - if (element && !element._view.skip) { - elementsArray.push(element); - } - } - }, me); - - return elementsArray; - }, - - getElementsAtXAxis: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - var found = function() { - if (me.data.datasets) { - for (var i = 0; i < me.data.datasets.length; i++) { - var meta = me.getDatasetMeta(i); - if (me.isDatasetVisible(i)) { - for (var j = 0; j < meta.data.length; j++) { - if (meta.data[j].inLabelRange(eventPosition.x, eventPosition.y)) { - return meta.data[j]; - } - } - } - } - } - }.call(me); - - if (!found) { - return elementsArray; - } - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex); - var index = helpers.findIndex(meta.data, function(it) { - return found._model.x === it._model.x; - }); - if (index !== -1 && !meta.data[index]._view.skip) { - elementsArray.push(meta.data[index]); - } - } - }, me); - - return elementsArray; - }, - - getElementsAtEventForMode: function(e, mode) { - var me = this; - switch (mode) { - case 'single': - return me.getElementAtEvent(e); - case 'label': - return me.getElementsAtEvent(e); - case 'dataset': - return me.getDatasetAtEvent(e); - case 'x-axis': - return me.getElementsAtXAxis(e); - default: - return e; - } - }, - - getDatasetAtEvent: function(e) { - var elementsArray = this.getElementAtEvent(e); - - if (elementsArray.length > 0) { - elementsArray = this.getDatasetMeta(elementsArray[0]._datasetIndex).data; - } - - return elementsArray; - }, - - getDatasetMeta: function(datasetIndex) { - var me = this; - var dataset = me.data.datasets[datasetIndex]; - if (!dataset._meta) { - dataset._meta = {}; - } - - var meta = dataset._meta[me.id]; - if (!meta) { - meta = dataset._meta[me.id] = { - type: null, - data: [], - dataset: null, - controller: null, - hidden: null, // See isDatasetVisible() comment - xAxisID: null, - yAxisID: null - }; - } - - return meta; - }, - - getVisibleDatasetCount: function() { - var count = 0; - for (var i = 0, ilen = this.data.datasets.length; i
    gulp 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 gulp. - -Now, we can run the `gulp build` task. - -```bash -gulp build -``` diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/10-Notes.md b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/10-Notes.md deleted file mode 100644 index 85cc6507..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/docs/10-Notes.md +++ /dev/null @@ -1,110 +0,0 @@ ---- -title: Notes -anchor: notes ---- -### Previous versions - -Version 2 has a completely different API than earlier versions. - -Most earlier version options have current equivalents or are the same. - -Please use the documentation that is available on [chartjs.org](http://www.chartjs.org/docs/) for the current version of Chart.js. - -Please note - documentation for previous versions are available on the GitHub repo. - -- [1.x Documentation](https://github.com/chartjs/Chart.js/tree/v1.1.1/docs) - -### Browser support - -Chart.js offers support for all browsers where canvas is supported. - -Browser support for the canvas element is available in all modern & major mobile browsers (http://caniuse.com/#feat=canvas). - -Thanks to BrowserStack for allowing our team to test on thousands of browsers. - - -### Bugs & issues - -Please report these on the GitHub page - at github.com/chartjs/Chart.js. If you could include a link to a simple jsbin or similar to demonstrate the issue, that'd be really helpful. - - -### Contributing - -New contributions to the library are welcome, but we ask that you please follow these guidelines: - -- Use tabs for indentation, not spaces. -- Only change the individual files in `/src`. -- Check that your code will pass `eslint` code standards, `gulp lint` will run this for you. -- Check that your code will pass tests, `gulp test` will run tests for you. -- 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 plugin would be more appropriate. - -### License - -Chart.js is open source and available under the MIT license. - -### Charting Library Comparison - -Library Features - -| Feature | Chart.js | D3 | HighCharts | Chartist | -| ------- | -------- | --- | ---------- | -------- | -| Completely Free | ✓ | ✓ | | ✓ | -| Canvas | ✓ | | | | -| SVG | | ✓ | ✓ | ✓ | -| Built-in Charts | ✓ | | ✓ | ✓ | -| 8+ Chart Types | ✓ | ✓ | ✓ | | -| Extendable to Custom Charts | ✓ | ✓ | | | -| Supports Modern Browsers | ✓ | ✓ | ✓ | ✓ | -| Extensive Documentation | ✓ | ✓ | ✓ | ✓ | -| Open Source | ✓ | ✓ | ✓ | ✓ | - -Built in Chart Types - -| Type | Chart.js | HighCharts | Chartist | -| ---- | -------- | ---------- | -------- | -| Combined Types | ✓ | ✓ | | -| Line | ✓ | ✓ | ✓ | -| Bar | ✓ | ✓ | ✓ | -| Horizontal Bar | ✓ | ✓ | ✓ | -| Pie/Doughnut | ✓ | ✓ | ✓ | -| Polar Area | ✓ | ✓ | | -| Radar | ✓ | | | -| Scatter | ✓ | ✓ | ✓ | -| Bubble | ✓ | | | -| Gauges | | ✓ | | -| Maps (Heat/Tree/etc.) | | ✓ | | - -### Popular Plugins - -There are many plugins that add additional functionality to Chart.js. Some particularly notable ones are listed here. In addition, many plugins can be found on the [Chart.js GitHub organization](https://github.com/chartjs). - - - Chart.Zoom.js - Enable zooming and panning on charts - - Chart.Annotation.js - Draw lines and boxes on chart area - - Chart.BarFunnel.js - Adds a bar funnel chart type - - Chart.Deferred.js - Defer initial chart update until chart scrolls into viewport - - Chart.Smith.js - Adds a smith chart type - - Chart.LinearGauge.js - Adds a linear gauge chart type - -### Popular Extensions - -There are many extensions which are available for use with popular frameworks. Some particularly notable ones are listed here. - -#### Angular - - angular-chart.js - - tc-angular-chartjs - - angular-chartjs - - Angular Chart-js Directive - -#### React - - react-chartjs2 - - react-chartjs-2 - -#### Django - - Django Chartjs - -#### Ruby on Rails - - chartjs-ror - -#### Laravel - - laravel-chartjs diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/gulpfile.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/gulpfile.js deleted file mode 100644 index b3dab98d..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/gulpfile.js +++ /dev/null @@ -1,226 +0,0 @@ -var gulp = require('gulp'); -var concat = require('gulp-concat'); -var connect = require('gulp-connect'); -var eslint = require('gulp-eslint'); -var file = require('gulp-file'); -var htmlv = require('gulp-html-validator'); -var insert = require('gulp-insert'); -var replace = require('gulp-replace'); -var size = require('gulp-size'); -var streamify = require('gulp-streamify'); -var uglify = require('gulp-uglify'); -var util = require('gulp-util'); -var zip = require('gulp-zip'); -var exec = require('child_process').exec; -var karma = require('gulp-karma'); -var browserify = require('browserify'); -var source = require('vinyl-source-stream'); -var merge = require('merge-stream'); -var collapse = require('bundle-collapser/plugin'); -var package = require('./package.json'); - -var srcDir = './src/'; -var outDir = './dist/'; - -var header = "/*!\n" + - " * Chart.js\n" + - " * http://chartjs.org/\n" + - " * Version: {{ version }}\n" + - " *\n" + - " * Copyright 2016 Nick Downie\n" + - " * Released under the MIT license\n" + - " * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md\n" + - " */\n"; - -var preTestFiles = [ - './node_modules/moment/min/moment.min.js', -]; - -var testFiles = [ - './test/mockContext.js', - './test/*.js', - - // Disable tests which need to be rewritten based on changes introduced by - // the following changes: https://github.com/chartjs/Chart.js/pull/2346 - '!./test/core.layoutService.tests.js', - '!./test/defaultConfig.tests.js' -]; - -gulp.task('bower', bowerTask); -gulp.task('build', buildTask); -gulp.task('package', packageTask); -gulp.task('coverage', coverageTask); -gulp.task('watch', watchTask); -gulp.task('lint', lintTask); -gulp.task('test', ['lint', 'validHTML', 'unittest']); -gulp.task('size', ['library-size', 'module-sizes']); -gulp.task('server', serverTask); -gulp.task('validHTML', validHTMLTask); -gulp.task('unittest', unittestTask); -gulp.task('unittestWatch', unittestWatchTask); -gulp.task('library-size', librarySizeTask); -gulp.task('module-sizes', moduleSizesTask); -gulp.task('_open', _openTask); -gulp.task('dev', ['server', 'default']); -gulp.task('default', ['build', 'watch']); - -/** - * Generates the bower.json manifest file which will be pushed along release tags. - * Specs: https://github.com/bower/spec/blob/master/json.md - */ -function bowerTask() { - var json = JSON.stringify({ - name: package.name, - description: package.description, - homepage: package.homepage, - license: package.license, - version: package.version, - main: outDir + "Chart.js" - }, null, 2); - - return file('bower.json', json, { src: true }) - .pipe(gulp.dest('./')); -} - -function buildTask() { - - var bundled = browserify('./src/chart.js', { standalone: 'Chart' }) - .plugin(collapse) - .bundle() - .pipe(source('Chart.bundle.js')) - .pipe(insert.prepend(header)) - .pipe(streamify(replace('{{ version }}', package.version))) - .pipe(gulp.dest(outDir)) - .pipe(streamify(uglify())) - .pipe(insert.prepend(header)) - .pipe(streamify(replace('{{ version }}', package.version))) - .pipe(streamify(concat('Chart.bundle.min.js'))) - .pipe(gulp.dest(outDir)); - - var nonBundled = browserify('./src/chart.js', { standalone: 'Chart' }) - .ignore('moment') - .plugin(collapse) - .bundle() - .pipe(source('Chart.js')) - .pipe(insert.prepend(header)) - .pipe(streamify(replace('{{ version }}', package.version))) - .pipe(gulp.dest(outDir)) - .pipe(streamify(uglify())) - .pipe(insert.prepend(header)) - .pipe(streamify(replace('{{ version }}', package.version))) - .pipe(streamify(concat('Chart.min.js'))) - .pipe(gulp.dest(outDir)); - - return merge(bundled, nonBundled); - -} - -function packageTask() { - return merge( - // gather "regular" files landing in the package root - gulp.src([outDir + '*.js', 'LICENSE.md']), - - // since we moved the dist files one folder up (package root), we need to rewrite - // samples src="../dist/ to src="../ and then copy them in the /samples directory. - gulp.src('./samples/**/*', { base: '.' }) - .pipe(streamify(replace(/src="((?:\.\.\/)+)dist\//g, 'src="$1'))) - ) - // finally, create the zip archive - .pipe(zip('Chart.js.zip')) - .pipe(gulp.dest(outDir)); -} - -function lintTask() { - var files = [ - srcDir + '**/*.js', - ]; - - // NOTE(SB) codeclimate has 'complexity' and 'max-statements' eslint rules way too strict - // compare to what the current codebase can support, and since it's not straightforward - // to fix, let's turn them as warnings and rewrite code later progressively. - var options = { - rules: { - 'complexity': [1, 6], - 'max-statements': [1, 30] - } - }; - - return gulp.src(files) - .pipe(eslint(options)) - .pipe(eslint.format()) - .pipe(eslint.failAfterError()); -} - -function validHTMLTask() { - return gulp.src('samples/*.html') - .pipe(htmlv()); -} - -function startTest() { - var files = ['./src/**/*.js']; - Array.prototype.unshift.apply(files, preTestFiles); - Array.prototype.push.apply(files, testFiles); - return files; -} - -function unittestTask() { - return gulp.src(startTest()) - .pipe(karma({ - configFile: 'karma.conf.ci.js', - action: 'run' - })); -} - -function unittestWatchTask() { - return gulp.src(startTest()) - .pipe(karma({ - configFile: 'karma.conf.js', - action: 'watch' - })); -} - -function coverageTask() { - return gulp.src(startTest()) - .pipe(karma({ - configFile: 'karma.coverage.conf.js', - action: 'run' - })); -} - -function librarySizeTask() { - return gulp.src('dist/Chart.bundle.min.js') - .pipe(size({ - gzip: true - })); -} - -function moduleSizesTask() { - return gulp.src(srcDir + '**/*.js') - .pipe(uglify({ - preserveComments: 'some' - })) - .pipe(size({ - showFiles: true, - gzip: true - })); -} - -function watchTask() { - if (util.env.test) { - return gulp.watch('./src/**', ['build', 'unittest', 'unittestWatch']); - } - return gulp.watch('./src/**', ['build']); -} - -function serverTask() { - connect.server({ - port: 8000 - }); -} - -// Convenience task for opening the project straight from the command line - -function _openTask() { - exec('open http://localhost:8000'); - exec('subl .'); -} diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.ci.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.ci.js deleted file mode 100644 index 7ed5d0fe..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.ci.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = function(config) { - var configuration = { - browsers: ['Firefox'], - customLaunchers: { - Chrome_travis_ci: { - base: 'Chrome', - flags: ['--no-sandbox'] - } - }, - frameworks: ['browserify', 'jasmine'], - reporters: ['progress', 'html'], - preprocessors: { - 'src/**/*.js': ['browserify'] - }, - browserify: { - debug: true - } - }; - - if (process.env.TRAVIS) { - configuration.browsers.push('Chrome_travis_ci'); - } - - config.set(configuration); -}; \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.js deleted file mode 100644 index acdff3f9..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.conf.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = function(config) { - config.set({ - browsers: ['Chrome', 'Firefox'], - frameworks: ['browserify', 'jasmine'], - reporters: ['progress', 'html'], - - preprocessors: { - 'src/**/*.js': ['browserify'] - }, - browserify: { - debug: true - } - }); -}; \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.coverage.conf.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.coverage.conf.js deleted file mode 100644 index dd70f701..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/karma.coverage.conf.js +++ /dev/null @@ -1,43 +0,0 @@ -module.exports = function(config) { - var configuration = { - browsers: ['Firefox'], - - frameworks: ['browserify', 'jasmine'], - - preprocessors: { - 'src/**/*.js': ['browserify'] - }, - browserify: { - debug: true, - transform: [['browserify-istanbul', { - instrumenterConfig: { - embed: true - } - }]] - }, - - reporters: ['progress', 'coverage'], - coverageReporter: { - dir: 'coverage/', - reporters: [ - { type: 'html', subdir: 'report-html' }, - { type: 'lcovonly', subdir: '.', file: 'lcov.info' } - ] - } - }; - - // If on the CI, use the CI chrome launcher - if (process.env.TRAVIS) { - configuration.browsers.push('Chrome_travis_ci'); - configuration.customLaunchers = { - Chrome_travis_ci: { - base: 'Chrome', - flags: ['--no-sandbox'] - } - }; - } else { - configuration.browsers.push('Chrome'); - } - - config.set(configuration); -}; \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/package.json b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/package.json deleted file mode 100644 index e901b26c..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "chart.js", - "homepage": "http://www.chartjs.org", - "description": "Simple HTML5 charts using the canvas element.", - "version": "2.3.0", - "license": "MIT", - "main": "src/chart.js", - "repository": { - "type": "git", - "url": "https://github.com/chartjs/Chart.js.git" - }, - "devDependencies": { - "browserify": "^13.0.0", - "browserify-istanbul": "^0.2.1", - "bundle-collapser": "^1.2.1", - "coveralls": "^2.11.6", - "gulp": "3.9.x", - "gulp-concat": "~2.1.x", - "gulp-connect": "~2.0.5", - "gulp-eslint": "^2.0.0", - "gulp-file": "^0.3.0", - "gulp-html-validator": "^0.0.2", - "gulp-insert": "~0.5.0", - "gulp-karma": "0.0.4", - "gulp-replace": "^0.5.4", - "gulp-size": "~0.4.0", - "gulp-streamify": "^1.0.2", - "gulp-uglify": "~0.2.x", - "gulp-util": "~2.2.x", - "gulp-zip": "~3.2.0", - "jasmine": "^2.3.2", - "jasmine-core": "^2.3.4", - "karma": "^0.12.37", - "karma-browserify": "^5.0.1", - "karma-chrome-launcher": "^0.2.0", - "karma-coverage": "^0.5.1", - "karma-firefox-launcher": "^0.1.6", - "karma-jasmine": "^0.3.6", - "karma-jasmine-html-reporter": "^0.1.8", - "merge-stream": "^1.0.0", - "vinyl-source-stream": "^1.1.0" - }, - "spm": { - "main": "Chart.js" - }, - "dependencies": { - "chartjs-color": "^2.0.0", - "moment": "^2.10.6" - } -} diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/AnimationCallbacks/progress-bar.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/AnimationCallbacks/progress-bar.html deleted file mode 100644 index 7d79d6c1..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/AnimationCallbacks/progress-bar.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - Animation Callbacks - - - - - - -
    - - -
    -
    -
    - - - - - - - - - \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-horizontal.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-horizontal.html deleted file mode 100644 index 6d9fd54e..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-horizontal.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Horizontal Bar Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-multi-axis.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-multi-axis.html deleted file mode 100644 index 9c8ec364..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-multi-axis.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - Bar Chart Multi Axis - - - - - - -
    - -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-stacked.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-stacked.html deleted file mode 100644 index e85a72b2..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar-stacked.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - Stacked Bar Chart - - - - - - -
    - -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar.html deleted file mode 100644 index d595bae4..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bar.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - Bar Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bubble.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bubble.html deleted file mode 100644 index 43ab2778..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/bubble.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - Bubble Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/combo-bar-line.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/combo-bar-line.html deleted file mode 100644 index 08739e10..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/combo-bar-line.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - Combo Bar-Line Chart - - - - - - -
    - -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/data_label_combo-bar-line.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/data_label_combo-bar-line.html deleted file mode 100644 index a5e1e8d3..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/data_label_combo-bar-line.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - Combo Bar-Line Chart - - - - - - -
    - -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/different-point-sizes.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/different-point-sizes.html deleted file mode 100644 index 926eecfb..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/different-point-sizes.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/doughnut.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/doughnut.html deleted file mode 100644 index 73c96ad8..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/doughnut.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - Doughnut Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-cubicInterpolationMode.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-cubicInterpolationMode.html deleted file mode 100644 index 97dac46c..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-cubicInterpolationMode.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Line Chart - Cubic interpolation mode - - - - - - -
    - -
    -
    -
    - - - - - \ No newline at end of file diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-customTooltips.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-customTooltips.html deleted file mode 100644 index 6695cb66..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-customTooltips.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - Line Chart with Custom Tooltips - - - - - - -
    - -
    - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-legend.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-legend.html deleted file mode 100644 index 92e5e5b5..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-legend.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-logarithmic.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-logarithmic.html deleted file mode 100644 index 290ea43e..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-logarithmic.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multi-axis.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multi-axis.html deleted file mode 100644 index 03da24bd..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multi-axis.html +++ /dev/null @@ -1,101 +0,0 @@ - - - - - Line Chart Multiple Axes - - - - - - -
    - -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multiline-labels.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multiline-labels.html deleted file mode 100644 index 3fd0de5e..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-multiline-labels.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-non-numeric-y.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-non-numeric-y.html deleted file mode 100644 index c0b74a15..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-non-numeric-y.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-skip-points.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-skip-points.html deleted file mode 100644 index 2d760d2e..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-skip-points.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stacked-area.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stacked-area.html deleted file mode 100644 index 88f14e2b..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stacked-area.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stepped.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stepped.html deleted file mode 100644 index e618a698..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-stepped.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-x-axis-filter.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-x-axis-filter.html deleted file mode 100644 index e90575df..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line-x-axis-filter.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - Chart with xAxis Filtering - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line.html deleted file mode 100644 index ffca9df3..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/line.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie-customTooltips.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie-customTooltips.html deleted file mode 100644 index 2f591653..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie-customTooltips.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - Pie Chart with Custom Tooltips - - - - - - - -
    - -
    -
    - -
    - -
    - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie.html deleted file mode 100644 index b376b5ab..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/pie.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - Pie Chart - - - - - -
    - -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/polar-area.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/polar-area.html deleted file mode 100644 index ae21e1d4..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/polar-area.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - Polar Area Chart - - - - - - -
    - -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar-skip-points.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar-skip-points.html deleted file mode 100644 index 9d0816d4..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar-skip-points.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - Radar Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar.html deleted file mode 100644 index 4203cff1..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/radar.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - Radar Chart - - - - - - -
    - -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-logX.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-logX.html deleted file mode 100644 index 8c7fe2ad..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-logX.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Scatter Chart - - - - - - -
    -
    - -
    -
    - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-multi-axis.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-multi-axis.html deleted file mode 100644 index 43d27e50..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter-multi-axis.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - Scatter Chart Multi Axis - - - - - - -
    -
    - -
    -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter.html deleted file mode 100644 index af026e7b..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/scatter.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - Scatter Chart - - - - - - -
    -
    - -
    -
    - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/combo-time-scale.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/combo-time-scale.html deleted file mode 100644 index f6c178a7..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/combo-time-scale.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - Line Chart - Combo Time Scale - - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-point-data.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-point-data.html deleted file mode 100644 index ffe21481..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-point-data.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - Time Scale Point Data - - - - - - - -
    - -
    -
    -
    - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-scale.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-scale.html deleted file mode 100644 index 703e7faa..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/timeScale/line-time-scale.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - Line Chart - - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/tooltip-hooks.html b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/tooltip-hooks.html deleted file mode 100644 index 88a66051..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/samples/tooltip-hooks.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - Line Chart - - - - - - -
    - -
    -
    -
    - - - - - - - - - diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/scripts/release.sh b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/scripts/release.sh deleted file mode 100644 index 03c7c646..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/scripts/release.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -set -e - -if [ "$TRAVIS_BRANCH" != "release" ]; then - echo "Skipping release because this is not the 'release' branch" - exit 0 -fi - -# Travis executes this script from the repository root, so at the same level than package.json -VERSION=$(node -p -e "require('./package.json').version") - -# Make sure that the associated tag doesn't already exist -GITTAG=$(git ls-remote origin refs/tags/v$VERSION) -if [ "$GITTAG" != "" ]; then - echo "Tag for package.json version already exists, aborting release" - exit 1 -fi - -git remote add auth-origin https://$GITHUB_AUTH_TOKEN@github.com/$TRAVIS_REPO_SLUG.git -git config --global user.email "$GITHUB_AUTH_EMAIL" -git config --global user.name "Chart.js" -git checkout --detach --quiet -git add -f dist/*.js bower.json -git commit -m "Release $VERSION" -git tag -a "v$VERSION" -m "Version $VERSION" -git push -q auth-origin refs/tags/v$VERSION 2>/dev/null -git remote rm auth-origin -git checkout -f @{-1} diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/chart.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/chart.js deleted file mode 100644 index a12890aa..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/chart.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @namespace Chart - */ -var Chart = require('./core/core.js')(); - -require('./core/core.helpers')(Chart); -require('./core/core.canvasHelpers')(Chart); -require('./core/core.element')(Chart); -require('./core/core.animation')(Chart); -require('./core/core.controller')(Chart); -require('./core/core.datasetController')(Chart); -require('./core/core.layoutService')(Chart); -require('./core/core.scaleService')(Chart); -require('./core/core.plugin.js')(Chart); -require('./core/core.scale')(Chart); -require('./core/core.title')(Chart); -require('./core/core.legend')(Chart); -require('./core/core.tooltip')(Chart); - -require('./elements/element.arc')(Chart); -require('./elements/element.line')(Chart); -require('./elements/element.point')(Chart); -require('./elements/element.rectangle')(Chart); - -require('./scales/scale.linearbase.js')(Chart); -require('./scales/scale.category')(Chart); -require('./scales/scale.linear')(Chart); -require('./scales/scale.logarithmic')(Chart); -require('./scales/scale.radialLinear')(Chart); -require('./scales/scale.time')(Chart); - -// Controllers must be loaded after elements -// See Chart.core.datasetController.dataElementType -require('./controllers/controller.bar')(Chart); -require('./controllers/controller.bubble')(Chart); -require('./controllers/controller.doughnut')(Chart); -require('./controllers/controller.line')(Chart); -require('./controllers/controller.polarArea')(Chart); -require('./controllers/controller.radar')(Chart); - -require('./charts/Chart.Bar')(Chart); -require('./charts/Chart.Bubble')(Chart); -require('./charts/Chart.Doughnut')(Chart); -require('./charts/Chart.Line')(Chart); -require('./charts/Chart.PolarArea')(Chart); -require('./charts/Chart.Radar')(Chart); -require('./charts/Chart.Scatter')(Chart); - -window.Chart = module.exports = Chart; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bar.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bar.js deleted file mode 100644 index e1ad7962..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bar.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.Bar = function(context, config) { - config.type = 'bar'; - - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bubble.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bubble.js deleted file mode 100644 index 2de4a104..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Bubble.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.Bubble = function(context, config) { - config.type = 'bubble'; - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Doughnut.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Doughnut.js deleted file mode 100644 index e1e8ce54..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Doughnut.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.Doughnut = function(context, config) { - config.type = 'doughnut'; - - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Line.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Line.js deleted file mode 100644 index e89662ff..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Line.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.Line = function(context, config) { - config.type = 'line'; - - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.PolarArea.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.PolarArea.js deleted file mode 100644 index e07e4bac..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.PolarArea.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.PolarArea = function(context, config) { - config.type = 'polarArea'; - - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Radar.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Radar.js deleted file mode 100644 index 1648e9fa..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Radar.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - Chart.Radar = function(context, config) { - config.options = Chart.helpers.configMerge({aspectRatio: 1}, config.options); - config.type = 'radar'; - - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Scatter.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Scatter.js deleted file mode 100644 index 84594f63..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/charts/Chart.Scatter.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var defaultConfig = { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - type: 'linear', // scatter should not use a category axis - position: 'bottom', - id: 'x-axis-1' // need an ID so datasets can reference the scale - }], - yAxes: [{ - type: 'linear', - position: 'left', - id: 'y-axis-1' - }] - }, - - tooltips: { - callbacks: { - title: function() { - // Title doesn't make sense for scatter since we format the data as a point - return ''; - }, - label: function(tooltipItem) { - return '(' + tooltipItem.xLabel + ', ' + tooltipItem.yLabel + ')'; - } - } - } - }; - - // Register the default config for this type - Chart.defaults.scatter = defaultConfig; - - // Scatter charts use line controllers - Chart.controllers.scatter = Chart.controllers.line; - - Chart.Scatter = function(context, config) { - config.type = 'scatter'; - return new Chart(context, config); - }; - -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bar.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bar.js deleted file mode 100644 index d9fa7bfe..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bar.js +++ /dev/null @@ -1,573 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.bar = { - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - - // Specific to Bar Controller - categoryPercentage: 0.8, - barPercentage: 0.9, - - // grid line settings - gridLines: { - offsetGridLines: true - } - }], - yAxes: [{ - type: 'linear' - }] - } - }; - - Chart.controllers.bar = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Rectangle, - - initialize: function(chart, datasetIndex) { - Chart.DatasetController.prototype.initialize.call(this, chart, datasetIndex); - - // Use this to indicate that this is a bar dataset. - this.getMeta().bar = true; - }, - - // Get the number of datasets that display bars. We use this to correctly calculate the bar width - getBarCount: function() { - var me = this; - var barCount = 0; - helpers.each(me.chart.data.datasets, function(dataset, datasetIndex) { - var meta = me.chart.getDatasetMeta(datasetIndex); - if (meta.bar && me.chart.isDatasetVisible(datasetIndex)) { - ++barCount; - } - }, me); - return barCount; - }, - - update: function(reset) { - var me = this; - helpers.each(me.getMeta().data, function(rectangle, index) { - me.updateElement(rectangle, index, reset); - }, me); - }, - - updateElement: function(rectangle, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - var scaleBase = yScale.getBasePixel(); - var rectangleElementOptions = me.chart.options.elements.rectangle; - var custom = rectangle.custom || {}; - var dataset = me.getDataset(); - - helpers.extend(rectangle, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: me.calculateBarX(index, me.index), - y: reset ? scaleBase : me.calculateBarY(index, me.index), - - // Tooltip - label: me.chart.data.labels[index], - datasetLabel: dataset.label, - - // Appearance - base: reset ? scaleBase : me.calculateBarBase(me.index, index), - width: me.calculateBarWidth(index), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor), - borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped, - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth) - } - }); - rectangle.pivot(); - }, - - calculateBarBase: function(datasetIndex, index) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var base = 0; - - if (yScale.options.stacked) { - var chart = me.chart; - var datasets = chart.data.datasets; - var value = Number(datasets[datasetIndex].data[index]); - - for (var i = 0; i < datasetIndex; i++) { - var currentDs = datasets[i]; - var currentDsMeta = chart.getDatasetMeta(i); - if (currentDsMeta.bar && currentDsMeta.yAxisID === yScale.id && chart.isDatasetVisible(i)) { - var currentVal = Number(currentDs.data[index]); - base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0); - } - } - - return yScale.getPixelForValue(base); - } - - return yScale.getBasePixel(); - }, - - getRuler: function(index) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var datasetCount = me.getBarCount(); - - var tickWidth; - - if (xScale.options.type === 'category') { - tickWidth = xScale.getPixelForTick(index + 1) - xScale.getPixelForTick(index); - } else { - // Average width - tickWidth = xScale.width / xScale.ticks.length; - } - var categoryWidth = tickWidth * xScale.options.categoryPercentage; - var categorySpacing = (tickWidth - (tickWidth * xScale.options.categoryPercentage)) / 2; - var fullBarWidth = categoryWidth / datasetCount; - - if (xScale.ticks.length !== me.chart.data.labels.length) { - var perc = xScale.ticks.length / me.chart.data.labels.length; - fullBarWidth = fullBarWidth * perc; - } - - var barWidth = fullBarWidth * xScale.options.barPercentage; - var barSpacing = fullBarWidth - (fullBarWidth * xScale.options.barPercentage); - - return { - datasetCount: datasetCount, - tickWidth: tickWidth, - categoryWidth: categoryWidth, - categorySpacing: categorySpacing, - fullBarWidth: fullBarWidth, - barWidth: barWidth, - barSpacing: barSpacing - }; - }, - - calculateBarWidth: function(index) { - var xScale = this.getScaleForId(this.getMeta().xAxisID); - if (xScale.options.barThickness) { - return xScale.options.barThickness; - } - var ruler = this.getRuler(index); - return xScale.options.stacked ? ruler.categoryWidth : ruler.barWidth; - }, - - // Get bar index from the given dataset index accounting for the fact that not all bars are visible - getBarIndex: function(datasetIndex) { - var barIndex = 0; - var meta, j; - - for (j = 0; j < datasetIndex; ++j) { - meta = this.chart.getDatasetMeta(j); - if (meta.bar && this.chart.isDatasetVisible(j)) { - ++barIndex; - } - } - - return barIndex; - }, - - calculateBarX: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var barIndex = me.getBarIndex(datasetIndex); - - var ruler = me.getRuler(index); - var leftTick = xScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo); - leftTick -= me.chart.isCombo ? (ruler.tickWidth / 2) : 0; - - if (xScale.options.stacked) { - return leftTick + (ruler.categoryWidth / 2) + ruler.categorySpacing; - } - - return leftTick + - (ruler.barWidth / 2) + - ruler.categorySpacing + - (ruler.barWidth * barIndex) + - (ruler.barSpacing / 2) + - (ruler.barSpacing * barIndex); - }, - - calculateBarY: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var value = Number(me.getDataset().data[index]); - - if (yScale.options.stacked) { - - var sumPos = 0, - sumNeg = 0; - - for (var i = 0; i < datasetIndex; i++) { - var ds = me.chart.data.datasets[i]; - var dsMeta = me.chart.getDatasetMeta(i); - if (dsMeta.bar && dsMeta.yAxisID === yScale.id && me.chart.isDatasetVisible(i)) { - var stackedVal = Number(ds.data[index]); - if (stackedVal < 0) { - sumNeg += stackedVal || 0; - } else { - sumPos += stackedVal || 0; - } - } - } - - if (value < 0) { - return yScale.getPixelForValue(sumNeg + value); - } - return yScale.getPixelForValue(sumPos + value); - } - - return yScale.getPixelForValue(value); - }, - - draw: function(ease) { - var me = this; - var easingDecimal = ease || 1; - helpers.each(me.getMeta().data, function(rectangle, index) { - var d = me.getDataset().data[index]; - if (d !== null && d !== undefined && !isNaN(d)) { - rectangle.transition(easingDecimal).draw(); - } - }, me); - }, - - setHoverStyle: function(rectangle) { - var dataset = this.chart.data.datasets[rectangle._datasetIndex]; - var index = rectangle._index; - - var custom = rectangle.custom || {}; - var model = rectangle._model; - model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.hoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.hoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.hoverBorderWidth, index, model.borderWidth); - }, - - removeHoverStyle: function(rectangle) { - var dataset = this.chart.data.datasets[rectangle._datasetIndex]; - var index = rectangle._index; - var custom = rectangle.custom || {}; - var model = rectangle._model; - var rectangleElementOptions = this.chart.options.elements.rectangle; - - model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor); - model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor); - model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth); - } - - }); - - - // including horizontalBar in the bar file, instead of a file of its own - // it extends bar (like pie extends doughnut) - Chart.defaults.horizontalBar = { - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'linear', - position: 'bottom' - }], - yAxes: [{ - position: 'left', - type: 'category', - - // Specific to Horizontal Bar Controller - categoryPercentage: 0.8, - barPercentage: 0.9, - - // grid line settings - gridLines: { - offsetGridLines: true - } - }] - }, - elements: { - rectangle: { - borderSkipped: 'left' - } - }, - tooltips: { - callbacks: { - title: function(tooltipItems, data) { - // Pick first xLabel for now - var title = ''; - - if (tooltipItems.length > 0) { - if (tooltipItems[0].yLabel) { - title = tooltipItems[0].yLabel; - } else if (data.labels.length > 0 && tooltipItems[0].index < data.labels.length) { - title = data.labels[tooltipItems[0].index]; - } - } - - return title; - }, - label: function(tooltipItem, data) { - var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || ''; - return datasetLabel + ': ' + tooltipItem.xLabel; - } - } - } - }; - - Chart.controllers.horizontalBar = Chart.controllers.bar.extend({ - updateElement: function(rectangle, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - var scaleBase = xScale.getBasePixel(); - var custom = rectangle.custom || {}; - var dataset = me.getDataset(); - var rectangleElementOptions = me.chart.options.elements.rectangle; - - helpers.extend(rectangle, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: reset ? scaleBase : me.calculateBarX(index, me.index), - y: me.calculateBarY(index, me.index), - - // Tooltip - label: me.chart.data.labels[index], - datasetLabel: dataset.label, - - // Appearance - base: reset ? scaleBase : me.calculateBarBase(me.index, index), - height: me.calculateBarHeight(index), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.backgroundColor, index, rectangleElementOptions.backgroundColor), - borderSkipped: custom.borderSkipped ? custom.borderSkipped : rectangleElementOptions.borderSkipped, - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.borderColor, index, rectangleElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.borderWidth, index, rectangleElementOptions.borderWidth) - }, - - draw: function() { - var ctx = this._chart.ctx; - var vm = this._view; - - var halfHeight = vm.height / 2, - topY = vm.y - halfHeight, - bottomY = vm.y + halfHeight, - right = vm.base - (vm.base - vm.x), - halfStroke = vm.borderWidth / 2; - - // Canvas doesn't allow us to stroke inside the width so we can - // adjust the sizes to fit if we're setting a stroke on the line - if (vm.borderWidth) { - topY += halfStroke; - bottomY -= halfStroke; - right += halfStroke; - } - - ctx.beginPath(); - - ctx.fillStyle = vm.backgroundColor; - ctx.strokeStyle = vm.borderColor; - ctx.lineWidth = vm.borderWidth; - - // Corner points, from bottom-left to bottom-right clockwise - // | 1 2 | - // | 0 3 | - var corners = [ - [vm.base, bottomY], - [vm.base, topY], - [right, topY], - [right, bottomY] - ]; - - // Find first (starting) corner with fallback to 'bottom' - var borders = ['bottom', 'left', 'top', 'right']; - var startCorner = borders.indexOf(vm.borderSkipped, 0); - if (startCorner === -1) { - startCorner = 0; - } - - function cornerAt(cornerIndex) { - return corners[(startCorner + cornerIndex) % 4]; - } - - // Draw rectangle from 'startCorner' - ctx.moveTo.apply(ctx, cornerAt(0)); - for (var i = 1; i < 4; i++) { - ctx.lineTo.apply(ctx, cornerAt(i)); - } - - ctx.fill(); - if (vm.borderWidth) { - ctx.stroke(); - } - }, - - inRange: function(mouseX, mouseY) { - var vm = this._view; - var inRange = false; - - if (vm) { - if (vm.x < vm.base) { - inRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.x && mouseX <= vm.base); - } else { - inRange = (mouseY >= vm.y - vm.height / 2 && mouseY <= vm.y + vm.height / 2) && (mouseX >= vm.base && mouseX <= vm.x); - } - } - - return inRange; - } - }); - - rectangle.pivot(); - }, - - calculateBarBase: function(datasetIndex, index) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var base = 0; - - if (xScale.options.stacked) { - var chart = me.chart; - var datasets = chart.data.datasets; - var value = Number(datasets[datasetIndex].data[index]); - - for (var i = 0; i < datasetIndex; i++) { - var currentDs = datasets[i]; - var currentDsMeta = chart.getDatasetMeta(i); - if (currentDsMeta.bar && currentDsMeta.xAxisID === xScale.id && chart.isDatasetVisible(i)) { - var currentVal = Number(currentDs.data[index]); - base += value < 0 ? Math.min(currentVal, 0) : Math.max(currentVal, 0); - } - } - - return xScale.getPixelForValue(base); - } - - return xScale.getBasePixel(); - }, - - getRuler: function(index) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var datasetCount = me.getBarCount(); - - var tickHeight; - if (yScale.options.type === 'category') { - tickHeight = yScale.getPixelForTick(index + 1) - yScale.getPixelForTick(index); - } else { - // Average width - tickHeight = yScale.width / yScale.ticks.length; - } - var categoryHeight = tickHeight * yScale.options.categoryPercentage; - var categorySpacing = (tickHeight - (tickHeight * yScale.options.categoryPercentage)) / 2; - var fullBarHeight = categoryHeight / datasetCount; - - if (yScale.ticks.length !== me.chart.data.labels.length) { - var perc = yScale.ticks.length / me.chart.data.labels.length; - fullBarHeight = fullBarHeight * perc; - } - - var barHeight = fullBarHeight * yScale.options.barPercentage; - var barSpacing = fullBarHeight - (fullBarHeight * yScale.options.barPercentage); - - return { - datasetCount: datasetCount, - tickHeight: tickHeight, - categoryHeight: categoryHeight, - categorySpacing: categorySpacing, - fullBarHeight: fullBarHeight, - barHeight: barHeight, - barSpacing: barSpacing - }; - }, - - calculateBarHeight: function(index) { - var me = this; - var yScale = me.getScaleForId(me.getMeta().yAxisID); - if (yScale.options.barThickness) { - return yScale.options.barThickness; - } - var ruler = me.getRuler(index); - return yScale.options.stacked ? ruler.categoryHeight : ruler.barHeight; - }, - - calculateBarX: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var value = Number(me.getDataset().data[index]); - - if (xScale.options.stacked) { - - var sumPos = 0, - sumNeg = 0; - - for (var i = 0; i < datasetIndex; i++) { - var ds = me.chart.data.datasets[i]; - var dsMeta = me.chart.getDatasetMeta(i); - if (dsMeta.bar && dsMeta.xAxisID === xScale.id && me.chart.isDatasetVisible(i)) { - var stackedVal = Number(ds.data[index]); - if (stackedVal < 0) { - sumNeg += stackedVal || 0; - } else { - sumPos += stackedVal || 0; - } - } - } - - if (value < 0) { - return xScale.getPixelForValue(sumNeg + value); - } - return xScale.getPixelForValue(sumPos + value); - } - - return xScale.getPixelForValue(value); - }, - - calculateBarY: function(index, datasetIndex) { - var me = this; - var meta = me.getMeta(); - var yScale = me.getScaleForId(meta.yAxisID); - var barIndex = me.getBarIndex(datasetIndex); - - var ruler = me.getRuler(index); - var topTick = yScale.getPixelForValue(null, index, datasetIndex, me.chart.isCombo); - topTick -= me.chart.isCombo ? (ruler.tickHeight / 2) : 0; - - if (yScale.options.stacked) { - return topTick + (ruler.categoryHeight / 2) + ruler.categorySpacing; - } - - return topTick + - (ruler.barHeight / 2) + - ruler.categorySpacing + - (ruler.barHeight * barIndex) + - (ruler.barSpacing / 2) + - (ruler.barSpacing * barIndex); - } - }); -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bubble.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bubble.js deleted file mode 100644 index b1c6474e..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.bubble.js +++ /dev/null @@ -1,122 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.bubble = { - hover: { - mode: 'single' - }, - - scales: { - xAxes: [{ - type: 'linear', // bubble should probably use a linear scale by default - position: 'bottom', - id: 'x-axis-0' // need an ID so datasets can reference the scale - }], - yAxes: [{ - type: 'linear', - position: 'left', - id: 'y-axis-0' - }] - }, - - tooltips: { - callbacks: { - title: function() { - // Title doesn't make sense for scatter since we format the data as a point - return ''; - }, - label: function(tooltipItem, data) { - var datasetLabel = data.datasets[tooltipItem.datasetIndex].label || ''; - var dataPoint = data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; - return datasetLabel + ': (' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.r + ')'; - } - } - } - }; - - Chart.controllers.bubble = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Point, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var points = meta.data; - - // Update Points - helpers.each(points, function(point, index) { - me.updateElement(point, index, reset); - }); - }, - - updateElement: function(point, index, reset) { - var me = this; - var meta = me.getMeta(); - var xScale = me.getScaleForId(meta.xAxisID); - var yScale = me.getScaleForId(meta.yAxisID); - - var custom = point.custom || {}; - var dataset = me.getDataset(); - var data = dataset.data[index]; - var pointElementOptions = me.chart.options.elements.point; - var dsIndex = me.index; - - helpers.extend(point, { - // Utility - _xScale: xScale, - _yScale: yScale, - _datasetIndex: dsIndex, - _index: index, - - // Desired view properties - _model: { - x: reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex, me.chart.isCombo), - y: reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex), - // Appearance - radius: reset ? 0 : custom.radius ? custom.radius : me.getRadius(data), - - // Tooltip - hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius) - } - }); - - // Trick to reset the styles of the point - Chart.DatasetController.prototype.removeHoverStyle.call(me, point, pointElementOptions); - - var model = point._model; - model.skip = custom.skip ? custom.skip : (isNaN(model.x) || isNaN(model.y)); - - point.pivot(); - }, - - getRadius: function(value) { - return value.r || this.chart.options.elements.point.radius; - }, - - setHoverStyle: function(point) { - var me = this; - Chart.DatasetController.prototype.setHoverStyle.call(me, point); - - // Radius - var dataset = me.chart.data.datasets[point._datasetIndex]; - var index = point._index; - var custom = point.custom || {}; - var model = point._model; - model.radius = custom.hoverRadius ? custom.hoverRadius : (helpers.getValueAtIndexOrDefault(dataset.hoverRadius, index, me.chart.options.elements.point.hoverRadius)) + me.getRadius(dataset.data[index]); - }, - - removeHoverStyle: function(point) { - var me = this; - Chart.DatasetController.prototype.removeHoverStyle.call(me, point, me.chart.options.elements.point); - - var dataVal = me.chart.data.datasets[point._datasetIndex].data[point._index]; - var custom = point.custom || {}; - var model = point._model; - - model.radius = custom.radius ? custom.radius : me.getRadius(dataVal); - } - }); -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.doughnut.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.doughnut.js deleted file mode 100644 index e0f378da..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.doughnut.js +++ /dev/null @@ -1,291 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers, - defaults = Chart.defaults; - - defaults.doughnut = { - animation: { - // Boolean - Whether we animate the rotation of the Doughnut - animateRotate: true, - // Boolean - Whether we animate scaling the Doughnut from the centre - animateScale: false - }, - aspectRatio: 1, - hover: { - mode: 'single' - }, - legendCallback: function(chart) { - var text = []; - text.push('
      '); - - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - - if (datasets.length) { - for (var i = 0; i < datasets[0].data.length; ++i) { - text.push('
    • '); - if (labels[i]) { - text.push(labels[i]); - } - text.push('
    • '); - } - } - - text.push('
    '); - return text.join(''); - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var ds = data.datasets[0]; - var arc = meta.data[i]; - var custom = arc && arc.custom || {}; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); - - return { - text: label, - fillStyle: fill, - strokeStyle: stroke, - lineWidth: bw, - hidden: isNaN(ds.data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - // toggle visibility of index if exists - if (meta.data[index]) { - meta.data[index].hidden = !meta.data[index].hidden; - } - } - - chart.update(); - } - }, - - // The percentage of the chart that we cut out of the middle. - cutoutPercentage: 50, - - // The rotation of the chart, where the first data arc begins. - rotation: Math.PI * -0.5, - - // The total circumference of the chart. - circumference: Math.PI * 2.0, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(tooltipItem, data) { - return data.labels[tooltipItem.index] + ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index]; - } - } - } - }; - - defaults.pie = helpers.clone(defaults.doughnut); - helpers.extend(defaults.pie, { - cutoutPercentage: 0 - }); - - - Chart.controllers.doughnut = Chart.controllers.pie = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Arc, - - linkScales: helpers.noop, - - // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly - getRingIndex: function(datasetIndex) { - var ringIndex = 0; - - for (var j = 0; j < datasetIndex; ++j) { - if (this.chart.isDatasetVisible(j)) { - ++ringIndex; - } - } - - return ringIndex; - }, - - update: function(reset) { - var me = this; - var chart = me.chart, - chartArea = chart.chartArea, - opts = chart.options, - arcOpts = opts.elements.arc, - availableWidth = chartArea.right - chartArea.left - arcOpts.borderWidth, - availableHeight = chartArea.bottom - chartArea.top - arcOpts.borderWidth, - minSize = Math.min(availableWidth, availableHeight), - offset = { - x: 0, - y: 0 - }, - meta = me.getMeta(), - cutoutPercentage = opts.cutoutPercentage, - circumference = opts.circumference; - - // If the chart's circumference isn't a full circle, calculate minSize as a ratio of the width/height of the arc - if (circumference < Math.PI * 2.0) { - var startAngle = opts.rotation % (Math.PI * 2.0); - startAngle += Math.PI * 2.0 * (startAngle >= Math.PI ? -1 : startAngle < -Math.PI ? 1 : 0); - var endAngle = startAngle + circumference; - var start = {x: Math.cos(startAngle), y: Math.sin(startAngle)}; - var end = {x: Math.cos(endAngle), y: Math.sin(endAngle)}; - var contains0 = (startAngle <= 0 && 0 <= endAngle) || (startAngle <= Math.PI * 2.0 && Math.PI * 2.0 <= endAngle); - var contains90 = (startAngle <= Math.PI * 0.5 && Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 2.5 && Math.PI * 2.5 <= endAngle); - var contains180 = (startAngle <= -Math.PI && -Math.PI <= endAngle) || (startAngle <= Math.PI && Math.PI <= endAngle); - var contains270 = (startAngle <= -Math.PI * 0.5 && -Math.PI * 0.5 <= endAngle) || (startAngle <= Math.PI * 1.5 && Math.PI * 1.5 <= endAngle); - var cutout = cutoutPercentage / 100.0; - var min = {x: contains180 ? -1 : Math.min(start.x * (start.x < 0 ? 1 : cutout), end.x * (end.x < 0 ? 1 : cutout)), y: contains270 ? -1 : Math.min(start.y * (start.y < 0 ? 1 : cutout), end.y * (end.y < 0 ? 1 : cutout))}; - var max = {x: contains0 ? 1 : Math.max(start.x * (start.x > 0 ? 1 : cutout), end.x * (end.x > 0 ? 1 : cutout)), y: contains90 ? 1 : Math.max(start.y * (start.y > 0 ? 1 : cutout), end.y * (end.y > 0 ? 1 : cutout))}; - var size = {width: (max.x - min.x) * 0.5, height: (max.y - min.y) * 0.5}; - minSize = Math.min(availableWidth / size.width, availableHeight / size.height); - offset = {x: (max.x + min.x) * -0.5, y: (max.y + min.y) * -0.5}; - } - - chart.borderWidth = me.getMaxBorderWidth(meta.data); - chart.outerRadius = Math.max((minSize - chart.borderWidth) / 2, 0); - chart.innerRadius = Math.max(cutoutPercentage ? (chart.outerRadius / 100) * (cutoutPercentage) : 1, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); - chart.offsetX = offset.x * chart.outerRadius; - chart.offsetY = offset.y * chart.outerRadius; - - meta.total = me.calculateTotal(); - - me.outerRadius = chart.outerRadius - (chart.radiusLength * me.getRingIndex(me.index)); - me.innerRadius = me.outerRadius - chart.radiusLength; - - helpers.each(meta.data, function(arc, index) { - me.updateElement(arc, index, reset); - }); - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart, - chartArea = chart.chartArea, - opts = chart.options, - animationOpts = opts.animation, - centerX = (chartArea.left + chartArea.right) / 2, - centerY = (chartArea.top + chartArea.bottom) / 2, - startAngle = opts.rotation, // non reset case handled later - endAngle = opts.rotation, // non reset case handled later - dataset = me.getDataset(), - circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / (2.0 * Math.PI)), - innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius, - outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius, - valueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - - helpers.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - - // Desired view properties - _model: { - x: centerX + chart.offsetX, - y: centerY + chart.offsetY, - startAngle: startAngle, - endAngle: endAngle, - circumference: circumference, - outerRadius: outerRadius, - innerRadius: innerRadius, - label: valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index]) - } - }); - - var model = arc._model; - // Resets the visual styles - this.removeHoverStyle(arc); - - // Set correct angles if not resetting - if (!reset || !animationOpts.animateRotate) { - if (index === 0) { - model.startAngle = opts.rotation; - } else { - model.startAngle = me.getMeta().data[index - 1]._model.endAngle; - } - - model.endAngle = model.startAngle + model.circumference; - } - - arc.pivot(); - }, - - removeHoverStyle: function(arc) { - Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc); - }, - - calculateTotal: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var total = 0; - var value; - - helpers.each(meta.data, function(element, index) { - value = dataset.data[index]; - if (!isNaN(value) && !element.hidden) { - total += Math.abs(value); - } - }); - - /* if (total === 0) { - total = NaN; - }*/ - - return total; - }, - - calculateCircumference: function(value) { - var total = this.getMeta().total; - if (total > 0 && !isNaN(value)) { - return (Math.PI * 2.0) * (value / total); - } - return 0; - }, - - // gets the max border or hover width to properly scale pie charts - getMaxBorderWidth: function(elements) { - var max = 0, - index = this.index, - length = elements.length, - borderWidth, - hoverWidth; - - for (var i = 0; i < length; i++) { - borderWidth = elements[i]._model ? elements[i]._model.borderWidth : 0; - hoverWidth = elements[i]._chart ? elements[i]._chart.config.data.datasets[index].hoverBorderWidth : 0; - - max = borderWidth > max ? borderWidth : max; - max = hoverWidth > max ? hoverWidth : max; - } - return max; - } - }); -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.line.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.line.js deleted file mode 100644 index bfc061af..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.line.js +++ /dev/null @@ -1,350 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.line = { - showLines: true, - spanGaps: false, - - hover: { - mode: 'label' - }, - - scales: { - xAxes: [{ - type: 'category', - id: 'x-axis-0' - }], - yAxes: [{ - type: 'linear', - id: 'y-axis-0' - }] - } - }; - - function lineEnabled(dataset, options) { - return helpers.getValueOrDefault(dataset.showLine, options.showLines); - } - - Chart.controllers.line = Chart.DatasetController.extend({ - - datasetElementType: Chart.elements.Line, - - dataElementType: Chart.elements.Point, - - addElementAndReset: function(index) { - var me = this; - var options = me.chart.options; - var meta = me.getMeta(); - - Chart.DatasetController.prototype.addElementAndReset.call(me, index); - - // Make sure bezier control points are updated - if (lineEnabled(me.getDataset(), options) && meta.dataset._model.tension !== 0) { - me.updateBezierControlPoints(); - } - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data || []; - var options = me.chart.options; - var lineElementOptions = options.elements.line; - var scale = me.getScaleForId(meta.yAxisID); - var i, ilen, custom; - var dataset = me.getDataset(); - var showLine = lineEnabled(dataset, options); - - // Update Line - if (showLine) { - custom = line.custom || {}; - - // Compatibility: If the properties are defined with only the old name, use those values - if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { - dataset.lineTension = dataset.tension; - } - - // Utility - line._scale = scale; - line._datasetIndex = me.index; - // Data - line._children = points; - // Model - line._model = { - // Appearance - // The default behavior of lines is to break at null values, according - // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158 - // This option gives linse the ability to span gaps - spanGaps: dataset.spanGaps ? dataset.spanGaps : options.spanGaps, - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor), - borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth), - borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor), - borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle), - borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash), - borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset), - borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle), - fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill), - steppedLine: custom.steppedLine ? custom.steppedLine : helpers.getValueOrDefault(dataset.steppedLine, lineElementOptions.stepped), - cubicInterpolationMode: custom.cubicInterpolationMode ? custom.cubicInterpolationMode : helpers.getValueOrDefault(dataset.cubicInterpolationMode, lineElementOptions.cubicInterpolationMode), - // Scale - scaleTop: scale.top, - scaleBottom: scale.bottom, - scaleZero: scale.getBasePixel() - }; - - line.pivot(); - } - - // Update Points - for (i=0, ilen=points.length; i'); - - var data = chart.data; - var datasets = data.datasets; - var labels = data.labels; - - if (datasets.length) { - for (var i = 0; i < datasets[0].data.length; ++i) { - text.push('
  • '); - if (labels[i]) { - text.push(labels[i]); - } - text.push('
  • '); - } - } - - text.push(''); - return text.join(''); - }, - legend: { - labels: { - generateLabels: function(chart) { - var data = chart.data; - if (data.labels.length && data.datasets.length) { - return data.labels.map(function(label, i) { - var meta = chart.getDatasetMeta(0); - var ds = data.datasets[0]; - var arc = meta.data[i]; - var custom = arc.custom || {}; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var arcOpts = chart.options.elements.arc; - var fill = custom.backgroundColor ? custom.backgroundColor : getValueAtIndexOrDefault(ds.backgroundColor, i, arcOpts.backgroundColor); - var stroke = custom.borderColor ? custom.borderColor : getValueAtIndexOrDefault(ds.borderColor, i, arcOpts.borderColor); - var bw = custom.borderWidth ? custom.borderWidth : getValueAtIndexOrDefault(ds.borderWidth, i, arcOpts.borderWidth); - - return { - text: label, - fillStyle: fill, - strokeStyle: stroke, - lineWidth: bw, - hidden: isNaN(ds.data[i]) || meta.data[i].hidden, - - // Extra data used for toggling the correct item - index: i - }; - }); - } - return []; - } - }, - - onClick: function(e, legendItem) { - var index = legendItem.index; - var chart = this.chart; - var i, ilen, meta; - - for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) { - meta = chart.getDatasetMeta(i); - meta.data[index].hidden = !meta.data[index].hidden; - } - - chart.update(); - } - }, - - // Need to override these to give a nice default - tooltips: { - callbacks: { - title: function() { - return ''; - }, - label: function(tooltipItem, data) { - return data.labels[tooltipItem.index] + ': ' + tooltipItem.yLabel; - } - } - } - }; - - Chart.controllers.polarArea = Chart.DatasetController.extend({ - - dataElementType: Chart.elements.Arc, - - linkScales: helpers.noop, - - update: function(reset) { - var me = this; - var chart = me.chart; - var chartArea = chart.chartArea; - var meta = me.getMeta(); - var opts = chart.options; - var arcOpts = opts.elements.arc; - var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top); - chart.outerRadius = Math.max((minSize - arcOpts.borderWidth / 2) / 2, 0); - chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0); - chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount(); - - me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index); - me.innerRadius = me.outerRadius - chart.radiusLength; - - meta.count = me.countVisibleElements(); - - helpers.each(meta.data, function(arc, index) { - me.updateElement(arc, index, reset); - }); - }, - - updateElement: function(arc, index, reset) { - var me = this; - var chart = me.chart; - var dataset = me.getDataset(); - var opts = chart.options; - var animationOpts = opts.animation; - var scale = chart.scale; - var getValueAtIndexOrDefault = helpers.getValueAtIndexOrDefault; - var labels = chart.data.labels; - - var circumference = me.calculateCircumference(dataset.data[index]); - var centerX = scale.xCenter; - var centerY = scale.yCenter; - - // If there is NaN data before us, we need to calculate the starting angle correctly. - // We could be way more efficient here, but its unlikely that the polar area chart will have a lot of data - var visibleCount = 0; - var meta = me.getMeta(); - for (var i = 0; i < index; ++i) { - if (!isNaN(dataset.data[i]) && !meta.data[i].hidden) { - ++visibleCount; - } - } - - // var negHalfPI = -0.5 * Math.PI; - var datasetStartAngle = opts.startAngle; - var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - var startAngle = datasetStartAngle + (circumference * visibleCount); - var endAngle = startAngle + (arc.hidden ? 0 : circumference); - - var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]); - - helpers.extend(arc, { - // Utility - _datasetIndex: me.index, - _index: index, - _scale: scale, - - // Desired view properties - _model: { - x: centerX, - y: centerY, - innerRadius: 0, - outerRadius: reset ? resetRadius : distance, - startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle, - endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle, - label: getValueAtIndexOrDefault(labels, index, labels[index]) - } - }); - - // Apply border and fill style - me.removeHoverStyle(arc); - - arc.pivot(); - }, - - removeHoverStyle: function(arc) { - Chart.DatasetController.prototype.removeHoverStyle.call(this, arc, this.chart.options.elements.arc); - }, - - countVisibleElements: function() { - var dataset = this.getDataset(); - var meta = this.getMeta(); - var count = 0; - - helpers.each(meta.data, function(element, index) { - if (!isNaN(dataset.data[index]) && !element.hidden) { - count++; - } - }); - - return count; - }, - - calculateCircumference: function(value) { - var count = this.getMeta().count; - if (count > 0 && !isNaN(value)) { - return (2 * Math.PI) / count; - } - return 0; - } - }); -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.radar.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.radar.js deleted file mode 100644 index 3c050595..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/controllers/controller.radar.js +++ /dev/null @@ -1,188 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.radar = { - scale: { - type: 'radialLinear' - }, - elements: { - line: { - tension: 0 // no bezier in radar - } - } - }; - - Chart.controllers.radar = Chart.DatasetController.extend({ - - datasetElementType: Chart.elements.Line, - - dataElementType: Chart.elements.Point, - - linkScales: helpers.noop, - - addElementAndReset: function(index) { - Chart.DatasetController.prototype.addElementAndReset.call(this, index); - - // Make sure bezier control points are updated - this.updateBezierControlPoints(); - }, - - update: function(reset) { - var me = this; - var meta = me.getMeta(); - var line = meta.dataset; - var points = meta.data; - var custom = line.custom || {}; - var dataset = me.getDataset(); - var lineElementOptions = me.chart.options.elements.line; - var scale = me.chart.scale; - - // Compatibility: If the properties are defined with only the old name, use those values - if ((dataset.tension !== undefined) && (dataset.lineTension === undefined)) { - dataset.lineTension = dataset.tension; - } - - helpers.extend(meta.dataset, { - // Utility - _datasetIndex: me.index, - // Data - _children: points, - _loop: true, - // Model - _model: { - // Appearance - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.lineTension, lineElementOptions.tension), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : (dataset.backgroundColor || lineElementOptions.backgroundColor), - borderWidth: custom.borderWidth ? custom.borderWidth : (dataset.borderWidth || lineElementOptions.borderWidth), - borderColor: custom.borderColor ? custom.borderColor : (dataset.borderColor || lineElementOptions.borderColor), - fill: custom.fill ? custom.fill : (dataset.fill !== undefined ? dataset.fill : lineElementOptions.fill), - borderCapStyle: custom.borderCapStyle ? custom.borderCapStyle : (dataset.borderCapStyle || lineElementOptions.borderCapStyle), - borderDash: custom.borderDash ? custom.borderDash : (dataset.borderDash || lineElementOptions.borderDash), - borderDashOffset: custom.borderDashOffset ? custom.borderDashOffset : (dataset.borderDashOffset || lineElementOptions.borderDashOffset), - borderJoinStyle: custom.borderJoinStyle ? custom.borderJoinStyle : (dataset.borderJoinStyle || lineElementOptions.borderJoinStyle), - - // Scale - scaleTop: scale.top, - scaleBottom: scale.bottom, - scaleZero: scale.getBasePosition() - } - }); - - meta.dataset.pivot(); - - // Update Points - helpers.each(points, function(point, index) { - me.updateElement(point, index, reset); - }, me); - - - // Update bezier control points - me.updateBezierControlPoints(); - }, - updateElement: function(point, index, reset) { - var me = this; - var custom = point.custom || {}; - var dataset = me.getDataset(); - var scale = me.chart.scale; - var pointElementOptions = me.chart.options.elements.point; - var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]); - - helpers.extend(point, { - // Utility - _datasetIndex: me.index, - _index: index, - _scale: scale, - - // Desired view properties - _model: { - x: reset ? scale.xCenter : pointPosition.x, // value not used in dataset scale, but we want a consistent API between scales - y: reset ? scale.yCenter : pointPosition.y, - - // Appearance - tension: custom.tension ? custom.tension : helpers.getValueOrDefault(dataset.tension, me.chart.options.elements.line.tension), - radius: custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.pointRadius, index, pointElementOptions.radius), - backgroundColor: custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor), - borderColor: custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor), - borderWidth: custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth), - pointStyle: custom.pointStyle ? custom.pointStyle : helpers.getValueAtIndexOrDefault(dataset.pointStyle, index, pointElementOptions.pointStyle), - - // Tooltip - hitRadius: custom.hitRadius ? custom.hitRadius : helpers.getValueAtIndexOrDefault(dataset.hitRadius, index, pointElementOptions.hitRadius) - } - }); - - point._model.skip = custom.skip ? custom.skip : (isNaN(point._model.x) || isNaN(point._model.y)); - }, - updateBezierControlPoints: function() { - var chartArea = this.chart.chartArea; - var meta = this.getMeta(); - - helpers.each(meta.data, function(point, index) { - var model = point._model; - var controlPoints = helpers.splineCurve( - helpers.previousItem(meta.data, index, true)._model, - model, - helpers.nextItem(meta.data, index, true)._model, - model.tension - ); - - // Prevent the bezier going outside of the bounds of the graph - model.controlPointPreviousX = Math.max(Math.min(controlPoints.previous.x, chartArea.right), chartArea.left); - model.controlPointPreviousY = Math.max(Math.min(controlPoints.previous.y, chartArea.bottom), chartArea.top); - - model.controlPointNextX = Math.max(Math.min(controlPoints.next.x, chartArea.right), chartArea.left); - model.controlPointNextY = Math.max(Math.min(controlPoints.next.y, chartArea.bottom), chartArea.top); - - // Now pivot the point for animation - point.pivot(); - }); - }, - - draw: function(ease) { - var meta = this.getMeta(); - var easingDecimal = ease || 1; - - // Transition Point Locations - helpers.each(meta.data, function(point) { - point.transition(easingDecimal); - }); - - // Transition and Draw the line - meta.dataset.transition(easingDecimal).draw(); - - // Draw the points - helpers.each(meta.data, function(point) { - point.draw(); - }); - }, - - setHoverStyle: function(point) { - // Point - var dataset = this.chart.data.datasets[point._datasetIndex]; - var custom = point.custom || {}; - var index = point._index; - var model = point._model; - - model.radius = custom.hoverRadius ? custom.hoverRadius : helpers.getValueAtIndexOrDefault(dataset.pointHoverRadius, index, this.chart.options.elements.point.hoverRadius); - model.backgroundColor = custom.hoverBackgroundColor ? custom.hoverBackgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBackgroundColor, index, helpers.getHoverColor(model.backgroundColor)); - model.borderColor = custom.hoverBorderColor ? custom.hoverBorderColor : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderColor, index, helpers.getHoverColor(model.borderColor)); - model.borderWidth = custom.hoverBorderWidth ? custom.hoverBorderWidth : helpers.getValueAtIndexOrDefault(dataset.pointHoverBorderWidth, index, model.borderWidth); - }, - - removeHoverStyle: function(point) { - var dataset = this.chart.data.datasets[point._datasetIndex]; - var custom = point.custom || {}; - var index = point._index; - var model = point._model; - var pointElementOptions = this.chart.options.elements.point; - - model.radius = custom.radius ? custom.radius : helpers.getValueAtIndexOrDefault(dataset.radius, index, pointElementOptions.radius); - model.backgroundColor = custom.backgroundColor ? custom.backgroundColor : helpers.getValueAtIndexOrDefault(dataset.pointBackgroundColor, index, pointElementOptions.backgroundColor); - model.borderColor = custom.borderColor ? custom.borderColor : helpers.getValueAtIndexOrDefault(dataset.pointBorderColor, index, pointElementOptions.borderColor); - model.borderWidth = custom.borderWidth ? custom.borderWidth : helpers.getValueAtIndexOrDefault(dataset.pointBorderWidth, index, pointElementOptions.borderWidth); - } - }); -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.animation.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.animation.js deleted file mode 100644 index 7ccb3749..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.animation.js +++ /dev/null @@ -1,131 +0,0 @@ -/* global window: false */ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - - Chart.defaults.global.animation = { - duration: 1000, - easing: 'easeOutQuart', - onProgress: helpers.noop, - onComplete: helpers.noop - }; - - Chart.Animation = Chart.Element.extend({ - currentStep: null, // the current animation step - numSteps: 60, // default number of steps - easing: '', // the easing to use for this animation - render: null, // render function used by the animation service - - onAnimationProgress: null, // user specified callback to fire on each step of the animation - onAnimationComplete: null // user specified callback to fire when the animation finishes - }); - - Chart.animationService = { - frameDuration: 17, - animations: [], - dropFrames: 0, - request: null, - addAnimation: function(chartInstance, animationObject, duration, lazy) { - var me = this; - - if (!lazy) { - chartInstance.animating = true; - } - - for (var index = 0; index < me.animations.length; ++index) { - if (me.animations[index].chartInstance === chartInstance) { - // replacing an in progress animation - me.animations[index].animationObject = animationObject; - return; - } - } - - me.animations.push({ - chartInstance: chartInstance, - animationObject: animationObject - }); - - // If there are no animations queued, manually kickstart a digest, for lack of a better word - if (me.animations.length === 1) { - me.requestAnimationFrame(); - } - }, - // Cancel the animation for a given chart instance - cancelAnimation: function(chartInstance) { - var index = helpers.findIndex(this.animations, function(animationWrapper) { - return animationWrapper.chartInstance === chartInstance; - }); - - if (index !== -1) { - this.animations.splice(index, 1); - chartInstance.animating = false; - } - }, - requestAnimationFrame: function() { - var me = this; - if (me.request === null) { - // Skip animation frame requests until the active one is executed. - // This can happen when processing mouse events, e.g. 'mousemove' - // and 'mouseout' events will trigger multiple renders. - me.request = helpers.requestAnimFrame.call(window, function() { - me.request = null; - me.startDigest(); - }); - } - }, - startDigest: function() { - var me = this; - - var startTime = Date.now(); - var framesToDrop = 0; - - if (me.dropFrames > 1) { - framesToDrop = Math.floor(me.dropFrames); - me.dropFrames = me.dropFrames % 1; - } - - var i = 0; - while (i < me.animations.length) { - if (me.animations[i].animationObject.currentStep === null) { - me.animations[i].animationObject.currentStep = 0; - } - - me.animations[i].animationObject.currentStep += 1 + framesToDrop; - - if (me.animations[i].animationObject.currentStep > me.animations[i].animationObject.numSteps) { - me.animations[i].animationObject.currentStep = me.animations[i].animationObject.numSteps; - } - - me.animations[i].animationObject.render(me.animations[i].chartInstance, me.animations[i].animationObject); - if (me.animations[i].animationObject.onAnimationProgress && me.animations[i].animationObject.onAnimationProgress.call) { - me.animations[i].animationObject.onAnimationProgress.call(me.animations[i].chartInstance, me.animations[i]); - } - - if (me.animations[i].animationObject.currentStep === me.animations[i].animationObject.numSteps) { - if (me.animations[i].animationObject.onAnimationComplete && me.animations[i].animationObject.onAnimationComplete.call) { - me.animations[i].animationObject.onAnimationComplete.call(me.animations[i].chartInstance, me.animations[i]); - } - - // executed the last frame. Remove the animation. - me.animations[i].chartInstance.animating = false; - - me.animations.splice(i, 1); - } else { - ++i; - } - } - - var endTime = Date.now(); - var dropFrames = (endTime - startTime) / me.frameDuration; - - me.dropFrames += dropFrames; - - // Do we have more stuff to animate? - if (me.animations.length > 0) { - me.requestAnimationFrame(); - } - } - }; -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.canvasHelpers.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.canvasHelpers.js deleted file mode 100644 index 439df7db..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.canvasHelpers.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - // Global Chart canvas helpers object for drawing items to canvas - var helpers = Chart.canvasHelpers = {}; - - helpers.drawPoint = function(ctx, pointStyle, radius, x, y) { - var type, edgeLength, xOffset, yOffset, height, size; - - if (typeof pointStyle === 'object') { - type = pointStyle.toString(); - if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') { - ctx.drawImage(pointStyle, x - pointStyle.width / 2, y - pointStyle.height / 2); - return; - } - } - - if (isNaN(radius) || radius <= 0) { - return; - } - - switch (pointStyle) { - // Default includes circle - default: - ctx.beginPath(); - ctx.arc(x, y, radius, 0, Math.PI * 2); - ctx.closePath(); - ctx.fill(); - break; - case 'triangle': - ctx.beginPath(); - edgeLength = 3 * radius / Math.sqrt(3); - height = edgeLength * Math.sqrt(3) / 2; - ctx.moveTo(x - edgeLength / 2, y + height / 3); - ctx.lineTo(x + edgeLength / 2, y + height / 3); - ctx.lineTo(x, y - 2 * height / 3); - ctx.closePath(); - ctx.fill(); - break; - case 'rect': - size = 1 / Math.SQRT2 * radius; - ctx.beginPath(); - ctx.fillRect(x - size, y - size, 2 * size, 2 * size); - ctx.strokeRect(x - size, y - size, 2 * size, 2 * size); - break; - case 'rectRot': - size = 1 / Math.SQRT2 * radius; - ctx.beginPath(); - ctx.moveTo(x - size, y); - ctx.lineTo(x, y + size); - ctx.lineTo(x + size, y); - ctx.lineTo(x, y - size); - ctx.closePath(); - ctx.fill(); - break; - case 'cross': - ctx.beginPath(); - ctx.moveTo(x, y + radius); - ctx.lineTo(x, y - radius); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - case 'crossRot': - ctx.beginPath(); - xOffset = Math.cos(Math.PI / 4) * radius; - yOffset = Math.sin(Math.PI / 4) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x - xOffset, y + yOffset); - ctx.lineTo(x + xOffset, y - yOffset); - ctx.closePath(); - break; - case 'star': - ctx.beginPath(); - ctx.moveTo(x, y + radius); - ctx.lineTo(x, y - radius); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - xOffset = Math.cos(Math.PI / 4) * radius; - yOffset = Math.sin(Math.PI / 4) * radius; - ctx.moveTo(x - xOffset, y - yOffset); - ctx.lineTo(x + xOffset, y + yOffset); - ctx.moveTo(x - xOffset, y + yOffset); - ctx.lineTo(x + xOffset, y - yOffset); - ctx.closePath(); - break; - case 'line': - ctx.beginPath(); - ctx.moveTo(x - radius, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - case 'dash': - ctx.beginPath(); - ctx.moveTo(x, y); - ctx.lineTo(x + radius, y); - ctx.closePath(); - break; - } - - ctx.stroke(); - }; -}; diff --git a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.controller.js b/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.controller.js deleted file mode 100644 index 30ba1341..00000000 --- a/static/node_modules/angular-chart.js/tmp/bower_components/chart.js/src/core/core.controller.js +++ /dev/null @@ -1,690 +0,0 @@ -'use strict'; - -module.exports = function(Chart) { - - var helpers = Chart.helpers; - // Create a dictionary of chart types, to allow for extension of existing types - Chart.types = {}; - - // Store a reference to each instance - allowing us to globally resize chart instances on window resize. - // Destroy method on the chart will remove the instance of the chart from this reference. - Chart.instances = {}; - - // Controllers available for dataset visualization eg. bar, line, slice, etc. - Chart.controllers = {}; - - /** - * @class Chart.Controller - * The main controller of a chart. - */ - Chart.Controller = function(instance) { - - this.chart = instance; - this.config = instance.config; - this.options = this.config.options = helpers.configMerge(Chart.defaults.global, Chart.defaults[this.config.type], this.config.options || {}); - this.id = helpers.uid(); - - Object.defineProperty(this, 'data', { - get: function() { - return this.config.data; - } - }); - - // Add the chart instance to the global namespace - Chart.instances[this.id] = this; - - if (this.options.responsive) { - // Silent resize before chart draws - this.resize(true); - } - - this.initialize(); - - return this; - }; - - helpers.extend(Chart.Controller.prototype, /** @lends Chart.Controller */ { - - initialize: function() { - var me = this; - // Before init plugin notification - Chart.plugins.notify('beforeInit', [me]); - - me.bindEvents(); - - // Make sure controllers are built first so that each dataset is bound to an axis before the scales - // are built - me.ensureScalesHaveIDs(); - me.buildOrUpdateControllers(); - me.buildScales(); - me.updateLayout(); - me.resetElements(); - me.initToolTip(); - me.update(); - - // After init plugin notification - Chart.plugins.notify('afterInit', [me]); - - return me; - }, - - clear: function() { - helpers.clear(this.chart); - return this; - }, - - stop: function() { - // Stops any current animation loop occuring - Chart.animationService.cancelAnimation(this); - return this; - }, - - resize: function(silent) { - var me = this; - var chart = me.chart; - var canvas = chart.canvas; - var newWidth = helpers.getMaximumWidth(canvas); - var aspectRatio = chart.aspectRatio; - var newHeight = (me.options.maintainAspectRatio && isNaN(aspectRatio) === false && isFinite(aspectRatio) && aspectRatio !== 0) ? newWidth / aspectRatio : helpers.getMaximumHeight(canvas); - - var sizeChanged = chart.width !== newWidth || chart.height !== newHeight; - - if (!sizeChanged) { - return me; - } - - canvas.width = chart.width = newWidth; - canvas.height = chart.height = newHeight; - - helpers.retinaScale(chart); - - // Notify any plugins about the resize - var newSize = {width: newWidth, height: newHeight}; - Chart.plugins.notify('resize', [me, newSize]); - - // Notify of resize - if (me.options.onResize) { - me.options.onResize(me, newSize); - } - - if (!silent) { - me.stop(); - me.update(me.options.responsiveAnimationDuration); - } - - return me; - }, - - ensureScalesHaveIDs: function() { - var options = this.options; - var scalesOptions = options.scales || {}; - var scaleOptions = options.scale; - - helpers.each(scalesOptions.xAxes, function(xAxisOptions, index) { - xAxisOptions.id = xAxisOptions.id || ('x-axis-' + index); - }); - - helpers.each(scalesOptions.yAxes, function(yAxisOptions, index) { - yAxisOptions.id = yAxisOptions.id || ('y-axis-' + index); - }); - - if (scaleOptions) { - scaleOptions.id = scaleOptions.id || 'scale'; - } - }, - - /** - * Builds a map of scale ID to scale object for future lookup. - */ - buildScales: function() { - var me = this; - var options = me.options; - var scales = me.scales = {}; - var items = []; - - if (options.scales) { - items = items.concat( - (options.scales.xAxes || []).map(function(xAxisOptions) { - return {options: xAxisOptions, dtype: 'category'}; - }), - (options.scales.yAxes || []).map(function(yAxisOptions) { - return {options: yAxisOptions, dtype: 'linear'}; - }) - ); - } - - if (options.scale) { - items.push({options: options.scale, dtype: 'radialLinear', isDefault: true}); - } - - helpers.each(items, function(item) { - var scaleOptions = item.options; - var scaleType = helpers.getValueOrDefault(scaleOptions.type, item.dtype); - var scaleClass = Chart.scaleService.getScaleConstructor(scaleType); - if (!scaleClass) { - return; - } - - var scale = new scaleClass({ - id: scaleOptions.id, - options: scaleOptions, - ctx: me.chart.ctx, - chart: me - }); - - scales[scale.id] = scale; - - // TODO(SB): I think we should be able to remove this custom case (options.scale) - // and consider it as a regular scale part of the "scales"" map only! This would - // make the logic easier and remove some useless? custom code. - if (item.isDefault) { - me.scale = scale; - } - }); - - Chart.scaleService.addScalesToLayout(this); - }, - - updateLayout: function() { - Chart.layoutService.update(this, this.chart.width, this.chart.height); - }, - - buildOrUpdateControllers: function() { - var me = this; - var types = []; - var newControllers = []; - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - var meta = me.getDatasetMeta(datasetIndex); - if (!meta.type) { - meta.type = dataset.type || me.config.type; - } - - types.push(meta.type); - - if (meta.controller) { - meta.controller.updateIndex(datasetIndex); - } else { - meta.controller = new Chart.controllers[meta.type](me, datasetIndex); - newControllers.push(meta.controller); - } - }, me); - - if (types.length > 1) { - for (var i = 1; i < types.length; i++) { - if (types[i] !== types[i - 1]) { - me.isCombo = true; - break; - } - } - } - - return newControllers; - }, - - resetElements: function() { - var me = this; - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - me.getDatasetMeta(datasetIndex).controller.reset(); - }, me); - }, - - update: function(animationDuration, lazy) { - var me = this; - Chart.plugins.notify('beforeUpdate', [me]); - - // In case the entire data object changed - me.tooltip._data = me.data; - - // Make sure dataset controllers are updated and new controllers are reset - var newControllers = me.buildOrUpdateControllers(); - - // Make sure all dataset controllers have correct meta data counts - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - me.getDatasetMeta(datasetIndex).controller.buildOrUpdateElements(); - }, me); - - Chart.layoutService.update(me, me.chart.width, me.chart.height); - - // Apply changes to the dataets that require the scales to have been calculated i.e BorderColor chages - Chart.plugins.notify('afterScaleUpdate', [me]); - - // Can only reset the new controllers after the scales have been updated - helpers.each(newControllers, function(controller) { - controller.reset(); - }); - - me.updateDatasets(); - - // Do this before render so that any plugins that need final scale updates can use it - Chart.plugins.notify('afterUpdate', [me]); - - me.render(animationDuration, lazy); - }, - - /** - * @method beforeDatasetsUpdate - * @description Called before all datasets are updated. If a plugin returns false, - * the datasets update will be cancelled until another chart update is triggered. - * @param {Object} instance the chart instance being updated. - * @returns {Boolean} false to cancel the datasets update. - * @memberof Chart.PluginBase - * @since version 2.1.5 - * @instance - */ - - /** - * @method afterDatasetsUpdate - * @description Called after all datasets have been updated. Note that this - * extension will not be called if the datasets update has been cancelled. - * @param {Object} instance the chart instance being updated. - * @memberof Chart.PluginBase - * @since version 2.1.5 - * @instance - */ - - /** - * Updates all datasets unless a plugin returns false to the beforeDatasetsUpdate - * extension, in which case no datasets will be updated and the afterDatasetsUpdate - * notification will be skipped. - * @protected - * @instance - */ - updateDatasets: function() { - var me = this; - var i, ilen; - - if (Chart.plugins.notify('beforeDatasetsUpdate', [me])) { - for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) { - me.getDatasetMeta(i).controller.update(); - } - - Chart.plugins.notify('afterDatasetsUpdate', [me]); - } - }, - - render: function(duration, lazy) { - var me = this; - Chart.plugins.notify('beforeRender', [me]); - - var animationOptions = me.options.animation; - if (animationOptions && ((typeof duration !== 'undefined' && duration !== 0) || (typeof duration === 'undefined' && animationOptions.duration !== 0))) { - var animation = new Chart.Animation(); - animation.numSteps = (duration || animationOptions.duration) / 16.66; // 60 fps - animation.easing = animationOptions.easing; - - // render function - animation.render = function(chartInstance, animationObject) { - var easingFunction = helpers.easingEffects[animationObject.easing]; - var stepDecimal = animationObject.currentStep / animationObject.numSteps; - var easeDecimal = easingFunction(stepDecimal); - - chartInstance.draw(easeDecimal, stepDecimal, animationObject.currentStep); - }; - - // user events - animation.onAnimationProgress = animationOptions.onProgress; - animation.onAnimationComplete = animationOptions.onComplete; - - Chart.animationService.addAnimation(me, animation, duration, lazy); - } else { - me.draw(); - if (animationOptions && animationOptions.onComplete && animationOptions.onComplete.call) { - animationOptions.onComplete.call(me); - } - } - return me; - }, - - draw: function(ease) { - var me = this; - var easingDecimal = ease || 1; - me.clear(); - - Chart.plugins.notify('beforeDraw', [me, easingDecimal]); - - // Draw all the scales - helpers.each(me.boxes, function(box) { - box.draw(me.chartArea); - }, me); - if (me.scale) { - me.scale.draw(); - } - - Chart.plugins.notify('beforeDatasetsDraw', [me, easingDecimal]); - - // Draw each dataset via its respective controller (reversed to support proper line stacking) - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - me.getDatasetMeta(datasetIndex).controller.draw(ease); - } - }, me, true); - - Chart.plugins.notify('afterDatasetsDraw', [me, easingDecimal]); - - // Finally draw the tooltip - me.tooltip.transition(easingDecimal).draw(); - - Chart.plugins.notify('afterDraw', [me, easingDecimal]); - }, - - // Get the single element that was clicked on - // @return : An object containing the dataset index and element index of the matching element. Also contains the rectangle that was draw - getElementAtEvent: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex); - helpers.each(meta.data, function(element) { - if (element.inRange(eventPosition.x, eventPosition.y)) { - elementsArray.push(element); - return elementsArray; - } - }); - } - }); - - return elementsArray.slice(0, 1); - }, - - getElementsAtEvent: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - var found = function() { - if (me.data.datasets) { - for (var i = 0; i < me.data.datasets.length; i++) { - var meta = me.getDatasetMeta(i); - if (me.isDatasetVisible(i)) { - for (var j = 0; j < meta.data.length; j++) { - if (meta.data[j].inRange(eventPosition.x, eventPosition.y)) { - return meta.data[j]; - } - } - } - } - } - }.call(me); - - if (!found) { - return elementsArray; - } - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex), - element = meta.data[found._index]; - if (element && !element._view.skip) { - elementsArray.push(element); - } - } - }, me); - - return elementsArray; - }, - - getElementsAtXAxis: function(e) { - var me = this; - var eventPosition = helpers.getRelativePosition(e, me.chart); - var elementsArray = []; - - var found = function() { - if (me.data.datasets) { - for (var i = 0; i < me.data.datasets.length; i++) { - var meta = me.getDatasetMeta(i); - if (me.isDatasetVisible(i)) { - for (var j = 0; j < meta.data.length; j++) { - if (meta.data[j].inLabelRange(eventPosition.x, eventPosition.y)) { - return meta.data[j]; - } - } - } - } - } - }.call(me); - - if (!found) { - return elementsArray; - } - - helpers.each(me.data.datasets, function(dataset, datasetIndex) { - if (me.isDatasetVisible(datasetIndex)) { - var meta = me.getDatasetMeta(datasetIndex); - var index = helpers.findIndex(meta.data, function(it) { - return found._model.x === it._model.x; - }); - if (index !== -1 && !meta.data[index]._view.skip) { - elementsArray.push(meta.data[index]); - } - } - }, me); - - return elementsArray; - }, - - getElementsAtEventForMode: function(e, mode) { - var me = this; - switch (mode) { - case 'single': - return me.getElementAtEvent(e); - case 'label': - return me.getElementsAtEvent(e); - case 'dataset': - return me.getDatasetAtEvent(e); - case 'x-axis': - return me.getElementsAtXAxis(e); - default: - return e; - } - }, - - getDatasetAtEvent: function(e) { - var elementsArray = this.getElementAtEvent(e); - - if (elementsArray.length > 0) { - elementsArray = this.getDatasetMeta(elementsArray[0]._datasetIndex).data; - } - - return elementsArray; - }, - - getDatasetMeta: function(datasetIndex) { - var me = this; - var dataset = me.data.datasets[datasetIndex]; - if (!dataset._meta) { - dataset._meta = {}; - } - - var meta = dataset._meta[me.id]; - if (!meta) { - meta = dataset._meta[me.id] = { - type: null, - data: [], - dataset: null, - controller: null, - hidden: null, // See isDatasetVisible() comment - xAxisID: null, - yAxisID: null - }; - } - - return meta; - }, - - getVisibleDatasetCount: function() { - var count = 0; - for (var i = 0, ilen = this.data.datasets.length; i