Compare commits

..

12 Commits

Author SHA1 Message Date
Jakub Juszczak
d08666f2ad 💎 Release new version 3.2.1 2018-02-12 11:52:32 +01:00
Jakub Juszczak
6433a0a4a5 🔥 Remove lib version from vue-chartjs object
The lib version is also defined in the webpack banner plugin, so actually there is no need to include it into the lib object.
Closes issue #310
2018-02-12 11:51:53 +01:00
Jakub Juszczak
081b97028b 💎 Release new version 3.2.0 2018-02-09 16:49:39 +01:00
Jakub Juszczak
eb42bd78ea 🔥 Remove minification for normal release 2018-02-09 16:49:11 +01:00
Jakub Juszczak
9f9aa23a69 🐛 Add sourcemap generation for minified version 2018-02-09 16:48:57 +01:00
Jakub Juszczak
ef52d98fdd 🐛 Fix missing sourcemap
Closes #306
2018-02-09 16:44:33 +01:00
Jakub
4cec21ed2d Merge pull request #308 from kylewelsby/patch-2
Fix README Typos
2018-02-09 16:28:58 +01:00
Kyle Welsby
33da30021b Fix README Typos 2018-02-09 11:58:46 +00:00
Jakub
1c2be6a83e Merge pull request #305 from west-soft-development/extract-identical-code
Refactor: Extract identical code
2018-02-08 12:23:28 +01:00
Nick Nissen
274717a237 Chore: build dist files 2018-02-06 08:25:45 +01:00
Nick Nissen
bdeac75422 Refactor: Don't include package.json into dist files
Instead of including package.json file into the build files.
Use webpacks DefinePlugin to define a global lib version.
2018-02-05 13:40:04 +01:00
Nick Nissen
ebcab9f2f8 Extract identical code into shared function 2018-02-05 13:32:05 +01:00
16 changed files with 251 additions and 383 deletions

View File

@@ -15,5 +15,8 @@ module.exports = {
'arrow-parens': 0,
// allow debugger during development
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
},
"globals": {
"LIB_VERSION": true
}
}

View File

@@ -73,11 +73,11 @@ Vue.component('line-chart', {
If you're using Gulp, Browserify or Webpack 1 the entry is `vue-chartjs.js` which is __transpiled__ and __bundled__ UMD Module.
However Chart.js is a `peerDependencies` so you have to install it separately. In most projects This way, you can have different versions of Chart.js then in this package.
However, Chart.js is a `peerDependencies` so you have to install it separately. In most projects This way, you can have different versions of Chart.js then in this package.
### Webpack 2
If you're using Webpack 2 it will automatically use the `jsnext:main` / `module` entry point. Which is `es/index.js`
It is a __transpiled__ es version of the source. And is not __bundled__ to a module. This way you tree shaking will work. Like in the bundled version, `Chart.js` is a `peerDependencies` and need to be installed.
It is a __transpiled__ es version of the source. And is not __bundled__ to a module. This way your tree shaking will work. Like in the bundled version, `Chart.js` is a `peerDependencies` and need to be installed.
## How to use
@@ -123,7 +123,7 @@ import CommitChart from 'path/to/component/CommitChart'
## Another Example with options
You can overwrite the default chart options. Just pass the options object as a second paramenter to the render method
You can overwrite the default chart options. Just pass the options object as a second parameter to the render method
```javascript
// MonthlyIncome.vue
@@ -158,7 +158,7 @@ export default {
## Reactivity
Chart.js does not update or re-render the chart if new data is passed.
However you can simply implement this on your own or use one of the two mixins which are included.
However, you can simply implement this on your own or use one of the two mixins which are included.
- `reactiveProp`
- `reactiveData`
@@ -166,7 +166,7 @@ However you can simply implement this on your own or use one of the two mixins w
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.
However keep in mind the limitations of vue and javascript for mutations on arrays and objects.
However, keep in mind the limitations of vue and javascript for mutations on arrays and objects.
**It is important that you pass your options in a local variable named `options`!**
The reason is that if the mixin re-renders the chart it calls `this.renderChart(this.chartData, this.options`)` so don't pass in the options object directly or it will be ignored.
@@ -188,7 +188,7 @@ export default {
```
### Mixins module
The `mixins` module is included in the `VueCharts` module and as a seperate module.
The `mixins` module is included in the `VueCharts` module and as a separate module.
Some ways to import them:
```javascript
@@ -294,7 +294,7 @@ npm run e2e
npm test
```
For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
For a detailed explanation of how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
## Contributing

View File

@@ -1,8 +1,10 @@
'use strict'
const webpack = require('webpack')
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
const npmCfg = require('../package.json')
function resolve (dir) {
return path.join(__dirname, '..', dir)
@@ -72,5 +74,10 @@ module.exports = {
}
}
]
}
},
plugins: [
new webpack.DefinePlugin({
LIB_VERSION: JSON.stringify(npmCfg.version)
})
]
}

View File

@@ -19,6 +19,7 @@ module.exports = {
entry: {
'vue-chartjs': './src/index.js'
},
devtool: 'source-map',
output: {
filename: './dist/[name].js',
library: 'VueChartJs',
@@ -82,17 +83,12 @@ module.exports = {
}
if (process.env.NODE_ENV === 'production') {
delete module.exports.devtool
// delete module.exports.devtool
module.exports.plugins = [
new webpack.DefinePlugin({
'process.env': {
NODE_ENV: '"production"'
}
}),
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
}
})
]
}

View File

@@ -3,12 +3,10 @@ var webpack = require('webpack')
config.output.filename = config.output.filename.replace(/\.js$/, '.min.js')
delete config.devtool
config.plugins = [
new webpack.optimize.ModuleConcatenationPlugin(),
new webpack.optimize.UglifyJsPlugin({
sourceMap: false,
sourceMap: true,
compress: {
warnings: false
}

343
dist/vue-chartjs.js vendored
View File

@@ -1,8 +1,3 @@
/*!
* vue-chartjs v3.1.1
* (c) 2018 Jakub Juszczak <jakub@posteo.de>
* http://vue-chartjs.org
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("chart.js"));
@@ -12,7 +7,7 @@
exports["VueChartJs"] = factory(require("chart.js"));
else
root["VueChartJs"] = factory(root["Chart"]);
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_4__) {
})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_3__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
@@ -84,31 +79,140 @@ return /******/ (function(modules) { // webpackBootstrap
"use strict";
Object.defineProperty(__webpack_exports__, "__esModule", { value: true });
// EXTERNAL MODULE: ./src/mixins/reactiveData.js
var reactiveData = __webpack_require__(1);
var reactiveData_default = /*#__PURE__*/__webpack_require__.n(reactiveData);
// EXTERNAL MODULE: ./src/mixins/reactiveProp.js
var reactiveProp = __webpack_require__(2);
var reactiveProp_default = /*#__PURE__*/__webpack_require__.n(reactiveProp);
// CONCATENATED MODULE: ./src/mixins/index.js
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VueCharts", function() { return VueCharts; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__mixins_index_js__ = __webpack_require__(1);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__BaseCharts__ = __webpack_require__(2);
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Bar", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["a"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "HorizontalBar", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["d"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Doughnut", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["c"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Line", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["e"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Pie", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["f"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "PolarArea", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["g"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Radar", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["h"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Bubble", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["b"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "Scatter", function() { return __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["i"]; });
/* harmony reexport (binding) */ __webpack_require__.d(__webpack_exports__, "mixins", function() { return __WEBPACK_IMPORTED_MODULE_0__mixins_index_js__["a"]; });
/* harmony default export */ var mixins = ({
reactiveData: reactiveData_default.a,
reactiveProp: reactiveProp_default.a
var VueCharts = {
Bar: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["a" /* Bar */],
HorizontalBar: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["d" /* HorizontalBar */],
Doughnut: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["c" /* Doughnut */],
Line: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["e" /* Line */],
Pie: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["f" /* Pie */],
PolarArea: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["g" /* PolarArea */],
Radar: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["h" /* Radar */],
Bubble: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["b" /* Bubble */],
Scatter: __WEBPACK_IMPORTED_MODULE_1__BaseCharts__["i" /* Scatter */],
mixins: __WEBPACK_IMPORTED_MODULE_0__mixins_index_js__["a" /* default */]
};
/* harmony default export */ __webpack_exports__["default"] = (VueCharts);
/***/ }),
/* 1 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
/* unused harmony export reactiveData */
/* unused harmony export reactiveProp */
function dataHandler(newData, oldData) {
if (oldData) {
var chart = this.$data._chart;
var newDatasetLabels = newData.datasets.map(function (dataset) {
return dataset.label;
});
var oldDatasetLabels = oldData.datasets.map(function (dataset) {
return dataset.label;
});
var oldLabels = JSON.stringify(oldDatasetLabels);
var newLabels = JSON.stringify(newDatasetLabels);
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach(function (dataset, i) {
var oldDatasetKeys = Object.keys(oldData.datasets[i]);
var newDatasetKeys = Object.keys(dataset);
var deletionKeys = oldDatasetKeys.filter(function (key) {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1;
});
deletionKeys.forEach(function (deletionKey) {
delete chart.data.datasets[i][deletionKey];
});
for (var attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute];
}
}
});
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels;
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels;
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels;
}
chart.update();
} else {
chart.destroy();
this.renderChart(this.chartData, this.options);
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy();
}
this.renderChart(this.chartData, this.options);
}
}
var reactiveData = {
data: function data() {
return {
chartData: null
};
},
watch: {
'chartData': dataHandler
}
};
var reactiveProp = {
props: {
chartData: {
required: true
}
},
watch: {
'chartData': dataHandler
}
};
/* harmony default export */ __webpack_exports__["a"] = ({
reactiveData: reactiveData,
reactiveProp: reactiveProp
});
// EXTERNAL MODULE: ./package.json
var package_0 = __webpack_require__(3);
var package_default = /*#__PURE__*/__webpack_require__.n(package_0);
// EXTERNAL MODULE: external {"root":"Chart","commonjs":"chart.js","commonjs2":"chart.js","amd":"chart.js"}
var external___root___Chart___commonjs___chart_js___commonjs2___chart_js___amd___chart_js__ = __webpack_require__(4);
var external___root___Chart___commonjs___chart_js___commonjs2___chart_js___amd___chart_js___default = /*#__PURE__*/__webpack_require__.n(external___root___Chart___commonjs___chart_js___commonjs2___chart_js___amd___chart_js__);
/***/ }),
/* 2 */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
// CONCATENATED MODULE: ./src/BaseCharts.js
"use strict";
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return Bar; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return HorizontalBar; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return Doughnut; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "e", function() { return Line; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "f", function() { return Pie; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return PolarArea; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return Radar; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return Bubble; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "i", function() { return Scatter; });
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_chart_js__ = __webpack_require__(3);
/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_chart_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_chart_js__);
function generateChart(chartId, chartType) {
@@ -164,7 +268,7 @@ function generateChart(chartId, chartType) {
this.$data._plugins.push(plugin);
},
renderChart: function renderChart(data, options) {
this.$data._chart = new external___root___Chart___commonjs___chart_js___commonjs2___chart_js___amd___chart_js___default.a(this.$refs.canvas.getContext('2d'), {
this.$data._chart = new __WEBPACK_IMPORTED_MODULE_0_chart_js___default.a(this.$refs.canvas.getContext('2d'), {
type: chartType,
data: data,
options: options,
@@ -189,7 +293,7 @@ var PolarArea = generateChart('polar-chart', 'polarArea');
var Radar = generateChart('radar-chart', 'radar');
var Bubble = generateChart('bubble-chart', 'bubble');
var Scatter = generateChart('scatter-chart', 'scatter');
/* harmony default export */ var BaseCharts = ({
/* unused harmony default export */ var _unused_webpack_default_export = ({
Bar: Bar,
HorizontalBar: HorizontalBar,
Doughnut: Doughnut,
@@ -200,191 +304,14 @@ var Scatter = generateChart('scatter-chart', 'scatter');
Bubble: Bubble,
Scatter: Scatter
});
// CONCATENATED MODULE: ./src/index.js
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VueCharts", function() { return VueCharts; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Bar", function() { return Bar; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "HorizontalBar", function() { return HorizontalBar; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Doughnut", function() { return Doughnut; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Line", function() { return Line; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Pie", function() { return Pie; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "PolarArea", function() { return PolarArea; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Radar", function() { return Radar; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Bubble", function() { return Bubble; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "Scatter", function() { return Scatter; });
/* concated harmony reexport */__webpack_require__.d(__webpack_exports__, "mixins", function() { return mixins; });
var VueCharts = {
version: package_default.a.version,
Bar: Bar,
HorizontalBar: HorizontalBar,
Doughnut: Doughnut,
Line: Line,
Pie: Pie,
PolarArea: PolarArea,
Radar: Radar,
Bubble: Bubble,
Scatter: Scatter,
mixins: mixins
};
/* harmony default export */ var src = __webpack_exports__["default"] = (VueCharts);
/***/ }),
/* 1 */
/***/ (function(module, exports) {
module.exports = {
data: function data() {
return {
chartData: null
};
},
watch: {
'chartData': {
handler: function handler(newData, oldData) {
if (oldData) {
var chart = this.$data._chart;
var newDatasetLabels = newData.datasets.map(function (dataset) {
return dataset.label;
});
var oldDatasetLabels = oldData.datasets.map(function (dataset) {
return dataset.label;
});
var oldLabels = JSON.stringify(oldDatasetLabels);
var newLabels = JSON.stringify(newDatasetLabels);
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach(function (dataset, i) {
var oldDatasetKeys = Object.keys(oldData.datasets[i]);
var newDatasetKeys = Object.keys(dataset);
var deletionKeys = oldDatasetKeys.filter(function (key) {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1;
});
deletionKeys.forEach(function (deletionKey) {
delete chart.data.datasets[i][deletionKey];
});
for (var attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute];
}
}
});
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels;
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels;
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels;
}
chart.update();
} else {
chart.destroy();
this.renderChart(this.chartData, this.options);
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy();
}
this.renderChart(this.chartData, this.options);
}
}
}
}
};
/***/ }),
/* 2 */
/***/ (function(module, exports) {
module.exports = {
props: {
chartData: {
required: true
}
},
watch: {
'chartData': {
handler: function handler(newData, oldData) {
if (oldData) {
var chart = this.$data._chart;
var newDatasetLabels = newData.datasets.map(function (dataset) {
return dataset.label;
});
var oldDatasetLabels = oldData.datasets.map(function (dataset) {
return dataset.label;
});
var oldLabels = JSON.stringify(oldDatasetLabels);
var newLabels = JSON.stringify(newDatasetLabels);
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach(function (dataset, i) {
var oldDatasetKeys = Object.keys(oldData.datasets[i]);
var newDatasetKeys = Object.keys(dataset);
var deletionKeys = oldDatasetKeys.filter(function (key) {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1;
});
deletionKeys.forEach(function (deletionKey) {
delete chart.data.datasets[i][deletionKey];
});
for (var attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute];
}
}
});
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels;
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels;
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels;
}
chart.update();
} else {
chart.destroy();
this.renderChart(this.chartData, this.options);
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy();
}
this.renderChart(this.chartData, this.options);
}
}
}
}
};
/***/ }),
/* 3 */
/***/ (function(module, exports) {
module.exports = {"name":"vue-chartjs","version":"3.1.1","description":"Vue.js wrapper for chart.js for creating beautiful charts.","author":"Jakub Juszczak <jakub@posteo.de>","homepage":"http://vue-chartjs.org","license":"MIT","contributors":[{"name":"Thorsten Lünborg","web":"https://github.com/LinusBorg"},{"name":"Juan Carlos Alonso","web":"https://github.com/jcalonso"}],"maintainers":[{"name":"Jakub Juszczak","email":"jakub@posteo.de","web":"http://www.jakubjuszczak.de"}],"repository":{"type":"git","url":"git+ssh://git@github.com:apertureless/vue-chartjs.git"},"bugs":{"url":"https://github.com/apertureless/vue-chartjs/issues"},"keywords":["ChartJs","Vue","Visualisation","Wrapper","Charts"],"main":"dist/vue-chartjs.js","unpkg":"dist/vue-chartjs.min.js","module":"es/index.js","jsnext:main":"es/index.js","files":["src","dist","es"],"scripts":{"dev":"node build/dev-server.js","build":"yarn run release && yarn run build:es","build:es":"cross-env BABEL_ENV=es babel src --out-dir es","unit":"karma start test/unit/karma.conf.js --single-run","e2e":"node test/e2e/runner.js","test":"npm run unit","lint":"eslint --ext .js,.vue src test/unit/specs test/e2e/specs","release":"webpack --progress --hide-modules --config ./build/webpack.release.js && cross-env NODE_ENV=production webpack --progress --hide-modules --config ./build/webpack.release.min.js","prepublishOnly":"yarn run lint && yarn run test && yarn run build"},"dependencies":{},"peerDependencies":{"chart.js":"2.7.x"},"devDependencies":{"@babel/cli":"^7.0.0-beta.31","@babel/core":"^7.0.0-beta.31","@babel/preset-env":"^7.0.0-beta.31","@babel/preset-stage-2":"^7.0.0-beta.31","babel-loader":"8.0.0-beta.0","chai":"^3.5.0","chart.js":"2.7.0","chromedriver":"^2.28.0","connect-history-api-fallback":"^1.1.0","cross-env":"^5.1.1","cross-spawn":"^5.1.0","css-loader":"^0.28.0","eslint":"^3.19.0","eslint-config-standard":"^10.2.1","eslint-friendly-formatter":"^2.0.7","eslint-loader":"^1.7.1","eslint-plugin-html":"^2.0.1","eslint-plugin-import":"^2.2.0","eslint-plugin-node":"^4.2.2","eslint-plugin-promise":"^3.5.0","eslint-plugin-standard":"^3.0.1","eventsource-polyfill":"^0.9.6","express":"^4.15.2","extract-text-webpack-plugin":"^3.0.1","file-loader":"^0.10.1","friendly-errors-webpack-plugin":"^1.6.1","function-bind":"^1.0.2","html-webpack-plugin":"^2.28.0","http-proxy-middleware":"^0.17.4","inject-loader":"^3.0.0","isparta":"^4.0.0","jasmine-core":"^2.5.2","json-loader":"^0.5.4","karma":"^1.5.0","karma-coverage":"^1.1.1","karma-jasmine":"^1.0.2","karma-mocha":"^1.2.0","karma-phantomjs-launcher":"^1.0.4","karma-phantomjs-shim":"^1.4.0","karma-sinon-chai":"^1.2.0","karma-sourcemap-loader":"^0.3.7","karma-spec-reporter":"0.0.30","karma-webpack":"2","lolex":"^1.6.0","mocha":"^3.1.0","opn":"^5.1.0","ora":"^1.2.0","phantomjs-prebuilt":"^2.1.13","portfinder":"^1.0.13","selenium-server":"^3.3.1","shelljs":"^0.7.7","sinon":"^2.1.0","sinon-chai":"^2.9.0","url-loader":"^0.5.8","vue":"2.5.2","vue-hot-reload-api":"2.1.0","vue-html-loader":"^1.2.4","vue-loader":"^13.3.0","vue-style-loader":"3.0.1","vue-template-compiler":"2.5.2","webpack":"^3.7.1","webpack-dev-middleware":"^1.10.1","webpack-hot-middleware":"^2.17.1","webpack-merge":"^4.1.0"},"engines":{"node":">=6.9.0","npm":">= 3.0.0"},"browserify":{"transform":["babelify"]},"greenkeeper":{"ignore":["extract-text-webpack-plugin","karma-webpack","webpack","webpack-merge"]}}
/***/ }),
/* 4 */
/***/ (function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_4__;
module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
/***/ })
/******/ ]);
});
});
//# sourceMappingURL=vue-chartjs.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/vue-chartjs.min.js.map vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,6 @@
{
"name": "vue-chartjs",
"version": "3.1.1",
"version": "3.2.1",
"description": "Vue.js wrapper for chart.js for creating beautiful charts.",
"author": "Jakub Juszczak <jakub@posteo.de>",
"homepage": "http://vue-chartjs.org",
@@ -53,7 +53,7 @@
"e2e": "node test/e2e/runner.js",
"test": "npm run unit",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs",
"release": "webpack --progress --hide-modules --config ./build/webpack.release.js && cross-env NODE_ENV=production webpack --progress --hide-modules --config ./build/webpack.release.min.js",
"release": "cross-env NODE_ENV=production webpack --progress --hide-modules --config ./build/webpack.release.js && cross-env NODE_ENV=production webpack --progress --hide-modules --config ./build/webpack.release.min.js",
"prepublishOnly": "yarn run lint && yarn run test && yarn run build"
},
"dependencies": {},

View File

@@ -1,5 +1,5 @@
import { Bar } from '../BaseCharts'
import reactiveData from '../mixins/reactiveData'
import { reactiveData } from '../mixins'
export default {
extends: Bar,

View File

@@ -1,5 +1,5 @@
import { Bar } from '../BaseCharts'
import reactiveProp from '../mixins/reactiveProp'
import { reactiveProp } from '../mixins'
export default {
extends: Bar,

View File

@@ -1,5 +1,5 @@
import mixins from './mixins/index.js'
import npmCfg from '../package.json'
import {
Bar,
HorizontalBar,
@@ -13,7 +13,6 @@ import {
} from './BaseCharts'
const VueCharts = {
version: npmCfg.version,
Bar,
HorizontalBar,
Doughnut,

View File

@@ -1,5 +1,89 @@
import reactiveData from './reactiveData.js'
import reactiveProp from './reactiveProp.js'
function dataHandler (newData, oldData) {
if (oldData) {
let chart = this.$data._chart
// Get new and old DataSet Labels
let newDatasetLabels = newData.datasets.map((dataset) => {
return dataset.label
})
let oldDatasetLabels = oldData.datasets.map((dataset) => {
return dataset.label
})
// Stringify 'em for easier compare
const oldLabels = JSON.stringify(oldDatasetLabels)
const newLabels = JSON.stringify(newDatasetLabels)
// Check if Labels are equal and if dataset length is equal
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach((dataset, i) => {
// Get new and old dataset keys
const oldDatasetKeys = Object.keys(oldData.datasets[i])
const newDatasetKeys = Object.keys(dataset)
// Get keys that aren't present in the new data
const deletionKeys = oldDatasetKeys.filter((key) => {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1
})
// Remove outdated key-value pairs
deletionKeys.forEach((deletionKey) => {
delete chart.data.datasets[i][deletionKey]
})
// Update attributes individually to avoid re-rendering the entire chart
for (const attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute]
}
}
})
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels
}
chart.update()
} else {
chart.destroy()
this.renderChart(this.chartData, this.options)
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy()
}
this.renderChart(this.chartData, this.options)
}
}
export const reactiveData = {
data () {
return {
chartData: null
}
},
watch: {
'chartData': dataHandler
}
}
export const reactiveProp = {
props: {
chartData: {
required: true
}
},
watch: {
'chartData': dataHandler
}
}
export default {
reactiveData,

View File

@@ -1,74 +0,0 @@
module.exports = {
data () {
return {
chartData: null
}
},
watch: {
'chartData': {
handler (newData, oldData) {
if (oldData) {
let chart = this.$data._chart
// Get new and old DataSet Labels
let newDatasetLabels = newData.datasets.map((dataset) => {
return dataset.label
})
let oldDatasetLabels = oldData.datasets.map((dataset) => {
return dataset.label
})
// Stringify 'em for easier compare
const oldLabels = JSON.stringify(oldDatasetLabels)
const newLabels = JSON.stringify(newDatasetLabels)
// Check if Labels are equal and if dataset length is equal
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach((dataset, i) => {
// Get new and old dataset keys
const oldDatasetKeys = Object.keys(oldData.datasets[i])
const newDatasetKeys = Object.keys(dataset)
// Get keys that aren't present in the new data
const deletionKeys = oldDatasetKeys.filter((key) => {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1
})
// Remove outdated key-value pairs
deletionKeys.forEach((deletionKey) => {
delete chart.data.datasets[i][deletionKey]
})
// Update attributes individually to avoid re-rendering the entire chart
for (const attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute]
}
}
})
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels
}
chart.update()
} else {
chart.destroy()
this.renderChart(this.chartData, this.options)
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy()
}
this.renderChart(this.chartData, this.options)
}
}
}
}
}

View File

@@ -1,74 +0,0 @@
module.exports = {
props: {
chartData: {
required: true
}
},
watch: {
'chartData': {
handler (newData, oldData) {
if (oldData) {
let chart = this.$data._chart
// Get new and old DataSet Labels
let newDatasetLabels = newData.datasets.map((dataset) => {
return dataset.label
})
let oldDatasetLabels = oldData.datasets.map((dataset) => {
return dataset.label
})
// Stringify 'em for easier compare
const oldLabels = JSON.stringify(oldDatasetLabels)
const newLabels = JSON.stringify(newDatasetLabels)
// Check if Labels are equal and if dataset length is equal
if (newLabels === oldLabels && oldData.datasets.length === newData.datasets.length) {
newData.datasets.forEach((dataset, i) => {
// Get new and old dataset keys
const oldDatasetKeys = Object.keys(oldData.datasets[i])
const newDatasetKeys = Object.keys(dataset)
// Get keys that aren't present in the new data
const deletionKeys = oldDatasetKeys.filter((key) => {
return key !== '_meta' && newDatasetKeys.indexOf(key) === -1
})
// Remove outdated key-value pairs
deletionKeys.forEach((deletionKey) => {
delete chart.data.datasets[i][deletionKey]
})
// Update attributes individually to avoid re-rendering the entire chart
for (const attribute in dataset) {
if (dataset.hasOwnProperty(attribute)) {
chart.data.datasets[i][attribute] = dataset[attribute]
}
}
})
if (newData.hasOwnProperty('labels')) {
chart.data.labels = newData.labels
}
if (newData.hasOwnProperty('xLabels')) {
chart.data.xLabels = newData.xLabels
}
if (newData.hasOwnProperty('yLabels')) {
chart.data.yLabels = newData.yLabels
}
chart.update()
} else {
chart.destroy()
this.renderChart(this.chartData, this.options)
}
} else {
if (this.$data._chart) {
this.$data._chart.destroy()
}
this.renderChart(this.chartData, this.options)
}
}
}
}
}