diff --git a/package.json b/package.json
index accdff5..1cedb7b 100644
--- a/package.json
+++ b/package.json
@@ -3,11 +3,12 @@
"version": "1.1.1",
"description": "IonicMaterialDesign: An Ionic project",
"dependencies": {
+ "angular-chart.js": "^1.0.2",
"gulp": "^3.5.6",
- "gulp-sass": "^2.0.4",
"gulp-concat": "^2.2.0",
"gulp-minify-css": "^0.3.0",
- "gulp-rename": "^1.2.0"
+ "gulp-rename": "^1.2.0",
+ "gulp-sass": "^2.0.4"
},
"devDependencies": {
"bower": "^1.3.3",
diff --git a/www/css/custom_style.css b/www/css/custom_style.css
index bebbffe..7d55cba 100644
--- a/www/css/custom_style.css
+++ b/www/css/custom_style.css
@@ -15,6 +15,21 @@ md-input-container {
}
+.divcenter {
+ margin-left: auto;
+ margin-right: auto;
+ display: block;
+}
+
+/* Listenbackground */
+.listbackodd{
+ background-color: #F5F5F5;
+}
+
+.listbackeven{
+ background-color: #FFFFFF;
+}
+
.image-list-thumb {
padding: 2px 2px 2px 2px;
height: 64px;
diff --git a/www/img/arrow_down.png b/www/img/arrow_down.png
new file mode 100644
index 0000000..3532f3f
Binary files /dev/null and b/www/img/arrow_down.png differ
diff --git a/www/img/bonbon.png b/www/img/bonbon.png
new file mode 100644
index 0000000..dd93463
Binary files /dev/null and b/www/img/bonbon.png differ
diff --git a/www/index.html b/www/index.html
index 45b1f6f..ac66425 100644
--- a/www/index.html
+++ b/www/index.html
@@ -33,6 +33,8 @@
+
+
diff --git a/www/js/app.js b/www/js/app.js
index 7ea921e..6bdff46 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -39,7 +39,7 @@ window.globalVariable = {
};// End Global variable
-angular.module('starter', ['ionic','ngIOS9UIWebViewPatch','starter.controllers', 'starter.services', 'ngMaterial', 'ngMessages', 'ngCordova'])
+angular.module('starter', ['ionic','ngIOS9UIWebViewPatch','starter.controllers', 'starter.services', 'ngMaterial', 'ngMessages', 'ngCordova','chart.js'])
.run(function ($ionicPlatform, $cordovaSQLite, $rootScope, $ionicHistory, $state, $mdDialog, $mdBottomSheet) {
//Create database table of contracts by using sqlite database.
diff --git a/www/lib/angular-chart.js/.codeclimate.yml b/www/lib/angular-chart.js/.codeclimate.yml
new file mode 100644
index 0000000..c41c0fa
--- /dev/null
+++ b/www/lib/angular-chart.js/.codeclimate.yml
@@ -0,0 +1,10 @@
+languages:
+ Ruby: false
+ JavaScript: true
+ PHP: false
+exclude_paths:
+- "dist/*"
+- "node_modules/*"
+- "gulpfile.js"
+- "examples/*"
+- "test/fixtures/coverage.js"
diff --git a/www/lib/angular-chart.js/.dockerignore b/www/lib/angular-chart.js/.dockerignore
new file mode 100644
index 0000000..b509c88
--- /dev/null
+++ b/www/lib/angular-chart.js/.dockerignore
@@ -0,0 +1,2 @@
+coverage/
+node_modules/
diff --git a/www/lib/angular-chart.js/.editorconfig b/www/lib/angular-chart.js/.editorconfig
new file mode 100644
index 0000000..8565360
--- /dev/null
+++ b/www/lib/angular-chart.js/.editorconfig
@@ -0,0 +1,18 @@
+# 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/www/lib/angular-chart.js/.jscsrc b/www/lib/angular-chart.js/.jscsrc
new file mode 100644
index 0000000..c2c7e3c
--- /dev/null
+++ b/www/lib/angular-chart.js/.jscsrc
@@ -0,0 +1,82 @@
+{
+ "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/www/lib/angular-chart.js/.jshintignore b/www/lib/angular-chart.js/.jshintignore
new file mode 100644
index 0000000..283d79d
--- /dev/null
+++ b/www/lib/angular-chart.js/.jshintignore
@@ -0,0 +1,9 @@
+node_modules/
+dist/
+tmp/
+examples/bundle.js
+examples/commonjs.bundle.js
+examples/smoothscroll.min.js
+coverage/
+test/fixtures/coverage.js
+
diff --git a/www/lib/angular-chart.js/.jshintrc b/www/lib/angular-chart.js/.jshintrc
new file mode 100644
index 0000000..cd570bb
--- /dev/null
+++ b/www/lib/angular-chart.js/.jshintrc
@@ -0,0 +1,24 @@
+{
+ "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/www/lib/angular-chart.js/.node-version b/www/lib/angular-chart.js/.node-version
new file mode 100644
index 0000000..9e3a933
--- /dev/null
+++ b/www/lib/angular-chart.js/.node-version
@@ -0,0 +1 @@
+4.4.3
diff --git a/www/lib/angular-chart.js/.npmignore b/www/lib/angular-chart.js/.npmignore
new file mode 100644
index 0000000..2421b1d
--- /dev/null
+++ b/www/lib/angular-chart.js/.npmignore
@@ -0,0 +1,6 @@
+.idea/
+node_modules/
+test/fixtures/shots/
+coverage/
+examples/bundle.js
+examples/commonjs.bundle.js
diff --git a/www/lib/angular-chart.js/.travis.yml b/www/lib/angular-chart.js/.travis.yml
new file mode 100644
index 0000000..e8a9c96
--- /dev/null
+++ b/www/lib/angular-chart.js/.travis.yml
@@ -0,0 +1,19 @@
+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/www/lib/angular-chart.js/CONTRIBUTING.md b/www/lib/angular-chart.js/CONTRIBUTING.md
new file mode 100644
index 0000000..3f2f6b2
--- /dev/null
+++ b/www/lib/angular-chart.js/CONTRIBUTING.md
@@ -0,0 +1,9 @@
+### 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/www/lib/angular-chart.js/Dockerfile b/www/lib/angular-chart.js/Dockerfile
new file mode 100644
index 0000000..267c61b
--- /dev/null
+++ b/www/lib/angular-chart.js/Dockerfile
@@ -0,0 +1,7 @@
+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/www/lib/angular-chart.js/ISSUE_TEMPLATE.md b/www/lib/angular-chart.js/ISSUE_TEMPLATE.md
new file mode 100644
index 0000000..8bc7953
--- /dev/null
+++ b/www/lib/angular-chart.js/ISSUE_TEMPLATE.md
@@ -0,0 +1,39 @@
+
+
+### 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/www/lib/angular-chart.js/LICENSE b/www/lib/angular-chart.js/LICENSE
new file mode 100644
index 0000000..f3bd714
--- /dev/null
+++ b/www/lib/angular-chart.js/LICENSE
@@ -0,0 +1,27 @@
+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/www/lib/angular-chart.js/PULL_REQUEST_TEMPLATE.md b/www/lib/angular-chart.js/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..a650830
--- /dev/null
+++ b/www/lib/angular-chart.js/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,15 @@
+
+
+### 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/www/lib/angular-chart.js/README.md b/www/lib/angular-chart.js/README.md
new file mode 100644
index 0000000..6c7e340
--- /dev/null
+++ b/www/lib/angular-chart.js/README.md
@@ -0,0 +1,249 @@
+# angular-chart.js
+
+[](http://badge.fury.io/bo/angular-chart.js)
+[](http://badge.fury.io/js/angular-chart.js)
+[](https://travis-ci.org/jtblin/angular-chart.js)
+[](https://www.codacy.com/app/jtblin/angular-chart-js)
+[](https://codeclimate.com/github/jtblin/angular-chart.js)
+[](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 support has been dropped in Chart.js since version 2.2.0 but you can still use it with Bower thanks to bower-npm-resolver if needed but using npm is preferred.
+
+First, add the resolver in your .bowerrc file:
+
+ {
+ "resolvers": [
+ "bower-npm-resolver"
+ ]
+ }
+
+Then:
+
+ npm install -g bower-npm-resolver
+ 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.
+
+## 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/www/lib/angular-chart.js/angular-chart.js b/www/lib/angular-chart.js/angular-chart.js
new file mode 100644
index 0000000..12c4d32
--- /dev/null
+++ b/www/lib/angular-chart.js/angular-chart.js
@@ -0,0 +1,365 @@
+(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' || 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.extend(options, customOptions);
+ return;
+ }
+ // Set options for the specific chart
+ options[type] = angular.extend(options[type] || {}, customOptions);
+ };
+
+ 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 = null;
+ return function (evt) {
+ var atEvent = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;
+ if (atEvent) {
+ var activePoints = atEvent.call(scope.chart, evt);
+ if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {
+ lastState = activePoints;
+ scope[action](activePoints, evt);
+ }
+ }
+ };
+ }
+
+ 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) {
+ if (typeof color === 'object' && color !== null) return color;
+ if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));
+ return getRandomColor();
+ }
+
+ function getRandomColor () {
+ var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];
+ return getColor(color);
+ }
+
+ function getColor (color) {
+ return {
+ backgroundColor: rgba(color, 0.2),
+ pointBackgroundColor: rgba(color, 1),
+ pointHoverBackgroundColor: rgba(color, 0.8),
+ borderColor: rgba(color, 1),
+ pointBorderColor: '#fff',
+ pointHoverBorderColor: rgba(color, 1)
+ };
+ }
+
+ 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 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/www/lib/angular-chart.js/bower.json b/www/lib/angular-chart.js/bower.json
new file mode 100644
index 0000000..1faa433
--- /dev/null
+++ b/www/lib/angular-chart.js/bower.json
@@ -0,0 +1,51 @@
+{
+ "name": "angular-chart.js",
+ "version": "1.0.2",
+ "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": "npm:chart.js#2.x"
+ },
+ "overrides" : {
+ "chart.js": {
+ "main": [
+ "dist/Chart.bundle.min.js"
+ ]
+ }
+ }
+}
diff --git a/www/lib/angular-chart.js/dist/angular-chart.js b/www/lib/angular-chart.js/dist/angular-chart.js
new file mode 100644
index 0000000..2368304
--- /dev/null
+++ b/www/lib/angular-chart.js/dist/angular-chart.js
@@ -0,0 +1,374 @@
+/*!
+ * angular-chart.js - An angular.js wrapper for Chart.js
+ * http://jtblin.github.io/angular-chart.js/
+ * Version: 1.0.2
+ *
+ * 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' || 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.extend(options, customOptions);
+ return;
+ }
+ // Set options for the specific chart
+ options[type] = angular.extend(options[type] || {}, customOptions);
+ };
+
+ 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 = null;
+ return function (evt) {
+ var atEvent = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;
+ if (atEvent) {
+ var activePoints = atEvent.call(scope.chart, evt);
+ if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {
+ lastState = activePoints;
+ scope[action](activePoints, evt);
+ }
+ }
+ };
+ }
+
+ 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) {
+ if (typeof color === 'object' && color !== null) return color;
+ if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));
+ return getRandomColor();
+ }
+
+ function getRandomColor () {
+ var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];
+ return getColor(color);
+ }
+
+ function getColor (color) {
+ return {
+ backgroundColor: rgba(color, 0.2),
+ pointBackgroundColor: rgba(color, 1),
+ pointHoverBackgroundColor: rgba(color, 0.8),
+ borderColor: rgba(color, 1),
+ pointBorderColor: '#fff',
+ pointHoverBorderColor: rgba(color, 1)
+ };
+ }
+
+ 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 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/www/lib/angular-chart.js/dist/angular-chart.js.tar.gz b/www/lib/angular-chart.js/dist/angular-chart.js.tar.gz
new file mode 100644
index 0000000..0e003c9
Binary files /dev/null and b/www/lib/angular-chart.js/dist/angular-chart.js.tar.gz differ
diff --git a/www/lib/angular-chart.js/dist/angular-chart.min.js b/www/lib/angular-chart.js/dist/angular-chart.min.js
new file mode 100644
index 0000000..354535c
--- /dev/null
+++ b/www/lib/angular-chart.js/dist/angular-chart.min.js
@@ -0,0 +1,11 @@
+/*!
+ * angular-chart.js - An angular.js wrapper for Chart.js
+ * http://jtblin.github.io/angular-chart.js/
+ * Version: 1.0.2
+ *
+ * Copyright 2016 Jerome Touffe-Blin
+ * Released under the BSD-2-Clause license
+ * https://github.com/jtblin/angular-chart.js/blob/master/LICENSE
+ */
+!function(t){"use strict";if("object"==typeof exports)module.exports=t("undefined"!=typeof angular?angular:require("angular"),"undefined"!=typeof Chart?Chart:require("chart.js"));else if("function"==typeof define&&define.amd)define(["angular","chart"],t);else{if("undefined"==typeof angular||"undefined"==typeof Chart)throw new Error("Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/");t(angular,Chart)}}(function(t,r){"use strict";function a(){var a={responsive:!0},e={Chart:r,getOptions:function(r){var e=r&&a[r]||{};return t.extend({},a,e)}};this.setOptions=function(r,e){return e?void(a[r]=t.extend(a[r]||{},e)):(e=r,void(a=t.extend(a,e)))},this.$get=function(){return e}}function e(a,e){function o(t,r,e){var n=w(t,r);if(p(r)&&$(t,r,e,n)){var o=e[0],c=o.getContext("2d");r.chartGetColor=C(r);var i=y(t,r);F(r),r.chart=new a.Chart(c,{type:t,data:i,options:n}),r.$emit("chart-create",r.chart),D(o,r)}}function c(t,r){return!!(t&&r&&t.length&&r.length)&&(Array.isArray(t[0])?t.length===r.length&&t.every(function(t,a){return t.length===r[a].length}):r.reduce(i,0)>0&&t.length===r.length)}function i(t,r){return t+r}function u(r,a,e){var n=null;return function(o){var c=r.chart.getElementsAtEvent||r.chart.getPointsAtEvent;if(c){var i=c.call(r.chart,o);e!==!1&&t.equals(n,i)!==!1||(n=i,r[a](i,o))}}}function h(e,n){for(var o=t.copy(n.chartColors||a.getOptions(e).chartColors||r.defaults.global.colors),c=o.length>16&255,e=r>>8&255,n=255&r;return[a,e,n]}function p(t){return t.chartData&&t.chartData.length}function C(t){return"function"==typeof t.chartGetColor?t.chartGetColor:s}function y(t,r){var a=h(t,r);return Array.isArray(r.chartData[0])?b(r.chartLabels,r.chartData,r.chartSeries||[],a,r.chartDatasetOverride):m(r.chartLabels,r.chartData,a,r.chartDatasetOverride)}function b(r,a,e,n,o){return{labels:r,datasets:a.map(function(r,a){var c=t.extend({},n[a],{label:e[a],data:r});return o&&o.length>=a&&t.merge(c,o[a]),c})}}function m(r,a,e,n){var o={labels:r,datasets:[{data:a,backgroundColor:e.map(function(t){return t.pointBackgroundColor}),hoverBackgroundColor:e.map(function(t){return t.backgroundColor})}]};return n&&t.merge(o.datasets[0],n),o}function w(r,e){return t.extend({},a.getOptions(r),e.chartOptions)}function D(r,a){r.onclick=a.chartClick?u(a,"chartClick",!1):t.noop,r.onmousemove=a.chartHover?u(a,"chartHover",!0):t.noop}function B(t,r){Array.isArray(r.chartData[0])?r.chart.data.datasets.forEach(function(r,a){r.data=t[a]}):r.chart.data.datasets[0].data=t,r.chart.update(),r.$emit("chart-update",r.chart)}function A(t){return!t||Array.isArray(t)&&!t.length||"object"==typeof t&&!Object.keys(t).length}function $(t,r,a,n){return!n.responsive||0!==a[0].clientHeight||(e(function(){o(t,r,a)},50,!1),!1)}function F(t){t.chart&&(t.chart.destroy(),t.$emit("chart-destroy",t.chart))}return function(r){return{restrict:"CA",scope:{chartGetColor:"=?",chartType:"=",chartData:"=?",chartLabels:"=?",chartOptions:"=?",chartSeries:"=?",chartColors:"=?",chartClick:"=?",chartHover:"=?",chartDatasetOverride:"=?"},link:function(a,e){function i(t,n){if(!t||!t.length||Array.isArray(t[0])&&!t[0].length)return void F(a);var i=r||a.chartType;if(i)return a.chart&&c(t,n)?B(t,a):void o(i,a,e)}function u(n,c){if(!A(n)&&!t.equals(n,c)){var i=r||a.chartType;i&&o(i,a,e)}}function h(r,n){A(r)||t.equals(r,n)||o(r,a,e)}n&&window.G_vmlCanvasManager.initElement(e[0]),a.$watch("chartData",i,!0),a.$watch("chartSeries",u,!0),a.$watch("chartLabels",u,!0),a.$watch("chartOptions",u,!0),a.$watch("chartColors",u,!0),a.$watch("chartDatasetOverride",u,!0),a.$watch("chartType",h,!1),a.$on("$destroy",function(){F(a)}),a.$on("$resize",function(){a.chart&&a.chart.resize()})}}}}r.defaults.global.multiTooltipTemplate="<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>",r.defaults.global.tooltips.mode="label",r.defaults.global.elements.line.borderWidth=2,r.defaults.global.elements.rectangle.borderWidth=2,r.defaults.global.legend.display=!1,r.defaults.global.colors=["#97BBCD","#DCDCDC","#F7464A","#46BFBD","#FDB45C","#949FB1","#4D5360"];var n="object"==typeof window.G_vmlCanvasManager&&null!==window.G_vmlCanvasManager&&"function"==typeof window.G_vmlCanvasManager.initElement;return n&&(r.defaults.global.animation=!1),t.module("chart.js",[]).provider("ChartJs",a).factory("ChartJsFactory",["ChartJs","$timeout",e]).directive("chartBase",["ChartJsFactory",function(t){return new t}]).directive("chartLine",["ChartJsFactory",function(t){return new t("line")}]).directive("chartBar",["ChartJsFactory",function(t){return new t("bar")}]).directive("chartHorizontalBar",["ChartJsFactory",function(t){return new t("horizontalBar")}]).directive("chartRadar",["ChartJsFactory",function(t){return new t("radar")}]).directive("chartDoughnut",["ChartJsFactory",function(t){return new t("doughnut")}]).directive("chartPie",["ChartJsFactory",function(t){return new t("pie")}]).directive("chartPolarArea",["ChartJsFactory",function(t){return new t("polarArea")}]).directive("chartBubble",["ChartJsFactory",function(t){return new t("bubble")}]).name});
+//# sourceMappingURL=angular-chart.min.js.map
diff --git a/www/lib/angular-chart.js/dist/angular-chart.min.js.map b/www/lib/angular-chart.js/dist/angular-chart.min.js.map
new file mode 100644
index 0000000..c4831f3
--- /dev/null
+++ b/www/lib/angular-chart.js/dist/angular-chart.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["angular-chart.js"],"names":["factory","exports","module","angular","require","Chart","define","amd","Error","ChartJsProvider","options","responsive","ChartJs","getOptions","type","typeOptions","extend","this","setOptions","customOptions","$get","ChartJsFactory","$timeout","createChart","scope","elem","getChartOptions","hasData","canDisplay","cvs","ctx","getContext","chartGetColor","getChartColorFn","data","getChartData","destroyChart","chart","$emit","bindEvents","canUpdateChart","newVal","oldVal","length","Array","isArray","every","element","index","reduce","sum","carry","val","getEventHandler","action","triggerOnlyOnChange","lastState","evt","atEvent","getElementsAtEvent","getPointsAtEvent","activePoints","call","equals","getColors","colors","copy","chartColors","defaults","global","notEnoughColors","chartData","push","map","convertColor","color","getColor","hexToRgb","substr","getRandomColor","getRandomInt","backgroundColor","rgba","pointBackgroundColor","pointHoverBackgroundColor","borderColor","pointBorderColor","pointHoverBorderColor","min","max","Math","floor","random","alpha","useExcanvas","join","concat","hex","bigint","parseInt","r","g","b","getDataSets","chartLabels","chartSeries","chartDatasetOverride","getData","labels","series","datasetOverride","datasets","item","i","dataset","label","merge","hoverBackgroundColor","chartOptions","onclick","chartClick","noop","onmousemove","chartHover","updateChart","values","forEach","update","isEmpty","value","Object","keys","clientHeight","destroy","restrict","chartType","link","watchData","watchOther","watchType","window","G_vmlCanvasManager","initElement","$watch","$on","resize","multiTooltipTemplate","tooltips","mode","elements","line","borderWidth","rectangle","legend","display","animation","provider","directive","name"],"mappings":";;;;;;;;;CAAA,SAAAA,GACA,YACA,IAAA,gBAAAC,SAEAC,OAAAD,QAAAD,EACA,mBAAAG,SAAAA,QAAAC,QAAA,WACA,mBAAAC,OAAAA,MAAAD,QAAA,iBACA,IAAA,kBAAAE,SAAAA,OAAAC,IAEAD,QAAA,UAAA,SAAAN,OACA,CAEA,GAAA,mBAAAG,UAAA,mBAAAE,OACA,KAAA,IAAAG,OAAA,uFACAR,GAAAG,QAAAE,SAEA,SAAAF,EAAAE,GACA,YA8CA,SAAAI,KACA,GAAAC,IAAAC,YAAA,GACAC,GACAP,MAAAA,EACAQ,WAAA,SAAAC,GACA,GAAAC,GAAAD,GAAAJ,EAAAI,MACA,OAAAX,GAAAa,UAAAN,EAAAK,IAOAE,MAAAC,WAAA,SAAAJ,EAAAK,GAEA,MAAAA,QAMAT,EAAAI,GAAAX,EAAAa,OAAAN,EAAAI,OAAAK,KALAA,EAAAL,OACAJ,EAAAP,EAAAa,OAAAN,EAAAS,MAOAF,KAAAG,KAAA,WACA,MAAAR,IAIA,QAAAS,GAAAT,EAAAU,GAsEA,QAAAC,GAAAT,EAAAU,EAAAC,GACA,GAAAf,GAAAgB,EAAAZ,EAAAU,EACA,IAAAG,EAAAH,IAAAI,EAAAd,EAAAU,EAAAC,EAAAf,GAAA,CAEA,GAAAmB,GAAAJ,EAAA,GACAK,EAAAD,EAAAE,WAAA,KAEAP,GAAAQ,cAAAC,EAAAT,EACA,IAAAU,GAAAC,EAAArB,EAAAU,EAIAY,GAAAZ,GAEAA,EAAAa,MAAA,GAAAzB,GAAAP,MAAAyB,GACAhB,KAAAA,EACAoB,KAAAA,EACAxB,QAAAA,IAEAc,EAAAc,MAAA,eAAAd,EAAAa,OACAE,EAAAV,EAAAL,IAGA,QAAAgB,GAAAC,EAAAC,GACA,SAAAD,GAAAC,GAAAD,EAAAE,QAAAD,EAAAC,UACAC,MAAAC,QAAAJ,EAAA,IACAA,EAAAE,SAAAD,EAAAC,QAAAF,EAAAK,MAAA,SAAAC,EAAAC,GACA,MAAAD,GAAAJ,SAAAD,EAAAM,GAAAL,SACAD,EAAAO,OAAAC,EAAA,GAAA,GAAAT,EAAAE,SAAAD,EAAAC,QAKA,QAAAO,GAAAC,EAAAC,GACA,MAAAD,GAAAC,EAGA,QAAAC,GAAA7B,EAAA8B,EAAAC,GACA,GAAAC,GAAA,IACA,OAAA,UAAAC,GACA,GAAAC,GAAAlC,EAAAa,MAAAsB,oBAAAnC,EAAAa,MAAAuB,gBACA,IAAAF,EAAA,CACA,GAAAG,GAAAH,EAAAI,KAAAtC,EAAAa,MAAAoB,EACAF,MAAA,GAAApD,EAAA4D,OAAAP,EAAAK,MAAA,IACAL,EAAAK,EACArC,EAAA8B,GAAAO,EAAAJ,MAMA,QAAAO,GAAAlD,EAAAU,GAMA,IALA,GAAAyC,GAAA9D,EAAA+D,KAAA1C,EAAA2C,aACAvD,EAAAC,WAAAC,GAAAqD,aACA9D,EAAA+D,SAAAC,OAAAJ,QAEAK,EAAAL,EAAAtB,OAAAnB,EAAA+C,UAAA5B,OACAsB,EAAAtB,OAAAnB,EAAA+C,UAAA5B,QACAsB,EAAAO,KAAAhD,EAAAQ,gBAKA,OADAsC,KAAA9C,EAAA2C,YAAAF,GACAA,EAAAQ,IAAAC,GAGA,QAAAA,GAAAC,GACA,MAAA,gBAAAA,IAAA,OAAAA,EAAAA,EACA,gBAAAA,IAAA,MAAAA,EAAA,GAAAC,EAAAC,EAAAF,EAAAG,OAAA,KACAC,IAGA,QAAAA,KACA,GAAAJ,IAAAK,EAAA,EAAA,KAAAA,EAAA,EAAA,KAAAA,EAAA,EAAA,KACA,OAAAJ,GAAAD,GAGA,QAAAC,GAAAD,GACA,OACAM,gBAAAC,EAAAP,EAAA,IACAQ,qBAAAD,EAAAP,EAAA,GACAS,0BAAAF,EAAAP,EAAA,IACAU,YAAAH,EAAAP,EAAA,GACAW,iBAAA,OACAC,sBAAAL,EAAAP,EAAA,IAIA,QAAAK,GAAAQ,EAAAC,GACA,MAAAC,MAAAC,MAAAD,KAAAE,UAAAH,EAAAD,EAAA,IAAAA,EAGA,QAAAN,GAAAP,EAAAkB,GAEA,MAAAC,GAAA,OAAAnB,EAAAoB,KAAA,KAAA,IAAA,QAAApB,EAAAqB,OAAAH,GAAAE,KAAA,KAAA,IAIA,QAAAlB,GAAAoB,GACA,GAAAC,GAAAC,SAAAF,EAAA,IACAG,EAAAF,GAAA,GAAA,IACAG,EAAAH,GAAA,EAAA,IACAI,EAAA,IAAAJ,CAEA,QAAAE,EAAAC,EAAAC,GAGA,QAAA3E,GAAAH,GACA,MAAAA,GAAA+C,WAAA/C,EAAA+C,UAAA5B,OAGA,QAAAV,GAAAT,GACA,MAAA,kBAAAA,GAAAQ,cAAAR,EAAAQ,cAAA+C,EAGA,QAAA5C,GAAArB,EAAAU,GACA,GAAAyC,GAAAD,EAAAlD,EAAAU,EACA,OAAAoB,OAAAC,QAAArB,EAAA+C,UAAA,IACAgC,EAAA/E,EAAAgF,YAAAhF,EAAA+C,UAAA/C,EAAAiF,gBAAAxC,EAAAzC,EAAAkF,sBACAC,EAAAnF,EAAAgF,YAAAhF,EAAA+C,UAAAN,EAAAzC,EAAAkF,sBAGA,QAAAH,GAAAK,EAAA1E,EAAA2E,EAAA5C,EAAA6C,GACA,OACAF,OAAAA,EACAG,SAAA7E,EAAAuC,IAAA,SAAAuC,EAAAC,GACA,GAAAC,GAAA/G,EAAAa,UAAAiD,EAAAgD,IACAE,MAAAN,EAAAI,GACA/E,KAAA8E,GAKA,OAHAF,IAAAA,EAAAnE,QAAAsE,GACA9G,EAAAiH,MAAAF,EAAAJ,EAAAG,IAEAC,KAKA,QAAAP,GAAAC,EAAA1E,EAAA+B,EAAA6C,GACA,GAAAI,IACAN,OAAAA,EACAG,WACA7E,KAAAA,EACA+C,gBAAAhB,EAAAQ,IAAA,SAAAE,GACA,MAAAA,GAAAQ,uBAEAkC,qBAAApD,EAAAQ,IAAA,SAAAE,GACA,MAAAA,GAAAM,oBAOA,OAHA6B,IACA3G,EAAAiH,MAAAF,EAAAH,SAAA,GAAAD,GAEAI,EAGA,QAAAxF,GAAAZ,EAAAU,GACA,MAAArB,GAAAa,UAAAJ,EAAAC,WAAAC,GAAAU,EAAA8F,cAGA,QAAA/E,GAAAV,EAAAL,GACAK,EAAA0F,QAAA/F,EAAAgG,WAAAnE,EAAA7B,EAAA,cAAA,GAAArB,EAAAsH,KACA5F,EAAA6F,YAAAlG,EAAAmG,WAAAtE,EAAA7B,EAAA,cAAA,GAAArB,EAAAsH,KAGA,QAAAG,GAAAC,EAAArG,GACAoB,MAAAC,QAAArB,EAAA+C,UAAA,IACA/C,EAAAa,MAAAH,KAAA6E,SAAAe,QAAA,SAAAZ,EAAAD,GACAC,EAAAhF,KAAA2F,EAAAZ,KAGAzF,EAAAa,MAAAH,KAAA6E,SAAA,GAAA7E,KAAA2F,EAGArG,EAAAa,MAAA0F,SACAvG,EAAAc,MAAA,eAAAd,EAAAa,OAGA,QAAA2F,GAAAC,GACA,OAAAA,GACArF,MAAAC,QAAAoF,KAAAA,EAAAtF,QACA,gBAAAsF,KAAAC,OAAAC,KAAAF,GAAAtF,OAGA,QAAAf,GAAAd,EAAAU,EAAAC,EAAAf,GAEA,OAAAA,EAAAC,YAAA,IAAAc,EAAA,GAAA2G,eACA9G,EAAA,WACAC,EAAAT,EAAAU,EAAAC,IACA,IAAA,IACA,GAKA,QAAAW,GAAAZ,GACAA,EAAAa,QACAb,EAAAa,MAAAgG,UACA7G,EAAAc,MAAA,gBAAAd,EAAAa,QA5QA,MAAA,UAAAvB,GACA,OACAwH,SAAA,KACA9G,OACAQ,cAAA,KACAuG,UAAA,IACAhE,UAAA,KACAiC,YAAA,KACAc,aAAA,KACAb,YAAA,KACAtC,YAAA,KACAqD,WAAA,KACAG,WAAA,KACAjB,qBAAA,MAEA8B,KAAA,SAAAhH,EAAAC,GAoBA,QAAAgH,GAAAhG,EAAAC,GACA,IAAAD,IAAAA,EAAAE,QAAAC,MAAAC,QAAAJ,EAAA,MAAAA,EAAA,GAAAE,OAEA,WADAP,GAAAZ,EAGA,IAAA+G,GAAAzH,GAAAU,EAAA+G,SACA,IAAAA,EAEA,MAAA/G,GAAAa,OAAAG,EAAAC,EAAAC,GACAkF,EAAAnF,EAAAjB,OAEAD,GAAAgH,EAAA/G,EAAAC,GAGA,QAAAiH,GAAAjG,EAAAC,GACA,IAAAsF,EAAAvF,KACAtC,EAAA4D,OAAAtB,EAAAC,GAAA,CACA,GAAA6F,GAAAzH,GAAAU,EAAA+G,SACAA,IAIAhH,EAAAgH,EAAA/G,EAAAC,IAGA,QAAAkH,GAAAlG,EAAAC,GACAsF,EAAAvF,IACAtC,EAAA4D,OAAAtB,EAAAC,IACAnB,EAAAkB,EAAAjB,EAAAC,GA/CAqE,GAAA8C,OAAAC,mBAAAC,YAAArH,EAAA,IAGAD,EAAAuH,OAAA,YAAAN,GAAA,GACAjH,EAAAuH,OAAA,cAAAL,GAAA,GACAlH,EAAAuH,OAAA,cAAAL,GAAA,GACAlH,EAAAuH,OAAA,eAAAL,GAAA,GACAlH,EAAAuH,OAAA,cAAAL,GAAA,GACAlH,EAAAuH,OAAA,uBAAAL,GAAA,GACAlH,EAAAuH,OAAA,YAAAJ,GAAA,GAEAnH,EAAAwH,IAAA,WAAA,WACA5G,EAAAZ,KAGAA,EAAAwH,IAAA,UAAA,WACAxH,EAAAa,OAAAb,EAAAa,MAAA4G,cA1GA5I,EAAA+D,SAAAC,OAAA6E,qBAAA,6DACA7I,EAAA+D,SAAAC,OAAA8E,SAAAC,KAAA,QACA/I,EAAA+D,SAAAC,OAAAgF,SAAAC,KAAAC,YAAA,EACAlJ,EAAA+D,SAAAC,OAAAgF,SAAAG,UAAAD,YAAA,EACAlJ,EAAA+D,SAAAC,OAAAoF,OAAAC,SAAA,EACArJ,EAAA+D,SAAAC,OAAAJ,QACA,UACA,UACA,UACA,UACA,UACA,UACA,UAGA,IAAA6B,GAAA,gBAAA8C,QAAAC,oBACA,OAAAD,OAAAC,oBACA,kBAAAD,QAAAC,mBAAAC,WAIA,OAFAhD,KAAAzF,EAAA+D,SAAAC,OAAAsF,WAAA,GAEAxJ,EAAAD,OAAA,eACA0J,SAAA,UAAAnJ,GACAT,QAAA,kBAAA,UAAA,WAAAqB,IACAwI,UAAA,aAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,MACAwI,UAAA,aAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,WACAwI,UAAA,YAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,UACAwI,UAAA,sBAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,oBACAwI,UAAA,cAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,YACAwI,UAAA,iBAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,eACAwI,UAAA,YAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,UACAwI,UAAA,kBAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,gBACAwI,UAAA,eAAA,iBAAA,SAAAxI,GAAA,MAAA,IAAAA,GAAA,aACAyI","file":"angular-chart.min.js","sourcesContent":["(function (factory) {\n 'use strict';\n if (typeof exports === 'object') {\n // Node/CommonJS\n module.exports = factory(\n typeof angular !== 'undefined' ? angular : require('angular'),\n typeof Chart !== 'undefined' ? Chart : require('chart.js'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['angular', 'chart'], factory);\n } else {\n // Browser globals\n if (typeof angular === 'undefined' || typeof Chart === 'undefined')\n throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');\n factory(angular, Chart);\n }\n}(function (angular, Chart) {\n 'use strict';\n\n Chart.defaults.global.multiTooltipTemplate = '<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';\n Chart.defaults.global.tooltips.mode = 'label';\n Chart.defaults.global.elements.line.borderWidth = 2;\n Chart.defaults.global.elements.rectangle.borderWidth = 2;\n Chart.defaults.global.legend.display = false;\n Chart.defaults.global.colors = [\n '#97BBCD', // blue\n '#DCDCDC', // light grey\n '#F7464A', // red\n '#46BFBD', // green\n '#FDB45C', // yellow\n '#949FB1', // grey\n '#4D5360' // dark grey\n ];\n\n var useExcanvas = typeof window.G_vmlCanvasManager === 'object' &&\n window.G_vmlCanvasManager !== null &&\n typeof window.G_vmlCanvasManager.initElement === 'function';\n\n if (useExcanvas) Chart.defaults.global.animation = false;\n\n return angular.module('chart.js', [])\n .provider('ChartJs', ChartJsProvider)\n .factory('ChartJsFactory', ['ChartJs', '$timeout', ChartJsFactory])\n .directive('chartBase', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory(); }])\n .directive('chartLine', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('line'); }])\n .directive('chartBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bar'); }])\n .directive('chartHorizontalBar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('horizontalBar'); }])\n .directive('chartRadar', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('radar'); }])\n .directive('chartDoughnut', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('doughnut'); }])\n .directive('chartPie', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('pie'); }])\n .directive('chartPolarArea', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('polarArea'); }])\n .directive('chartBubble', ['ChartJsFactory', function (ChartJsFactory) { return new ChartJsFactory('bubble'); }])\n .name;\n\n /**\n * Wrapper for chart.js\n * Allows configuring chart js using the provider\n *\n * angular.module('myModule', ['chart.js']).config(function(ChartJsProvider) {\n * ChartJsProvider.setOptions({ responsive: false });\n * ChartJsProvider.setOptions('Line', { responsive: true });\n * })))\n */\n function ChartJsProvider () {\n var options = { responsive: true };\n var ChartJs = {\n Chart: Chart,\n getOptions: function (type) {\n var typeOptions = type && options[type] || {};\n return angular.extend({}, options, typeOptions);\n }\n };\n\n /**\n * Allow to set global options during configuration\n */\n this.setOptions = function (type, customOptions) {\n // If no type was specified set option for the global object\n if (! customOptions) {\n customOptions = type;\n options = angular.extend(options, customOptions);\n return;\n }\n // Set options for the specific chart\n options[type] = angular.extend(options[type] || {}, customOptions);\n };\n\n this.$get = function () {\n return ChartJs;\n };\n }\n\n function ChartJsFactory (ChartJs, $timeout) {\n return function chart (type) {\n return {\n restrict: 'CA',\n scope: {\n chartGetColor: '=?',\n chartType: '=',\n chartData: '=?',\n chartLabels: '=?',\n chartOptions: '=?',\n chartSeries: '=?',\n chartColors: '=?',\n chartClick: '=?',\n chartHover: '=?',\n chartDatasetOverride: '=?'\n },\n link: function (scope, elem/*, attrs */) {\n if (useExcanvas) window.G_vmlCanvasManager.initElement(elem[0]);\n\n // Order of setting \"watch\" matter\n scope.$watch('chartData', watchData, true);\n scope.$watch('chartSeries', watchOther, true);\n scope.$watch('chartLabels', watchOther, true);\n scope.$watch('chartOptions', watchOther, true);\n scope.$watch('chartColors', watchOther, true);\n scope.$watch('chartDatasetOverride', watchOther, true);\n scope.$watch('chartType', watchType, false);\n\n scope.$on('$destroy', function () {\n destroyChart(scope);\n });\n\n scope.$on('$resize', function () {\n if (scope.chart) scope.chart.resize();\n });\n\n function watchData (newVal, oldVal) {\n if (! newVal || ! newVal.length || (Array.isArray(newVal[0]) && ! newVal[0].length)) {\n destroyChart(scope);\n return;\n }\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n if (scope.chart && canUpdateChart(newVal, oldVal))\n return updateChart(newVal, scope);\n\n createChart(chartType, scope, elem);\n }\n\n function watchOther (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n var chartType = type || scope.chartType;\n if (! chartType) return;\n\n // chart.update() doesn't work for series and labels\n // so we have to re-create the chart entirely\n createChart(chartType, scope, elem);\n }\n\n function watchType (newVal, oldVal) {\n if (isEmpty(newVal)) return;\n if (angular.equals(newVal, oldVal)) return;\n createChart(newVal, scope, elem);\n }\n }\n };\n };\n\n function createChart (type, scope, elem) {\n var options = getChartOptions(type, scope);\n if (! hasData(scope) || ! canDisplay(type, scope, elem, options)) return;\n\n var cvs = elem[0];\n var ctx = cvs.getContext('2d');\n\n scope.chartGetColor = getChartColorFn(scope);\n var data = getChartData(type, scope);\n\n // Destroy old chart if it exists to avoid ghost charts issue\n // https://github.com/jtblin/angular-chart.js/issues/187\n destroyChart(scope);\n\n scope.chart = new ChartJs.Chart(ctx, {\n type: type,\n data: data,\n options: options\n });\n scope.$emit('chart-create', scope.chart);\n bindEvents(cvs, scope);\n }\n\n function canUpdateChart (newVal, oldVal) {\n if (newVal && oldVal && newVal.length && oldVal.length) {\n return Array.isArray(newVal[0]) ?\n newVal.length === oldVal.length && newVal.every(function (element, index) {\n return element.length === oldVal[index].length; }) :\n oldVal.reduce(sum, 0) > 0 ? newVal.length === oldVal.length : false;\n }\n return false;\n }\n\n function sum (carry, val) {\n return carry + val;\n }\n\n function getEventHandler (scope, action, triggerOnlyOnChange) {\n var lastState = null;\n return function (evt) {\n var atEvent = scope.chart.getElementsAtEvent || scope.chart.getPointsAtEvent;\n if (atEvent) {\n var activePoints = atEvent.call(scope.chart, evt);\n if (triggerOnlyOnChange === false || angular.equals(lastState, activePoints) === false) {\n lastState = activePoints;\n scope[action](activePoints, evt);\n }\n }\n };\n }\n\n function getColors (type, scope) {\n var colors = angular.copy(scope.chartColors ||\n ChartJs.getOptions(type).chartColors ||\n Chart.defaults.global.colors\n );\n var notEnoughColors = colors.length < scope.chartData.length;\n while (colors.length < scope.chartData.length) {\n colors.push(scope.chartGetColor());\n }\n // mutate colors in this case as we don't want\n // the colors to change on each refresh\n if (notEnoughColors) scope.chartColors = colors;\n return colors.map(convertColor);\n }\n\n function convertColor (color) {\n if (typeof color === 'object' && color !== null) return color;\n if (typeof color === 'string' && color[0] === '#') return getColor(hexToRgb(color.substr(1)));\n return getRandomColor();\n }\n\n function getRandomColor () {\n var color = [getRandomInt(0, 255), getRandomInt(0, 255), getRandomInt(0, 255)];\n return getColor(color);\n }\n\n function getColor (color) {\n return {\n backgroundColor: rgba(color, 0.2),\n pointBackgroundColor: rgba(color, 1),\n pointHoverBackgroundColor: rgba(color, 0.8),\n borderColor: rgba(color, 1),\n pointBorderColor: '#fff',\n pointHoverBorderColor: rgba(color, 1)\n };\n }\n\n function getRandomInt (min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n\n function rgba (color, alpha) {\n // rgba not supported by IE8\n return useExcanvas ? 'rgb(' + color.join(',') + ')' : 'rgba(' + color.concat(alpha).join(',') + ')';\n }\n\n // Credit: http://stackoverflow.com/a/11508164/1190235\n function hexToRgb (hex) {\n var bigint = parseInt(hex, 16),\n r = (bigint >> 16) & 255,\n g = (bigint >> 8) & 255,\n b = bigint & 255;\n\n return [r, g, b];\n }\n\n function hasData (scope) {\n return scope.chartData && scope.chartData.length;\n }\n\n function getChartColorFn (scope) {\n return typeof scope.chartGetColor === 'function' ? scope.chartGetColor : getRandomColor;\n }\n\n function getChartData (type, scope) {\n var colors = getColors(type, scope);\n return Array.isArray(scope.chartData[0]) ?\n getDataSets(scope.chartLabels, scope.chartData, scope.chartSeries || [], colors, scope.chartDatasetOverride) :\n getData(scope.chartLabels, scope.chartData, colors, scope.chartDatasetOverride);\n }\n\n function getDataSets (labels, data, series, colors, datasetOverride) {\n return {\n labels: labels,\n datasets: data.map(function (item, i) {\n var dataset = angular.extend({}, colors[i], {\n label: series[i],\n data: item\n });\n if (datasetOverride && datasetOverride.length >= i) {\n angular.merge(dataset, datasetOverride[i]);\n }\n return dataset;\n })\n };\n }\n\n function getData (labels, data, colors, datasetOverride) {\n var dataset = {\n labels: labels,\n datasets: [{\n data: data,\n backgroundColor: colors.map(function (color) {\n return color.pointBackgroundColor;\n }),\n hoverBackgroundColor: colors.map(function (color) {\n return color.backgroundColor;\n })\n }]\n };\n if (datasetOverride) {\n angular.merge(dataset.datasets[0], datasetOverride);\n }\n return dataset;\n }\n\n function getChartOptions (type, scope) {\n return angular.extend({}, ChartJs.getOptions(type), scope.chartOptions);\n }\n\n function bindEvents (cvs, scope) {\n cvs.onclick = scope.chartClick ? getEventHandler(scope, 'chartClick', false) : angular.noop;\n cvs.onmousemove = scope.chartHover ? getEventHandler(scope, 'chartHover', true) : angular.noop;\n }\n\n function updateChart (values, scope) {\n if (Array.isArray(scope.chartData[0])) {\n scope.chart.data.datasets.forEach(function (dataset, i) {\n dataset.data = values[i];\n });\n } else {\n scope.chart.data.datasets[0].data = values;\n }\n\n scope.chart.update();\n scope.$emit('chart-update', scope.chart);\n }\n\n function isEmpty (value) {\n return ! value ||\n (Array.isArray(value) && ! value.length) ||\n (typeof value === 'object' && ! Object.keys(value).length);\n }\n\n function canDisplay (type, scope, elem, options) {\n // TODO: check parent?\n if (options.responsive && elem[0].clientHeight === 0) {\n $timeout(function () {\n createChart(type, scope, elem);\n }, 50, false);\n return false;\n }\n return true;\n }\n\n function destroyChart(scope) {\n if(! scope.chart) return;\n scope.chart.destroy();\n scope.$emit('chart-destroy', scope.chart);\n }\n }\n}));\n"],"sourceRoot":"/source/"}
\ No newline at end of file
diff --git a/www/lib/angular-chart.js/examples/amd.html b/www/lib/angular-chart.js/examples/amd.html
new file mode 100644
index 0000000..56704d1
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/amd.html
@@ -0,0 +1,25 @@
+
+
+
+
+ AMD
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/amd.js b/www/lib/angular-chart.js/examples/amd.js
new file mode 100644
index 0000000..0c04eaa
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/amd.js
@@ -0,0 +1,32 @@
+(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/www/lib/angular-chart.js/examples/app.css b/www/lib/angular-chart.js/examples/app.css
new file mode 100644
index 0000000..8b18814
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/app.css
@@ -0,0 +1,80 @@
+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/www/lib/angular-chart.js/examples/app.js b/www/lib/angular-chart.js/examples/app.js
new file mode 100644
index 0000000..282edaa
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/app.js
@@ -0,0 +1,311 @@
+(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/www/lib/angular-chart.js/examples/bootstrap.css b/www/lib/angular-chart.js/examples/bootstrap.css
new file mode 100644
index 0000000..7f36651
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/bootstrap.css
@@ -0,0 +1,5785 @@
+/*!
+ * Bootstrap v3.1.1 (http://getbootstrap.com)
+ * Copyright 2011-2014 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ */
+
+/*! normalize.css v3.0.0 | MIT License | git.io/normalize */
+html {
+ font-family: sans-serif;
+ -webkit-text-size-adjust: 100%;
+ -ms-text-size-adjust: 100%;
+}
+body {
+ margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+nav,
+section,
+summary {
+ display: block;
+}
+audio,
+canvas,
+progress,
+video {
+ display: inline-block;
+ vertical-align: baseline;
+}
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+[hidden],
+template {
+ display: none;
+}
+a {
+ background: transparent;
+}
+a:active,
+a:hover {
+ outline: 0;
+}
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+b,
+strong {
+ font-weight: bold;
+}
+dfn {
+ font-style: italic;
+}
+h1 {
+ margin: .67em 0;
+ font-size: 2em;
+}
+mark {
+ color: #000;
+ background: #ff0;
+}
+small {
+ font-size: 80%;
+}
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+sup {
+ top: -.5em;
+}
+sub {
+ bottom: -.25em;
+}
+img {
+ border: 0;
+}
+svg:not(:root) {
+ overflow: hidden;
+}
+figure {
+ margin: 1em 40px;
+}
+hr {
+ height: 0;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+}
+pre {
+ overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+ margin: 0;
+ font: inherit;
+ color: inherit;
+}
+button {
+ overflow: visible;
+}
+button,
+select {
+ text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button;
+ cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ padding: 0;
+ border: 0;
+}
+input {
+ line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-box-sizing: content-box;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ -webkit-appearance: textfield;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+fieldset {
+ padding: .35em .625em .75em;
+ margin: 0 2px;
+ border: 1px solid #c0c0c0;
+}
+legend {
+ padding: 0;
+ border: 0;
+}
+textarea {
+ overflow: auto;
+}
+optgroup {
+ font-weight: bold;
+}
+table {
+ border-spacing: 0;
+ border-collapse: collapse;
+}
+td,
+th {
+ padding: 0;
+}
+@media print {
+ * {
+ color: #000 !important;
+ text-shadow: none !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ a,
+ a:visited {
+ text-decoration: underline;
+ }
+ a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ abbr[title]:after {
+ content: " (" attr(title) ")";
+ }
+ a[href^="javascript:"]:after,
+ a[href^="#"]:after {
+ content: "";
+ }
+ pre,
+ blockquote {
+ border: 1px solid #999;
+
+ page-break-inside: avoid;
+ }
+ thead {
+ display: table-header-group;
+ }
+ tr,
+ img {
+ page-break-inside: avoid;
+ }
+ img {
+ max-width: 100% !important;
+ }
+ p,
+ h2,
+ h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2,
+ h3 {
+ page-break-after: avoid;
+ }
+ select {
+ background: #fff !important;
+ }
+ .navbar {
+ display: none;
+ }
+ .table td,
+ .table th {
+ background-color: #fff !important;
+ }
+ .btn > .caret,
+ .dropup > .btn > .caret {
+ border-top-color: #000 !important;
+ }
+ .label {
+ border: 1px solid #000;
+ }
+ .table {
+ border-collapse: collapse !important;
+ }
+ .table-bordered th,
+ .table-bordered td {
+ border: 1px solid #ddd !important;
+ }
+}
+* {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+*:before,
+*:after {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+html {
+ font-size: 62.5%;
+
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #333;
+ background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+a {
+ color: #428bca;
+ text-decoration: none;
+}
+a:hover,
+a:focus {
+ color: #2a6496;
+ text-decoration: underline;
+}
+a:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+figure {
+ margin: 0;
+}
+img {
+ vertical-align: middle;
+}
+.img-responsive,
+.thumbnail > img,
+.thumbnail a > img,
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ display: block;
+ max-width: 100%;
+ height: auto;
+}
+.img-rounded {
+ border-radius: 6px;
+}
+.img-thumbnail {
+ display: inline-block;
+ max-width: 100%;
+ height: auto;
+ padding: 4px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.img-circle {
+ border-radius: 50%;
+}
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eee;
+}
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ border: 0;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+ font-family: inherit;
+ font-weight: 500;
+ line-height: 1.1;
+ color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+ font-weight: normal;
+ line-height: 1;
+ color: #999;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+ margin-top: 20px;
+ margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+ font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+ font-size: 75%;
+}
+h1,
+.h1 {
+ font-size: 36px;
+}
+h2,
+.h2 {
+ font-size: 30px;
+}
+h3,
+.h3 {
+ font-size: 24px;
+}
+h4,
+.h4 {
+ font-size: 18px;
+}
+h5,
+.h5 {
+ font-size: 14px;
+}
+h6,
+.h6 {
+ font-size: 12px;
+}
+p {
+ margin: 0 0 10px;
+}
+.lead {
+ margin-bottom: 20px;
+ font-size: 16px;
+ font-weight: 200;
+ line-height: 1.4;
+}
+@media (min-width: 768px) {
+ .lead {
+ font-size: 21px;
+ }
+}
+small,
+.small {
+ font-size: 85%;
+}
+cite {
+ font-style: normal;
+}
+.text-left {
+ text-align: left;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+.text-justify {
+ text-align: justify;
+}
+.text-muted {
+ color: #999;
+}
+.text-primary {
+ color: #428bca;
+}
+a.text-primary:hover {
+ color: #3071a9;
+}
+.text-success {
+ color: #3c763d;
+}
+a.text-success:hover {
+ color: #2b542c;
+}
+.text-info {
+ color: #31708f;
+}
+a.text-info:hover {
+ color: #245269;
+}
+.text-warning {
+ color: #8a6d3b;
+}
+a.text-warning:hover {
+ color: #66512c;
+}
+.text-danger {
+ color: #a94442;
+}
+a.text-danger:hover {
+ color: #843534;
+}
+.bg-primary {
+ color: #fff;
+ background-color: #428bca;
+}
+a.bg-primary:hover {
+ background-color: #3071a9;
+}
+.bg-success {
+ background-color: #dff0d8;
+}
+a.bg-success:hover {
+ background-color: #c1e2b3;
+}
+.bg-info {
+ background-color: #d9edf7;
+}
+a.bg-info:hover {
+ background-color: #afd9ee;
+}
+.bg-warning {
+ background-color: #fcf8e3;
+}
+a.bg-warning:hover {
+ background-color: #f7ecb5;
+}
+.bg-danger {
+ background-color: #f2dede;
+}
+a.bg-danger:hover {
+ background-color: #e4b9b9;
+}
+.page-header {
+ padding-bottom: 9px;
+ margin: 40px 0 20px;
+ border-bottom: 1px solid #eee;
+}
+ul,
+ol {
+ margin-top: 0;
+ margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+ margin-bottom: 0;
+}
+.list-unstyled {
+ padding-left: 0;
+ list-style: none;
+}
+.list-inline {
+ padding-left: 0;
+ margin-left: -5px;
+ list-style: none;
+}
+.list-inline > li {
+ display: inline-block;
+ padding-right: 5px;
+ padding-left: 5px;
+}
+dl {
+ margin-top: 0;
+ margin-bottom: 20px;
+}
+dt,
+dd {
+ line-height: 1.42857143;
+}
+dt {
+ font-weight: bold;
+}
+dd {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .dl-horizontal dt {
+ float: left;
+ width: 160px;
+ overflow: hidden;
+ clear: left;
+ text-align: right;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+ .dl-horizontal dd {
+ margin-left: 180px;
+ }
+}
+abbr[title],
+abbr[data-original-title] {
+ cursor: help;
+ border-bottom: 1px dotted #999;
+}
+.initialism {
+ font-size: 90%;
+ text-transform: uppercase;
+}
+blockquote {
+ padding: 10px 20px;
+ margin: 0 0 20px;
+ font-size: 17.5px;
+ border-left: 5px solid #eee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+ margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+ display: block;
+ font-size: 80%;
+ line-height: 1.42857143;
+ color: #999;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+ content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+ padding-right: 15px;
+ padding-left: 0;
+ text-align: right;
+ border-right: 5px solid #eee;
+ border-left: 0;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+ content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+ content: '\00A0 \2014';
+}
+blockquote:before,
+blockquote:after {
+ content: "";
+}
+address {
+ margin-bottom: 20px;
+ font-style: normal;
+ line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+ font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #c7254e;
+ white-space: nowrap;
+ background-color: #f9f2f4;
+ border-radius: 4px;
+}
+kbd {
+ padding: 2px 4px;
+ font-size: 90%;
+ color: #fff;
+ background-color: #333;
+ border-radius: 3px;
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
+}
+pre {
+ display: block;
+ padding: 9.5px;
+ margin: 0 0 10px;
+ font-size: 13px;
+ line-height: 1.42857143;
+ color: #333;
+ word-break: break-all;
+ word-wrap: break-word;
+ background-color: #f5f5f5;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+ white-space: pre-wrap;
+ background-color: transparent;
+ border-radius: 0;
+}
+.pre-scrollable {
+ max-height: 340px;
+ overflow-y: scroll;
+}
+.container {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+@media (min-width: 768px) {
+ .container {
+ width: 750px;
+ }
+}
+@media (min-width: 992px) {
+ .container {
+ width: 970px;
+ }
+}
+@media (min-width: 1200px) {
+ .container {
+ width: 1170px;
+ }
+}
+.container-fluid {
+ padding-right: 15px;
+ padding-left: 15px;
+ margin-right: auto;
+ margin-left: auto;
+}
+.row {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+ position: relative;
+ min-height: 1px;
+ padding-right: 15px;
+ padding-left: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+ float: left;
+}
+.col-xs-12 {
+ width: 100%;
+}
+.col-xs-11 {
+ width: 91.66666667%;
+}
+.col-xs-10 {
+ width: 83.33333333%;
+}
+.col-xs-9 {
+ width: 75%;
+}
+.col-xs-8 {
+ width: 66.66666667%;
+}
+.col-xs-7 {
+ width: 58.33333333%;
+}
+.col-xs-6 {
+ width: 50%;
+}
+.col-xs-5 {
+ width: 41.66666667%;
+}
+.col-xs-4 {
+ width: 33.33333333%;
+}
+.col-xs-3 {
+ width: 25%;
+}
+.col-xs-2 {
+ width: 16.66666667%;
+}
+.col-xs-1 {
+ width: 8.33333333%;
+}
+.col-xs-pull-12 {
+ right: 100%;
+}
+.col-xs-pull-11 {
+ right: 91.66666667%;
+}
+.col-xs-pull-10 {
+ right: 83.33333333%;
+}
+.col-xs-pull-9 {
+ right: 75%;
+}
+.col-xs-pull-8 {
+ right: 66.66666667%;
+}
+.col-xs-pull-7 {
+ right: 58.33333333%;
+}
+.col-xs-pull-6 {
+ right: 50%;
+}
+.col-xs-pull-5 {
+ right: 41.66666667%;
+}
+.col-xs-pull-4 {
+ right: 33.33333333%;
+}
+.col-xs-pull-3 {
+ right: 25%;
+}
+.col-xs-pull-2 {
+ right: 16.66666667%;
+}
+.col-xs-pull-1 {
+ right: 8.33333333%;
+}
+.col-xs-pull-0 {
+ right: 0;
+}
+.col-xs-push-12 {
+ left: 100%;
+}
+.col-xs-push-11 {
+ left: 91.66666667%;
+}
+.col-xs-push-10 {
+ left: 83.33333333%;
+}
+.col-xs-push-9 {
+ left: 75%;
+}
+.col-xs-push-8 {
+ left: 66.66666667%;
+}
+.col-xs-push-7 {
+ left: 58.33333333%;
+}
+.col-xs-push-6 {
+ left: 50%;
+}
+.col-xs-push-5 {
+ left: 41.66666667%;
+}
+.col-xs-push-4 {
+ left: 33.33333333%;
+}
+.col-xs-push-3 {
+ left: 25%;
+}
+.col-xs-push-2 {
+ left: 16.66666667%;
+}
+.col-xs-push-1 {
+ left: 8.33333333%;
+}
+.col-xs-push-0 {
+ left: 0;
+}
+.col-xs-offset-12 {
+ margin-left: 100%;
+}
+.col-xs-offset-11 {
+ margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+ margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+ margin-left: 75%;
+}
+.col-xs-offset-8 {
+ margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+ margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+ margin-left: 50%;
+}
+.col-xs-offset-5 {
+ margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+ margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+ margin-left: 25%;
+}
+.col-xs-offset-2 {
+ margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+ margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+ float: left;
+ }
+ .col-sm-12 {
+ width: 100%;
+ }
+ .col-sm-11 {
+ width: 91.66666667%;
+ }
+ .col-sm-10 {
+ width: 83.33333333%;
+ }
+ .col-sm-9 {
+ width: 75%;
+ }
+ .col-sm-8 {
+ width: 66.66666667%;
+ }
+ .col-sm-7 {
+ width: 58.33333333%;
+ }
+ .col-sm-6 {
+ width: 50%;
+ }
+ .col-sm-5 {
+ width: 41.66666667%;
+ }
+ .col-sm-4 {
+ width: 33.33333333%;
+ }
+ .col-sm-3 {
+ width: 25%;
+ }
+ .col-sm-2 {
+ width: 16.66666667%;
+ }
+ .col-sm-1 {
+ width: 8.33333333%;
+ }
+ .col-sm-pull-12 {
+ right: 100%;
+ }
+ .col-sm-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-sm-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-sm-pull-9 {
+ right: 75%;
+ }
+ .col-sm-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-sm-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-sm-pull-6 {
+ right: 50%;
+ }
+ .col-sm-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-sm-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-sm-pull-3 {
+ right: 25%;
+ }
+ .col-sm-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-sm-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-sm-pull-0 {
+ right: 0;
+ }
+ .col-sm-push-12 {
+ left: 100%;
+ }
+ .col-sm-push-11 {
+ left: 91.66666667%;
+ }
+ .col-sm-push-10 {
+ left: 83.33333333%;
+ }
+ .col-sm-push-9 {
+ left: 75%;
+ }
+ .col-sm-push-8 {
+ left: 66.66666667%;
+ }
+ .col-sm-push-7 {
+ left: 58.33333333%;
+ }
+ .col-sm-push-6 {
+ left: 50%;
+ }
+ .col-sm-push-5 {
+ left: 41.66666667%;
+ }
+ .col-sm-push-4 {
+ left: 33.33333333%;
+ }
+ .col-sm-push-3 {
+ left: 25%;
+ }
+ .col-sm-push-2 {
+ left: 16.66666667%;
+ }
+ .col-sm-push-1 {
+ left: 8.33333333%;
+ }
+ .col-sm-push-0 {
+ left: 0;
+ }
+ .col-sm-offset-12 {
+ margin-left: 100%;
+ }
+ .col-sm-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-sm-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-sm-offset-9 {
+ margin-left: 75%;
+ }
+ .col-sm-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-sm-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-sm-offset-6 {
+ margin-left: 50%;
+ }
+ .col-sm-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-sm-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-sm-offset-3 {
+ margin-left: 25%;
+ }
+ .col-sm-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-sm-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-sm-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 992px) {
+ .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+ float: left;
+ }
+ .col-md-12 {
+ width: 100%;
+ }
+ .col-md-11 {
+ width: 91.66666667%;
+ }
+ .col-md-10 {
+ width: 83.33333333%;
+ }
+ .col-md-9 {
+ width: 75%;
+ }
+ .col-md-8 {
+ width: 66.66666667%;
+ }
+ .col-md-7 {
+ width: 58.33333333%;
+ }
+ .col-md-6 {
+ width: 50%;
+ }
+ .col-md-5 {
+ width: 41.66666667%;
+ }
+ .col-md-4 {
+ width: 33.33333333%;
+ }
+ .col-md-3 {
+ width: 25%;
+ }
+ .col-md-2 {
+ width: 16.66666667%;
+ }
+ .col-md-1 {
+ width: 8.33333333%;
+ }
+ .col-md-pull-12 {
+ right: 100%;
+ }
+ .col-md-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-md-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-md-pull-9 {
+ right: 75%;
+ }
+ .col-md-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-md-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-md-pull-6 {
+ right: 50%;
+ }
+ .col-md-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-md-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-md-pull-3 {
+ right: 25%;
+ }
+ .col-md-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-md-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-md-pull-0 {
+ right: 0;
+ }
+ .col-md-push-12 {
+ left: 100%;
+ }
+ .col-md-push-11 {
+ left: 91.66666667%;
+ }
+ .col-md-push-10 {
+ left: 83.33333333%;
+ }
+ .col-md-push-9 {
+ left: 75%;
+ }
+ .col-md-push-8 {
+ left: 66.66666667%;
+ }
+ .col-md-push-7 {
+ left: 58.33333333%;
+ }
+ .col-md-push-6 {
+ left: 50%;
+ }
+ .col-md-push-5 {
+ left: 41.66666667%;
+ }
+ .col-md-push-4 {
+ left: 33.33333333%;
+ }
+ .col-md-push-3 {
+ left: 25%;
+ }
+ .col-md-push-2 {
+ left: 16.66666667%;
+ }
+ .col-md-push-1 {
+ left: 8.33333333%;
+ }
+ .col-md-push-0 {
+ left: 0;
+ }
+ .col-md-offset-12 {
+ margin-left: 100%;
+ }
+ .col-md-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-md-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-md-offset-9 {
+ margin-left: 75%;
+ }
+ .col-md-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-md-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-md-offset-6 {
+ margin-left: 50%;
+ }
+ .col-md-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-md-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-md-offset-3 {
+ margin-left: 25%;
+ }
+ .col-md-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-md-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-md-offset-0 {
+ margin-left: 0;
+ }
+}
+@media (min-width: 1200px) {
+ .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+ float: left;
+ }
+ .col-lg-12 {
+ width: 100%;
+ }
+ .col-lg-11 {
+ width: 91.66666667%;
+ }
+ .col-lg-10 {
+ width: 83.33333333%;
+ }
+ .col-lg-9 {
+ width: 75%;
+ }
+ .col-lg-8 {
+ width: 66.66666667%;
+ }
+ .col-lg-7 {
+ width: 58.33333333%;
+ }
+ .col-lg-6 {
+ width: 50%;
+ }
+ .col-lg-5 {
+ width: 41.66666667%;
+ }
+ .col-lg-4 {
+ width: 33.33333333%;
+ }
+ .col-lg-3 {
+ width: 25%;
+ }
+ .col-lg-2 {
+ width: 16.66666667%;
+ }
+ .col-lg-1 {
+ width: 8.33333333%;
+ }
+ .col-lg-pull-12 {
+ right: 100%;
+ }
+ .col-lg-pull-11 {
+ right: 91.66666667%;
+ }
+ .col-lg-pull-10 {
+ right: 83.33333333%;
+ }
+ .col-lg-pull-9 {
+ right: 75%;
+ }
+ .col-lg-pull-8 {
+ right: 66.66666667%;
+ }
+ .col-lg-pull-7 {
+ right: 58.33333333%;
+ }
+ .col-lg-pull-6 {
+ right: 50%;
+ }
+ .col-lg-pull-5 {
+ right: 41.66666667%;
+ }
+ .col-lg-pull-4 {
+ right: 33.33333333%;
+ }
+ .col-lg-pull-3 {
+ right: 25%;
+ }
+ .col-lg-pull-2 {
+ right: 16.66666667%;
+ }
+ .col-lg-pull-1 {
+ right: 8.33333333%;
+ }
+ .col-lg-pull-0 {
+ right: 0;
+ }
+ .col-lg-push-12 {
+ left: 100%;
+ }
+ .col-lg-push-11 {
+ left: 91.66666667%;
+ }
+ .col-lg-push-10 {
+ left: 83.33333333%;
+ }
+ .col-lg-push-9 {
+ left: 75%;
+ }
+ .col-lg-push-8 {
+ left: 66.66666667%;
+ }
+ .col-lg-push-7 {
+ left: 58.33333333%;
+ }
+ .col-lg-push-6 {
+ left: 50%;
+ }
+ .col-lg-push-5 {
+ left: 41.66666667%;
+ }
+ .col-lg-push-4 {
+ left: 33.33333333%;
+ }
+ .col-lg-push-3 {
+ left: 25%;
+ }
+ .col-lg-push-2 {
+ left: 16.66666667%;
+ }
+ .col-lg-push-1 {
+ left: 8.33333333%;
+ }
+ .col-lg-push-0 {
+ left: 0;
+ }
+ .col-lg-offset-12 {
+ margin-left: 100%;
+ }
+ .col-lg-offset-11 {
+ margin-left: 91.66666667%;
+ }
+ .col-lg-offset-10 {
+ margin-left: 83.33333333%;
+ }
+ .col-lg-offset-9 {
+ margin-left: 75%;
+ }
+ .col-lg-offset-8 {
+ margin-left: 66.66666667%;
+ }
+ .col-lg-offset-7 {
+ margin-left: 58.33333333%;
+ }
+ .col-lg-offset-6 {
+ margin-left: 50%;
+ }
+ .col-lg-offset-5 {
+ margin-left: 41.66666667%;
+ }
+ .col-lg-offset-4 {
+ margin-left: 33.33333333%;
+ }
+ .col-lg-offset-3 {
+ margin-left: 25%;
+ }
+ .col-lg-offset-2 {
+ margin-left: 16.66666667%;
+ }
+ .col-lg-offset-1 {
+ margin-left: 8.33333333%;
+ }
+ .col-lg-offset-0 {
+ margin-left: 0;
+ }
+}
+table {
+ max-width: 100%;
+ background-color: transparent;
+}
+th {
+ text-align: left;
+}
+.table {
+ width: 100%;
+ margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+ padding: 8px;
+ line-height: 1.42857143;
+ vertical-align: top;
+ border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+ vertical-align: bottom;
+ border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+ border-top: 0;
+}
+.table > tbody + tbody {
+ border-top: 2px solid #ddd;
+}
+.table .table {
+ background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+ padding: 5px;
+}
+.table-bordered {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+ border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+ border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-child(odd) > td,
+.table-striped > tbody > tr:nth-child(odd) > th {
+ background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover > td,
+.table-hover > tbody > tr:hover > th {
+ background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+ position: static;
+ display: table-column;
+ float: none;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+ position: static;
+ display: table-cell;
+ float: none;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+ background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr.active:hover > th {
+ background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+ background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr.success:hover > th {
+ background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+ background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr.info:hover > th {
+ background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+ background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr.warning:hover > th {
+ background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+ background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr.danger:hover > th {
+ background-color: #ebcccc;
+}
+@media (max-width: 767px) {
+ .table-responsive {
+ width: 100%;
+ margin-bottom: 15px;
+ overflow-x: scroll;
+ overflow-y: hidden;
+ -webkit-overflow-scrolling: touch;
+ -ms-overflow-style: -ms-autohiding-scrollbar;
+ border: 1px solid #ddd;
+ }
+ .table-responsive > .table {
+ margin-bottom: 0;
+ }
+ .table-responsive > .table > thead > tr > th,
+ .table-responsive > .table > tbody > tr > th,
+ .table-responsive > .table > tfoot > tr > th,
+ .table-responsive > .table > thead > tr > td,
+ .table-responsive > .table > tbody > tr > td,
+ .table-responsive > .table > tfoot > tr > td {
+ white-space: nowrap;
+ }
+ .table-responsive > .table-bordered {
+ border: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:first-child,
+ .table-responsive > .table-bordered > tbody > tr > th:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+ .table-responsive > .table-bordered > thead > tr > td:first-child,
+ .table-responsive > .table-bordered > tbody > tr > td:first-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+ }
+ .table-responsive > .table-bordered > thead > tr > th:last-child,
+ .table-responsive > .table-bordered > tbody > tr > th:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+ .table-responsive > .table-bordered > thead > tr > td:last-child,
+ .table-responsive > .table-bordered > tbody > tr > td:last-child,
+ .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+ }
+ .table-responsive > .table-bordered > tbody > tr:last-child > th,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+ .table-responsive > .table-bordered > tbody > tr:last-child > td,
+ .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+ border-bottom: 0;
+ }
+}
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+legend {
+ display: block;
+ width: 100%;
+ padding: 0;
+ margin-bottom: 20px;
+ font-size: 21px;
+ line-height: inherit;
+ color: #333;
+ border: 0;
+ border-bottom: 1px solid #e5e5e5;
+}
+label {
+ display: inline-block;
+ margin-bottom: 5px;
+ font-weight: bold;
+}
+input[type="search"] {
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+ margin: 4px 0 0;
+ margin-top: 1px \9;
+ /* IE8-9 */
+ line-height: normal;
+}
+input[type="file"] {
+ display: block;
+}
+input[type="range"] {
+ display: block;
+ width: 100%;
+}
+select[multiple],
+select[size] {
+ height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+output {
+ display: block;
+ padding-top: 7px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+}
+.form-control {
+ display: block;
+ width: 100%;
+ height: 34px;
+ padding: 6px 12px;
+ font-size: 14px;
+ line-height: 1.42857143;
+ color: #555;
+ background-color: #fff;
+ background-image: none;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+ transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+ border-color: #66afe9;
+ outline: 0;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+ box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
+}
+.form-control::-moz-placeholder {
+ color: #999;
+ opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+ color: #999;
+}
+.form-control::-webkit-input-placeholder {
+ color: #999;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+ cursor: not-allowed;
+ background-color: #eee;
+ opacity: 1;
+}
+textarea.form-control {
+ height: auto;
+}
+input[type="search"] {
+ -webkit-appearance: none;
+}
+input[type="date"] {
+ line-height: 34px;
+}
+.form-group {
+ margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+ display: block;
+ min-height: 20px;
+ padding-left: 20px;
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+ display: inline;
+ font-weight: normal;
+ cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+ float: left;
+ margin-left: -20px;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+ margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+ display: inline-block;
+ padding-left: 20px;
+ margin-bottom: 0;
+ font-weight: normal;
+ vertical-align: middle;
+ cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+ margin-top: 0;
+ margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+.radio[disabled],
+.radio-inline[disabled],
+.checkbox[disabled],
+.checkbox-inline[disabled],
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"],
+fieldset[disabled] .radio,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox,
+fieldset[disabled] .checkbox-inline {
+ cursor: not-allowed;
+}
+.input-sm {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-sm {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+ height: auto;
+}
+.input-lg {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+select.input-lg {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+ height: auto;
+}
+.has-feedback {
+ position: relative;
+}
+.has-feedback .form-control {
+ padding-right: 42.5px;
+}
+.has-feedback .form-control-feedback {
+ position: absolute;
+ top: 25px;
+ right: 0;
+ display: block;
+ width: 34px;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline {
+ color: #3c763d;
+}
+.has-success .form-control {
+ border-color: #3c763d;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-success .form-control:focus {
+ border-color: #2b542c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #3c763d;
+}
+.has-success .form-control-feedback {
+ color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline {
+ color: #8a6d3b;
+}
+.has-warning .form-control {
+ border-color: #8a6d3b;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-warning .form-control:focus {
+ border-color: #66512c;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #8a6d3b;
+}
+.has-warning .form-control-feedback {
+ color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline {
+ color: #a94442;
+}
+.has-error .form-control {
+ border-color: #a94442;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
+}
+.has-error .form-control:focus {
+ border-color: #843534;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #a94442;
+}
+.has-error .form-control-feedback {
+ color: #a94442;
+}
+.form-control-static {
+ margin-bottom: 0;
+}
+.help-block {
+ display: block;
+ margin-top: 5px;
+ margin-bottom: 10px;
+ color: #737373;
+}
+@media (min-width: 768px) {
+ .form-inline .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .form-inline .input-group > .form-control {
+ width: 100%;
+ }
+ .form-inline .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio,
+ .form-inline .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .form-inline .radio input[type="radio"],
+ .form-inline .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+ .form-inline .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+.form-horizontal .control-label,
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+ padding-top: 7px;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+ min-height: 27px;
+}
+.form-horizontal .form-group {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+.form-horizontal .form-control-static {
+ padding-top: 7px;
+}
+@media (min-width: 768px) {
+ .form-horizontal .control-label {
+ text-align: right;
+ }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+ top: 0;
+ right: 15px;
+}
+.btn {
+ display: inline-block;
+ padding: 6px 12px;
+ margin-bottom: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1.42857143;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ cursor: pointer;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus {
+ outline: thin dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus {
+ color: #333;
+ text-decoration: none;
+}
+.btn:active,
+.btn.active {
+ background-image: none;
+ outline: 0;
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+ pointer-events: none;
+ cursor: not-allowed;
+ filter: alpha(opacity=65);
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ opacity: .65;
+}
+.btn-default {
+ color: #333;
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default:hover,
+.btn-default:focus,
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ color: #333;
+ background-color: #ebebeb;
+ border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open .dropdown-toggle.btn-default {
+ background-image: none;
+}
+.btn-default.disabled,
+.btn-default[disabled],
+fieldset[disabled] .btn-default,
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled:active,
+.btn-default[disabled]:active,
+fieldset[disabled] .btn-default:active,
+.btn-default.disabled.active,
+.btn-default[disabled].active,
+fieldset[disabled] .btn-default.active {
+ background-color: #fff;
+ border-color: #ccc;
+}
+.btn-default .badge {
+ color: #fff;
+ background-color: #333;
+}
+.btn-primary {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+.btn-primary:hover,
+.btn-primary:focus,
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ color: #fff;
+ background-color: #3276b1;
+ border-color: #285e8e;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open .dropdown-toggle.btn-primary {
+ background-image: none;
+}
+.btn-primary.disabled,
+.btn-primary[disabled],
+fieldset[disabled] .btn-primary,
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled:active,
+.btn-primary[disabled]:active,
+fieldset[disabled] .btn-primary:active,
+.btn-primary.disabled.active,
+.btn-primary[disabled].active,
+fieldset[disabled] .btn-primary.active {
+ background-color: #428bca;
+ border-color: #357ebd;
+}
+.btn-primary .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+.btn-success {
+ color: #fff;
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success:hover,
+.btn-success:focus,
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ color: #fff;
+ background-color: #47a447;
+ border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open .dropdown-toggle.btn-success {
+ background-image: none;
+}
+.btn-success.disabled,
+.btn-success[disabled],
+fieldset[disabled] .btn-success,
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled:active,
+.btn-success[disabled]:active,
+fieldset[disabled] .btn-success:active,
+.btn-success.disabled.active,
+.btn-success[disabled].active,
+fieldset[disabled] .btn-success.active {
+ background-color: #5cb85c;
+ border-color: #4cae4c;
+}
+.btn-success .badge {
+ color: #5cb85c;
+ background-color: #fff;
+}
+.btn-info {
+ color: #fff;
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info:hover,
+.btn-info:focus,
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ color: #fff;
+ background-color: #39b3d7;
+ border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open .dropdown-toggle.btn-info {
+ background-image: none;
+}
+.btn-info.disabled,
+.btn-info[disabled],
+fieldset[disabled] .btn-info,
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled:active,
+.btn-info[disabled]:active,
+fieldset[disabled] .btn-info:active,
+.btn-info.disabled.active,
+.btn-info[disabled].active,
+fieldset[disabled] .btn-info.active {
+ background-color: #5bc0de;
+ border-color: #46b8da;
+}
+.btn-info .badge {
+ color: #5bc0de;
+ background-color: #fff;
+}
+.btn-warning {
+ color: #fff;
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning:hover,
+.btn-warning:focus,
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ color: #fff;
+ background-color: #ed9c28;
+ border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open .dropdown-toggle.btn-warning {
+ background-image: none;
+}
+.btn-warning.disabled,
+.btn-warning[disabled],
+fieldset[disabled] .btn-warning,
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled:active,
+.btn-warning[disabled]:active,
+fieldset[disabled] .btn-warning:active,
+.btn-warning.disabled.active,
+.btn-warning[disabled].active,
+fieldset[disabled] .btn-warning.active {
+ background-color: #f0ad4e;
+ border-color: #eea236;
+}
+.btn-warning .badge {
+ color: #f0ad4e;
+ background-color: #fff;
+}
+.btn-danger {
+ color: #fff;
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger:hover,
+.btn-danger:focus,
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ color: #fff;
+ background-color: #d2322d;
+ border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open .dropdown-toggle.btn-danger {
+ background-image: none;
+}
+.btn-danger.disabled,
+.btn-danger[disabled],
+fieldset[disabled] .btn-danger,
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled:active,
+.btn-danger[disabled]:active,
+fieldset[disabled] .btn-danger:active,
+.btn-danger.disabled.active,
+.btn-danger[disabled].active,
+fieldset[disabled] .btn-danger.active {
+ background-color: #d9534f;
+ border-color: #d43f3a;
+}
+.btn-danger .badge {
+ color: #d9534f;
+ background-color: #fff;
+}
+.btn-link {
+ font-weight: normal;
+ color: #428bca;
+ cursor: pointer;
+ border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+ background-color: transparent;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+ border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+ color: #2a6496;
+ text-decoration: underline;
+ background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+ color: #999;
+ text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+ padding: 1px 5px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+.btn-block {
+ display: block;
+ width: 100%;
+ padding-right: 0;
+ padding-left: 0;
+}
+.btn-block + .btn-block {
+ margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+ width: 100%;
+}
+.fade {
+ opacity: 0;
+ -webkit-transition: opacity .15s linear;
+ transition: opacity .15s linear;
+}
+.fade.in {
+ opacity: 1;
+}
+.collapse {
+ display: none;
+}
+.collapse.in {
+ display: block;
+}
+.collapsing {
+ position: relative;
+ height: 0;
+ overflow: hidden;
+ -webkit-transition: height .35s ease;
+ transition: height .35s ease;
+}
+@font-face {
+ font-family: 'Glyphicons Halflings';
+
+ src: url('../fonts/glyphicons-halflings-regular.eot');
+ src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
+}
+.glyphicon {
+ position: relative;
+ top: 1px;
+ display: inline-block;
+ font-family: 'Glyphicons Halflings';
+ font-style: normal;
+ font-weight: normal;
+ line-height: 1;
+
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+.glyphicon-asterisk:before {
+ content: "\2a";
+}
+.glyphicon-plus:before {
+ content: "\2b";
+}
+.glyphicon-euro:before {
+ content: "\20ac";
+}
+.glyphicon-minus:before {
+ content: "\2212";
+}
+.glyphicon-cloud:before {
+ content: "\2601";
+}
+.glyphicon-envelope:before {
+ content: "\2709";
+}
+.glyphicon-pencil:before {
+ content: "\270f";
+}
+.glyphicon-glass:before {
+ content: "\e001";
+}
+.glyphicon-music:before {
+ content: "\e002";
+}
+.glyphicon-search:before {
+ content: "\e003";
+}
+.glyphicon-heart:before {
+ content: "\e005";
+}
+.glyphicon-star:before {
+ content: "\e006";
+}
+.glyphicon-star-empty:before {
+ content: "\e007";
+}
+.glyphicon-user:before {
+ content: "\e008";
+}
+.glyphicon-film:before {
+ content: "\e009";
+}
+.glyphicon-th-large:before {
+ content: "\e010";
+}
+.glyphicon-th:before {
+ content: "\e011";
+}
+.glyphicon-th-list:before {
+ content: "\e012";
+}
+.glyphicon-ok:before {
+ content: "\e013";
+}
+.glyphicon-remove:before {
+ content: "\e014";
+}
+.glyphicon-zoom-in:before {
+ content: "\e015";
+}
+.glyphicon-zoom-out:before {
+ content: "\e016";
+}
+.glyphicon-off:before {
+ content: "\e017";
+}
+.glyphicon-signal:before {
+ content: "\e018";
+}
+.glyphicon-cog:before {
+ content: "\e019";
+}
+.glyphicon-trash:before {
+ content: "\e020";
+}
+.glyphicon-home:before {
+ content: "\e021";
+}
+.glyphicon-file:before {
+ content: "\e022";
+}
+.glyphicon-time:before {
+ content: "\e023";
+}
+.glyphicon-road:before {
+ content: "\e024";
+}
+.glyphicon-download-alt:before {
+ content: "\e025";
+}
+.glyphicon-download:before {
+ content: "\e026";
+}
+.glyphicon-upload:before {
+ content: "\e027";
+}
+.glyphicon-inbox:before {
+ content: "\e028";
+}
+.glyphicon-play-circle:before {
+ content: "\e029";
+}
+.glyphicon-repeat:before {
+ content: "\e030";
+}
+.glyphicon-refresh:before {
+ content: "\e031";
+}
+.glyphicon-list-alt:before {
+ content: "\e032";
+}
+.glyphicon-lock:before {
+ content: "\e033";
+}
+.glyphicon-flag:before {
+ content: "\e034";
+}
+.glyphicon-headphones:before {
+ content: "\e035";
+}
+.glyphicon-volume-off:before {
+ content: "\e036";
+}
+.glyphicon-volume-down:before {
+ content: "\e037";
+}
+.glyphicon-volume-up:before {
+ content: "\e038";
+}
+.glyphicon-qrcode:before {
+ content: "\e039";
+}
+.glyphicon-barcode:before {
+ content: "\e040";
+}
+.glyphicon-tag:before {
+ content: "\e041";
+}
+.glyphicon-tags:before {
+ content: "\e042";
+}
+.glyphicon-book:before {
+ content: "\e043";
+}
+.glyphicon-bookmark:before {
+ content: "\e044";
+}
+.glyphicon-print:before {
+ content: "\e045";
+}
+.glyphicon-camera:before {
+ content: "\e046";
+}
+.glyphicon-font:before {
+ content: "\e047";
+}
+.glyphicon-bold:before {
+ content: "\e048";
+}
+.glyphicon-italic:before {
+ content: "\e049";
+}
+.glyphicon-text-height:before {
+ content: "\e050";
+}
+.glyphicon-text-width:before {
+ content: "\e051";
+}
+.glyphicon-align-left:before {
+ content: "\e052";
+}
+.glyphicon-align-center:before {
+ content: "\e053";
+}
+.glyphicon-align-right:before {
+ content: "\e054";
+}
+.glyphicon-align-justify:before {
+ content: "\e055";
+}
+.glyphicon-list:before {
+ content: "\e056";
+}
+.glyphicon-indent-left:before {
+ content: "\e057";
+}
+.glyphicon-indent-right:before {
+ content: "\e058";
+}
+.glyphicon-facetime-video:before {
+ content: "\e059";
+}
+.glyphicon-picture:before {
+ content: "\e060";
+}
+.glyphicon-map-marker:before {
+ content: "\e062";
+}
+.glyphicon-adjust:before {
+ content: "\e063";
+}
+.glyphicon-tint:before {
+ content: "\e064";
+}
+.glyphicon-edit:before {
+ content: "\e065";
+}
+.glyphicon-share:before {
+ content: "\e066";
+}
+.glyphicon-check:before {
+ content: "\e067";
+}
+.glyphicon-move:before {
+ content: "\e068";
+}
+.glyphicon-step-backward:before {
+ content: "\e069";
+}
+.glyphicon-fast-backward:before {
+ content: "\e070";
+}
+.glyphicon-backward:before {
+ content: "\e071";
+}
+.glyphicon-play:before {
+ content: "\e072";
+}
+.glyphicon-pause:before {
+ content: "\e073";
+}
+.glyphicon-stop:before {
+ content: "\e074";
+}
+.glyphicon-forward:before {
+ content: "\e075";
+}
+.glyphicon-fast-forward:before {
+ content: "\e076";
+}
+.glyphicon-step-forward:before {
+ content: "\e077";
+}
+.glyphicon-eject:before {
+ content: "\e078";
+}
+.glyphicon-chevron-left:before {
+ content: "\e079";
+}
+.glyphicon-chevron-right:before {
+ content: "\e080";
+}
+.glyphicon-plus-sign:before {
+ content: "\e081";
+}
+.glyphicon-minus-sign:before {
+ content: "\e082";
+}
+.glyphicon-remove-sign:before {
+ content: "\e083";
+}
+.glyphicon-ok-sign:before {
+ content: "\e084";
+}
+.glyphicon-question-sign:before {
+ content: "\e085";
+}
+.glyphicon-info-sign:before {
+ content: "\e086";
+}
+.glyphicon-screenshot:before {
+ content: "\e087";
+}
+.glyphicon-remove-circle:before {
+ content: "\e088";
+}
+.glyphicon-ok-circle:before {
+ content: "\e089";
+}
+.glyphicon-ban-circle:before {
+ content: "\e090";
+}
+.glyphicon-arrow-left:before {
+ content: "\e091";
+}
+.glyphicon-arrow-right:before {
+ content: "\e092";
+}
+.glyphicon-arrow-up:before {
+ content: "\e093";
+}
+.glyphicon-arrow-down:before {
+ content: "\e094";
+}
+.glyphicon-share-alt:before {
+ content: "\e095";
+}
+.glyphicon-resize-full:before {
+ content: "\e096";
+}
+.glyphicon-resize-small:before {
+ content: "\e097";
+}
+.glyphicon-exclamation-sign:before {
+ content: "\e101";
+}
+.glyphicon-gift:before {
+ content: "\e102";
+}
+.glyphicon-leaf:before {
+ content: "\e103";
+}
+.glyphicon-fire:before {
+ content: "\e104";
+}
+.glyphicon-eye-open:before {
+ content: "\e105";
+}
+.glyphicon-eye-close:before {
+ content: "\e106";
+}
+.glyphicon-warning-sign:before {
+ content: "\e107";
+}
+.glyphicon-plane:before {
+ content: "\e108";
+}
+.glyphicon-calendar:before {
+ content: "\e109";
+}
+.glyphicon-random:before {
+ content: "\e110";
+}
+.glyphicon-comment:before {
+ content: "\e111";
+}
+.glyphicon-magnet:before {
+ content: "\e112";
+}
+.glyphicon-chevron-up:before {
+ content: "\e113";
+}
+.glyphicon-chevron-down:before {
+ content: "\e114";
+}
+.glyphicon-retweet:before {
+ content: "\e115";
+}
+.glyphicon-shopping-cart:before {
+ content: "\e116";
+}
+.glyphicon-folder-close:before {
+ content: "\e117";
+}
+.glyphicon-folder-open:before {
+ content: "\e118";
+}
+.glyphicon-resize-vertical:before {
+ content: "\e119";
+}
+.glyphicon-resize-horizontal:before {
+ content: "\e120";
+}
+.glyphicon-hdd:before {
+ content: "\e121";
+}
+.glyphicon-bullhorn:before {
+ content: "\e122";
+}
+.glyphicon-bell:before {
+ content: "\e123";
+}
+.glyphicon-certificate:before {
+ content: "\e124";
+}
+.glyphicon-thumbs-up:before {
+ content: "\e125";
+}
+.glyphicon-thumbs-down:before {
+ content: "\e126";
+}
+.glyphicon-hand-right:before {
+ content: "\e127";
+}
+.glyphicon-hand-left:before {
+ content: "\e128";
+}
+.glyphicon-hand-up:before {
+ content: "\e129";
+}
+.glyphicon-hand-down:before {
+ content: "\e130";
+}
+.glyphicon-circle-arrow-right:before {
+ content: "\e131";
+}
+.glyphicon-circle-arrow-left:before {
+ content: "\e132";
+}
+.glyphicon-circle-arrow-up:before {
+ content: "\e133";
+}
+.glyphicon-circle-arrow-down:before {
+ content: "\e134";
+}
+.glyphicon-globe:before {
+ content: "\e135";
+}
+.glyphicon-wrench:before {
+ content: "\e136";
+}
+.glyphicon-tasks:before {
+ content: "\e137";
+}
+.glyphicon-filter:before {
+ content: "\e138";
+}
+.glyphicon-briefcase:before {
+ content: "\e139";
+}
+.glyphicon-fullscreen:before {
+ content: "\e140";
+}
+.glyphicon-dashboard:before {
+ content: "\e141";
+}
+.glyphicon-paperclip:before {
+ content: "\e142";
+}
+.glyphicon-heart-empty:before {
+ content: "\e143";
+}
+.glyphicon-link:before {
+ content: "\e144";
+}
+.glyphicon-phone:before {
+ content: "\e145";
+}
+.glyphicon-pushpin:before {
+ content: "\e146";
+}
+.glyphicon-usd:before {
+ content: "\e148";
+}
+.glyphicon-gbp:before {
+ content: "\e149";
+}
+.glyphicon-sort:before {
+ content: "\e150";
+}
+.glyphicon-sort-by-alphabet:before {
+ content: "\e151";
+}
+.glyphicon-sort-by-alphabet-alt:before {
+ content: "\e152";
+}
+.glyphicon-sort-by-order:before {
+ content: "\e153";
+}
+.glyphicon-sort-by-order-alt:before {
+ content: "\e154";
+}
+.glyphicon-sort-by-attributes:before {
+ content: "\e155";
+}
+.glyphicon-sort-by-attributes-alt:before {
+ content: "\e156";
+}
+.glyphicon-unchecked:before {
+ content: "\e157";
+}
+.glyphicon-expand:before {
+ content: "\e158";
+}
+.glyphicon-collapse-down:before {
+ content: "\e159";
+}
+.glyphicon-collapse-up:before {
+ content: "\e160";
+}
+.glyphicon-log-in:before {
+ content: "\e161";
+}
+.glyphicon-flash:before {
+ content: "\e162";
+}
+.glyphicon-log-out:before {
+ content: "\e163";
+}
+.glyphicon-new-window:before {
+ content: "\e164";
+}
+.glyphicon-record:before {
+ content: "\e165";
+}
+.glyphicon-save:before {
+ content: "\e166";
+}
+.glyphicon-open:before {
+ content: "\e167";
+}
+.glyphicon-saved:before {
+ content: "\e168";
+}
+.glyphicon-import:before {
+ content: "\e169";
+}
+.glyphicon-export:before {
+ content: "\e170";
+}
+.glyphicon-send:before {
+ content: "\e171";
+}
+.glyphicon-floppy-disk:before {
+ content: "\e172";
+}
+.glyphicon-floppy-saved:before {
+ content: "\e173";
+}
+.glyphicon-floppy-remove:before {
+ content: "\e174";
+}
+.glyphicon-floppy-save:before {
+ content: "\e175";
+}
+.glyphicon-floppy-open:before {
+ content: "\e176";
+}
+.glyphicon-credit-card:before {
+ content: "\e177";
+}
+.glyphicon-transfer:before {
+ content: "\e178";
+}
+.glyphicon-cutlery:before {
+ content: "\e179";
+}
+.glyphicon-header:before {
+ content: "\e180";
+}
+.glyphicon-compressed:before {
+ content: "\e181";
+}
+.glyphicon-earphone:before {
+ content: "\e182";
+}
+.glyphicon-phone-alt:before {
+ content: "\e183";
+}
+.glyphicon-tower:before {
+ content: "\e184";
+}
+.glyphicon-stats:before {
+ content: "\e185";
+}
+.glyphicon-sd-video:before {
+ content: "\e186";
+}
+.glyphicon-hd-video:before {
+ content: "\e187";
+}
+.glyphicon-subtitles:before {
+ content: "\e188";
+}
+.glyphicon-sound-stereo:before {
+ content: "\e189";
+}
+.glyphicon-sound-dolby:before {
+ content: "\e190";
+}
+.glyphicon-sound-5-1:before {
+ content: "\e191";
+}
+.glyphicon-sound-6-1:before {
+ content: "\e192";
+}
+.glyphicon-sound-7-1:before {
+ content: "\e193";
+}
+.glyphicon-copyright-mark:before {
+ content: "\e194";
+}
+.glyphicon-registration-mark:before {
+ content: "\e195";
+}
+.glyphicon-cloud-download:before {
+ content: "\e197";
+}
+.glyphicon-cloud-upload:before {
+ content: "\e198";
+}
+.glyphicon-tree-conifer:before {
+ content: "\e199";
+}
+.glyphicon-tree-deciduous:before {
+ content: "\e200";
+}
+.caret {
+ display: inline-block;
+ width: 0;
+ height: 0;
+ margin-left: 2px;
+ vertical-align: middle;
+ border-top: 4px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+}
+.dropdown {
+ position: relative;
+}
+.dropdown-toggle:focus {
+ outline: 0;
+}
+.dropdown-menu {
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ font-size: 14px;
+ list-style: none;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+}
+.dropdown-menu.pull-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu .divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333;
+ white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+ color: #262626;
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+ color: #fff;
+ text-decoration: none;
+ background-color: #428bca;
+ outline: 0;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ color: #999;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+ background-image: none;
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.open > .dropdown-menu {
+ display: block;
+}
+.open > a {
+ outline: 0;
+}
+.dropdown-menu-right {
+ right: 0;
+ left: auto;
+}
+.dropdown-menu-left {
+ right: auto;
+ left: 0;
+}
+.dropdown-header {
+ display: block;
+ padding: 3px 20px;
+ font-size: 12px;
+ line-height: 1.42857143;
+ color: #999;
+}
+.dropdown-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 990;
+}
+.pull-right > .dropdown-menu {
+ right: 0;
+ left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+ content: "";
+ border-top: 0;
+ border-bottom: 4px solid;
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+ top: auto;
+ bottom: 100%;
+ margin-bottom: 1px;
+}
+@media (min-width: 768px) {
+ .navbar-right .dropdown-menu {
+ right: 0;
+ left: auto;
+ }
+ .navbar-right .dropdown-menu-left {
+ right: auto;
+ left: 0;
+ }
+}
+.btn-group,
+.btn-group-vertical {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+ position: relative;
+ float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+ z-index: 2;
+}
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus {
+ outline: none;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+ margin-left: -1px;
+}
+.btn-toolbar {
+ margin-left: -5px;
+}
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+ float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+ margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+ border-radius: 0;
+}
+.btn-group > .btn:first-child {
+ margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group > .btn-group {
+ float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group > .btn-group:first-child > .btn:last-child,
+.btn-group > .btn-group:first-child > .dropdown-toggle {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.btn-group > .btn-group:last-child > .btn:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+ outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+ padding-right: 8px;
+ padding-left: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+ padding-right: 12px;
+ padding-left: 12px;
+}
+.btn-group.open .dropdown-toggle {
+ -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+ box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+.btn .caret {
+ margin-left: 0;
+}
+.btn-lg .caret {
+ border-width: 5px 5px 0;
+ border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+ border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+ display: block;
+ float: none;
+ width: 100%;
+ max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+ float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+ margin-top: -1px;
+ margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+ border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.btn-group-justified {
+ display: table;
+ width: 100%;
+ table-layout: fixed;
+ border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+ display: table-cell;
+ float: none;
+ width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+ width: 100%;
+}
+[data-toggle="buttons"] > .btn > input[type="radio"],
+[data-toggle="buttons"] > .btn > input[type="checkbox"] {
+ display: none;
+}
+.input-group {
+ position: relative;
+ display: table;
+ border-collapse: separate;
+}
+.input-group[class*="col-"] {
+ float: none;
+ padding-right: 0;
+ padding-left: 0;
+}
+.input-group .form-control {
+ position: relative;
+ z-index: 2;
+ float: left;
+ width: 100%;
+ margin-bottom: 0;
+}
+.input-group-lg > .form-control,
+.input-group-lg > .input-group-addon,
+.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.33;
+ border-radius: 6px;
+}
+select.input-group-lg > .form-control,
+select.input-group-lg > .input-group-addon,
+select.input-group-lg > .input-group-btn > .btn {
+ height: 46px;
+ line-height: 46px;
+}
+textarea.input-group-lg > .form-control,
+textarea.input-group-lg > .input-group-addon,
+textarea.input-group-lg > .input-group-btn > .btn,
+select[multiple].input-group-lg > .form-control,
+select[multiple].input-group-lg > .input-group-addon,
+select[multiple].input-group-lg > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-sm > .form-control,
+.input-group-sm > .input-group-addon,
+.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+select.input-group-sm > .form-control,
+select.input-group-sm > .input-group-addon,
+select.input-group-sm > .input-group-btn > .btn {
+ height: 30px;
+ line-height: 30px;
+}
+textarea.input-group-sm > .form-control,
+textarea.input-group-sm > .input-group-addon,
+textarea.input-group-sm > .input-group-btn > .btn,
+select[multiple].input-group-sm > .form-control,
+select[multiple].input-group-sm > .input-group-addon,
+select[multiple].input-group-sm > .input-group-btn > .btn {
+ height: auto;
+}
+.input-group-addon,
+.input-group-btn,
+.input-group .form-control {
+ display: table-cell;
+}
+.input-group-addon:not(:first-child):not(:last-child),
+.input-group-btn:not(:first-child):not(:last-child),
+.input-group .form-control:not(:first-child):not(:last-child) {
+ border-radius: 0;
+}
+.input-group-addon,
+.input-group-btn {
+ width: 1%;
+ white-space: nowrap;
+ vertical-align: middle;
+}
+.input-group-addon {
+ padding: 6px 12px;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 1;
+ color: #555;
+ text-align: center;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ border-radius: 4px;
+}
+.input-group-addon.input-sm {
+ padding: 5px 10px;
+ font-size: 12px;
+ border-radius: 3px;
+}
+.input-group-addon.input-lg {
+ padding: 10px 16px;
+ font-size: 18px;
+ border-radius: 6px;
+}
+.input-group-addon input[type="radio"],
+.input-group-addon input[type="checkbox"] {
+ margin-top: 0;
+}
+.input-group .form-control:first-child,
+.input-group-addon:first-child,
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group > .btn,
+.input-group-btn:first-child > .dropdown-toggle,
+.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),
+.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group-addon:first-child {
+ border-right: 0;
+}
+.input-group .form-control:last-child,
+.input-group-addon:last-child,
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group > .btn,
+.input-group-btn:last-child > .dropdown-toggle,
+.input-group-btn:first-child > .btn:not(:first-child),
+.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.input-group-addon:last-child {
+ border-left: 0;
+}
+.input-group-btn {
+ position: relative;
+ font-size: 0;
+ white-space: nowrap;
+}
+.input-group-btn > .btn {
+ position: relative;
+}
+.input-group-btn > .btn + .btn {
+ margin-left: -1px;
+}
+.input-group-btn > .btn:hover,
+.input-group-btn > .btn:focus,
+.input-group-btn > .btn:active {
+ z-index: 2;
+}
+.input-group-btn:first-child > .btn,
+.input-group-btn:first-child > .btn-group {
+ margin-right: -1px;
+}
+.input-group-btn:last-child > .btn,
+.input-group-btn:last-child > .btn-group {
+ margin-left: -1px;
+}
+.nav {
+ padding-left: 0;
+ margin-bottom: 0;
+ list-style: none;
+}
+.nav > li {
+ position: relative;
+ display: block;
+}
+.nav > li > a {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.nav > li.disabled > a {
+ color: #999;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+ color: #999;
+ text-decoration: none;
+ cursor: not-allowed;
+ background-color: transparent;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+ background-color: #eee;
+ border-color: #428bca;
+}
+.nav .nav-divider {
+ height: 1px;
+ margin: 9px 0;
+ overflow: hidden;
+ background-color: #e5e5e5;
+}
+.nav > li > a > img {
+ max-width: none;
+}
+.nav-tabs {
+ border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+ float: left;
+ margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+ margin-right: 2px;
+ line-height: 1.42857143;
+ border: 1px solid transparent;
+ border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+ border-color: #eee #eee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+ color: #555;
+ cursor: default;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-bottom-color: transparent;
+}
+.nav-tabs.nav-justified {
+ width: 100%;
+ border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+ float: none;
+}
+.nav-tabs.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-tabs.nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs.nav-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs.nav-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs.nav-justified > .active > a,
+ .nav-tabs.nav-justified > .active > a:hover,
+ .nav-tabs.nav-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.nav-pills > li {
+ float: left;
+}
+.nav-pills > li > a {
+ border-radius: 4px;
+}
+.nav-pills > li + li {
+ margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+ color: #fff;
+ background-color: #428bca;
+}
+.nav-stacked > li {
+ float: none;
+}
+.nav-stacked > li + li {
+ margin-top: 2px;
+ margin-left: 0;
+}
+.nav-justified {
+ width: 100%;
+}
+.nav-justified > li {
+ float: none;
+}
+.nav-justified > li > a {
+ margin-bottom: 5px;
+ text-align: center;
+}
+.nav-justified > .dropdown .dropdown-menu {
+ top: auto;
+ left: auto;
+}
+@media (min-width: 768px) {
+ .nav-justified > li {
+ display: table-cell;
+ width: 1%;
+ }
+ .nav-justified > li > a {
+ margin-bottom: 0;
+ }
+}
+.nav-tabs-justified {
+ border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+ margin-right: 0;
+ border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+ border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+ .nav-tabs-justified > li > a {
+ border-bottom: 1px solid #ddd;
+ border-radius: 4px 4px 0 0;
+ }
+ .nav-tabs-justified > .active > a,
+ .nav-tabs-justified > .active > a:hover,
+ .nav-tabs-justified > .active > a:focus {
+ border-bottom-color: #fff;
+ }
+}
+.tab-content > .tab-pane {
+ display: none;
+}
+.tab-content > .active {
+ display: block;
+}
+.nav-tabs .dropdown-menu {
+ margin-top: -1px;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar {
+ position: relative;
+ min-height: 50px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+ .navbar {
+ border-radius: 4px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-header {
+ float: left;
+ }
+}
+.navbar-collapse {
+ max-height: 340px;
+ padding-right: 15px;
+ padding-left: 15px;
+ overflow-x: visible;
+ -webkit-overflow-scrolling: touch;
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);
+}
+.navbar-collapse.in {
+ overflow-y: auto;
+}
+@media (min-width: 768px) {
+ .navbar-collapse {
+ width: auto;
+ border-top: 0;
+ box-shadow: none;
+ }
+ .navbar-collapse.collapse {
+ display: block !important;
+ height: auto !important;
+ padding-bottom: 0;
+ overflow: visible !important;
+ }
+ .navbar-collapse.in {
+ overflow-y: visible;
+ }
+ .navbar-fixed-top .navbar-collapse,
+ .navbar-static-top .navbar-collapse,
+ .navbar-fixed-bottom .navbar-collapse {
+ padding-right: 0;
+ padding-left: 0;
+ }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+ margin-right: -15px;
+ margin-left: -15px;
+}
+@media (min-width: 768px) {
+ .container > .navbar-header,
+ .container-fluid > .navbar-header,
+ .container > .navbar-collapse,
+ .container-fluid > .navbar-collapse {
+ margin-right: 0;
+ margin-left: 0;
+ }
+}
+.navbar-static-top {
+ z-index: 1000;
+ border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+ .navbar-static-top {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+ position: fixed;
+ right: 0;
+ left: 0;
+ z-index: 1030;
+}
+@media (min-width: 768px) {
+ .navbar-fixed-top,
+ .navbar-fixed-bottom {
+ border-radius: 0;
+ }
+}
+.navbar-fixed-top {
+ top: 0;
+ border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+ bottom: 0;
+ margin-bottom: 0;
+ border-width: 1px 0 0;
+}
+.navbar-brand {
+ float: left;
+ height: 50px;
+ padding: 15px 15px;
+ font-size: 18px;
+ line-height: 20px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+ text-decoration: none;
+}
+@media (min-width: 768px) {
+ .navbar > .container .navbar-brand,
+ .navbar > .container-fluid .navbar-brand {
+ margin-left: -15px;
+ }
+}
+.navbar-toggle {
+ position: relative;
+ float: right;
+ padding: 9px 10px;
+ margin-top: 8px;
+ margin-right: 15px;
+ margin-bottom: 8px;
+ background-color: transparent;
+ background-image: none;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.navbar-toggle:focus {
+ outline: none;
+}
+.navbar-toggle .icon-bar {
+ display: block;
+ width: 22px;
+ height: 2px;
+ border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+ margin-top: 4px;
+}
+@media (min-width: 768px) {
+ .navbar-toggle {
+ display: none;
+ }
+}
+.navbar-nav {
+ margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ line-height: 20px;
+}
+@media (max-width: 767px) {
+ .navbar-nav .open .dropdown-menu {
+ position: static;
+ float: none;
+ width: auto;
+ margin-top: 0;
+ background-color: transparent;
+ border: 0;
+ box-shadow: none;
+ }
+ .navbar-nav .open .dropdown-menu > li > a,
+ .navbar-nav .open .dropdown-menu .dropdown-header {
+ padding: 5px 15px 5px 25px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a {
+ line-height: 20px;
+ }
+ .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-nav .open .dropdown-menu > li > a:focus {
+ background-image: none;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-nav {
+ float: left;
+ margin: 0;
+ }
+ .navbar-nav > li {
+ float: left;
+ }
+ .navbar-nav > li > a {
+ padding-top: 15px;
+ padding-bottom: 15px;
+ }
+ .navbar-nav.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-left {
+ float: left !important;
+ }
+ .navbar-right {
+ float: right !important;
+ }
+}
+.navbar-form {
+ padding: 10px 15px;
+ margin-top: 8px;
+ margin-right: -15px;
+ margin-bottom: 8px;
+ margin-left: -15px;
+ border-top: 1px solid transparent;
+ border-bottom: 1px solid transparent;
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);
+}
+@media (min-width: 768px) {
+ .navbar-form .form-group {
+ display: inline-block;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .form-control {
+ display: inline-block;
+ width: auto;
+ vertical-align: middle;
+ }
+ .navbar-form .input-group > .form-control {
+ width: 100%;
+ }
+ .navbar-form .control-label {
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio,
+ .navbar-form .checkbox {
+ display: inline-block;
+ padding-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ vertical-align: middle;
+ }
+ .navbar-form .radio input[type="radio"],
+ .navbar-form .checkbox input[type="checkbox"] {
+ float: none;
+ margin-left: 0;
+ }
+ .navbar-form .has-feedback .form-control-feedback {
+ top: 0;
+ }
+}
+@media (max-width: 767px) {
+ .navbar-form .form-group {
+ margin-bottom: 5px;
+ }
+}
+@media (min-width: 768px) {
+ .navbar-form {
+ width: auto;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ border: 0;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ }
+ .navbar-form.navbar-right:last-child {
+ margin-right: -15px;
+ }
+}
+.navbar-nav > li > .dropdown-menu {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+ border-bottom-right-radius: 0;
+ border-bottom-left-radius: 0;
+}
+.navbar-btn {
+ margin-top: 8px;
+ margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+ margin-top: 10px;
+ margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+ margin-top: 14px;
+ margin-bottom: 14px;
+}
+.navbar-text {
+ margin-top: 15px;
+ margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+ .navbar-text {
+ float: left;
+ margin-right: 15px;
+ margin-left: 15px;
+ }
+ .navbar-text.navbar-right:last-child {
+ margin-right: 0;
+ }
+}
+.navbar-default {
+ background-color: #f8f8f8;
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+ color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+ color: #5e5e5e;
+ background-color: transparent;
+}
+.navbar-default .navbar-text {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+ color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+ color: #333;
+ background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+ border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+ background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+ background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+ border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+}
+@media (max-width: 767px) {
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+ color: #777;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #333;
+ background-color: transparent;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #555;
+ background-color: #e7e7e7;
+ }
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #ccc;
+ background-color: transparent;
+ }
+}
+.navbar-default .navbar-link {
+ color: #777;
+}
+.navbar-default .navbar-link:hover {
+ color: #333;
+}
+.navbar-inverse {
+ background-color: #222;
+ border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+ color: #999;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+ color: #999;
+}
+.navbar-inverse .navbar-nav > li > a {
+ color: #999;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+ border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+ background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+ background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+ border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+ color: #fff;
+ background-color: #080808;
+}
+@media (max-width: 767px) {
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+ border-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+ color: #999;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+ color: #fff;
+ background-color: transparent;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+ color: #fff;
+ background-color: #080808;
+ }
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+ .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+ color: #444;
+ background-color: transparent;
+ }
+}
+.navbar-inverse .navbar-link {
+ color: #999;
+}
+.navbar-inverse .navbar-link:hover {
+ color: #fff;
+}
+.breadcrumb {
+ padding: 8px 15px;
+ margin-bottom: 20px;
+ list-style: none;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+}
+.breadcrumb > li {
+ display: inline-block;
+}
+.breadcrumb > li + li:before {
+ padding: 0 5px;
+ color: #ccc;
+ content: "/\00a0";
+}
+.breadcrumb > .active {
+ color: #999;
+}
+.pagination {
+ display: inline-block;
+ padding-left: 0;
+ margin: 20px 0;
+ border-radius: 4px;
+}
+.pagination > li {
+ display: inline;
+}
+.pagination > li > a,
+.pagination > li > span {
+ position: relative;
+ float: left;
+ padding: 6px 12px;
+ margin-left: -1px;
+ line-height: 1.42857143;
+ color: #428bca;
+ text-decoration: none;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.pagination > li:first-child > a,
+.pagination > li:first-child > span {
+ margin-left: 0;
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.pagination > li:last-child > a,
+.pagination > li:last-child > span {
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.pagination > li > a:hover,
+.pagination > li > span:hover,
+.pagination > li > a:focus,
+.pagination > li > span:focus {
+ color: #2a6496;
+ background-color: #eee;
+ border-color: #ddd;
+}
+.pagination > .active > a,
+.pagination > .active > span,
+.pagination > .active > a:hover,
+.pagination > .active > span:hover,
+.pagination > .active > a:focus,
+.pagination > .active > span:focus {
+ z-index: 2;
+ color: #fff;
+ cursor: default;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+.pagination > .disabled > span,
+.pagination > .disabled > span:hover,
+.pagination > .disabled > span:focus,
+.pagination > .disabled > a,
+.pagination > .disabled > a:hover,
+.pagination > .disabled > a:focus {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+ border-color: #ddd;
+}
+.pagination-lg > li > a,
+.pagination-lg > li > span {
+ padding: 10px 16px;
+ font-size: 18px;
+}
+.pagination-lg > li:first-child > a,
+.pagination-lg > li:first-child > span {
+ border-top-left-radius: 6px;
+ border-bottom-left-radius: 6px;
+}
+.pagination-lg > li:last-child > a,
+.pagination-lg > li:last-child > span {
+ border-top-right-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+.pagination-sm > li > a,
+.pagination-sm > li > span {
+ padding: 5px 10px;
+ font-size: 12px;
+}
+.pagination-sm > li:first-child > a,
+.pagination-sm > li:first-child > span {
+ border-top-left-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.pagination-sm > li:last-child > a,
+.pagination-sm > li:last-child > span {
+ border-top-right-radius: 3px;
+ border-bottom-right-radius: 3px;
+}
+.pager {
+ padding-left: 0;
+ margin: 20px 0;
+ text-align: center;
+ list-style: none;
+}
+.pager li {
+ display: inline;
+}
+.pager li > a,
+.pager li > span {
+ display: inline-block;
+ padding: 5px 14px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+ text-decoration: none;
+ background-color: #eee;
+}
+.pager .next > a,
+.pager .next > span {
+ float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+ float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+ color: #999;
+ cursor: not-allowed;
+ background-color: #fff;
+}
+.label {
+ display: inline;
+ padding: .2em .6em .3em;
+ font-size: 75%;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ border-radius: .25em;
+}
+.label[href]:hover,
+.label[href]:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+.label:empty {
+ display: none;
+}
+.btn .label {
+ position: relative;
+ top: -1px;
+}
+.label-default {
+ background-color: #999;
+}
+.label-default[href]:hover,
+.label-default[href]:focus {
+ background-color: #808080;
+}
+.label-primary {
+ background-color: #428bca;
+}
+.label-primary[href]:hover,
+.label-primary[href]:focus {
+ background-color: #3071a9;
+}
+.label-success {
+ background-color: #5cb85c;
+}
+.label-success[href]:hover,
+.label-success[href]:focus {
+ background-color: #449d44;
+}
+.label-info {
+ background-color: #5bc0de;
+}
+.label-info[href]:hover,
+.label-info[href]:focus {
+ background-color: #31b0d5;
+}
+.label-warning {
+ background-color: #f0ad4e;
+}
+.label-warning[href]:hover,
+.label-warning[href]:focus {
+ background-color: #ec971f;
+}
+.label-danger {
+ background-color: #d9534f;
+}
+.label-danger[href]:hover,
+.label-danger[href]:focus {
+ background-color: #c9302c;
+}
+.badge {
+ display: inline-block;
+ min-width: 10px;
+ padding: 3px 7px;
+ font-size: 12px;
+ font-weight: bold;
+ line-height: 1;
+ color: #fff;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: baseline;
+ background-color: #999;
+ border-radius: 10px;
+}
+.badge:empty {
+ display: none;
+}
+.btn .badge {
+ position: relative;
+ top: -1px;
+}
+.btn-xs .badge {
+ top: 0;
+ padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+ color: #fff;
+ text-decoration: none;
+ cursor: pointer;
+}
+a.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+ color: #428bca;
+ background-color: #fff;
+}
+.nav-pills > li > a > .badge {
+ margin-left: 3px;
+}
+.jumbotron {
+ padding: 30px;
+ margin-bottom: 30px;
+ color: inherit;
+ background-color: #eee;
+}
+.jumbotron h1,
+.jumbotron .h1 {
+ color: inherit;
+}
+.jumbotron p {
+ margin-bottom: 15px;
+ font-size: 21px;
+ font-weight: 200;
+}
+.container .jumbotron {
+ border-radius: 6px;
+}
+.jumbotron .container {
+ max-width: 100%;
+}
+@media screen and (min-width: 768px) {
+ .jumbotron {
+ padding-top: 48px;
+ padding-bottom: 48px;
+ }
+ .container .jumbotron {
+ padding-right: 60px;
+ padding-left: 60px;
+ }
+ .jumbotron h1,
+ .jumbotron .h1 {
+ font-size: 63px;
+ }
+}
+.thumbnail {
+ display: block;
+ padding: 4px;
+ margin-bottom: 20px;
+ line-height: 1.42857143;
+ background-color: #fff;
+ border: 1px solid #ddd;
+ border-radius: 4px;
+ -webkit-transition: all .2s ease-in-out;
+ transition: all .2s ease-in-out;
+}
+.thumbnail > img,
+.thumbnail a > img {
+ margin-right: auto;
+ margin-left: auto;
+}
+a.thumbnail:hover,
+a.thumbnail:focus,
+a.thumbnail.active {
+ border-color: #428bca;
+}
+.thumbnail .caption {
+ padding: 9px;
+ color: #333;
+}
+.alert {
+ padding: 15px;
+ margin-bottom: 20px;
+ border: 1px solid transparent;
+ border-radius: 4px;
+}
+.alert h4 {
+ margin-top: 0;
+ color: inherit;
+}
+.alert .alert-link {
+ font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+ margin-bottom: 0;
+}
+.alert > p + p {
+ margin-top: 5px;
+}
+.alert-dismissable {
+ padding-right: 35px;
+}
+.alert-dismissable .close {
+ position: relative;
+ top: -2px;
+ right: -21px;
+ color: inherit;
+}
+.alert-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.alert-success hr {
+ border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+ color: #2b542c;
+}
+.alert-info {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.alert-info hr {
+ border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+ color: #245269;
+}
+.alert-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.alert-warning hr {
+ border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+ color: #66512c;
+}
+.alert-danger {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.alert-danger hr {
+ border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+ color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+@keyframes progress-bar-stripes {
+ from {
+ background-position: 40px 0;
+ }
+ to {
+ background-position: 0 0;
+ }
+}
+.progress {
+ height: 20px;
+ margin-bottom: 20px;
+ overflow: hidden;
+ background-color: #f5f5f5;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);
+}
+.progress-bar {
+ float: left;
+ width: 0;
+ height: 100%;
+ font-size: 12px;
+ line-height: 20px;
+ color: #fff;
+ text-align: center;
+ background-color: #428bca;
+ -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);
+ -webkit-transition: width .6s ease;
+ transition: width .6s ease;
+}
+.progress-striped .progress-bar {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-size: 40px 40px;
+}
+.progress.active .progress-bar {
+ -webkit-animation: progress-bar-stripes 2s linear infinite;
+ animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+ background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+ background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+ background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+ background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+ background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+ background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);
+}
+.media,
+.media-body {
+ overflow: hidden;
+ zoom: 1;
+}
+.media,
+.media .media {
+ margin-top: 15px;
+}
+.media:first-child {
+ margin-top: 0;
+}
+.media-object {
+ display: block;
+}
+.media-heading {
+ margin: 0 0 5px;
+}
+.media > .pull-left {
+ margin-right: 10px;
+}
+.media > .pull-right {
+ margin-left: 10px;
+}
+.media-list {
+ padding-left: 0;
+ list-style: none;
+}
+.list-group {
+ padding-left: 0;
+ margin-bottom: 20px;
+}
+.list-group-item {
+ position: relative;
+ display: block;
+ padding: 10px 15px;
+ margin-bottom: -1px;
+ background-color: #fff;
+ border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+}
+.list-group-item:last-child {
+ margin-bottom: 0;
+ border-bottom-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+}
+.list-group-item > .badge {
+ float: right;
+}
+.list-group-item > .badge + .badge {
+ margin-right: 5px;
+}
+a.list-group-item {
+ color: #555;
+}
+a.list-group-item .list-group-item-heading {
+ color: #333;
+}
+a.list-group-item:hover,
+a.list-group-item:focus {
+ text-decoration: none;
+ background-color: #f5f5f5;
+}
+a.list-group-item.active,
+a.list-group-item.active:hover,
+a.list-group-item.active:focus {
+ z-index: 2;
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+a.list-group-item.active .list-group-item-heading,
+a.list-group-item.active:hover .list-group-item-heading,
+a.list-group-item.active:focus .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item.active .list-group-item-text,
+a.list-group-item.active:hover .list-group-item-text,
+a.list-group-item.active:focus .list-group-item-text {
+ color: #e1edf7;
+}
+.list-group-item-success {
+ color: #3c763d;
+ background-color: #dff0d8;
+}
+a.list-group-item-success {
+ color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-success:hover,
+a.list-group-item-success:focus {
+ color: #3c763d;
+ background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus {
+ color: #fff;
+ background-color: #3c763d;
+ border-color: #3c763d;
+}
+.list-group-item-info {
+ color: #31708f;
+ background-color: #d9edf7;
+}
+a.list-group-item-info {
+ color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-info:hover,
+a.list-group-item-info:focus {
+ color: #31708f;
+ background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus {
+ color: #fff;
+ background-color: #31708f;
+ border-color: #31708f;
+}
+.list-group-item-warning {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+}
+a.list-group-item-warning {
+ color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-warning:hover,
+a.list-group-item-warning:focus {
+ color: #8a6d3b;
+ background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus {
+ color: #fff;
+ background-color: #8a6d3b;
+ border-color: #8a6d3b;
+}
+.list-group-item-danger {
+ color: #a94442;
+ background-color: #f2dede;
+}
+a.list-group-item-danger {
+ color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading {
+ color: inherit;
+}
+a.list-group-item-danger:hover,
+a.list-group-item-danger:focus {
+ color: #a94442;
+ background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus {
+ color: #fff;
+ background-color: #a94442;
+ border-color: #a94442;
+}
+.list-group-item-heading {
+ margin-top: 0;
+ margin-bottom: 5px;
+}
+.list-group-item-text {
+ margin-bottom: 0;
+ line-height: 1.3;
+}
+.panel {
+ margin-bottom: 20px;
+ background-color: #fff;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
+}
+.panel-body {
+ padding: 15px;
+}
+.panel-heading {
+ padding: 10px 15px;
+ border-bottom: 1px solid transparent;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+ color: inherit;
+}
+.panel-title {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: 16px;
+ color: inherit;
+}
+.panel-title > a {
+ color: inherit;
+}
+.panel-footer {
+ padding: 10px 15px;
+ background-color: #f5f5f5;
+ border-top: 1px solid #ddd;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .list-group {
+ margin-bottom: 0;
+}
+.panel > .list-group .list-group-item {
+ border-width: 1px 0;
+ border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child {
+ border-top: 0;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child {
+ border-bottom: 0;
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+ border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table {
+ margin-bottom: 0;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+ border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+ border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+ border-bottom-right-radius: 3px;
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+ border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+ border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive {
+ border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+ border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+ border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+ border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+ border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+ border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+ border-bottom: 0;
+}
+.panel > .table-responsive {
+ margin-bottom: 0;
+ border: 0;
+}
+.panel-group {
+ margin-bottom: 20px;
+}
+.panel-group .panel {
+ margin-bottom: 0;
+ overflow: hidden;
+ border-radius: 4px;
+}
+.panel-group .panel + .panel {
+ margin-top: 5px;
+}
+.panel-group .panel-heading {
+ border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse .panel-body {
+ border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+ border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+ border-bottom: 1px solid #ddd;
+}
+.panel-default {
+ border-color: #ddd;
+}
+.panel-default > .panel-heading {
+ color: #333;
+ background-color: #f5f5f5;
+ border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ddd;
+}
+.panel-default > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ddd;
+}
+.panel-primary {
+ border-color: #428bca;
+}
+.panel-primary > .panel-heading {
+ color: #fff;
+ background-color: #428bca;
+ border-color: #428bca;
+}
+.panel-primary > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #428bca;
+}
+.panel-primary > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #428bca;
+}
+.panel-success {
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+ color: #3c763d;
+ background-color: #dff0d8;
+ border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #d6e9c6;
+}
+.panel-success > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #d6e9c6;
+}
+.panel-info {
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+ color: #31708f;
+ background-color: #d9edf7;
+ border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #bce8f1;
+}
+.panel-info > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #bce8f1;
+}
+.panel-warning {
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+ color: #8a6d3b;
+ background-color: #fcf8e3;
+ border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #faebcc;
+}
+.panel-warning > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #faebcc;
+}
+.panel-danger {
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+ color: #a94442;
+ background-color: #f2dede;
+ border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse .panel-body {
+ border-top-color: #ebccd1;
+}
+.panel-danger > .panel-footer + .panel-collapse .panel-body {
+ border-bottom-color: #ebccd1;
+}
+.well {
+ min-height: 20px;
+ padding: 19px;
+ margin-bottom: 20px;
+ background-color: #f5f5f5;
+ border: 1px solid #e3e3e3;
+ border-radius: 4px;
+ -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);
+}
+.well blockquote {
+ border-color: #ddd;
+ border-color: rgba(0, 0, 0, .15);
+}
+.well-lg {
+ padding: 24px;
+ border-radius: 6px;
+}
+.well-sm {
+ padding: 9px;
+ border-radius: 3px;
+}
+.close {
+ float: right;
+ font-size: 21px;
+ font-weight: bold;
+ line-height: 1;
+ color: #000;
+ text-shadow: 0 1px 0 #fff;
+ filter: alpha(opacity=20);
+ opacity: .2;
+}
+.close:hover,
+.close:focus {
+ color: #000;
+ text-decoration: none;
+ cursor: pointer;
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+button.close {
+ -webkit-appearance: none;
+ padding: 0;
+ cursor: pointer;
+ background: transparent;
+ border: 0;
+}
+.modal-open {
+ overflow: hidden;
+}
+.modal {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1050;
+ display: none;
+ overflow: auto;
+ overflow-y: scroll;
+ -webkit-overflow-scrolling: touch;
+ outline: 0;
+}
+.modal.fade .modal-dialog {
+ -webkit-transition: -webkit-transform .3s ease-out;
+ -moz-transition: -moz-transform .3s ease-out;
+ -o-transition: -o-transform .3s ease-out;
+ transition: transform .3s ease-out;
+ -webkit-transform: translate(0, -25%);
+ -ms-transform: translate(0, -25%);
+ transform: translate(0, -25%);
+}
+.modal.in .modal-dialog {
+ -webkit-transform: translate(0, 0);
+ -ms-transform: translate(0, 0);
+ transform: translate(0, 0);
+}
+.modal-dialog {
+ position: relative;
+ width: auto;
+ margin: 10px;
+}
+.modal-content {
+ position: relative;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #999;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ outline: none;
+ -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+ box-shadow: 0 3px 9px rgba(0, 0, 0, .5);
+}
+.modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1040;
+ background-color: #000;
+}
+.modal-backdrop.fade {
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.modal-backdrop.in {
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.modal-header {
+ min-height: 16.42857143px;
+ padding: 15px;
+ border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+ margin-top: -2px;
+}
+.modal-title {
+ margin: 0;
+ line-height: 1.42857143;
+}
+.modal-body {
+ position: relative;
+ padding: 20px;
+}
+.modal-footer {
+ padding: 19px 20px 20px;
+ margin-top: 15px;
+ text-align: right;
+ border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+ margin-bottom: 0;
+ margin-left: 5px;
+}
+.modal-footer .btn-group .btn + .btn {
+ margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+ margin-left: 0;
+}
+@media (min-width: 768px) {
+ .modal-dialog {
+ width: 600px;
+ margin: 30px auto;
+ }
+ .modal-content {
+ -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ box-shadow: 0 5px 15px rgba(0, 0, 0, .5);
+ }
+ .modal-sm {
+ width: 300px;
+ }
+}
+@media (min-width: 992px) {
+ .modal-lg {
+ width: 900px;
+ }
+}
+.tooltip {
+ position: absolute;
+ z-index: 1030;
+ display: block;
+ font-size: 12px;
+ line-height: 1.4;
+ visibility: visible;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
+.tooltip.in {
+ filter: alpha(opacity=90);
+ opacity: .9;
+}
+.tooltip.top {
+ padding: 5px 0;
+ margin-top: -3px;
+}
+.tooltip.right {
+ padding: 0 5px;
+ margin-left: 3px;
+}
+.tooltip.bottom {
+ padding: 5px 0;
+ margin-top: 3px;
+}
+.tooltip.left {
+ padding: 0 5px;
+ margin-left: -3px;
+}
+.tooltip-inner {
+ max-width: 200px;
+ padding: 3px 8px;
+ color: #fff;
+ text-align: center;
+ text-decoration: none;
+ background-color: #000;
+ border-radius: 4px;
+}
+.tooltip-arrow {
+ position: absolute;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.tooltip.top .tooltip-arrow {
+ bottom: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-left .tooltip-arrow {
+ bottom: 0;
+ left: 5px;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.top-right .tooltip-arrow {
+ right: 5px;
+ bottom: 0;
+ border-width: 5px 5px 0;
+ border-top-color: #000;
+}
+.tooltip.right .tooltip-arrow {
+ top: 50%;
+ left: 0;
+ margin-top: -5px;
+ border-width: 5px 5px 5px 0;
+ border-right-color: #000;
+}
+.tooltip.left .tooltip-arrow {
+ top: 50%;
+ right: 0;
+ margin-top: -5px;
+ border-width: 5px 0 5px 5px;
+ border-left-color: #000;
+}
+.tooltip.bottom .tooltip-arrow {
+ top: 0;
+ left: 50%;
+ margin-left: -5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-left .tooltip-arrow {
+ top: 0;
+ left: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.tooltip.bottom-right .tooltip-arrow {
+ top: 0;
+ right: 5px;
+ border-width: 0 5px 5px;
+ border-bottom-color: #000;
+}
+.popover {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: 1010;
+ display: none;
+ max-width: 276px;
+ padding: 1px;
+ text-align: left;
+ white-space: normal;
+ background-color: #fff;
+ background-clip: padding-box;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, .2);
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, .2);
+}
+.popover.top {
+ margin-top: -10px;
+}
+.popover.right {
+ margin-left: 10px;
+}
+.popover.bottom {
+ margin-top: 10px;
+}
+.popover.left {
+ margin-left: -10px;
+}
+.popover-title {
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ border-radius: 5px 5px 0 0;
+}
+.popover-content {
+ padding: 9px 14px;
+}
+.popover > .arrow,
+.popover > .arrow:after {
+ position: absolute;
+ display: block;
+ width: 0;
+ height: 0;
+ border-color: transparent;
+ border-style: solid;
+}
+.popover > .arrow {
+ border-width: 11px;
+}
+.popover > .arrow:after {
+ content: "";
+ border-width: 10px;
+}
+.popover.top > .arrow {
+ bottom: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-color: #999;
+ border-top-color: rgba(0, 0, 0, .25);
+ border-bottom-width: 0;
+}
+.popover.top > .arrow:after {
+ bottom: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-color: #fff;
+ border-bottom-width: 0;
+}
+.popover.right > .arrow {
+ top: 50%;
+ left: -11px;
+ margin-top: -11px;
+ border-right-color: #999;
+ border-right-color: rgba(0, 0, 0, .25);
+ border-left-width: 0;
+}
+.popover.right > .arrow:after {
+ bottom: -10px;
+ left: 1px;
+ content: " ";
+ border-right-color: #fff;
+ border-left-width: 0;
+}
+.popover.bottom > .arrow {
+ top: -11px;
+ left: 50%;
+ margin-left: -11px;
+ border-top-width: 0;
+ border-bottom-color: #999;
+ border-bottom-color: rgba(0, 0, 0, .25);
+}
+.popover.bottom > .arrow:after {
+ top: 1px;
+ margin-left: -10px;
+ content: " ";
+ border-top-width: 0;
+ border-bottom-color: #fff;
+}
+.popover.left > .arrow {
+ top: 50%;
+ right: -11px;
+ margin-top: -11px;
+ border-right-width: 0;
+ border-left-color: #999;
+ border-left-color: rgba(0, 0, 0, .25);
+}
+.popover.left > .arrow:after {
+ right: 1px;
+ bottom: -10px;
+ content: " ";
+ border-right-width: 0;
+ border-left-color: #fff;
+}
+.carousel {
+ position: relative;
+}
+.carousel-inner {
+ position: relative;
+ width: 100%;
+ overflow: hidden;
+}
+.carousel-inner > .item {
+ position: relative;
+ display: none;
+ -webkit-transition: .6s ease-in-out left;
+ transition: .6s ease-in-out left;
+}
+.carousel-inner > .item > img,
+.carousel-inner > .item > a > img {
+ line-height: 1;
+}
+.carousel-inner > .active,
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ display: block;
+}
+.carousel-inner > .active {
+ left: 0;
+}
+.carousel-inner > .next,
+.carousel-inner > .prev {
+ position: absolute;
+ top: 0;
+ width: 100%;
+}
+.carousel-inner > .next {
+ left: 100%;
+}
+.carousel-inner > .prev {
+ left: -100%;
+}
+.carousel-inner > .next.left,
+.carousel-inner > .prev.right {
+ left: 0;
+}
+.carousel-inner > .active.left {
+ left: -100%;
+}
+.carousel-inner > .active.right {
+ left: 100%;
+}
+.carousel-control {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ width: 15%;
+ font-size: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+ filter: alpha(opacity=50);
+ opacity: .5;
+}
+.carousel-control.left {
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .5) 0%), color-stop(rgba(0, 0, 0, .0001) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control.right {
+ right: 0;
+ left: auto;
+ background-image: -webkit-linear-gradient(left, color-stop(rgba(0, 0, 0, .0001) 0%), color-stop(rgba(0, 0, 0, .5) 100%));
+ background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);
+ background-repeat: repeat-x;
+}
+.carousel-control:hover,
+.carousel-control:focus {
+ color: #fff;
+ text-decoration: none;
+ filter: alpha(opacity=90);
+ outline: none;
+ opacity: .9;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-left,
+.carousel-control .glyphicon-chevron-right {
+ position: absolute;
+ top: 50%;
+ z-index: 5;
+ display: inline-block;
+}
+.carousel-control .icon-prev,
+.carousel-control .glyphicon-chevron-left {
+ left: 50%;
+}
+.carousel-control .icon-next,
+.carousel-control .glyphicon-chevron-right {
+ right: 50%;
+}
+.carousel-control .icon-prev,
+.carousel-control .icon-next {
+ width: 20px;
+ height: 20px;
+ margin-top: -10px;
+ margin-left: -10px;
+ font-family: serif;
+}
+.carousel-control .icon-prev:before {
+ content: '\2039';
+}
+.carousel-control .icon-next:before {
+ content: '\203a';
+}
+.carousel-indicators {
+ position: absolute;
+ bottom: 10px;
+ left: 50%;
+ z-index: 15;
+ width: 60%;
+ padding-left: 0;
+ margin-left: -30%;
+ text-align: center;
+ list-style: none;
+}
+.carousel-indicators li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 1px;
+ text-indent: -999px;
+ cursor: pointer;
+ background-color: #000 \9;
+ background-color: rgba(0, 0, 0, 0);
+ border: 1px solid #fff;
+ border-radius: 10px;
+}
+.carousel-indicators .active {
+ width: 12px;
+ height: 12px;
+ margin: 0;
+ background-color: #fff;
+}
+.carousel-caption {
+ position: absolute;
+ right: 15%;
+ bottom: 20px;
+ left: 15%;
+ z-index: 10;
+ padding-top: 20px;
+ padding-bottom: 20px;
+ color: #fff;
+ text-align: center;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .6);
+}
+.carousel-caption .btn {
+ text-shadow: none;
+}
+@media screen and (min-width: 768px) {
+ .carousel-control .glyphicon-chevron-left,
+ .carousel-control .glyphicon-chevron-right,
+ .carousel-control .icon-prev,
+ .carousel-control .icon-next {
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ margin-left: -15px;
+ font-size: 30px;
+ }
+ .carousel-caption {
+ right: 20%;
+ left: 20%;
+ padding-bottom: 30px;
+ }
+ .carousel-indicators {
+ bottom: 20px;
+ }
+}
+.clearfix:before,
+.clearfix:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.pager:before,
+.pager:after,
+.panel-body:before,
+.panel-body:after,
+.modal-footer:before,
+.modal-footer:after {
+ display: table;
+ content: " ";
+}
+.clearfix:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.pager:after,
+.panel-body:after,
+.modal-footer:after {
+ clear: both;
+}
+.center-block {
+ display: block;
+ margin-right: auto;
+ margin-left: auto;
+}
+.pull-right {
+ float: right !important;
+}
+.pull-left {
+ float: left !important;
+}
+.hide {
+ display: none !important;
+}
+.show {
+ display: block !important;
+}
+.invisible {
+ visibility: hidden;
+}
+.text-hide {
+ font: 0/0 a;
+ color: transparent;
+ text-shadow: none;
+ background-color: transparent;
+ border: 0;
+}
+.hidden {
+ display: none !important;
+ visibility: hidden !important;
+}
+.affix {
+ position: fixed;
+}
+@-ms-viewport {
+ width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+ display: none !important;
+}
+@media (max-width: 767px) {
+ .visible-xs {
+ display: block !important;
+ }
+ table.visible-xs {
+ display: table;
+ }
+ tr.visible-xs {
+ display: table-row !important;
+ }
+ th.visible-xs,
+ td.visible-xs {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .visible-sm {
+ display: block !important;
+ }
+ table.visible-sm {
+ display: table;
+ }
+ tr.visible-sm {
+ display: table-row !important;
+ }
+ th.visible-sm,
+ td.visible-sm {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .visible-md {
+ display: block !important;
+ }
+ table.visible-md {
+ display: table;
+ }
+ tr.visible-md {
+ display: table-row !important;
+ }
+ th.visible-md,
+ td.visible-md {
+ display: table-cell !important;
+ }
+}
+@media (min-width: 1200px) {
+ .visible-lg {
+ display: block !important;
+ }
+ table.visible-lg {
+ display: table;
+ }
+ tr.visible-lg {
+ display: table-row !important;
+ }
+ th.visible-lg,
+ td.visible-lg {
+ display: table-cell !important;
+ }
+}
+@media (max-width: 767px) {
+ .hidden-xs {
+ display: none !important;
+ }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+ .hidden-sm {
+ display: none !important;
+ }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+ .hidden-md {
+ display: none !important;
+ }
+}
+@media (min-width: 1200px) {
+ .hidden-lg {
+ display: none !important;
+ }
+}
+.visible-print {
+ display: none !important;
+}
+@media print {
+ .visible-print {
+ display: block !important;
+ }
+ table.visible-print {
+ display: table;
+ }
+ tr.visible-print {
+ display: table-row !important;
+ }
+ th.visible-print,
+ td.visible-print {
+ display: table-cell !important;
+ }
+}
+@media print {
+ .hidden-print {
+ display: none !important;
+ }
+}
+/*# sourceMappingURL=bootstrap.css.map */
diff --git a/www/lib/angular-chart.js/examples/bubble.html b/www/lib/angular-chart.js/examples/bubble.html
new file mode 100644
index 0000000..f12396a
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/bubble.html
@@ -0,0 +1,29 @@
+
+
+
+
+ Bubble chart
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/bubble.js b/www/lib/angular-chart.js/examples/bubble.js
new file mode 100644
index 0000000..4ae5a12
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/bubble.js
@@ -0,0 +1,55 @@
+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/www/lib/angular-chart.js/examples/charts.html b/www/lib/angular-chart.js/examples/charts.html
new file mode 100644
index 0000000..3b43295
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/charts.html
@@ -0,0 +1,701 @@
+
+
+
+
+ Charts
+
+
+
+
+
+
+
+
+
+
+
+
+ Dependencies
+
+ This repository contains a set of native AngularJS directives for Chart.js. The only required dependencies are:
+
+
+ AngularJS (tested with 1.2.x, 1.3.x, 1.4.x and 1.5.x although it probably works with older versions)
+ Chart.js (requires Chart.js 2.0.x).
+
+ 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 bower.
+ 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.
+
+ Blue
+ Light grey
+ Red
+ Green
+ Yellow
+ Grey
+ Dark Grey
+
+ You can also use the provider : ChartJsProvider in a .config()
+
(function (ChartJsProvider) {
+ ChartJsProvider.setOptions({ colors : [ '#803690', '#00ADF9', '#DCDCDC', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'] });
+});
+
+
+
+
+
+
+
+
+
+
.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]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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
+ }]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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';
+ };
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
Chart Data
+
+
+
+ {{label}}
+
+
+ {{data[$parent.$index][$index]}}
+
+
+
Randomize
+
+
+
+
+
+
+
+
+
+
+
+ <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'
+ }
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/charts.template.html b/www/lib/angular-chart.js/examples/charts.template.html
new file mode 100644
index 0000000..a900d6d
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/charts.template.html
@@ -0,0 +1,701 @@
+
+
+
+
+ Charts
+
+
+
+
+
+
+
+
+
+
+
+
+ Dependencies
+
+ This repository contains a set of native AngularJS directives for Chart.js. The only required dependencies are:
+
+
+ AngularJS (tested with 1.2.x, 1.3.x, 1.4.x and 1.5.x although it probably works with older versions)
+ Chart.js (requires Chart.js 2.0.x).
+
+ 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 bower.
+ 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.
+
+ Blue
+ Light grey
+ Red
+ Green
+ Yellow
+ Grey
+ Dark Grey
+
+ You can also use the provider : ChartJsProvider in a .config()
+
(function (ChartJsProvider) {
+ ChartJsProvider.setOptions({ colors : [ '#803690', '#00ADF9', '#DCDCDC', '#46BFBD', '#FDB45C', '#949FB1', '#4D5360'] });
+});
+
+
+
+
+
+
+
+
+
+
.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]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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
+ }]
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
.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';
+ };
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
Chart Data
+
+
+
+ {{label}}
+
+
+ {{data[$parent.$index][$index]}}
+
+
+
Randomize
+
+
+
+
+
+
+
+
+
+
+
+ <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'
+ }
+ ];
+});
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/commonjs.html b/www/lib/angular-chart.js/examples/commonjs.html
new file mode 100644
index 0000000..d468799
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/commonjs.html
@@ -0,0 +1,25 @@
+
+
+
+
+ CommonJS
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/commonjs.js b/www/lib/angular-chart.js/examples/commonjs.js
new file mode 100644
index 0000000..2315748
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/commonjs.js
@@ -0,0 +1,19 @@
+(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/www/lib/angular-chart.js/examples/dataset-override.html b/www/lib/angular-chart.js/examples/dataset-override.html
new file mode 100644
index 0000000..cadfe37
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/dataset-override.html
@@ -0,0 +1,38 @@
+
+
+
+
+ Charts with datasets overrides
+
+
+
+
+
+
+
+
+
+
Doughnut dataset override
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/dataset-override.js b/www/lib/angular-chart.js/examples/dataset-override.js
new file mode 100644
index 0000000..e7cf76d
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/dataset-override.js
@@ -0,0 +1,32 @@
+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/www/lib/angular-chart.js/examples/smoothscroll.min.js b/www/lib/angular-chart.js/examples/smoothscroll.min.js
new file mode 100644
index 0000000..631953c
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/smoothscroll.min.js
@@ -0,0 +1 @@
+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/www/lib/angular-chart.js/examples/stacked-bars.html b/www/lib/angular-chart.js/examples/stacked-bars.html
new file mode 100644
index 0000000..5009149
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/stacked-bars.html
@@ -0,0 +1,31 @@
+
+
+
+
+ Stacked Bar chart
+
+
+
+
+
+
+
+
+
+
Stacked Bar Chart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/tables.html b/www/lib/angular-chart.js/examples/tables.html
new file mode 100644
index 0000000..672bc0a
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/tables.html
@@ -0,0 +1,45 @@
+
+
+
+
+ Data tables
+
+
+
+
+
+
+
+
+
Chart Data
+
+
+
+ {{label}}
+
+
+ {{data[$parent.$index][$index]}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/tabs.html b/www/lib/angular-chart.js/examples/tabs.html
new file mode 100644
index 0000000..f2e18ba
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/tabs.html
@@ -0,0 +1,33 @@
+
+
+
+
+ Charts in tabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/ticks.html b/www/lib/angular-chart.js/examples/ticks.html
new file mode 100644
index 0000000..5264da2
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/ticks.html
@@ -0,0 +1,30 @@
+
+
+
+
+ Realtime ticks
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/webpack.commonjs.js b/www/lib/angular-chart.js/examples/webpack.commonjs.js
new file mode 100644
index 0000000..528eba9
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/webpack.commonjs.js
@@ -0,0 +1,18 @@
+(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/www/lib/angular-chart.js/examples/webpack.config.js b/www/lib/angular-chart.js/examples/webpack.config.js
new file mode 100644
index 0000000..6eb0658
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/webpack.config.js
@@ -0,0 +1,12 @@
+// 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/www/lib/angular-chart.js/examples/xy.html b/www/lib/angular-chart.js/examples/xy.html
new file mode 100644
index 0000000..17a6145
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/xy.html
@@ -0,0 +1,28 @@
+
+
+
+
+ Charts with { x, y }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/examples/xy.js b/www/lib/angular-chart.js/examples/xy.js
new file mode 100644
index 0000000..df6dcd1
--- /dev/null
+++ b/www/lib/angular-chart.js/examples/xy.js
@@ -0,0 +1,18 @@
+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/www/lib/angular-chart.js/gulpfile.js b/www/lib/angular-chart.js/gulpfile.js
new file mode 100644
index 0000000..3163670
--- /dev/null
+++ b/www/lib/angular-chart.js/gulpfile.js
@@ -0,0 +1,170 @@
+(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/www/lib/angular-chart.js/package.json b/www/lib/angular-chart.js/package.json
new file mode 100644
index 0000000..7c74a73
--- /dev/null
+++ b/www/lib/angular-chart.js/package.json
@@ -0,0 +1,100 @@
+{
+ "name": "angular-chart.js",
+ "version": "1.0.2",
+ "description": "An angular.js wrapper for Chart.js",
+ "homepage": "http://jtblin.github.io/angular-chart.js/",
+ "main": "dist/angular-chart.js",
+ "directories": {
+ "example": "examples"
+ },
+ "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"
+ },
+ "author": {
+ "name": "Jerome Touffe-Blin",
+ "email": "jtblin@gmail.com"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/jtblin/angular-chart.js.git"
+ },
+ "license": "BSD-2-Clause",
+ "devDependencies": {
+ "Rainbow": "git+https://github.com/ccampbell/rainbow.git",
+ "angular-bootstrap": "^0.12.2",
+ "angular-mocks": "^1.5.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"
+ },
+ "dependencies": {
+ "angular": "1.x",
+ "chart.js": "2.x"
+ },
+ "gitHead": "56bcafb0979d6f61ec0fe2a770a74697a38bc3fe",
+ "bugs": {
+ "url": "https://github.com/jtblin/angular-chart.js/issues"
+ },
+ "_id": "angular-chart.js@1.0.2",
+ "_shasum": "0b76d45f83fc01474662bc78414a0669ec01d1c8",
+ "_from": "angular-chart.js@latest",
+ "_npmVersion": "3.9.5",
+ "_nodeVersion": "6.2.2",
+ "_npmUser": {
+ "name": "jtblin",
+ "email": "jtblin@gmail.com"
+ },
+ "maintainers": [
+ {
+ "name": "jtblin",
+ "email": "jtblin@gmail.com"
+ }
+ ],
+ "dist": {
+ "shasum": "0b76d45f83fc01474662bc78414a0669ec01d1c8",
+ "tarball": "https://registry.npmjs.org/angular-chart.js/-/angular-chart.js-1.0.2.tgz"
+ },
+ "_npmOperationalInternal": {
+ "host": "packages-12-west.internal.npmjs.com",
+ "tmp": "tmp/angular-chart.js-1.0.2.tgz_1471598008930_0.7436023156624287"
+ },
+ "_resolved": "https://registry.npmjs.org/angular-chart.js/-/angular-chart.js-1.0.2.tgz"
+}
diff --git a/www/lib/angular-chart.js/test/fixtures/29-tabs.html b/www/lib/angular-chart.js/test/fixtures/29-tabs.html
new file mode 100644
index 0000000..8f5a172
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/29-tabs.html
@@ -0,0 +1,33 @@
+
+
+
+
+ Charts in tabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/29-tabs.js b/www/lib/angular-chart.js/test/fixtures/29-tabs.js
new file mode 100644
index 0000000..b29dab7
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/29-tabs.js
@@ -0,0 +1,18 @@
+(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/www/lib/angular-chart.js/test/fixtures/29-tabs.png b/www/lib/angular-chart.js/test/fixtures/29-tabs.png
new file mode 100644
index 0000000..62bd354
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/29-tabs.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.html b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.html
new file mode 100644
index 0000000..ab68a94
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.html
@@ -0,0 +1,35 @@
+
+
+
+
+ Pie update colors
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.js b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.js
new file mode 100644
index 0000000..9265754
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.js
@@ -0,0 +1,34 @@
+(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/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.png b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.png
new file mode 100644
index 0000000..c70942d
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/51-pie-update-colours.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.html b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.html
new file mode 100644
index 0000000..d5975d4
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.html
@@ -0,0 +1,36 @@
+
+
+
+
+ Not enough colors
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.js b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.js
new file mode 100644
index 0000000..2f5d97d
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.js
@@ -0,0 +1,36 @@
+(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/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.png b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.png
new file mode 100644
index 0000000..494b1bb
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/54-not-enough-colours.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/57-hex-colours.html b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.html
new file mode 100644
index 0000000..e8f4f26
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.html
@@ -0,0 +1,35 @@
+
+
+
+
+ Hex colors
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/57-hex-colours.js b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.js
new file mode 100644
index 0000000..f827ee4
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.js
@@ -0,0 +1,15 @@
+(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/www/lib/angular-chart.js/test/fixtures/57-hex-colours.png b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.png
new file mode 100644
index 0000000..f936a37
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/57-hex-colours.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/bubble.html b/www/lib/angular-chart.js/test/fixtures/bubble.html
new file mode 100644
index 0000000..0ccabf0
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/bubble.html
@@ -0,0 +1,29 @@
+
+
+
+
+ Bubble chart
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/bubble.js b/www/lib/angular-chart.js/test/fixtures/bubble.js
new file mode 100644
index 0000000..7af4b8a
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/bubble.js
@@ -0,0 +1,787 @@
+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/www/lib/angular-chart.js/test/fixtures/bubble.png b/www/lib/angular-chart.js/test/fixtures/bubble.png
new file mode 100644
index 0000000..f9c070b
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/bubble.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/charts.html b/www/lib/angular-chart.js/test/fixtures/charts.html
new file mode 100644
index 0000000..ba90792
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/charts.html
@@ -0,0 +1,77 @@
+
+
+
+
+ Charts
+
+
+
+
+
+
+
+
+
+
+
+
+
Polar Area Chart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/charts.js b/www/lib/angular-chart.js/test/fixtures/charts.js
new file mode 100644
index 0000000..82dbe8d
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/charts.js
@@ -0,0 +1,68 @@
+(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/www/lib/angular-chart.js/test/fixtures/charts.png b/www/lib/angular-chart.js/test/fixtures/charts.png
new file mode 100644
index 0000000..5c0f2c4
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/charts.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/configure-line-chart.html b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.html
new file mode 100644
index 0000000..99ee7b7
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.html
@@ -0,0 +1,33 @@
+
+
+
+
+ Pie update colors
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/configure-line-chart.js b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.js
new file mode 100644
index 0000000..e26439c
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.js
@@ -0,0 +1,33 @@
+(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/www/lib/angular-chart.js/test/fixtures/configure-line-chart.png b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.png
new file mode 100644
index 0000000..371a54a
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/configure-line-chart.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/coverage.js b/www/lib/angular-chart.js/test/fixtures/coverage.js
new file mode 100644
index 0000000..3dd4e40
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/coverage.js
@@ -0,0 +1,9 @@
+
+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":1,"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":1,"42":0,"43":0,"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":1,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":1,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":1,"78":0,"79":0,"80":0,"81":0,"82":0,"83":1,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":1,"96":0,"97":0,"98":0,"99":0,"100":1,"101":0,"102":1,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":1,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":1,"120":0,"121":0,"122":0,"123":0,"124":0,"125":1,"126":0,"127":0,"128":1,"129":0,"130":1,"131":0,"132":1,"133":0,"134":1,"135":0,"136":0,"137":1,"138":0,"139":1,"140":0,"141":1,"142":0,"143":0,"144":1,"145":0,"146":0,"147":0,"148":0,"149":0,"150":1,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":1,"158":0,"159":1,"160":0,"161":0,"162":1,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":1,"170":0,"171":1,"172":0,"173":0,"174":0,"175":0,"176":0,"177":1,"178":0,"179":0,"180":0,"181":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,0],"39":[0,0],"40":[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,0,0,0],"56":[0,0],"57":[0,0],"58":[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},"fnMap":{"1":{"name":"(anonymous_1)","line":1,"loc":{"start":{"line":1,"column":1},"end":{"line":1,"column":20}}},"2":{"name":"(anonymous_2)","line":17,"loc":{"start":{"line":17,"column":2},"end":{"line":17,"column":28}}},"3":{"name":"(anonymous_3)","line":44,"loc":{"start":{"line":44,"column":47},"end":{"line":44,"column":73}}},"4":{"name":"(anonymous_4)","line":45,"loc":{"start":{"line":45,"column":47},"end":{"line":45,"column":73}}},"5":{"name":"(anonymous_5)","line":46,"loc":{"start":{"line":46,"column":46},"end":{"line":46,"column":72}}},"6":{"name":"(anonymous_6)","line":47,"loc":{"start":{"line":47,"column":56},"end":{"line":47,"column":82}}},"7":{"name":"(anonymous_7)","line":48,"loc":{"start":{"line":48,"column":48},"end":{"line":48,"column":74}}},"8":{"name":"(anonymous_8)","line":49,"loc":{"start":{"line":49,"column":51},"end":{"line":49,"column":77}}},"9":{"name":"(anonymous_9)","line":50,"loc":{"start":{"line":50,"column":46},"end":{"line":50,"column":72}}},"10":{"name":"(anonymous_10)","line":51,"loc":{"start":{"line":51,"column":52},"end":{"line":51,"column":78}}},"11":{"name":"(anonymous_11)","line":52,"loc":{"start":{"line":52,"column":49},"end":{"line":52,"column":75}}},"12":{"name":"ChartJsProvider","line":64,"loc":{"start":{"line":64,"column":2},"end":{"line":64,"column":30}}},"13":{"name":"(anonymous_13)","line":68,"loc":{"start":{"line":68,"column":18},"end":{"line":68,"column":34}}},"14":{"name":"(anonymous_14)","line":77,"loc":{"start":{"line":77,"column":22},"end":{"line":77,"column":53}}},"15":{"name":"(anonymous_15)","line":88,"loc":{"start":{"line":88,"column":16},"end":{"line":88,"column":28}}},"16":{"name":"ChartJsFactory","line":93,"loc":{"start":{"line":93,"column":2},"end":{"line":93,"column":46}}},"17":{"name":"chart","line":94,"loc":{"start":{"line":94,"column":11},"end":{"line":94,"column":33}}},"18":{"name":"(anonymous_18)","line":109,"loc":{"start":{"line":109,"column":14},"end":{"line":109,"column":49}}},"19":{"name":"(anonymous_19)","line":121,"loc":{"start":{"line":121,"column":32},"end":{"line":121,"column":44}}},"20":{"name":"(anonymous_20)","line":125,"loc":{"start":{"line":125,"column":31},"end":{"line":125,"column":43}}},"21":{"name":"watchData","line":129,"loc":{"start":{"line":129,"column":10},"end":{"line":129,"column":46}}},"22":{"name":"watchOther","line":143,"loc":{"start":{"line":143,"column":10},"end":{"line":143,"column":47}}},"23":{"name":"watchType","line":154,"loc":{"start":{"line":154,"column":10},"end":{"line":154,"column":46}}},"24":{"name":"createChart","line":163,"loc":{"start":{"line":163,"column":4},"end":{"line":163,"column":45}}},"25":{"name":"canUpdateChart","line":186,"loc":{"start":{"line":186,"column":4},"end":{"line":186,"column":45}}},"26":{"name":"(anonymous_26)","line":189,"loc":{"start":{"line":189,"column":56},"end":{"line":189,"column":82}}},"27":{"name":"sum","line":196,"loc":{"start":{"line":196,"column":4},"end":{"line":196,"column":30}}},"28":{"name":"getEventHandler","line":200,"loc":{"start":{"line":200,"column":4},"end":{"line":200,"column":66}}},"29":{"name":"(anonymous_29)","line":202,"loc":{"start":{"line":202,"column":13},"end":{"line":202,"column":28}}},"30":{"name":"getColors","line":214,"loc":{"start":{"line":214,"column":4},"end":{"line":214,"column":37}}},"31":{"name":"convertColor","line":229,"loc":{"start":{"line":229,"column":4},"end":{"line":229,"column":34}}},"32":{"name":"getRandomColor","line":235,"loc":{"start":{"line":235,"column":4},"end":{"line":235,"column":31}}},"33":{"name":"getColor","line":240,"loc":{"start":{"line":240,"column":4},"end":{"line":240,"column":30}}},"34":{"name":"getRandomInt","line":251,"loc":{"start":{"line":251,"column":4},"end":{"line":251,"column":37}}},"35":{"name":"rgba","line":255,"loc":{"start":{"line":255,"column":4},"end":{"line":255,"column":33}}},"36":{"name":"hexToRgb","line":261,"loc":{"start":{"line":261,"column":4},"end":{"line":261,"column":28}}},"37":{"name":"hasData","line":270,"loc":{"start":{"line":270,"column":4},"end":{"line":270,"column":29}}},"38":{"name":"getChartColorFn","line":274,"loc":{"start":{"line":274,"column":4},"end":{"line":274,"column":37}}},"39":{"name":"getChartData","line":278,"loc":{"start":{"line":278,"column":4},"end":{"line":278,"column":40}}},"40":{"name":"getDataSets","line":285,"loc":{"start":{"line":285,"column":4},"end":{"line":285,"column":73}}},"41":{"name":"(anonymous_41)","line":288,"loc":{"start":{"line":288,"column":27},"end":{"line":288,"column":46}}},"42":{"name":"getData","line":301,"loc":{"start":{"line":301,"column":4},"end":{"line":301,"column":61}}},"43":{"name":"(anonymous_43)","line":306,"loc":{"start":{"line":306,"column":38},"end":{"line":306,"column":55}}},"44":{"name":"(anonymous_44)","line":309,"loc":{"start":{"line":309,"column":43},"end":{"line":309,"column":60}}},"45":{"name":"getChartOptions","line":320,"loc":{"start":{"line":320,"column":4},"end":{"line":320,"column":43}}},"46":{"name":"bindEvents","line":324,"loc":{"start":{"line":324,"column":4},"end":{"line":324,"column":37}}},"47":{"name":"updateChart","line":329,"loc":{"start":{"line":329,"column":4},"end":{"line":329,"column":41}}},"48":{"name":"(anonymous_48)","line":331,"loc":{"start":{"line":331,"column":42},"end":{"line":331,"column":64}}},"49":{"name":"isEmpty","line":342,"loc":{"start":{"line":342,"column":4},"end":{"line":342,"column":29}}},"50":{"name":"canDisplay","line":348,"loc":{"start":{"line":348,"column":4},"end":{"line":348,"column":53}}},"51":{"name":"(anonymous_51)","line":351,"loc":{"start":{"line":351,"column":17},"end":{"line":351,"column":29}}},"52":{"name":"destroyChart","line":359,"loc":{"start":{"line":359,"column":4},"end":{"line":359,"column":33}}}},"statementMap":{"1":{"start":{"line":1,"column":0},"end":{"line":365,"column":4}},"2":{"start":{"line":3,"column":2},"end":{"line":16,"column":3}},"3":{"start":{"line":5,"column":4},"end":{"line":7,"column":66}},"4":{"start":{"line":8,"column":10},"end":{"line":16,"column":3}},"5":{"start":{"line":10,"column":4},"end":{"line":10,"column":42}},"6":{"start":{"line":13,"column":4},"end":{"line":14,"column":110}},"7":{"start":{"line":14,"column":6},"end":{"line":14,"column":110}},"8":{"start":{"line":15,"column":4},"end":{"line":15,"column":28}},"9":{"start":{"line":20,"column":2},"end":{"line":20,"column":108}},"10":{"start":{"line":21,"column":2},"end":{"line":21,"column":48}},"11":{"start":{"line":22,"column":2},"end":{"line":22,"column":54}},"12":{"start":{"line":23,"column":2},"end":{"line":23,"column":59}},"13":{"start":{"line":24,"column":2},"end":{"line":24,"column":47}},"14":{"start":{"line":25,"column":2},"end":{"line":33,"column":4}},"15":{"start":{"line":35,"column":2},"end":{"line":37,"column":64}},"16":{"start":{"line":39,"column":2},"end":{"line":39,"column":59}},"17":{"start":{"line":39,"column":19},"end":{"line":39,"column":59}},"18":{"start":{"line":41,"column":2},"end":{"line":53,"column":10}},"19":{"start":{"line":44,"column":75},"end":{"line":44,"column":103}},"20":{"start":{"line":45,"column":75},"end":{"line":45,"column":109}},"21":{"start":{"line":46,"column":74},"end":{"line":46,"column":107}},"22":{"start":{"line":47,"column":84},"end":{"line":47,"column":127}},"23":{"start":{"line":48,"column":76},"end":{"line":48,"column":111}},"24":{"start":{"line":49,"column":79},"end":{"line":49,"column":117}},"25":{"start":{"line":50,"column":74},"end":{"line":50,"column":107}},"26":{"start":{"line":51,"column":80},"end":{"line":51,"column":119}},"27":{"start":{"line":52,"column":77},"end":{"line":52,"column":113}},"28":{"start":{"line":64,"column":2},"end":{"line":91,"column":3}},"29":{"start":{"line":65,"column":4},"end":{"line":65,"column":39}},"30":{"start":{"line":66,"column":4},"end":{"line":72,"column":6}},"31":{"start":{"line":69,"column":8},"end":{"line":69,"column":54}},"32":{"start":{"line":70,"column":8},"end":{"line":70,"column":56}},"33":{"start":{"line":77,"column":4},"end":{"line":86,"column":6}},"34":{"start":{"line":79,"column":6},"end":{"line":83,"column":7}},"35":{"start":{"line":80,"column":8},"end":{"line":80,"column":29}},"36":{"start":{"line":81,"column":8},"end":{"line":81,"column":57}},"37":{"start":{"line":82,"column":8},"end":{"line":82,"column":15}},"38":{"start":{"line":85,"column":6},"end":{"line":85,"column":73}},"39":{"start":{"line":88,"column":4},"end":{"line":90,"column":6}},"40":{"start":{"line":89,"column":6},"end":{"line":89,"column":21}},"41":{"start":{"line":93,"column":2},"end":{"line":364,"column":3}},"42":{"start":{"line":94,"column":4},"end":{"line":161,"column":6}},"43":{"start":{"line":95,"column":6},"end":{"line":160,"column":8}},"44":{"start":{"line":110,"column":10},"end":{"line":110,"column":74}},"45":{"start":{"line":110,"column":27},"end":{"line":110,"column":74}},"46":{"start":{"line":113,"column":10},"end":{"line":113,"column":53}},"47":{"start":{"line":114,"column":10},"end":{"line":114,"column":56}},"48":{"start":{"line":115,"column":10},"end":{"line":115,"column":56}},"49":{"start":{"line":116,"column":10},"end":{"line":116,"column":57}},"50":{"start":{"line":117,"column":10},"end":{"line":117,"column":56}},"51":{"start":{"line":118,"column":10},"end":{"line":118,"column":65}},"52":{"start":{"line":119,"column":10},"end":{"line":119,"column":54}},"53":{"start":{"line":121,"column":10},"end":{"line":123,"column":13}},"54":{"start":{"line":122,"column":12},"end":{"line":122,"column":32}},"55":{"start":{"line":125,"column":10},"end":{"line":127,"column":13}},"56":{"start":{"line":126,"column":12},"end":{"line":126,"column":50}},"57":{"start":{"line":126,"column":29},"end":{"line":126,"column":50}},"58":{"start":{"line":129,"column":10},"end":{"line":141,"column":11}},"59":{"start":{"line":130,"column":12},"end":{"line":133,"column":13}},"60":{"start":{"line":131,"column":14},"end":{"line":131,"column":34}},"61":{"start":{"line":132,"column":14},"end":{"line":132,"column":21}},"62":{"start":{"line":134,"column":12},"end":{"line":134,"column":52}},"63":{"start":{"line":135,"column":12},"end":{"line":135,"column":36}},"64":{"start":{"line":135,"column":29},"end":{"line":135,"column":36}},"65":{"start":{"line":137,"column":12},"end":{"line":138,"column":48}},"66":{"start":{"line":138,"column":14},"end":{"line":138,"column":48}},"67":{"start":{"line":140,"column":12},"end":{"line":140,"column":48}},"68":{"start":{"line":143,"column":10},"end":{"line":152,"column":11}},"69":{"start":{"line":144,"column":12},"end":{"line":144,"column":40}},"70":{"start":{"line":144,"column":33},"end":{"line":144,"column":40}},"71":{"start":{"line":145,"column":12},"end":{"line":145,"column":55}},"72":{"start":{"line":145,"column":48},"end":{"line":145,"column":55}},"73":{"start":{"line":146,"column":12},"end":{"line":146,"column":52}},"74":{"start":{"line":147,"column":12},"end":{"line":147,"column":36}},"75":{"start":{"line":147,"column":29},"end":{"line":147,"column":36}},"76":{"start":{"line":151,"column":12},"end":{"line":151,"column":48}},"77":{"start":{"line":154,"column":10},"end":{"line":158,"column":11}},"78":{"start":{"line":155,"column":12},"end":{"line":155,"column":40}},"79":{"start":{"line":155,"column":33},"end":{"line":155,"column":40}},"80":{"start":{"line":156,"column":12},"end":{"line":156,"column":55}},"81":{"start":{"line":156,"column":48},"end":{"line":156,"column":55}},"82":{"start":{"line":157,"column":12},"end":{"line":157,"column":45}},"83":{"start":{"line":163,"column":4},"end":{"line":184,"column":5}},"84":{"start":{"line":164,"column":6},"end":{"line":164,"column":49}},"85":{"start":{"line":165,"column":6},"end":{"line":165,"column":79}},"86":{"start":{"line":165,"column":72},"end":{"line":165,"column":79}},"87":{"start":{"line":167,"column":6},"end":{"line":167,"column":24}},"88":{"start":{"line":168,"column":6},"end":{"line":168,"column":37}},"89":{"start":{"line":170,"column":6},"end":{"line":170,"column":51}},"90":{"start":{"line":171,"column":6},"end":{"line":171,"column":43}},"91":{"start":{"line":175,"column":6},"end":{"line":175,"column":26}},"92":{"start":{"line":177,"column":6},"end":{"line":181,"column":9}},"93":{"start":{"line":182,"column":6},"end":{"line":182,"column":47}},"94":{"start":{"line":183,"column":6},"end":{"line":183,"column":29}},"95":{"start":{"line":186,"column":4},"end":{"line":194,"column":5}},"96":{"start":{"line":187,"column":6},"end":{"line":192,"column":7}},"97":{"start":{"line":188,"column":8},"end":{"line":191,"column":78}},"98":{"start":{"line":190,"column":10},"end":{"line":190,"column":57}},"99":{"start":{"line":193,"column":6},"end":{"line":193,"column":19}},"100":{"start":{"line":196,"column":4},"end":{"line":198,"column":5}},"101":{"start":{"line":197,"column":6},"end":{"line":197,"column":25}},"102":{"start":{"line":200,"column":4},"end":{"line":212,"column":5}},"103":{"start":{"line":201,"column":6},"end":{"line":201,"column":27}},"104":{"start":{"line":202,"column":6},"end":{"line":211,"column":8}},"105":{"start":{"line":203,"column":8},"end":{"line":203,"column":85}},"106":{"start":{"line":204,"column":8},"end":{"line":210,"column":9}},"107":{"start":{"line":205,"column":10},"end":{"line":205,"column":60}},"108":{"start":{"line":206,"column":10},"end":{"line":209,"column":11}},"109":{"start":{"line":207,"column":12},"end":{"line":207,"column":37}},"110":{"start":{"line":208,"column":12},"end":{"line":208,"column":45}},"111":{"start":{"line":214,"column":4},"end":{"line":227,"column":5}},"112":{"start":{"line":215,"column":6},"end":{"line":218,"column":8}},"113":{"start":{"line":219,"column":6},"end":{"line":219,"column":67}},"114":{"start":{"line":220,"column":6},"end":{"line":222,"column":7}},"115":{"start":{"line":221,"column":8},"end":{"line":221,"column":43}},"116":{"start":{"line":225,"column":6},"end":{"line":225,"column":54}},"117":{"start":{"line":225,"column":27},"end":{"line":225,"column":54}},"118":{"start":{"line":226,"column":6},"end":{"line":226,"column":38}},"119":{"start":{"line":229,"column":4},"end":{"line":233,"column":5}},"120":{"start":{"line":230,"column":6},"end":{"line":230,"column":68}},"121":{"start":{"line":230,"column":55},"end":{"line":230,"column":68}},"122":{"start":{"line":231,"column":6},"end":{"line":231,"column":100}},"123":{"start":{"line":231,"column":57},"end":{"line":231,"column":100}},"124":{"start":{"line":232,"column":6},"end":{"line":232,"column":30}},"125":{"start":{"line":235,"column":4},"end":{"line":238,"column":5}},"126":{"start":{"line":236,"column":6},"end":{"line":236,"column":85}},"127":{"start":{"line":237,"column":6},"end":{"line":237,"column":29}},"128":{"start":{"line":240,"column":4},"end":{"line":249,"column":5}},"129":{"start":{"line":241,"column":6},"end":{"line":248,"column":8}},"130":{"start":{"line":251,"column":4},"end":{"line":253,"column":5}},"131":{"start":{"line":252,"column":6},"end":{"line":252,"column":63}},"132":{"start":{"line":255,"column":4},"end":{"line":258,"column":5}},"133":{"start":{"line":257,"column":6},"end":{"line":257,"column":106}},"134":{"start":{"line":261,"column":4},"end":{"line":268,"column":5}},"135":{"start":{"line":262,"column":6},"end":{"line":265,"column":25}},"136":{"start":{"line":267,"column":6},"end":{"line":267,"column":23}},"137":{"start":{"line":270,"column":4},"end":{"line":272,"column":5}},"138":{"start":{"line":271,"column":6},"end":{"line":271,"column":55}},"139":{"start":{"line":274,"column":4},"end":{"line":276,"column":5}},"140":{"start":{"line":275,"column":6},"end":{"line":275,"column":94}},"141":{"start":{"line":278,"column":4},"end":{"line":283,"column":5}},"142":{"start":{"line":279,"column":6},"end":{"line":279,"column":42}},"143":{"start":{"line":280,"column":6},"end":{"line":282,"column":88}},"144":{"start":{"line":285,"column":4},"end":{"line":299,"column":5}},"145":{"start":{"line":286,"column":6},"end":{"line":298,"column":8}},"146":{"start":{"line":289,"column":10},"end":{"line":292,"column":13}},"147":{"start":{"line":293,"column":10},"end":{"line":295,"column":11}},"148":{"start":{"line":294,"column":12},"end":{"line":294,"column":55}},"149":{"start":{"line":296,"column":10},"end":{"line":296,"column":25}},"150":{"start":{"line":301,"column":4},"end":{"line":318,"column":5}},"151":{"start":{"line":302,"column":6},"end":{"line":313,"column":8}},"152":{"start":{"line":307,"column":12},"end":{"line":307,"column":46}},"153":{"start":{"line":310,"column":12},"end":{"line":310,"column":41}},"154":{"start":{"line":314,"column":6},"end":{"line":316,"column":7}},"155":{"start":{"line":315,"column":8},"end":{"line":315,"column":60}},"156":{"start":{"line":317,"column":6},"end":{"line":317,"column":21}},"157":{"start":{"line":320,"column":4},"end":{"line":322,"column":5}},"158":{"start":{"line":321,"column":6},"end":{"line":321,"column":78}},"159":{"start":{"line":324,"column":4},"end":{"line":327,"column":5}},"160":{"start":{"line":325,"column":6},"end":{"line":325,"column":98}},"161":{"start":{"line":326,"column":6},"end":{"line":326,"column":101}},"162":{"start":{"line":329,"column":4},"end":{"line":340,"column":5}},"163":{"start":{"line":330,"column":6},"end":{"line":336,"column":7}},"164":{"start":{"line":331,"column":8},"end":{"line":333,"column":11}},"165":{"start":{"line":332,"column":10},"end":{"line":332,"column":35}},"166":{"start":{"line":335,"column":8},"end":{"line":335,"column":51}},"167":{"start":{"line":338,"column":6},"end":{"line":338,"column":27}},"168":{"start":{"line":339,"column":6},"end":{"line":339,"column":47}},"169":{"start":{"line":342,"column":4},"end":{"line":346,"column":5}},"170":{"start":{"line":343,"column":6},"end":{"line":345,"column":67}},"171":{"start":{"line":348,"column":4},"end":{"line":357,"column":5}},"172":{"start":{"line":350,"column":6},"end":{"line":355,"column":7}},"173":{"start":{"line":351,"column":8},"end":{"line":353,"column":22}},"174":{"start":{"line":352,"column":10},"end":{"line":352,"column":41}},"175":{"start":{"line":354,"column":8},"end":{"line":354,"column":21}},"176":{"start":{"line":356,"column":6},"end":{"line":356,"column":18}},"177":{"start":{"line":359,"column":4},"end":{"line":363,"column":5}},"178":{"start":{"line":360,"column":6},"end":{"line":360,"column":31}},"179":{"start":{"line":360,"column":24},"end":{"line":360,"column":31}},"180":{"start":{"line":361,"column":6},"end":{"line":361,"column":28}},"181":{"start":{"line":362,"column":6},"end":{"line":362,"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":13,"type":"binary-expr","locations":[{"start":{"line":13,"column":8},"end":{"line":13,"column":38}},{"start":{"line":13,"column":42},"end":{"line":13,"column":70}}]},"8":{"line":35,"type":"binary-expr","locations":[{"start":{"line":35,"column":20},"end":{"line":35,"column":65}},{"start":{"line":36,"column":4},"end":{"line":36,"column":38}},{"start":{"line":37,"column":4},"end":{"line":37,"column":63}}]},"9":{"line":39,"type":"if","locations":[{"start":{"line":39,"column":2},"end":{"line":39,"column":2}},{"start":{"line":39,"column":2},"end":{"line":39,"column":2}}]},"10":{"line":69,"type":"binary-expr","locations":[{"start":{"line":69,"column":26},"end":{"line":69,"column":30}},{"start":{"line":69,"column":34},"end":{"line":69,"column":47}},{"start":{"line":69,"column":51},"end":{"line":69,"column":53}}]},"11":{"line":79,"type":"if","locations":[{"start":{"line":79,"column":6},"end":{"line":79,"column":6}},{"start":{"line":79,"column":6},"end":{"line":79,"column":6}}]},"12":{"line":85,"type":"binary-expr","locations":[{"start":{"line":85,"column":37},"end":{"line":85,"column":50}},{"start":{"line":85,"column":54},"end":{"line":85,"column":56}}]},"13":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":10},"end":{"line":110,"column":10}},{"start":{"line":110,"column":10},"end":{"line":110,"column":10}}]},"14":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":12},"end":{"line":126,"column":12}},{"start":{"line":126,"column":12},"end":{"line":126,"column":12}}]},"15":{"line":130,"type":"if","locations":[{"start":{"line":130,"column":12},"end":{"line":130,"column":12}},{"start":{"line":130,"column":12},"end":{"line":130,"column":12}}]},"16":{"line":130,"type":"binary-expr","locations":[{"start":{"line":130,"column":16},"end":{"line":130,"column":24}},{"start":{"line":130,"column":28},"end":{"line":130,"column":43}},{"start":{"line":130,"column":48},"end":{"line":130,"column":72}},{"start":{"line":130,"column":76},"end":{"line":130,"column":94}}]},"17":{"line":134,"type":"binary-expr","locations":[{"start":{"line":134,"column":28},"end":{"line":134,"column":32}},{"start":{"line":134,"column":36},"end":{"line":134,"column":51}}]},"18":{"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}}]},"19":{"line":137,"type":"if","locations":[{"start":{"line":137,"column":12},"end":{"line":137,"column":12}},{"start":{"line":137,"column":12},"end":{"line":137,"column":12}}]},"20":{"line":137,"type":"binary-expr","locations":[{"start":{"line":137,"column":16},"end":{"line":137,"column":27}},{"start":{"line":137,"column":31},"end":{"line":137,"column":61}}]},"21":{"line":144,"type":"if","locations":[{"start":{"line":144,"column":12},"end":{"line":144,"column":12}},{"start":{"line":144,"column":12},"end":{"line":144,"column":12}}]},"22":{"line":145,"type":"if","locations":[{"start":{"line":145,"column":12},"end":{"line":145,"column":12}},{"start":{"line":145,"column":12},"end":{"line":145,"column":12}}]},"23":{"line":146,"type":"binary-expr","locations":[{"start":{"line":146,"column":28},"end":{"line":146,"column":32}},{"start":{"line":146,"column":36},"end":{"line":146,"column":51}}]},"24":{"line":147,"type":"if","locations":[{"start":{"line":147,"column":12},"end":{"line":147,"column":12}},{"start":{"line":147,"column":12},"end":{"line":147,"column":12}}]},"25":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":12},"end":{"line":155,"column":12}},{"start":{"line":155,"column":12},"end":{"line":155,"column":12}}]},"26":{"line":156,"type":"if","locations":[{"start":{"line":156,"column":12},"end":{"line":156,"column":12}},{"start":{"line":156,"column":12},"end":{"line":156,"column":12}}]},"27":{"line":165,"type":"if","locations":[{"start":{"line":165,"column":6},"end":{"line":165,"column":6}},{"start":{"line":165,"column":6},"end":{"line":165,"column":6}}]},"28":{"line":165,"type":"binary-expr","locations":[{"start":{"line":165,"column":10},"end":{"line":165,"column":26}},{"start":{"line":165,"column":30},"end":{"line":165,"column":70}}]},"29":{"line":187,"type":"if","locations":[{"start":{"line":187,"column":6},"end":{"line":187,"column":6}},{"start":{"line":187,"column":6},"end":{"line":187,"column":6}}]},"30":{"line":187,"type":"binary-expr","locations":[{"start":{"line":187,"column":10},"end":{"line":187,"column":16}},{"start":{"line":187,"column":20},"end":{"line":187,"column":26}},{"start":{"line":187,"column":30},"end":{"line":187,"column":43}},{"start":{"line":187,"column":47},"end":{"line":187,"column":60}}]},"31":{"line":188,"type":"cond-expr","locations":[{"start":{"line":189,"column":8},"end":{"line":190,"column":60}},{"start":{"line":191,"column":10},"end":{"line":191,"column":77}}]},"32":{"line":189,"type":"binary-expr","locations":[{"start":{"line":189,"column":8},"end":{"line":189,"column":39}},{"start":{"line":189,"column":43},"end":{"line":190,"column":60}}]},"33":{"line":191,"type":"cond-expr","locations":[{"start":{"line":191,"column":38},"end":{"line":191,"column":69}},{"start":{"line":191,"column":72},"end":{"line":191,"column":77}}]},"34":{"line":203,"type":"binary-expr","locations":[{"start":{"line":203,"column":22},"end":{"line":203,"column":52}},{"start":{"line":203,"column":56},"end":{"line":203,"column":84}}]},"35":{"line":204,"type":"if","locations":[{"start":{"line":204,"column":8},"end":{"line":204,"column":8}},{"start":{"line":204,"column":8},"end":{"line":204,"column":8}}]},"36":{"line":206,"type":"if","locations":[{"start":{"line":206,"column":10},"end":{"line":206,"column":10}},{"start":{"line":206,"column":10},"end":{"line":206,"column":10}}]},"37":{"line":206,"type":"binary-expr","locations":[{"start":{"line":206,"column":14},"end":{"line":206,"column":43}},{"start":{"line":206,"column":47},"end":{"line":206,"column":96}}]},"38":{"line":215,"type":"binary-expr","locations":[{"start":{"line":215,"column":32},"end":{"line":215,"column":49}},{"start":{"line":216,"column":8},"end":{"line":216,"column":44}},{"start":{"line":217,"column":8},"end":{"line":217,"column":36}}]},"39":{"line":225,"type":"if","locations":[{"start":{"line":225,"column":6},"end":{"line":225,"column":6}},{"start":{"line":225,"column":6},"end":{"line":225,"column":6}}]},"40":{"line":230,"type":"if","locations":[{"start":{"line":230,"column":6},"end":{"line":230,"column":6}},{"start":{"line":230,"column":6},"end":{"line":230,"column":6}}]},"41":{"line":230,"type":"binary-expr","locations":[{"start":{"line":230,"column":10},"end":{"line":230,"column":35}},{"start":{"line":230,"column":39},"end":{"line":230,"column":53}}]},"42":{"line":231,"type":"if","locations":[{"start":{"line":231,"column":6},"end":{"line":231,"column":6}},{"start":{"line":231,"column":6},"end":{"line":231,"column":6}}]},"43":{"line":231,"type":"binary-expr","locations":[{"start":{"line":231,"column":10},"end":{"line":231,"column":35}},{"start":{"line":231,"column":39},"end":{"line":231,"column":55}}]},"44":{"line":257,"type":"cond-expr","locations":[{"start":{"line":257,"column":27},"end":{"line":257,"column":57}},{"start":{"line":257,"column":60},"end":{"line":257,"column":105}}]},"45":{"line":271,"type":"binary-expr","locations":[{"start":{"line":271,"column":13},"end":{"line":271,"column":28}},{"start":{"line":271,"column":32},"end":{"line":271,"column":54}}]},"46":{"line":275,"type":"cond-expr","locations":[{"start":{"line":275,"column":57},"end":{"line":275,"column":76}},{"start":{"line":275,"column":79},"end":{"line":275,"column":93}}]},"47":{"line":280,"type":"cond-expr","locations":[{"start":{"line":281,"column":8},"end":{"line":281,"column":116}},{"start":{"line":282,"column":8},"end":{"line":282,"column":87}}]},"48":{"line":281,"type":"binary-expr","locations":[{"start":{"line":281,"column":56},"end":{"line":281,"column":73}},{"start":{"line":281,"column":77},"end":{"line":281,"column":79}}]},"49":{"line":293,"type":"if","locations":[{"start":{"line":293,"column":10},"end":{"line":293,"column":10}},{"start":{"line":293,"column":10},"end":{"line":293,"column":10}}]},"50":{"line":293,"type":"binary-expr","locations":[{"start":{"line":293,"column":14},"end":{"line":293,"column":29}},{"start":{"line":293,"column":33},"end":{"line":293,"column":60}}]},"51":{"line":314,"type":"if","locations":[{"start":{"line":314,"column":6},"end":{"line":314,"column":6}},{"start":{"line":314,"column":6},"end":{"line":314,"column":6}}]},"52":{"line":325,"type":"cond-expr","locations":[{"start":{"line":325,"column":39},"end":{"line":325,"column":82}},{"start":{"line":325,"column":85},"end":{"line":325,"column":97}}]},"53":{"line":326,"type":"cond-expr","locations":[{"start":{"line":326,"column":43},"end":{"line":326,"column":85}},{"start":{"line":326,"column":88},"end":{"line":326,"column":100}}]},"54":{"line":330,"type":"if","locations":[{"start":{"line":330,"column":6},"end":{"line":330,"column":6}},{"start":{"line":330,"column":6},"end":{"line":330,"column":6}}]},"55":{"line":343,"type":"binary-expr","locations":[{"start":{"line":343,"column":13},"end":{"line":343,"column":20}},{"start":{"line":344,"column":9},"end":{"line":344,"column":29}},{"start":{"line":344,"column":33},"end":{"line":344,"column":47}},{"start":{"line":345,"column":9},"end":{"line":345,"column":34}},{"start":{"line":345,"column":38},"end":{"line":345,"column":65}}]},"56":{"line":350,"type":"if","locations":[{"start":{"line":350,"column":6},"end":{"line":350,"column":6}},{"start":{"line":350,"column":6},"end":{"line":350,"column":6}}]},"57":{"line":350,"type":"binary-expr","locations":[{"start":{"line":350,"column":10},"end":{"line":350,"column":28}},{"start":{"line":350,"column":32},"end":{"line":350,"column":58}}]},"58":{"line":360,"type":"if","locations":[{"start":{"line":360,"column":6},"end":{"line":360,"column":6}},{"start":{"line":360,"column":6},"end":{"line":360,"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((__cov_sIM21KhAGhzWP0B7wdkh_A.b['7'][0]++,typeof angular==='undefined')||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['7'][1]++,typeof Chart==='undefined')){__cov_sIM21KhAGhzWP0B7wdkh_A.b['6'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['7']++;throw new Error('Chart.js library needs to be included, see http://jtblin.github.io/angular-chart.js/');}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['6'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['8']++;factory(angular,Chart);}}}(function(angular,Chart){'use strict';__cov_sIM21KhAGhzWP0B7wdkh_A.f['2']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['9']++;Chart.defaults.global.multiTooltipTemplate='<%if (datasetLabel){%><%=datasetLabel%>: <%}%><%= value %>';__cov_sIM21KhAGhzWP0B7wdkh_A.s['10']++;Chart.defaults.global.tooltips.mode='label';__cov_sIM21KhAGhzWP0B7wdkh_A.s['11']++;Chart.defaults.global.elements.line.borderWidth=2;__cov_sIM21KhAGhzWP0B7wdkh_A.s['12']++;Chart.defaults.global.elements.rectangle.borderWidth=2;__cov_sIM21KhAGhzWP0B7wdkh_A.s['13']++;Chart.defaults.global.legend.display=false;__cov_sIM21KhAGhzWP0B7wdkh_A.s['14']++;Chart.defaults.global.colors=['#97BBCD','#DCDCDC','#F7464A','#46BFBD','#FDB45C','#949FB1','#4D5360'];__cov_sIM21KhAGhzWP0B7wdkh_A.s['15']++;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['16']++;if(useExcanvas){__cov_sIM21KhAGhzWP0B7wdkh_A.b['9'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['17']++;Chart.defaults.global.animation=false;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['9'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['18']++;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['19']++;return new ChartJsFactory();}]).directive('chartLine',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['4']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['20']++;return new ChartJsFactory('line');}]).directive('chartBar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['5']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['21']++;return new ChartJsFactory('bar');}]).directive('chartHorizontalBar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['6']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['22']++;return new ChartJsFactory('horizontalBar');}]).directive('chartRadar',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['7']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['23']++;return new ChartJsFactory('radar');}]).directive('chartDoughnut',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['8']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['24']++;return new ChartJsFactory('doughnut');}]).directive('chartPie',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['9']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['25']++;return new ChartJsFactory('pie');}]).directive('chartPolarArea',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['10']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['26']++;return new ChartJsFactory('polarArea');}]).directive('chartBubble',['ChartJsFactory',function(ChartJsFactory){__cov_sIM21KhAGhzWP0B7wdkh_A.f['11']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['27']++;return new ChartJsFactory('bubble');}]).name;function ChartJsProvider(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['12']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['29']++;var options={responsive:true};__cov_sIM21KhAGhzWP0B7wdkh_A.s['30']++;var ChartJs={Chart:Chart,getOptions:function(type){__cov_sIM21KhAGhzWP0B7wdkh_A.f['13']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['31']++;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['32']++;return angular.extend({},options,typeOptions);}};__cov_sIM21KhAGhzWP0B7wdkh_A.s['33']++;this.setOptions=function(type,customOptions){__cov_sIM21KhAGhzWP0B7wdkh_A.f['14']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['34']++;if(!customOptions){__cov_sIM21KhAGhzWP0B7wdkh_A.b['11'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['35']++;customOptions=type;__cov_sIM21KhAGhzWP0B7wdkh_A.s['36']++;options=angular.extend(options,customOptions);__cov_sIM21KhAGhzWP0B7wdkh_A.s['37']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['11'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['38']++;options[type]=angular.extend((__cov_sIM21KhAGhzWP0B7wdkh_A.b['12'][0]++,options[type])||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['12'][1]++,{}),customOptions);};__cov_sIM21KhAGhzWP0B7wdkh_A.s['39']++;this.$get=function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['15']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['40']++;return ChartJs;};}function ChartJsFactory(ChartJs,$timeout){__cov_sIM21KhAGhzWP0B7wdkh_A.f['16']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['42']++;return function chart(type){__cov_sIM21KhAGhzWP0B7wdkh_A.f['17']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['43']++;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['44']++;if(useExcanvas){__cov_sIM21KhAGhzWP0B7wdkh_A.b['13'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['45']++;window.G_vmlCanvasManager.initElement(elem[0]);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['13'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['46']++;scope.$watch('chartData',watchData,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['47']++;scope.$watch('chartSeries',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['48']++;scope.$watch('chartLabels',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['49']++;scope.$watch('chartOptions',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['50']++;scope.$watch('chartColors',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['51']++;scope.$watch('chartDatasetOverride',watchOther,true);__cov_sIM21KhAGhzWP0B7wdkh_A.s['52']++;scope.$watch('chartType',watchType,false);__cov_sIM21KhAGhzWP0B7wdkh_A.s['53']++;scope.$on('$destroy',function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['19']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['54']++;destroyChart(scope);});__cov_sIM21KhAGhzWP0B7wdkh_A.s['55']++;scope.$on('$resize',function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['20']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['56']++;if(scope.chart){__cov_sIM21KhAGhzWP0B7wdkh_A.b['14'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['57']++;scope.chart.resize();}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['14'][1]++;}});function watchData(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['21']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['59']++;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['60']++;destroyChart(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['61']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['15'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['62']++;var chartType=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['17'][0]++,type)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['17'][1]++,scope.chartType);__cov_sIM21KhAGhzWP0B7wdkh_A.s['63']++;if(!chartType){__cov_sIM21KhAGhzWP0B7wdkh_A.b['18'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['64']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['18'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['65']++;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['66']++;return updateChart(newVal,scope);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['19'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['67']++;createChart(chartType,scope,elem);}function watchOther(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['22']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['69']++;if(isEmpty(newVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['21'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['70']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['21'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['71']++;if(angular.equals(newVal,oldVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['22'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['72']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['22'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['73']++;var chartType=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['23'][0]++,type)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['23'][1]++,scope.chartType);__cov_sIM21KhAGhzWP0B7wdkh_A.s['74']++;if(!chartType){__cov_sIM21KhAGhzWP0B7wdkh_A.b['24'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['75']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['24'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['76']++;createChart(chartType,scope,elem);}function watchType(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['23']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['78']++;if(isEmpty(newVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['25'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['79']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['25'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['80']++;if(angular.equals(newVal,oldVal)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['26'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['81']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['26'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['82']++;createChart(newVal,scope,elem);}}};};function createChart(type,scope,elem){__cov_sIM21KhAGhzWP0B7wdkh_A.f['24']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['84']++;var options=getChartOptions(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['85']++;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['86']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['27'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['87']++;var cvs=elem[0];__cov_sIM21KhAGhzWP0B7wdkh_A.s['88']++;var ctx=cvs.getContext('2d');__cov_sIM21KhAGhzWP0B7wdkh_A.s['89']++;scope.chartGetColor=getChartColorFn(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['90']++;var data=getChartData(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['91']++;destroyChart(scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['92']++;scope.chart=new ChartJs.Chart(ctx,{type:type,data:data,options:options});__cov_sIM21KhAGhzWP0B7wdkh_A.s['93']++;scope.$emit('chart-create',scope.chart);__cov_sIM21KhAGhzWP0B7wdkh_A.s['94']++;bindEvents(cvs,scope);}function canUpdateChart(newVal,oldVal){__cov_sIM21KhAGhzWP0B7wdkh_A.f['25']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['96']++;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['97']++;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['98']++;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['99']++;return false;}function sum(carry,val){__cov_sIM21KhAGhzWP0B7wdkh_A.f['27']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['101']++;return carry+val;}function getEventHandler(scope,action,triggerOnlyOnChange){__cov_sIM21KhAGhzWP0B7wdkh_A.f['28']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['103']++;var lastState=null;__cov_sIM21KhAGhzWP0B7wdkh_A.s['104']++;return function(evt){__cov_sIM21KhAGhzWP0B7wdkh_A.f['29']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['105']++;var atEvent=(__cov_sIM21KhAGhzWP0B7wdkh_A.b['34'][0]++,scope.chart.getElementsAtEvent)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['34'][1]++,scope.chart.getPointsAtEvent);__cov_sIM21KhAGhzWP0B7wdkh_A.s['106']++;if(atEvent){__cov_sIM21KhAGhzWP0B7wdkh_A.b['35'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['107']++;var activePoints=atEvent.call(scope.chart,evt);__cov_sIM21KhAGhzWP0B7wdkh_A.s['108']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['37'][0]++,triggerOnlyOnChange===false)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['37'][1]++,angular.equals(lastState,activePoints)===false)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['36'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['109']++;lastState=activePoints;__cov_sIM21KhAGhzWP0B7wdkh_A.s['110']++;scope[action](activePoints,evt);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['36'][1]++;}}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['35'][1]++;}};}function getColors(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['30']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['112']++;var colors=angular.copy((__cov_sIM21KhAGhzWP0B7wdkh_A.b['38'][0]++,scope.chartColors)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['38'][1]++,ChartJs.getOptions(type).chartColors)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['38'][2]++,Chart.defaults.global.colors));__cov_sIM21KhAGhzWP0B7wdkh_A.s['113']++;var notEnoughColors=colors.length>16&255,g=bigint>>8&255,b=bigint&255;__cov_sIM21KhAGhzWP0B7wdkh_A.s['136']++;return[r,g,b];}function hasData(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['37']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['138']++;return(__cov_sIM21KhAGhzWP0B7wdkh_A.b['45'][0]++,scope.chartData)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['45'][1]++,scope.chartData.length);}function getChartColorFn(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['38']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['140']++;return typeof scope.chartGetColor==='function'?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['46'][0]++,scope.chartGetColor):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['46'][1]++,getRandomColor);}function getChartData(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['39']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['142']++;var colors=getColors(type,scope);__cov_sIM21KhAGhzWP0B7wdkh_A.s['143']++;return Array.isArray(scope.chartData[0])?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['47'][0]++,getDataSets(scope.chartLabels,scope.chartData,(__cov_sIM21KhAGhzWP0B7wdkh_A.b['48'][0]++,scope.chartSeries)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['48'][1]++,[]),colors,scope.chartDatasetOverride)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['47'][1]++,getData(scope.chartLabels,scope.chartData,colors,scope.chartDatasetOverride));}function getDataSets(labels,data,series,colors,datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.f['40']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['145']++;return{labels:labels,datasets:data.map(function(item,i){__cov_sIM21KhAGhzWP0B7wdkh_A.f['41']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['146']++;var dataset=angular.extend({},colors[i],{label:series[i],data:item});__cov_sIM21KhAGhzWP0B7wdkh_A.s['147']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['50'][0]++,datasetOverride)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['50'][1]++,datasetOverride.length>=i)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['49'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['148']++;angular.merge(dataset,datasetOverride[i]);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['49'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['149']++;return dataset;})};}function getData(labels,data,colors,datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.f['42']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['151']++;var dataset={labels:labels,datasets:[{data:data,backgroundColor:colors.map(function(color){__cov_sIM21KhAGhzWP0B7wdkh_A.f['43']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['152']++;return color.pointBackgroundColor;}),hoverBackgroundColor:colors.map(function(color){__cov_sIM21KhAGhzWP0B7wdkh_A.f['44']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['153']++;return color.backgroundColor;})}]};__cov_sIM21KhAGhzWP0B7wdkh_A.s['154']++;if(datasetOverride){__cov_sIM21KhAGhzWP0B7wdkh_A.b['51'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['155']++;angular.merge(dataset.datasets[0],datasetOverride);}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['51'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['156']++;return dataset;}function getChartOptions(type,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['45']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['158']++;return angular.extend({},ChartJs.getOptions(type),scope.chartOptions);}function bindEvents(cvs,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['46']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['160']++;cvs.onclick=scope.chartClick?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['52'][0]++,getEventHandler(scope,'chartClick',false)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['52'][1]++,angular.noop);__cov_sIM21KhAGhzWP0B7wdkh_A.s['161']++;cvs.onmousemove=scope.chartHover?(__cov_sIM21KhAGhzWP0B7wdkh_A.b['53'][0]++,getEventHandler(scope,'chartHover',true)):(__cov_sIM21KhAGhzWP0B7wdkh_A.b['53'][1]++,angular.noop);}function updateChart(values,scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['47']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['163']++;if(Array.isArray(scope.chartData[0])){__cov_sIM21KhAGhzWP0B7wdkh_A.b['54'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['164']++;scope.chart.data.datasets.forEach(function(dataset,i){__cov_sIM21KhAGhzWP0B7wdkh_A.f['48']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['165']++;dataset.data=values[i];});}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['54'][1]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['166']++;scope.chart.data.datasets[0].data=values;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['167']++;scope.chart.update();__cov_sIM21KhAGhzWP0B7wdkh_A.s['168']++;scope.$emit('chart-update',scope.chart);}function isEmpty(value){__cov_sIM21KhAGhzWP0B7wdkh_A.f['49']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['170']++;return(__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][0]++,!value)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][1]++,Array.isArray(value))&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][2]++,!value.length)||(__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][3]++,typeof value==='object')&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['55'][4]++,!Object.keys(value).length);}function canDisplay(type,scope,elem,options){__cov_sIM21KhAGhzWP0B7wdkh_A.f['50']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['172']++;if((__cov_sIM21KhAGhzWP0B7wdkh_A.b['57'][0]++,options.responsive)&&(__cov_sIM21KhAGhzWP0B7wdkh_A.b['57'][1]++,elem[0].clientHeight===0)){__cov_sIM21KhAGhzWP0B7wdkh_A.b['56'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['173']++;$timeout(function(){__cov_sIM21KhAGhzWP0B7wdkh_A.f['51']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['174']++;createChart(type,scope,elem);},50,false);__cov_sIM21KhAGhzWP0B7wdkh_A.s['175']++;return false;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['56'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['176']++;return true;}function destroyChart(scope){__cov_sIM21KhAGhzWP0B7wdkh_A.f['52']++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['178']++;if(!scope.chart){__cov_sIM21KhAGhzWP0B7wdkh_A.b['58'][0]++;__cov_sIM21KhAGhzWP0B7wdkh_A.s['179']++;return;}else{__cov_sIM21KhAGhzWP0B7wdkh_A.b['58'][1]++;}__cov_sIM21KhAGhzWP0B7wdkh_A.s['180']++;scope.chart.destroy();__cov_sIM21KhAGhzWP0B7wdkh_A.s['181']++;scope.$emit('chart-destroy',scope.chart);}}}));
diff --git a/www/lib/angular-chart.js/test/fixtures/custom-directive.html b/www/lib/angular-chart.js/test/fixtures/custom-directive.html
new file mode 100644
index 0000000..0b02a42
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/custom-directive.html
@@ -0,0 +1,32 @@
+
+
+
+
+ Pie update colors
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/custom-directive.js b/www/lib/angular-chart.js/test/fixtures/custom-directive.js
new file mode 100644
index 0000000..53bcc49
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/custom-directive.js
@@ -0,0 +1,20 @@
+(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/www/lib/angular-chart.js/test/fixtures/custom-directive.png b/www/lib/angular-chart.js/test/fixtures/custom-directive.png
new file mode 100644
index 0000000..513c0ad
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/custom-directive.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/dataset-override.html b/www/lib/angular-chart.js/test/fixtures/dataset-override.html
new file mode 100644
index 0000000..845e1cc
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/dataset-override.html
@@ -0,0 +1,41 @@
+
+
+
+
+ Charts with datasets overrides
+
+
+
+
+
+
+
+
+
+
+
Doughnut dataset override
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/dataset-override.js b/www/lib/angular-chart.js/test/fixtures/dataset-override.js
new file mode 100644
index 0000000..e7cf76d
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/dataset-override.js
@@ -0,0 +1,32 @@
+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/www/lib/angular-chart.js/test/fixtures/dataset-override.png b/www/lib/angular-chart.js/test/fixtures/dataset-override.png
new file mode 100644
index 0000000..f381bac
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/dataset-override.png differ
diff --git a/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.html b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.html
new file mode 100644
index 0000000..42c48d4
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.html
@@ -0,0 +1,33 @@
+
+
+
+
+ Horizontal Bar Chart
+
+
+
+
+
+
+
+
+
+
Horizontal Bar Chart
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.js b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.js
new file mode 100644
index 0000000..6c6f968
--- /dev/null
+++ b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.js
@@ -0,0 +1,18 @@
+(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/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.png b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.png
new file mode 100644
index 0000000..b926632
Binary files /dev/null and b/www/lib/angular-chart.js/test/fixtures/horizontal-bar-chart.png differ
diff --git a/www/lib/angular-chart.js/test/index.html b/www/lib/angular-chart.js/test/index.html
new file mode 100644
index 0000000..fa15540
--- /dev/null
+++ b/www/lib/angular-chart.js/test/index.html
@@ -0,0 +1,31 @@
+
+
+
+ Mocha Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/test/mocha.opts b/www/lib/angular-chart.js/test/mocha.opts
new file mode 100644
index 0000000..0cfde2d
--- /dev/null
+++ b/www/lib/angular-chart.js/test/mocha.opts
@@ -0,0 +1,4 @@
+--slow 20
+--growl
+--reporter spec
+--require test/support/setup
diff --git a/www/lib/angular-chart.js/test/support/setup.js b/www/lib/angular-chart.js/test/support/setup.js
new file mode 100644
index 0000000..de98414
--- /dev/null
+++ b/www/lib/angular-chart.js/test/support/setup.js
@@ -0,0 +1,11 @@
+/*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/www/lib/angular-chart.js/test/test.integration.js b/www/lib/angular-chart.js/test/test.integration.js
new file mode 100644
index 0000000..f8ef1b2
--- /dev/null
+++ b/www/lib/angular-chart.js/test/test.integration.js
@@ -0,0 +1,75 @@
+/*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',
+ '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/www/lib/angular-chart.js/test/test.unit.js b/www/lib/angular-chart.js/test/test.unit.js
new file mode 100644
index 0000000..c2c15de
--- /dev/null
+++ b/www/lib/angular-chart.js/test/test.unit.js
@@ -0,0 +1,408 @@
+/*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('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);
+ ChartJsProvider.setOptions({responsive: true});
+ expect(ChartJs.getOptions().responsive).to.equal(true);
+ expect(ChartJs.getOptions('Line').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);
+ });
+
+ ['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/www/lib/angular-chart.js/tmp/Dockerfile-alpine b/www/lib/angular-chart.js/tmp/Dockerfile-alpine
new file mode 100644
index 0000000..d40b772
--- /dev/null
+++ b/www/lib/angular-chart.js/tmp/Dockerfile-alpine
@@ -0,0 +1,15 @@
+#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/www/lib/angular-chart.js/tmp/gradient.html b/www/lib/angular-chart.js/tmp/gradient.html
new file mode 100644
index 0000000..2d9e407
--- /dev/null
+++ b/www/lib/angular-chart.js/tmp/gradient.html
@@ -0,0 +1,26 @@
+
+
+
+
+ Charts in tabs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/www/lib/angular-chart.js/tmp/gradient.js b/www/lib/angular-chart.js/tmp/gradient.js
new file mode 100644
index 0000000..fe3d761
--- /dev/null
+++ b/www/lib/angular-chart.js/tmp/gradient.js
@@ -0,0 +1,29 @@
+angular.module('gradient', ['chart.js']).controller('LineCtrl', function ($scope) {
+
+ $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
+ $scope.series = ['Series A'];
+
+ $scope.data = [
+ [1164445, 3444359, 3444380, 444481, 566556, 552255, 466440]
+ ];
+
+ var ctx = document.getElementById('line').getContext('2d');
+
+ var gradient = ctx.createLinearGradient(0, 0, 0, 400);
+ gradient.addColorStop(0, 'rgba(243, 103, 101,0.5)');
+ gradient.addColorStop(1, 'rgba(0, 89, 179,0.5)');
+
+ $scope.colours = [{
+ fillColor : gradient, // Put the gradient here as a fill color
+ strokeColor : 'rgba(151,187,205,1)',
+ pointColor : '#fff',
+ pointStrokeColor : '#fff',
+ pointHighlightFill: '#fff',
+ pointHighlightStroke: 'rgba(151,187,205,1)'
+ }];
+
+ $scope.$on('create', function (evt, chart) {
+
+ })
+
+});
diff --git a/www/pokedex.db b/www/pokedex.db
index efcc986..acc2def 100644
Binary files a/www/pokedex.db and b/www/pokedex.db differ
diff --git a/www/templates/pokemonliste/html/pokemon-detail.html b/www/templates/pokemonliste/html/pokemon-detail.html
index 5a7c4f4..9751d91 100644
--- a/www/templates/pokemonliste/html/pokemon-detail.html
+++ b/www/templates/pokemonliste/html/pokemon-detail.html
@@ -40,15 +40,13 @@
Fluchtchance:
{{pokemon.pokemonfluchtchance}}%
-
+
Ei-Distanz:
{{pokemon.pokemoneidistanz}} Km
-
-
-
{{pokemon.pokemonentwicklungtext}} Bonbons
+
+
Entwicklung:
+
{{pokemon.pokemonentwicklungtext}}
@@ -75,29 +73,152 @@
+
+
Entwicklung
-
-
-
-
-
{{ pokemonentwicklung.pokemonpokedexid }} Bonbons
+
+
+
+
+
{{ pokemonentwicklung.pokemonpokedexid }} Bonbons
+
+
+
{{ pokemonentwicklung.pokemonname }}
+
+
+
+
+
+
+
+
-
Pokedex-ID: {{ pokemonentwicklung.pokemonpokedexid }}
+
{{ pokemonentwicklung.pokemonname }}
-
+
+
+
+
+
+
+
+
+
+ Standard Attacken
+
+
+
+
+ Attacke
+
+
+ Typ
+
+
+ Stärke
+
+
+ Energie
+
+
+ Dauer
+
+
+
+
+
+
+
+ {{ pokemonattacke.pokemonattacke }}
+
+
+
+
+ {{ pokemonattacke.pokemonattacketyptext }}
+
+
+
+ {{ pokemonattacke.pokemonattackestaerke }}
+
+
+ {{ pokemonattacke.pokemonattackeenergie }}%
+
+
+ {{ pokemonattacke.pokemonattackedauer }} Sek.
+
+
+
+
+
+ Entlade Attacken
+
+
+
+
+ Attacke
+
+
+ Typ
+
+
+ Stärke
+
+
+ Volltreffer
+
+
+ Energie
+
+
+ Dauer
+
+
+
+
+
+
+
+ {{ pokemonattacke.pokemonattacke }}
+
+
+
+
+ {{ pokemonattacke.pokemonattacketyptext }}
+
+
+
+ {{ pokemonattacke.pokemonattackestaerke }}
+
+
+ {{ pokemonattacke.pokemonattackevolltreffer }}%
+
+
+ {{ pokemonattacke.pokemonattackeenergie }}%
+
+
+ {{ pokemonattacke.pokemonattackedauer }} Sek.
+
+
+
+
+
+
+
+
+
Schaden durch Attacken-Typ
@@ -155,56 +276,71 @@
+
+
- Standard Attacken
+ Basis-Statuswerte
+
+
+
+
+
+
+
+
+
+
+
+ Max. Statuswerte
-
- Attacke
-
-
- Typ
-
-
- Stärke
-
-
- Energie
-
-
- Dauer
-
+
+ Trainer-Lever / Powerups
+
+
+ Max. KP
+
+
+ Max. WP
+
-
+
-
- {{ pokemonattacke.pokemonattacke }}
-
-
-
-
- {{ pokemonattacke.pokemonattacketyptext }}
+
+ {{ statuswert.pokemontrainerlevel }}
+
+
+ {{ statuswert.pokemonmaxkp }}
+
+
+ {{ statuswert.pokemonmaxwp }}
-
-
- {{ pokemonattacke.pokemonattackestaerke }}
-
-
- {{ pokemonattacke.pokemonattackeenergie }}%
-
-
- {{ pokemonattacke.pokemonattackedauer }} Sek.
-
-
+