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 + +[![Bower version](https://badge.fury.io/bo/angular-chart.js.svg)](http://badge.fury.io/bo/angular-chart.js) +[![npm version](https://badge.fury.io/js/angular-chart.js.svg)](http://badge.fury.io/js/angular-chart.js) +[![Build Status](https://travis-ci.org/jtblin/angular-chart.js.svg?branch=master)](https://travis-ci.org/jtblin/angular-chart.js) +[![Codacy Badge](https://api.codacy.com/project/badge/grade/6aa5ba92f4984a24874e5976ee541623)](https://www.codacy.com/app/jtblin/angular-chart-js) +[![Code Coverage](https://d3s6mut3hikguw.cloudfront.net/github/jtblin/angular-chart.js/badges/coverage.svg)](https://codeclimate.com/github/jtblin/angular-chart.js) +[![npm](https://img.shields.io/npm/dm/angular-chart.js.svg?maxAge=2592000)](https://www.npmjs.com/package/angular-chart.js) + +Beautiful, reactive, responsive charts for Angular.JS using [Chart.js](http://www.chartjs.org/). + +Have a look at the [demo site](http://jtblin.github.io/angular-chart.js/) to see examples with detailed markup, +script and options. + +# Installation + +This is the `1.x` branch which requires Chart.js 2.x version. Following semantic versioning, +there are numerous **breaking changes** since 0.x, notably: + +* all options now need to use the `chart-` prefix +* `chart-colours` is now `chart-colors` and `chart-get-colour` is now `chart-get-color` +* chart types are in `camelCase` e.g. `line` and `polarArea` +* legend is now a Chart.js option so the `chart-legend` attribute has been removed +* events emitted on creation and update are now prefixed with `chart-` e.g. `chart-create` +* `$scope.$apply` is not called anymore on mouse hover functions calls +* obviously all Chart.js breaking changes as well in how options are set, etc. +* disabling the `responsive` option doesn't work via global `Chart.defaults.global.responsive` anymore, +but must be set via standard options e.g. `ChartJsProvider.setOptions({ responsive: false });` +* factory now returns a module name instead of a module instance + +### npm + + npm install --save angular-chart.js + +### cdn + + //cdn.jsdelivr.net/angular.chartjs/latest/angular-chart.min.js + +### bower + +Bower 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 + + + +
+
+
+
+
+
AMD require.js
+
+ +
+
+
+
+
+ + + + 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 + + + +
+
+
+
+
+
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 + + + + + + + + +
+
+ +
+

+ Angular Chart +

+ +

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

+ +

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

+
+
+
+
+
+ +

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.

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

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

+

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

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

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

+ Angular Chart +

+ +

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

+ +

+ Code on Github + + Download () + +

+
+
+
+
+
+ +

Dependencies

+

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

+
    +
  • 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.

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

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

+

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

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

+<canvas id="base" class="chart-bubble" chart-data="data"
+  chart-series="series" >
+</canvas> 
+
+ +
angular.module("app", ["chart.js"]).controller("BubbleCtrl",
+  function ($scope) {
+    // see examples/bubble.js for random bubbles source code
+    $scope.series = ['Series A', 'Series B'];
+
+    $scope.data = [
+      [{
+        x: 40,
+        y: 10,
+        r: 20
+      }],
+      [{
+        x: 10,
+        y: 40,
+        r: 50
+      }]
+    ];
+});
+              
+
+
+
+
+
+
Bubble Chart
+
+ +
+
+
+
+
+
+
+
Dynamic Chart
+
+ +
+
+ +
+
+ + +
+ .chart-base +
    +
  • chart-type: chart type e.g. Bar, PolarArea, etc. or other plugins
  • +
  • other options according to chart type
  • +
+
+
+ +
<canvas id="base" class="chart-base" chart-type="type"
+  chart-data="data" chart-labels="labels" >
+</canvas> 
+
+ +
angular.module("app", ["chart.js"]).controller("BaseCtrl",
+  function ($scope) {
+    $scope.labels = ["Download Sales", "In-Store Sales", "Mail-Order Sales", "Tele Sales", "Corporate Sales"];
+    $scope.data = [300, 500, 100, 40, 120];
+    $scope.type = 'PolarArea';
+
+    $scope.toggle = function () {
+      $scope.type = $scope.type === 'PolarArea' ?
+        'Pie' : 'PolarArea';
+    };
+});
+              
+
+
+
+
+
+
+ +
+
+
+
Reactive Chart
+
+ +
+
+
+
+
+
Chart Data
+
+ + + + + + + +
{{label}}
{{data[$parent.$index][$index]}}
+ +
+
+
+
+
+
+ +
+
+ + +
<canvas id="base" class="chart-bar"
+  chart-data="data" chart-labels="labels" chart-colors="colors"
+  chart-dataset-override="datasetOverride" >
+</canvas> 
+
+ +
angular.module("app", ["chart.js"]).controller("MixedChartCtrl",
+  function ($scope) {
+    $scope.colors = ['#45b7cd', '#ff6384', '#ff8e72'];
+
+    $scope.labels = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
+    $scope.data = [
+      [65, -59, 80, 81, -56, 55, -40],
+      [28, 48, -40, 19, 86, 27, 90]
+    ];
+    $scope.datasetOverride = [
+      {
+        label: "Bar chart",
+        borderWidth: 1,
+        type: 'bar'
+      },
+      {
+        label: "Line chart",
+        borderWidth: 3,
+        hoverBackgroundColor: "rgba(255,99,132,0.4)",
+        hoverBorderColor: "rgba(255,99,132,1)",
+        type: 'line'
+      }
+    ];
+});
+              
+
+
+
+
+
+
Bar line Chart
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + diff --git a/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 + + + +
+
+
+
+
+
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 + + + +
+
+
+
+
+
Mixed chart
+
+ +
+
+
+
+
+
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]}}
+ +
+
+
+
+
+
Reactive Chart
+
+ +
+
+
+
+
+ + + + + + + + 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 + + + +
+
+
+
+
+
Ticks Chart
+
+ +
+
+
+
+
+ + + + + + + + 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 } + + + +
+
+
+
+
+
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 + + + +
+
+
+
+
+
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 + + + +
+
+ +
+
+
+
Line Chart
+
+ +
+
+
+
+
+
Bar Chart
+
+ +
+
+
+
+
+
Doughnut Chart
+
+ +
+
+
+
+
+
+
+
Radar Chart
+
+ +
+
+
+
+
+
Pie Chart
+
+ +
+
+
+
+
+
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 + + + +
+
+ +
+
+
+
Line Chart
+
+ +
+
+
+
+
+
+ + + + + + + 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 + + + +
+
+ +
+
+
+
Pie Chart
+
+ +
+
+
+
+
+
+ + + + + + + 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 + + + +
+
+ +
+
+
+
Mixed chart
+
+ +
+
+
+
+
+
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
-
-
Entw. ab:
-
-
-
{{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 }} +
+
+
+ PokemonTyp + {{ pokemonattacke.pokemonattacketyptext }} +
+
+
+ {{ pokemonattacke.pokemonattackestaerke }} +
+
+ {{ pokemonattacke.pokemonattackeenergie }}% +
+
+ {{ pokemonattacke.pokemonattackedauer }} Sek. +
+ + +
+
+ Entlade Attacken +
+
+ +
+ Attacke +
+
+ Typ +
+
+ Stärke +
+
+ Volltreffer +
+
+ Energie +
+
+ Dauer +
+ +
+ +
+ +
+ {{ pokemonattacke.pokemonattacke }} +
+
+
+ PokemonTyp + {{ 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 }} -
-
-
- PokemonTyp - {{ pokemonattacke.pokemonattacketyptext }} +
+ {{ statuswert.pokemontrainerlevel }} +
+
+ {{ statuswert.pokemonmaxkp }} +
+
+ {{ statuswert.pokemonmaxwp }}
-
-
- {{ pokemonattacke.pokemonattackestaerke }} -
-
- {{ pokemonattacke.pokemonattackeenergie }}% -
-
- {{ pokemonattacke.pokemonattackedauer }} Sek. -
- +