Compare commits

..

11 Commits

Author SHA1 Message Date
Jakub Juszczak
4f5aa1811d 💎 Release new version 1.2.0 2017-07-25 12:56:13 +02:00
Jakub Juszczak
098c90edf1 Add scatter chart 2017-07-25 12:53:17 +02:00
Jakub Juszczak
3f15eb9abc Add dist files to ignire 2017-07-25 12:52:12 +02:00
Jakub Juszczak
68e94b7fe3 Merge branch 'release/1.x' into pr/152
* release/1.x:
  ⬆️ Update dependency chart.js to 2.6.0
  🐛 Fix dependency
  💎 Release new version 1.1.4

# Conflicts:
#	dist/vue-chartjs.js
#	dist/vue-chartjs.js.map
2017-07-25 12:49:06 +02:00
Denis Lapi
0d24270bf2 Delete vue-chartjs.js 2017-07-22 19:25:48 +02:00
Denis Lapi
e034467e5b Delete vue-chartjs.js.map 2017-07-22 19:25:39 +02:00
Jakub Juszczak
c7cb8e24e9 ⬆️ Update dependency chart.js to 2.6.0 2017-07-22 17:28:36 +02:00
DenisLapi
4c9f4fc5e5 #149 - Fix error on beforeDestroy - VueJS v1 2017-07-22 10:01:29 +02:00
Jakub Juszczak
a25d327b13 🐛 Fix dependency 2017-02-23 08:46:21 +01:00
Jakub Juszczak
f57e555d94 💎 Release new version 1.1.4
Updated chart.js dependency
2017-02-22 13:01:59 +01:00
Jakub Juszczak
88d2771175 📝 Update README 2016-10-02 09:19:41 +02:00
47 changed files with 1460 additions and 2128 deletions

2
.gitignore vendored
View File

@@ -4,3 +4,5 @@ npm-debug.log
selenium-debug.log selenium-debug.log
test/unit/coverage test/unit/coverage
test/e2e/reports test/e2e/reports
dist/
es/

View File

@@ -1,45 +1,5 @@
# Change Log # Change Log
## [minification](https://github.com/apertureless/vue-chartjs/tree/minification) (2016-12-17)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v2.3.0...minification)
## [v2.3.0](https://github.com/apertureless/vue-chartjs/tree/v2.3.0) (2016-12-17)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v2.2.1...v2.3.0)
**Closed issues:**
- Uncaught TypeError: \_c is not a function [\#20](https://github.com/apertureless/vue-chartjs/issues/20)
## [v2.2.1](https://github.com/apertureless/vue-chartjs/tree/v2.2.1) (2016-12-07)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v2.2.0...v2.2.1)
**Fixed bugs:**
- Uncaught TypeError: Cannot read property 'draw' of null [\#15](https://github.com/apertureless/vue-chartjs/issues/15)
**Merged pull requests:**
- Update README.md [\#16](https://github.com/apertureless/vue-chartjs/pull/16) ([Ag47](https://github.com/Ag47))
## [v2.2.0](https://github.com/apertureless/vue-chartjs/tree/v2.2.0) (2016-10-24)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v2.1.1...v2.2.0)
**Closed issues:**
- question:syntax with vue-loader [\#12](https://github.com/apertureless/vue-chartjs/issues/12)
- Rerender when data has changed [\#10](https://github.com/apertureless/vue-chartjs/issues/10)
**Merged pull requests:**
- add horizontal bar parameter [\#14](https://github.com/apertureless/vue-chartjs/pull/14) ([wahaha2012](https://github.com/wahaha2012))
- WIP Feature/reactive chart data \#11 [\#11](https://github.com/apertureless/vue-chartjs/pull/11) ([apertureless](https://github.com/apertureless))
## [v2.1.1](https://github.com/apertureless/vue-chartjs/tree/v2.1.1) (2016-10-02)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v.2.1.0...v2.1.1)
## [v.2.1.0](https://github.com/apertureless/vue-chartjs/tree/v.2.1.0) (2016-09-23)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/v1.1.3...v.2.1.0)
## [v1.1.3](https://github.com/apertureless/vue-chartjs/tree/v1.1.3) (2016-09-08) ## [v1.1.3](https://github.com/apertureless/vue-chartjs/tree/v1.1.3) (2016-09-08)
[Full Changelog](https://github.com/apertureless/vue-chartjs/compare/1.1.2...v1.1.3) [Full Changelog](https://github.com/apertureless/vue-chartjs/compare/1.1.2...v1.1.3)

101
README.md
View File

@@ -1,23 +1,12 @@
# Vue-ChartJs # Vue-ChartJs
[![npm version](https://badge.fury.io/js/vue-chartjs.svg)](https://badge.fury.io/js/vue-chartjs) ![npm dependencies](https://david-dm.org/apertureless/vue-chartjs.svg) [![codecov](https://codecov.io/gh/apertureless/vue-chartjs/branch/master/graph/badge.svg)](https://codecov.io/gh/apertureless/vue-chartjs) [![Build Status](https://travis-ci.org/apertureless/vue-chartjs.svg?branch=master)](https://travis-ci.org/apertureless/vue-chartjs) [![Package Quality](http://npm.packagequality.com/shield/vue-chartjs.svg)](http://packagequality.com/#?package=vue-chartjs) [![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/apertureless/vue-chartjs/blob/master/LICENSE.txt) [![npm version](https://badge.fury.io/js/vue-chartjs.svg)](https://badge.fury.io/js/vue-chartjs) ![npm dependencies](https://david-dm.org/apertureless/vue-chartjs.svg) [![codecov](https://codecov.io/gh/apertureless/vue-chartjs/branch/master/graph/badge.svg)](https://codecov.io/gh/apertureless/vue-chartjs) [![Build Status](https://travis-ci.org/apertureless/vue-chartjs.svg?branch=master)](https://travis-ci.org/apertureless/vue-chartjs)
Is a vue.js wrapper for chart.js. You can easily create your chart components. [See in action](https://apertureless.github.io/vue-chartjs/) > VueJS wrapper for ChartJs
### Compatibility
- v1 later
- Vue.js 1.x
- v2 later
- Vue.js 2.x
After the final release of vue.js 2, you also get the v2 per default if you install vue-chartjs over npm.
No need for the @next tag anymore. If you want the v1 you need to define the version.
If you're looking for v1 check this [branch](https://github.com/apertureless/vue-chartjs/tree/release/1.1.3)
## Install ## Install
Simply run `npm install vue-chartjs` Simply run `npm install vue-chartjs@1.1.3`
## How to use ## How to use
@@ -36,10 +25,10 @@ Just create your own component.
// CommitChart.js // CommitChart.js
import { Bar } from 'vue-chartjs' import { Bar } from 'vue-chartjs'
export default Bar.extend({ export default BarChart.extend({
mounted () { ready () {
// Overwriting base render method with actual data. // Overwriting base render method with actual data.
this.renderChart({ this.render({
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
datasets: [ datasets: [
{ {
@@ -67,10 +56,10 @@ You can overwrite the default chart options. Just pass the options object as a s
// MonthlyIncome.js // MonthlyIncome.js
import { Line } from 'vue-chartjs' import { Line } from 'vue-chartjs'
export default Line.extend({ export default LineChart.extend({
props: ["data", "options"], props: [data, options],
mounted () { ready () {
this.renderChart(this.data, this.options) this.render(this.data, this.options)
} }
}) })
``` ```
@@ -92,76 +81,6 @@ export default {
</script> </script>
``` ```
## Reactivity
Chart.js does not update or re-render the chart if new data is passed.
However you can simply implement this by your own or use one of the two mixins which are included.
- `reactiveProp`
- `reactiveData`
Both are included in the `mixins` module.
The mixins automatically create `chartData` as a prop or data. And add a watcher. If data has changed, the chart will update.
```javascript
// MonthlyIncome.js
import { Line, mixins } from 'vue-chartjs'
export default Line.extend({
mixins: [mixins.reactiveProp],
props: ["chartData", "options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
```
### Mixins module
The `mixins` module is included in the `VueCharts` module and as a seperate module.
Some ways to import them:
```javascript
// Load complete module with all charts
import VueCharts from 'vue-chartjs'
export default VueCharts.Line.extend({
mixins: [VueCharts.mixins.reactiveProp],
props: ["chartData", "options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
```
```javascript
// Load speperate modules
import { Line, mixins } from 'vue-chartjs'
export default Line.extend({
mixins: [mixins.reactiveProp],
props: ["chartData", "options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
```
```javascript
// Load speperate modules with destructure assign
import { Line, mixins } from 'vue-chartjs'
const { reactiveProp } = mixins
export default Line.extend({
mixins: [reactiveProp],
props: ["chartData", "options"],
mounted () {
this.renderChart(this.chartData, this.options)
}
})
```
## Available Charts ## Available Charts
### Bar Chart ### Bar Chart

View File

@@ -17,7 +17,6 @@ module.exports = {
fallback: [path.join(__dirname, '../node_modules')], fallback: [path.join(__dirname, '../node_modules')],
alias: { alias: {
'src': path.resolve(__dirname, '../src'), 'src': path.resolve(__dirname, '../src'),
'mixins': path.resolve(__dirname, '../src/mixins'),
'BaseCharts': path.resolve(__dirname, '../src/BaseCharts') 'BaseCharts': path.resolve(__dirname, '../src/BaseCharts')
} }
}, },

View File

@@ -1,9 +1,6 @@
const webpack = require('webpack') const webpack = require('webpack')
const base = require('./webpack.base.conf') const base = require('./webpack.base.conf')
const config = require('../config') const config = require('../config')
var env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')
: config.build.env
base.entry = { base.entry = {
lib: './src/index.js' lib: './src/index.js'
@@ -22,7 +19,9 @@ var webpackConfig = Object.assign({}, base)
webpackConfig.devtool = '#source-map' webpackConfig.devtool = '#source-map'
webpackConfig.plugins = (webpackConfig.plugins || []).concat([ webpackConfig.plugins = (webpackConfig.plugins || []).concat([
new webpack.DefinePlugin({ new webpack.DefinePlugin({
'process.env.NODE_ENV': env 'process.env': {
NODE_ENV: '"production"'
}
}), }),
new webpack.optimize.UglifyJsPlugin({ new webpack.optimize.UglifyJsPlugin({
compress: { warnings: false } compress: { warnings: false }

View File

@@ -1,34 +0,0 @@
codecov:
branch: master
coverage:
precision: 2
round: down
range: "70...100"
status:
project:
default:
target: auto
threshold: null
branches: null
patch:
default:
target: auto
branches: null
changes:
default:
branches: null
ignore:
- "tests/*"
- "src/examples/*"
- "src/mixins/*"
comment:
layout: "header, diff, changes, sunburst, uncovered, tree"
branches: null
behavior: default

21
dist/vue-chartjs.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,13 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>📊 Vue-ChartJs</title>
</head>
<body>
<div id="app">
<app></app>
</div>
<script src="dist/vue-chartjs.js"></script>
</body>
</html>

View File

@@ -5,9 +5,7 @@
<title>Vue-ChartJs</title> <title>Vue-ChartJs</title>
</head> </head>
<body> <body>
<div id="app">
<app></app> <app></app>
</div>
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
</html> </html>

View File

@@ -1,7 +1,7 @@
{ {
"name": "vue-chartjs", "name": "vue-chartjs",
"version": "2.3.1", "version": "1.2.0",
"description": "vue.js wrapper for chart.js", "description": "Vue wrapper for chart.js",
"author": "Jakub Juszczak <jakub@nextindex.de>", "author": "Jakub Juszczak <jakub@nextindex.de>",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -15,77 +15,77 @@
"Charts" "Charts"
], ],
"main": "dist/vue-chartjs.js", "main": "dist/vue-chartjs.js",
"files": [
"dist"
],
"scripts": { "scripts": {
"dev": "node build/dev-server.js", "dev": "node build/dev-server.js",
"build": "node build/build.js", "build": "node build/build.js",
"unit": "karma start test/unit/karma.conf.js --single-run", "unit": "karma start test/unit/karma.conf.js --single-run",
"e2e": "node test/e2e/runner.js", "e2e": "node test/e2e/runner.js",
"test": "npm run unit", "test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs", "lint": "eslint --ext .js,.vue src test/unit/specs",
"prepublish": "node build/build.js" "prepublish": "node build/build.js"
}, },
"dependencies": { "dependencies": {
"babel-runtime": "^6.11.6", "babel-runtime": "^6.0.0",
"chart.js": "^2.4.0", "chart.js": "^2.6.0",
"vue": "^2.1.6" "vue": "^1.0.21"
}, },
"devDependencies": { "devDependencies": {
"babel-core": "^6.10.4", "babel-core": "^6.0.0",
"babel-loader": "^6.0.0", "babel-loader": "^6.0.0",
"babel-plugin-transform-runtime": "^6.12.0", "babel-plugin-transform-runtime": "^6.0.0",
"babel-preset-es2015": "^6.0.0", "babel-preset-es2015": "^6.0.0",
"babel-preset-stage-2": "^6.0.0", "babel-preset-stage-2": "^6.0.0",
"chai": "^3.5.0", "chai": "^3.5.0",
"chromedriver": "^2.21.2", "chromedriver": "^2.21.2",
"connect-history-api-fallback": "^1.1.0", "connect-history-api-fallback": "^1.1.0",
"cross-spawn": "^5.0.1", "cross-spawn": "^2.1.5",
"css-loader": "^0.26.1", "css-loader": "^0.23.0",
"eslint": "^3.7.1", "eslint": "^2.10.2",
"eslint-config-standard": "^6.2.0", "eslint-config-standard": "^5.1.0",
"eslint-friendly-formatter": "^2.0.5", "eslint-friendly-formatter": "^2.0.5",
"eslint-loader": "^1.3.0", "eslint-loader": "^1.3.0",
"eslint-plugin-html": "^1.3.0", "eslint-plugin-html": "^1.3.0",
"eslint-plugin-promise": "^3.4.0", "eslint-plugin-promise": "^1.0.8",
"eslint-plugin-standard": "^2.0.1", "eslint-plugin-standard": "^1.3.2",
"eventsource-polyfill": "^0.9.6", "eventsource-polyfill": "^0.9.6",
"express": "^4.13.3", "express": "^4.13.3",
"extract-text-webpack-plugin": "^1.0.1", "extract-text-webpack-plugin": "^1.0.1",
"file-loader": "^0.9.0", "file-loader": "^0.8.4",
"function-bind": "^1.0.2", "function-bind": "^1.0.2",
"html-webpack-plugin": "^2.8.1", "html-webpack-plugin": "^2.8.1",
"http-proxy-middleware": "^0.17.2", "http-proxy-middleware": "^0.12.0",
"inject-loader": "^3.0.0-beta2", "inject-loader": "^2.0.1",
"isparta-loader": "^2.0.0", "isparta-loader": "^2.0.0",
"jasmine-core": "^2.5.2",
"json-loader": "^0.5.4", "json-loader": "^0.5.4",
"karma": "^1.3.0", "karma": "^0.13.15",
"karma-coverage": "^1.1.1", "karma-coverage": "^0.5.5",
"karma-jasmine": "^1.0.2", "karma-mocha": "^0.2.2",
"karma-mocha": "^1.2.0",
"karma-phantomjs-launcher": "^1.0.0", "karma-phantomjs-launcher": "^1.0.0",
"karma-sinon-chai": "^1.2.0", "karma-sinon-chai": "^1.2.0",
"karma-sourcemap-loader": "^0.3.7", "karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.26", "karma-spec-reporter": "0.0.24",
"karma-webpack": "^1.7.0", "karma-webpack": "^1.7.0",
"lodash": "^4.16.3", "lodash": "^4.15.0",
"lolex": "^1.4.0", "lolex": "^1.4.0",
"mocha": "^3.1.0", "mocha": "^2.4.5",
"nightwatch": "^0.9.8", "nightwatch": "^0.8.18",
"ora": "^0.3.0", "ora": "^0.2.0",
"phantomjs-prebuilt": "^2.1.13", "phantomjs-prebuilt": "^2.1.3",
"selenium-server": "^3.0.1", "selenium-server": "2.53.0",
"shelljs": "^0.7.4", "shelljs": "^0.6.0",
"sinon": "^1.17.3", "sinon": "^1.17.3",
"sinon-chai": "^2.8.0", "sinon-chai": "^2.8.0",
"url-loader": "^0.5.7", "url-loader": "^0.5.7",
"vue-hot-reload-api": "^2.0.6", "vue-hot-reload-api": "^1.2.0",
"vue-html-loader": "^1.2.3", "vue-html-loader": "^1.0.0",
"vue-loader": "^10.0.2", "vue-loader": "^8.3.0",
"vue-style-loader": "^1.0.0", "vue-style-loader": "^1.0.0",
"vue-template-compiler": "^2.1.6", "webpack": "^1.12.2",
"webpack": "^1.13.2",
"webpack-dev-middleware": "^1.4.0", "webpack-dev-middleware": "^1.4.0",
"webpack-hot-middleware": "^2.6.0", "webpack-hot-middleware": "^2.6.0",
"webpack-merge": "^1.1.1" "webpack-merge": "^0.8.3"
} }
} }

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width="{{width}}" height="{{height}}" v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -61,11 +49,12 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options, type) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: type || 'bar', type: 'bar',
data: data, data: data,
options: chartOptions options: chartOptions
} }
@@ -74,6 +63,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -39,33 +27,16 @@ export default Vue.extend({
data () { data () {
return { return {
defaultOptions: { defaultOptions: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
},
gridLines: {
display: false
}
}],
xAxes: [ {
gridLines: {
display: false
},
categoryPercentage: 0.5,
barPercentage: 0.2
}]
}
} }
} }
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'bubble', type: 'bubble',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -75,6 +46,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -44,11 +32,11 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'doughnut', type: 'doughnut',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -58,6 +46,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -59,11 +47,11 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'line', type: 'line',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -73,6 +61,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -44,11 +32,11 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'pie', type: 'pie',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -58,6 +46,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -44,11 +32,11 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'polarArea', type: 'polarArea',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -58,6 +46,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

View File

@@ -3,23 +3,11 @@ import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options' import { mergeOptions } from '../helpers/options'
export default Vue.extend({ export default Vue.extend({
render: function (createElement) { template: `
return createElement( <div>
'div', <canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
[ </div>
createElement( `,
'canvas', {
attrs: {
id: this.chartId,
width: this.width,
height: this.height
},
ref: 'canvas'
}
)
]
)
},
props: { props: {
chartId: { chartId: {
@@ -44,11 +32,11 @@ export default Vue.extend({
}, },
methods: { methods: {
renderChart (data, options) { render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options) let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart( this._chart = new Chart(
this.$refs.canvas.getContext('2d'), { this.$els.canvas.getContext('2d'), {
type: 'radar', type: 'radar',
data: data, data: data,
options: chartOptions options: chartOptions
@@ -58,6 +46,8 @@ export default Vue.extend({
} }
}, },
beforeDestroy () { beforeDestroy () {
this._chart.destroy() if (this._chart) {
this._chart.destroy()
}
} }
}) })

59
src/BaseCharts/Scatter.js Normal file
View File

@@ -0,0 +1,59 @@
import Vue from 'vue'
import Chart from 'chart.js'
import { mergeOptions } from '../helpers/options'
export default Vue.extend({
template: `
<div>
<canvas id="{{chartId}}" width={{width}} height={{height}} v-el:canvas></canvas>
</div>
`,
props: {
chartId: {
default: 'scatter-chart',
type: String
},
width: {
default: 400,
type: Number
},
height: {
default: 400,
type: Number
}
},
data () {
return {
defaultOptions: {
scales: {
xAxes: [{
type: 'linear',
position: 'bottom'
}]
}
}
}
},
methods: {
render (data, options) {
let chartOptions = mergeOptions(this.defaultOptions, options)
this._chart = new Chart(
this.$els.canvas.getContext('2d'), {
type: 'scatter',
data: data,
options: chartOptions
}
)
this._chart.generateLegend()
}
},
beforeDestroy () {
if (this._chart) {
this._chart.destroy()
}
}
})

View File

@@ -1,20 +1,11 @@
<template> <template>
<div class="container"> <div class="container">
<h1 style="text-align:center;margin:40px 0;">Barchart</h1>
<bar-example></bar-example> <bar-example></bar-example>
<h1 style="text-align:center;margin:40px 0;">Barchart with reactive mixing for live data</h1>
<reactive-example></reactive-example>
<h1 style="text-align:center;margin:40px 0;">Linechart</h1>
<line-example></line-example> <line-example></line-example>
<h1 style="text-align:center;margin:40px 0;">Doughnutchart</h1>
<doughnut-example></doughnut-example> <doughnut-example></doughnut-example>
<h1 style="text-align:center;margin:40px 0;">Piechart</h1>
<pie-example></pie-example> <pie-example></pie-example>
<h1 style="text-align:center;margin:40px 0;">Radarchart</h1>
<radar-example></radar-example> <radar-example></radar-example>
<h1 style="text-align:center;margin:40px 0;">Polararea</h1>
<polar-area-example></polar-area-example> <polar-area-example></polar-area-example>
<h1 style="text-align:center;margin:40px 0;">Bubblechart</h1>
<bubble-example></bubble-example> <bubble-example></bubble-example>
</div> </div>
</template> </template>
@@ -27,8 +18,6 @@
import RadarExample from './RadarExample' import RadarExample from './RadarExample'
import PolarAreaExample from './PolarAreaExample' import PolarAreaExample from './PolarAreaExample'
import BubbleExample from './BubbleExample' import BubbleExample from './BubbleExample'
import ReactiveExample from './ReactiveExample'
import ReactivePropExample from './ReactivePropExample'
export default { export default {
components: { components: {
@@ -38,9 +27,7 @@
PieExample, PieExample,
RadarExample, RadarExample,
PolarAreaExample, PolarAreaExample,
BubbleExample, BubbleExample
ReactiveExample,
ReactivePropExample
} }
} }
</script> </script>

View File

@@ -1,8 +1,8 @@
import BarChart from '../BaseCharts/Bar' import BarChart from '../BaseCharts/Bar'
export default BarChart.extend({ export default BarChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
datasets: [ datasets: [
{ {

View File

@@ -1,8 +1,8 @@
import BubbleChart from '../BaseCharts/Bubble' import BubbleChart from '../BaseCharts/Bubble'
export default BubbleChart.extend({ export default BubbleChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
datasets: [ datasets: [
{ {
label: 'Data One', label: 'Data One',
@@ -47,6 +47,6 @@ export default BubbleChart.extend({
] ]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,8 +1,8 @@
import DoughnutChart from '../BaseCharts/Doughnut' import DoughnutChart from '../BaseCharts/Doughnut'
export default DoughnutChart.extend({ export default DoughnutChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['VueJs', 'EmberJs', 'ReactJs', 'AngularJs'], labels: ['VueJs', 'EmberJs', 'ReactJs', 'AngularJs'],
datasets: [ datasets: [
{ {
@@ -15,6 +15,6 @@ export default DoughnutChart.extend({
data: [40, 20, 80, 10] data: [40, 20, 80, 10]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,8 +1,8 @@
import LineChart from '../BaseCharts/Line' import LineChart from '../BaseCharts/Line'
export default LineChart.extend({ export default LineChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [ datasets: [
{ {
@@ -11,6 +11,6 @@ export default LineChart.extend({
data: [40, 39, 10, 40, 39, 80, 40] data: [40, 39, 10, 40, 39, 80, 40]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,8 +1,8 @@
import PieChart from '../BaseCharts/Pie' import PieChart from '../BaseCharts/Pie'
export default PieChart.extend({ export default PieChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['VueJs', 'EmberJs', 'ReactJs', 'AngularJs'], labels: ['VueJs', 'EmberJs', 'ReactJs', 'AngularJs'],
datasets: [ datasets: [
{ {
@@ -15,6 +15,6 @@ export default PieChart.extend({
data: [40, 20, 80, 10] data: [40, 20, 80, 10]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,8 +1,8 @@
import PolarAreaChart from '../BaseCharts/PolarArea' import PolarAreaChart from '../BaseCharts/PolarArea'
export default PolarAreaChart.extend({ export default PolarAreaChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'],
datasets: [ datasets: [
{ {
@@ -24,6 +24,6 @@ export default PolarAreaChart.extend({
data: [28, 48, 40, 19, 96, 27, 100] data: [28, 48, 40, 19, 96, 27, 100]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,8 +1,8 @@
import RadarChart from '../BaseCharts/Radar' import RadarChart from '../BaseCharts/Radar'
export default RadarChart.extend({ export default RadarChart.extend({
mounted () { ready () {
this.renderChart({ this.render({
labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'], labels: ['Eating', 'Drinking', 'Sleeping', 'Designing', 'Coding', 'Cycling', 'Running'],
datasets: [ datasets: [
{ {
@@ -26,6 +26,6 @@ export default RadarChart.extend({
data: [28, 48, 40, 19, 96, 27, 100] data: [28, 48, 40, 19, 96, 27, 100]
} }
] ]
}, {responsive: true, maintainAspectRatio: false}) })
} }
}) })

View File

@@ -1,41 +0,0 @@
import BarChart from '../BaseCharts/Bar'
import reactiveData from '../mixins/reactiveData'
export default BarChart.extend({
mixins: [reactiveData],
data () {
return {
chartData: ''
}
},
created () {
this.fillData()
},
mounted () {
this.renderChart(this.chartData, {responsive: true, maintainAspectRatio: false})
setInterval(() => {
this.fillData()
}, 5000)
},
methods: {
fillData () {
this.chartData = {
labels: ['January' + this.getRandomInt(), 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
datasets: [
{
label: 'Data One',
backgroundColor: '#f87979',
data: [this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt(), this.getRandomInt()]
}
]
}
},
getRandomInt () {
return Math.floor(Math.random() * (50 - 5 + 1)) + 5
}
}
})

View File

@@ -1,10 +0,0 @@
import BarChart from '../BaseCharts/Bar'
import reactiveData from '../mixins/reactiveProp'
export default BarChart.extend({
mixins: [reactiveData],
mounted () {
this.renderChart(this.chartData)
}
})

View File

@@ -5,7 +5,7 @@ import Pie from './BaseCharts/Pie'
import PolarArea from './BaseCharts/PolarArea' import PolarArea from './BaseCharts/PolarArea'
import Radar from './BaseCharts/Radar' import Radar from './BaseCharts/Radar'
import Bubble from './BaseCharts/Bubble' import Bubble from './BaseCharts/Bubble'
import mixins from './mixins/index.js' import Scatter from './BaseCharts/Scatter'
const VueCharts = { const VueCharts = {
Bar, Bar,
@@ -15,19 +15,7 @@ const VueCharts = {
PolarArea, PolarArea,
Radar, Radar,
Bubble, Bubble,
mixins Scatter
} }
export default VueCharts module.exports = VueCharts
export {
VueCharts,
Bar,
Doughnut,
Line,
Pie,
PolarArea,
Radar,
Bubble,
mixins
}

View File

@@ -1,7 +0,0 @@
import reactiveData from './reactiveData.js'
import reactiveProp from './reactiveProp.js'
export default {
reactiveData,
reactiveProp
}

View File

@@ -1,44 +0,0 @@
module.exports = {
data () {
return {
chartData: null
}
},
watch: {
'chartData': {
handler (newData, oldData) {
if (oldData) {
let chart = this._chart
let newDataLabels = newData.datasets.map((dataset) => {
return dataset.label
})
let oldDataLabels = oldData.datasets.map((dataset) => {
return dataset.label
})
if (JSON.stringify(newDataLabels) === JSON.stringify(oldDataLabels)) {
this.forceUpdate(newData, chart)
} else {
this.forceRender()
}
}
}
}
},
methods: {
forceUpdate (newData, chart) {
newData.datasets.forEach((dataset, i) => {
chart.data.datasets[i].data = dataset.data
})
chart.data.labels = newData.labels
chart.update()
},
forceRender () {
this.renderChart(this.chartData, this.options)
}
}
}

View File

@@ -1,35 +0,0 @@
module.exports = {
props: {
chartData: {
required: true
}
},
watch: {
'chartData': {
handler (newData, oldData) {
if (oldData) {
let chart = this._chart
let newDataLabels = newData.datasets.map((dataset) => {
return dataset.label
})
let oldDataLabels = oldData.datasets.map((dataset) => {
return dataset.label
})
if (JSON.stringify(newDataLabels) === JSON.stringify(oldDataLabels)) {
newData.datasets.forEach((dataset, i) => {
chart.data.datasets[i].data = dataset.data
})
chart.data.labels = newData.labels
chart.update()
} else {
this.renderChart(this.chartData, this.options)
}
}
}
}
}
}

View File

@@ -4,7 +4,6 @@
}, },
"globals": { "globals": {
"expect": true, "expect": true,
"jasmine": true,
"sinon": true "sinon": true
} }
} }

View File

@@ -54,7 +54,7 @@ module.exports = function (config) {
// http://karma-runner.github.io/0.13/config/browsers.html // http://karma-runner.github.io/0.13/config/browsers.html
// 2. add it to the `browsers` array below. // 2. add it to the `browsers` array below.
browsers: ['PhantomJS'], browsers: ['PhantomJS'],
frameworks: ['mocha', 'sinon-chai', 'jasmine'], frameworks: ['mocha', 'sinon-chai'],
reporters: ['spec', 'coverage'], reporters: ['spec', 'coverage'],
files: ['./index.js'], files: ['./index.js'],
preprocessors: { preprocessors: {

View File

@@ -2,63 +2,16 @@ import Vue from 'vue'
import BarChart from 'src/examples/BarExample' import BarChart from 'src/examples/BarExample'
describe('BarChart', () => { describe('BarChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
BarChart template: '<bar-chart></bar-chart>',
)
},
components: { BarChart } components: { BarChart }
}).$mount(el) })
expect(vm.$el.querySelector('#bar-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#bar-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
BarChart, {
props: {
chartId: 'barchartprop'
}
}
)
},
components: { BarChart }
}).$mount(el)
expect(vm.$el.querySelector('#barchartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
BarChart
)
},
components: { BarChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,63 +2,16 @@ import Vue from 'vue'
import BubbleChart from 'src/examples/BubbleExample' import BubbleChart from 'src/examples/BubbleExample'
describe('BubbleChart', () => { describe('BubbleChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
BubbleChart template: '<bubble-chart></bubble-chart>',
)
},
components: { BubbleChart } components: { BubbleChart }
}).$mount(el) })
expect(vm.$el.querySelector('#bubble-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#bubble-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
BubbleChart, {
props: {
chartId: 'bubblechartprop'
}
}
)
},
components: { BubbleChart }
}).$mount(el)
expect(vm.$el.querySelector('#bubblechartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
BubbleChart
)
},
components: { BubbleChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,63 +2,16 @@ import Vue from 'vue'
import DoughnutChart from 'src/examples/DoughnutExample' import DoughnutChart from 'src/examples/DoughnutExample'
describe('DoughnutChart', () => { describe('DoughnutChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
DoughnutChart template: '<doughnut-chart></doughnut-chart>',
)
},
components: { DoughnutChart } components: { DoughnutChart }
}).$mount(el) })
expect(vm.$el.querySelector('#doughnut-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#doughnut-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
DoughnutChart, {
props: {
chartId: 'doughnutchartprop'
}
}
)
},
components: { DoughnutChart }
}).$mount(el)
expect(vm.$el.querySelector('#doughnutchartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
DoughnutChart
)
},
components: { DoughnutChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,63 +2,16 @@ import Vue from 'vue'
import LineChart from 'src/examples/LineExample' import LineChart from 'src/examples/LineExample'
describe('LineChart', () => { describe('LineChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
LineChart template: '<line-chart></line-chart>',
)
},
components: { LineChart } components: { LineChart }
}).$mount(el) })
expect(vm.$el.querySelector('#line-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#line-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
LineChart, {
props: {
chartId: 'linechartprop'
}
}
)
},
components: { LineChart }
}).$mount(el)
expect(vm.$el.querySelector('#linechartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
LineChart
)
},
components: { LineChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,62 +2,16 @@ import Vue from 'vue'
import PieChart from 'src/examples/PieExample' import PieChart from 'src/examples/PieExample'
describe('PieChart', () => { describe('PieChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
PieChart template: '<pie-chart></pie-chart>',
)
},
components: { PieChart } components: { PieChart }
}).$mount(el) })
expect(vm.$el.querySelector('#pie-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#pie-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
PieChart, {
props: {
chartId: 'piechartprop'
}
}
)
},
components: { PieChart }
}).$mount(el)
expect(vm.$el.querySelector('#piechartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
PieChart
)
},
components: { PieChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,63 +2,16 @@ import Vue from 'vue'
import PolarChart from 'src/examples/PolarAreaExample' import PolarChart from 'src/examples/PolarAreaExample'
describe('PolarChart', () => { describe('PolarChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
PolarChart template: '<polar-chart></polar-chart>',
)
},
components: { PolarChart } components: { PolarChart }
}).$mount(el) })
expect(vm.$el.querySelector('#polar-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#polar-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
PolarChart, {
props: {
chartId: 'polarchartprop'
}
}
)
},
components: { PolarChart }
}).$mount(el)
expect(vm.$el.querySelector('#polarchartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
PolarChart
)
},
components: { PolarChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

View File

@@ -2,62 +2,16 @@ import Vue from 'vue'
import RadarChart from 'src/examples/RadarExample' import RadarChart from 'src/examples/RadarExample'
describe('RadarChart', () => { describe('RadarChart', () => {
let el
beforeEach(() => {
el = document.createElement('div')
})
it('should render a canvas', () => { it('should render a canvas', () => {
const vm = new Vue({ const vm = new Vue({
render: function (createElement) { el: 'body',
return createElement( replace: false,
RadarChart template: '<radar-chart></radar-chart>',
)
},
components: { RadarChart } components: { RadarChart }
}).$mount(el) })
expect(vm.$el.querySelector('#radar-chart')).not.to.be.an('undefined') expect(vm.$el.querySelector('#radar-chart')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined') expect(vm.$el.querySelector('canvas')).not.to.be.an('undefined')
expect(vm.$el.querySelector('canvas')).not.to.be.an('null') expect(vm.$el.querySelector('canvas')).not.to.be.an('null')
expect(vm.$el.querySelector('canvas')).to.exist expect(vm.$el.querySelector('canvas')).to.exist
}) })
it('should change id based on prop', () => {
const vm = new Vue({
render: function (createElement) {
return createElement(
RadarChart, {
props: {
chartId: 'rodarchartprop'
}
}
)
},
components: { RadarChart }
}).$mount(el)
expect(vm.$el.querySelector('#rodarchartprop')).not.to.be.an('undefined')
})
it('should destroy chart instance', (done) => {
const vm = new Vue({
render: function (createElement) {
return createElement(
RadarChart
)
},
components: { RadarChart }
}).$mount(el)
expect(vm.$children[0]._chart.chart.ctx).not.to.be.null
vm.$destroy()
vm.$nextTick(() => {
vm.$forceUpdate()
expect(vm.$children[0]._chart.chart.ctx).to.be.null
done()
})
})
}) })

2386
yarn.lock

File diff suppressed because it is too large Load Diff