mirror of
				https://github.com/KevinMidboe/vue-chartjs.git
				synced 2025-10-29 18:00:20 +00:00 
			
		
		
		
	🎉 Initial commit
This commit is contained in:
		
							
								
								
									
										5
									
								
								.babelrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.babelrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | { | ||||||
|  |   "presets": ["es2015", "stage-2"], | ||||||
|  |   "plugins": ["transform-runtime"], | ||||||
|  |   "comments": false | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | root = true | ||||||
|  |  | ||||||
|  | [*] | ||||||
|  | charset = utf-8 | ||||||
|  | indent_style = space | ||||||
|  | indent_size = 2 | ||||||
|  | end_of_line = lf | ||||||
|  | insert_final_newline = true | ||||||
|  | trim_trailing_whitespace = true | ||||||
							
								
								
									
										19
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | module.exports = { | ||||||
|  |   root: true, | ||||||
|  |   parserOptions: { | ||||||
|  |     sourceType: 'module' | ||||||
|  |   }, | ||||||
|  |   // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style | ||||||
|  |   extends: 'standard', | ||||||
|  |   // required to lint *.vue files | ||||||
|  |   plugins: [ | ||||||
|  |     'html' | ||||||
|  |   ], | ||||||
|  |   // add your custom rules here | ||||||
|  |   'rules': { | ||||||
|  |     // allow paren-less arrow functions | ||||||
|  |     'arrow-parens': 0, | ||||||
|  |     // allow debugger during development | ||||||
|  |     'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | |||||||
|  | .DS_Store | ||||||
|  | node_modules/ | ||||||
|  | dist/ | ||||||
|  | npm-debug.log | ||||||
|  | selenium-debug.log | ||||||
|  | test/unit/coverage | ||||||
|  | test/e2e/reports | ||||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | # Vue-ChartJs | ||||||
|  |  | ||||||
|  | > VueJS wrapper for ChartJs | ||||||
|  |  | ||||||
|  | ## Build Setup | ||||||
|  |  | ||||||
|  | ``` bash | ||||||
|  | # install dependencies | ||||||
|  | npm install | ||||||
|  |  | ||||||
|  | # serve with hot reload at localhost:8080 | ||||||
|  | npm run dev | ||||||
|  |  | ||||||
|  | # build for production with minification | ||||||
|  | npm run build | ||||||
|  |  | ||||||
|  | # run unit tests | ||||||
|  | npm run unit | ||||||
|  |  | ||||||
|  | # run e2e tests | ||||||
|  | npm run e2e | ||||||
|  |  | ||||||
|  | # run all tests | ||||||
|  | npm test | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). | ||||||
							
								
								
									
										35
									
								
								build/build.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								build/build.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | |||||||
|  | // https://github.com/shelljs/shelljs | ||||||
|  | require('shelljs/global') | ||||||
|  | env.NODE_ENV = 'production' | ||||||
|  |  | ||||||
|  | var path = require('path') | ||||||
|  | var config = require('../config') | ||||||
|  | var ora = require('ora') | ||||||
|  | var webpack = require('webpack') | ||||||
|  | var webpackConfig = require('./webpack.prod.conf') | ||||||
|  |  | ||||||
|  | console.log( | ||||||
|  |   '  Tip:\n' + | ||||||
|  |   '  Built files are meant to be served over an HTTP server.\n' + | ||||||
|  |   '  Opening index.html over file:// won\'t work.\n' | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | var spinner = ora('building for production...') | ||||||
|  | spinner.start() | ||||||
|  |  | ||||||
|  | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) | ||||||
|  | rm('-rf', assetsPath) | ||||||
|  | mkdir('-p', assetsPath) | ||||||
|  | cp('-R', 'static/', assetsPath) | ||||||
|  |  | ||||||
|  | webpack(webpackConfig, function (err, stats) { | ||||||
|  |   spinner.stop() | ||||||
|  |   if (err) throw err | ||||||
|  |   process.stdout.write(stats.toString({ | ||||||
|  |     colors: true, | ||||||
|  |     modules: false, | ||||||
|  |     children: false, | ||||||
|  |     chunks: false, | ||||||
|  |     chunkModules: false | ||||||
|  |   }) + '\n') | ||||||
|  | }) | ||||||
							
								
								
									
										9
									
								
								build/dev-client.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								build/dev-client.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | /* eslint-disable */ | ||||||
|  | require('eventsource-polyfill') | ||||||
|  | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') | ||||||
|  |  | ||||||
|  | hotClient.subscribe(function (event) { | ||||||
|  |   if (event.action === 'reload') { | ||||||
|  |     window.location.reload() | ||||||
|  |   } | ||||||
|  | }) | ||||||
							
								
								
									
										65
									
								
								build/dev-server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								build/dev-server.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | |||||||
|  | var path = require('path') | ||||||
|  | var express = require('express') | ||||||
|  | var webpack = require('webpack') | ||||||
|  | var config = require('../config') | ||||||
|  | var proxyMiddleware = require('http-proxy-middleware') | ||||||
|  | var webpackConfig = process.env.NODE_ENV === 'testing' | ||||||
|  |   ? require('./webpack.prod.conf') | ||||||
|  |   : require('./webpack.dev.conf') | ||||||
|  |  | ||||||
|  | // default port where dev server listens for incoming traffic | ||||||
|  | var port = process.env.PORT || config.dev.port | ||||||
|  | // Define HTTP proxies to your custom API backend | ||||||
|  | // https://github.com/chimurai/http-proxy-middleware | ||||||
|  | var proxyTable = config.dev.proxyTable | ||||||
|  |  | ||||||
|  | var app = express() | ||||||
|  | var compiler = webpack(webpackConfig) | ||||||
|  |  | ||||||
|  | var devMiddleware = require('webpack-dev-middleware')(compiler, { | ||||||
|  |   publicPath: webpackConfig.output.publicPath, | ||||||
|  |   stats: { | ||||||
|  |     colors: true, | ||||||
|  |     chunks: false | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | var hotMiddleware = require('webpack-hot-middleware')(compiler) | ||||||
|  | // force page reload when html-webpack-plugin template changes | ||||||
|  | compiler.plugin('compilation', function (compilation) { | ||||||
|  |   compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { | ||||||
|  |     hotMiddleware.publish({ action: 'reload' }) | ||||||
|  |     cb() | ||||||
|  |   }) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | // proxy api requests | ||||||
|  | Object.keys(proxyTable).forEach(function (context) { | ||||||
|  |   var options = proxyTable[context] | ||||||
|  |   if (typeof options === 'string') { | ||||||
|  |     options = { target: options } | ||||||
|  |   } | ||||||
|  |   app.use(proxyMiddleware(context, options)) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | // handle fallback for HTML5 history API | ||||||
|  | app.use(require('connect-history-api-fallback')()) | ||||||
|  |  | ||||||
|  | // serve webpack bundle output | ||||||
|  | app.use(devMiddleware) | ||||||
|  |  | ||||||
|  | // enable hot-reload and state-preserving | ||||||
|  | // compilation error display | ||||||
|  | app.use(hotMiddleware) | ||||||
|  |  | ||||||
|  | // serve pure static assets | ||||||
|  | var staticPath = path.posix.join(config.build.assetsPublicPath, config.build.assetsSubDirectory) | ||||||
|  | app.use(staticPath, express.static('./static')) | ||||||
|  |  | ||||||
|  | module.exports = app.listen(port, function (err) { | ||||||
|  |   if (err) { | ||||||
|  |     console.log(err) | ||||||
|  |     return | ||||||
|  |   } | ||||||
|  |   console.log('Listening at http://localhost:' + port + '\n') | ||||||
|  | }) | ||||||
							
								
								
									
										56
									
								
								build/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								build/utils.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | var path = require('path') | ||||||
|  | var config = require('../config') | ||||||
|  | var ExtractTextPlugin = require('extract-text-webpack-plugin') | ||||||
|  |  | ||||||
|  | exports.assetsPath = function (_path) { | ||||||
|  |   return path.posix.join(config.build.assetsSubDirectory, _path) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | exports.cssLoaders = function (options) { | ||||||
|  |   options = options || {} | ||||||
|  |   // generate loader string to be used with extract text plugin | ||||||
|  |   function generateLoaders (loaders) { | ||||||
|  |     var sourceLoader = loaders.map(function (loader) { | ||||||
|  |       var extraParamChar | ||||||
|  |       if (/\?/.test(loader)) { | ||||||
|  |         loader = loader.replace(/\?/, '-loader?') | ||||||
|  |         extraParamChar = '&' | ||||||
|  |       } else { | ||||||
|  |         loader = loader + '-loader' | ||||||
|  |         extraParamChar = '?' | ||||||
|  |       } | ||||||
|  |       return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') | ||||||
|  |     }).join('!') | ||||||
|  |  | ||||||
|  |     if (options.extract) { | ||||||
|  |       return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) | ||||||
|  |     } else { | ||||||
|  |       return ['vue-style-loader', sourceLoader].join('!') | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   // http://vuejs.github.io/vue-loader/configurations/extract-css.html | ||||||
|  |   return { | ||||||
|  |     css: generateLoaders(['css']), | ||||||
|  |     postcss: generateLoaders(['css']), | ||||||
|  |     less: generateLoaders(['css', 'less']), | ||||||
|  |     sass: generateLoaders(['css', 'sass?indentedSyntax']), | ||||||
|  |     scss: generateLoaders(['css', 'sass']), | ||||||
|  |     stylus: generateLoaders(['css', 'stylus']), | ||||||
|  |     styl: generateLoaders(['css', 'stylus']) | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // Generate loaders for standalone style files (outside of .vue) | ||||||
|  | exports.styleLoaders = function (options) { | ||||||
|  |   var output = [] | ||||||
|  |   var loaders = exports.cssLoaders(options) | ||||||
|  |   for (var extension in loaders) { | ||||||
|  |     var loader = loaders[extension] | ||||||
|  |     output.push({ | ||||||
|  |       test: new RegExp('\\.' + extension + '$'), | ||||||
|  |       loader: loader | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  |   return output | ||||||
|  | } | ||||||
							
								
								
									
										85
									
								
								build/webpack.base.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								build/webpack.base.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | |||||||
|  | var path = require('path') | ||||||
|  | var config = require('../config') | ||||||
|  | var utils = require('./utils') | ||||||
|  | var projectRoot = path.resolve(__dirname, '../') | ||||||
|  |  | ||||||
|  | module.exports = { | ||||||
|  |   entry: { | ||||||
|  |     app: './src/main.js' | ||||||
|  |   }, | ||||||
|  |   output: { | ||||||
|  |     path: config.build.assetsRoot, | ||||||
|  |     publicPath: config.build.assetsPublicPath, | ||||||
|  |     filename: '[name].js' | ||||||
|  |   }, | ||||||
|  |   resolve: { | ||||||
|  |     extensions: ['', '.js', '.vue'], | ||||||
|  |     fallback: [path.join(__dirname, '../node_modules')], | ||||||
|  |     alias: { | ||||||
|  |       'src': path.resolve(__dirname, '../src'), | ||||||
|  |       'assets': path.resolve(__dirname, '../src/assets'), | ||||||
|  |       'components': path.resolve(__dirname, '../src/components') | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   resolveLoader: { | ||||||
|  |     fallback: [path.join(__dirname, '../node_modules')] | ||||||
|  |   }, | ||||||
|  |   module: { | ||||||
|  |     preLoaders: [ | ||||||
|  |       { | ||||||
|  |         test: /\.vue$/, | ||||||
|  |         loader: 'eslint', | ||||||
|  |         include: projectRoot, | ||||||
|  |         exclude: /node_modules/ | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.js$/, | ||||||
|  |         loader: 'eslint', | ||||||
|  |         include: projectRoot, | ||||||
|  |         exclude: /node_modules/ | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     loaders: [ | ||||||
|  |       { | ||||||
|  |         test: /\.vue$/, | ||||||
|  |         loader: 'vue' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.js$/, | ||||||
|  |         loader: 'babel', | ||||||
|  |         include: projectRoot, | ||||||
|  |         exclude: /node_modules/ | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.json$/, | ||||||
|  |         loader: 'json' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.html$/, | ||||||
|  |         loader: 'vue-html' | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, | ||||||
|  |         loader: 'url', | ||||||
|  |         query: { | ||||||
|  |           limit: 10000, | ||||||
|  |           name: utils.assetsPath('img/[name].[hash:7].[ext]') | ||||||
|  |         } | ||||||
|  |       }, | ||||||
|  |       { | ||||||
|  |         test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, | ||||||
|  |         loader: 'url', | ||||||
|  |         query: { | ||||||
|  |           limit: 10000, | ||||||
|  |           name: utils.assetsPath('fonts/[name].[hash:7].[ext]') | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ] | ||||||
|  |   }, | ||||||
|  |   eslint: { | ||||||
|  |     formatter: require('eslint-friendly-formatter') | ||||||
|  |   }, | ||||||
|  |   vue: { | ||||||
|  |     loaders: utils.cssLoaders() | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										34
									
								
								build/webpack.dev.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								build/webpack.dev.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | var config = require('../config') | ||||||
|  | var webpack = require('webpack') | ||||||
|  | var merge = require('webpack-merge') | ||||||
|  | var utils = require('./utils') | ||||||
|  | var baseWebpackConfig = require('./webpack.base.conf') | ||||||
|  | var HtmlWebpackPlugin = require('html-webpack-plugin') | ||||||
|  |  | ||||||
|  | // add hot-reload related code to entry chunks | ||||||
|  | Object.keys(baseWebpackConfig.entry).forEach(function (name) { | ||||||
|  |   baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | module.exports = merge(baseWebpackConfig, { | ||||||
|  |   module: { | ||||||
|  |     loaders: utils.styleLoaders() | ||||||
|  |   }, | ||||||
|  |   // eval-source-map is faster for development | ||||||
|  |   devtool: '#eval-source-map', | ||||||
|  |   plugins: [ | ||||||
|  |     new webpack.DefinePlugin({ | ||||||
|  |       'process.env': config.dev.env | ||||||
|  |     }), | ||||||
|  |     // https://github.com/glenjamin/webpack-hot-middleware#installation--usage | ||||||
|  |     new webpack.optimize.OccurenceOrderPlugin(), | ||||||
|  |     new webpack.HotModuleReplacementPlugin(), | ||||||
|  |     new webpack.NoErrorsPlugin(), | ||||||
|  |     // https://github.com/ampedandwired/html-webpack-plugin | ||||||
|  |     new HtmlWebpackPlugin({ | ||||||
|  |       filename: 'index.html', | ||||||
|  |       template: 'index.html', | ||||||
|  |       inject: true | ||||||
|  |     }) | ||||||
|  |   ] | ||||||
|  | }) | ||||||
							
								
								
									
										102
									
								
								build/webpack.prod.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								build/webpack.prod.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,102 @@ | |||||||
|  | var path = require('path') | ||||||
|  | var config = require('../config') | ||||||
|  | var utils = require('./utils') | ||||||
|  | var webpack = require('webpack') | ||||||
|  | var merge = require('webpack-merge') | ||||||
|  | var baseWebpackConfig = require('./webpack.base.conf') | ||||||
|  | var ExtractTextPlugin = require('extract-text-webpack-plugin') | ||||||
|  | var HtmlWebpackPlugin = require('html-webpack-plugin') | ||||||
|  | var env = process.env.NODE_ENV === 'testing' | ||||||
|  |   ? require('../config/test.env') | ||||||
|  |   : config.build.env | ||||||
|  |  | ||||||
|  | var webpackConfig = merge(baseWebpackConfig, { | ||||||
|  |   module: { | ||||||
|  |     loaders: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) | ||||||
|  |   }, | ||||||
|  |   devtool: config.build.productionSourceMap ? '#source-map' : false, | ||||||
|  |   output: { | ||||||
|  |     path: config.build.assetsRoot, | ||||||
|  |     filename: utils.assetsPath('js/[name].[chunkhash].js'), | ||||||
|  |     chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') | ||||||
|  |   }, | ||||||
|  |   vue: { | ||||||
|  |     loaders: utils.cssLoaders({ | ||||||
|  |       sourceMap: config.build.productionSourceMap, | ||||||
|  |       extract: true | ||||||
|  |     }) | ||||||
|  |   }, | ||||||
|  |   plugins: [ | ||||||
|  |     // http://vuejs.github.io/vue-loader/workflow/production.html | ||||||
|  |     new webpack.DefinePlugin({ | ||||||
|  |       'process.env': env | ||||||
|  |     }), | ||||||
|  |     new webpack.optimize.UglifyJsPlugin({ | ||||||
|  |       compress: { | ||||||
|  |         warnings: false | ||||||
|  |       } | ||||||
|  |     }), | ||||||
|  |     new webpack.optimize.OccurenceOrderPlugin(), | ||||||
|  |     // extract css into its own file | ||||||
|  |     new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), | ||||||
|  |     // generate dist index.html with correct asset hash for caching. | ||||||
|  |     // you can customize output by editing /index.html | ||||||
|  |     // see https://github.com/ampedandwired/html-webpack-plugin | ||||||
|  |     new HtmlWebpackPlugin({ | ||||||
|  |       filename: process.env.NODE_ENV === 'testing' | ||||||
|  |         ? 'index.html' | ||||||
|  |         : config.build.index, | ||||||
|  |       template: 'index.html', | ||||||
|  |       inject: true, | ||||||
|  |       minify: { | ||||||
|  |         removeComments: true, | ||||||
|  |         collapseWhitespace: true, | ||||||
|  |         removeAttributeQuotes: true | ||||||
|  |         // more options: | ||||||
|  |         // https://github.com/kangax/html-minifier#options-quick-reference | ||||||
|  |       }, | ||||||
|  |       // necessary to consistently work with multiple chunks via CommonsChunkPlugin | ||||||
|  |       chunksSortMode: 'dependency' | ||||||
|  |     }), | ||||||
|  |     // split vendor js into its own file | ||||||
|  |     new webpack.optimize.CommonsChunkPlugin({ | ||||||
|  |       name: 'vendor', | ||||||
|  |       minChunks: function (module, count) { | ||||||
|  |         // any required modules inside node_modules are extracted to vendor | ||||||
|  |         return ( | ||||||
|  |           module.resource && | ||||||
|  |           /\.js$/.test(module.resource) && | ||||||
|  |           module.resource.indexOf( | ||||||
|  |             path.join(__dirname, '../node_modules') | ||||||
|  |           ) === 0 | ||||||
|  |         ) | ||||||
|  |       } | ||||||
|  |     }), | ||||||
|  |     // extract webpack runtime and module manifest to its own file in order to | ||||||
|  |     // prevent vendor hash from being updated whenever app bundle is updated | ||||||
|  |     new webpack.optimize.CommonsChunkPlugin({ | ||||||
|  |       name: 'manifest', | ||||||
|  |       chunks: ['vendor'] | ||||||
|  |     }) | ||||||
|  |   ] | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | if (config.build.productionGzip) { | ||||||
|  |   var CompressionWebpackPlugin = require('compression-webpack-plugin') | ||||||
|  |  | ||||||
|  |   webpackConfig.plugins.push( | ||||||
|  |     new CompressionWebpackPlugin({ | ||||||
|  |       asset: '[path].gz[query]', | ||||||
|  |       algorithm: 'gzip', | ||||||
|  |       test: new RegExp( | ||||||
|  |         '\\.(' + | ||||||
|  |         config.build.productionGzipExtensions.join('|') + | ||||||
|  |         ')$' | ||||||
|  |       ), | ||||||
|  |       threshold: 10240, | ||||||
|  |       minRatio: 0.8 | ||||||
|  |     }) | ||||||
|  |   ) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | module.exports = webpackConfig | ||||||
							
								
								
									
										6
									
								
								config/dev.env.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								config/dev.env.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | var merge = require('webpack-merge') | ||||||
|  | var prodEnv = require('./prod.env') | ||||||
|  |  | ||||||
|  | module.exports = merge(prodEnv, { | ||||||
|  |   NODE_ENV: '"development"' | ||||||
|  | }) | ||||||
							
								
								
									
										24
									
								
								config/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								config/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | // see http://vuejs-templates.github.io/webpack for documentation. | ||||||
|  | var path = require('path') | ||||||
|  |  | ||||||
|  | module.exports = { | ||||||
|  |   build: { | ||||||
|  |     env: require('./prod.env'), | ||||||
|  |     index: path.resolve(__dirname, '../dist/index.html'), | ||||||
|  |     assetsRoot: path.resolve(__dirname, '../dist'), | ||||||
|  |     assetsSubDirectory: 'static', | ||||||
|  |     assetsPublicPath: '/', | ||||||
|  |     productionSourceMap: true, | ||||||
|  |     // Gzip off by default as many popular static hosts such as | ||||||
|  |     // Surge or Netlify already gzip all static assets for you. | ||||||
|  |     // Before setting to `true`, make sure to: | ||||||
|  |     // npm install --save-dev compression-webpack-plugin | ||||||
|  |     productionGzip: false, | ||||||
|  |     productionGzipExtensions: ['js', 'css'] | ||||||
|  |   }, | ||||||
|  |   dev: { | ||||||
|  |     env: require('./dev.env'), | ||||||
|  |     port: 8080, | ||||||
|  |     proxyTable: {} | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								config/prod.env.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/prod.env.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | module.exports = { | ||||||
|  |   NODE_ENV: '"production"' | ||||||
|  | } | ||||||
							
								
								
									
										6
									
								
								config/test.env.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								config/test.env.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | var merge = require('webpack-merge') | ||||||
|  | var devEnv = require('./dev.env') | ||||||
|  |  | ||||||
|  | module.exports = merge(devEnv, { | ||||||
|  |   NODE_ENV: '"testing"' | ||||||
|  | }) | ||||||
							
								
								
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <title>Vue-ChartJs</title> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |     <app></app> | ||||||
|  |     <!-- built files will be auto injected --> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										75
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | { | ||||||
|  |   "name": "vue-chartjs", | ||||||
|  |   "version": "1.0.0", | ||||||
|  |   "description": "Vue wrapper for chart.js", | ||||||
|  |   "author": "Jakub Juszczak <jakub@nextindex.de>", | ||||||
|  |   "private": true, | ||||||
|  |   "scripts": { | ||||||
|  |     "dev": "node build/dev-server.js", | ||||||
|  |     "build": "node build/build.js", | ||||||
|  |     "unit": "karma start test/unit/karma.conf.js --single-run", | ||||||
|  |     "e2e": "node test/e2e/runner.js", | ||||||
|  |     "test": "npm run unit && npm run e2e", | ||||||
|  |     "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "babel-runtime": "^6.0.0", | ||||||
|  |     "chart.js": "^2.1.6", | ||||||
|  |     "vue": "^1.0.21" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "babel-core": "^6.0.0", | ||||||
|  |     "babel-loader": "^6.0.0", | ||||||
|  |     "babel-plugin-transform-runtime": "^6.0.0", | ||||||
|  |     "babel-preset-es2015": "^6.0.0", | ||||||
|  |     "babel-preset-stage-2": "^6.0.0", | ||||||
|  |     "connect-history-api-fallback": "^1.1.0", | ||||||
|  |     "css-loader": "^0.23.0", | ||||||
|  |     "eslint": "^2.10.2", | ||||||
|  |     "eslint-friendly-formatter": "^2.0.5", | ||||||
|  |     "eslint-loader": "^1.3.0", | ||||||
|  |     "eslint-plugin-html": "^1.3.0", | ||||||
|  |     "eslint-config-standard": "^5.1.0", | ||||||
|  |     "eslint-plugin-promise": "^1.0.8", | ||||||
|  |     "eslint-plugin-standard": "^1.3.2", | ||||||
|  |     "eventsource-polyfill": "^0.9.6", | ||||||
|  |     "express": "^4.13.3", | ||||||
|  |     "extract-text-webpack-plugin": "^1.0.1", | ||||||
|  |     "file-loader": "^0.8.4", | ||||||
|  |     "function-bind": "^1.0.2", | ||||||
|  |     "html-webpack-plugin": "^2.8.1", | ||||||
|  |     "http-proxy-middleware": "^0.12.0", | ||||||
|  |     "json-loader": "^0.5.4", | ||||||
|  |     "karma": "^0.13.15", | ||||||
|  |     "karma-coverage": "^0.5.5", | ||||||
|  |     "karma-mocha": "^0.2.2", | ||||||
|  |     "karma-phantomjs-launcher": "^1.0.0", | ||||||
|  |     "karma-sinon-chai": "^1.2.0", | ||||||
|  |     "karma-sourcemap-loader": "^0.3.7", | ||||||
|  |     "karma-spec-reporter": "0.0.24", | ||||||
|  |     "karma-webpack": "^1.7.0", | ||||||
|  |     "lolex": "^1.4.0", | ||||||
|  |     "mocha": "^2.4.5", | ||||||
|  |     "chai": "^3.5.0", | ||||||
|  |     "sinon": "^1.17.3", | ||||||
|  |     "sinon-chai": "^2.8.0", | ||||||
|  |     "inject-loader": "^2.0.1", | ||||||
|  |     "isparta-loader": "^2.0.0", | ||||||
|  |     "phantomjs-prebuilt": "^2.1.3", | ||||||
|  |     "chromedriver": "^2.21.2", | ||||||
|  |     "cross-spawn": "^2.1.5", | ||||||
|  |     "nightwatch": "^0.8.18", | ||||||
|  |     "selenium-server": "2.53.0", | ||||||
|  |     "ora": "^0.2.0", | ||||||
|  |     "shelljs": "^0.6.0", | ||||||
|  |     "url-loader": "^0.5.7", | ||||||
|  |     "vue-hot-reload-api": "^1.2.0", | ||||||
|  |     "vue-html-loader": "^1.0.0", | ||||||
|  |     "vue-loader": "^8.3.0", | ||||||
|  |     "vue-style-loader": "^1.0.0", | ||||||
|  |     "webpack": "^1.12.2", | ||||||
|  |     "webpack-dev-middleware": "^1.4.0", | ||||||
|  |     "webpack-hot-middleware": "^2.6.0", | ||||||
|  |     "webpack-merge": "^0.8.3" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="container"> | ||||||
|  |     <test-chart :width="100" :height="200" :player={wins:'12'} :opponent={wins:'23'}></test-chart> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script> | ||||||
|  |   import TestChart from './components/TestChart' | ||||||
|  |  | ||||||
|  |   export default { | ||||||
|  |     components: { TestChart } | ||||||
|  |   } | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style> | ||||||
|  |   .container { | ||||||
|  |     max-width: 800px; | ||||||
|  |     margin: 0 auto; | ||||||
|  |   } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/logo.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/logo.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 6.7 KiB | 
							
								
								
									
										58
									
								
								src/components/BaseCharts/Bar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/components/BaseCharts/Bar.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import Chart from 'chart.js' | ||||||
|  |  | ||||||
|  | export default Vue.extend({ | ||||||
|  |   template: ` | ||||||
|  |     <div> | ||||||
|  |       <canvas id="bar-chart" width=width height=height v-el:canvas></canvas> | ||||||
|  |     </div> | ||||||
|  |   `, | ||||||
|  |  | ||||||
|  |   props: { | ||||||
|  |     width: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     }, | ||||||
|  |     height: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data () { | ||||||
|  |     return { | ||||||
|  |       options: { | ||||||
|  |         scales: { | ||||||
|  |           yAxes: [{ | ||||||
|  |             ticks: { | ||||||
|  |               beginAtZero: true | ||||||
|  |             }, | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             } | ||||||
|  |           }], | ||||||
|  |           xAxes: [ { | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             }, | ||||||
|  |             categoryPercentage: 0.5, | ||||||
|  |             barPercentage: 0.2 | ||||||
|  |           }] | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     render (data, options = this.options) { | ||||||
|  |       const chart = new Chart( | ||||||
|  |         this.$els.canvas.getContext('2d'), { | ||||||
|  |           type: 'bar', | ||||||
|  |           data: data, | ||||||
|  |           options: options | ||||||
|  |         } | ||||||
|  |       ) | ||||||
|  |       chart.generateLegend() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }) | ||||||
							
								
								
									
										0
									
								
								src/components/BaseCharts/Doughnut.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/components/BaseCharts/Doughnut.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										56
									
								
								src/components/BaseCharts/Line.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								src/components/BaseCharts/Line.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import Chart from 'chart.js' | ||||||
|  |  | ||||||
|  | export default Vue.extend({ | ||||||
|  |   template: ` | ||||||
|  |     <div> | ||||||
|  |       <canvas id="line-chart" width=width height=height v-el:canvas></canvas> | ||||||
|  |     </div> | ||||||
|  |   `, | ||||||
|  |  | ||||||
|  |   props: { | ||||||
|  |     width: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     }, | ||||||
|  |     height: { | ||||||
|  |       default: 400, | ||||||
|  |       type: Number | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   data () { | ||||||
|  |     return { | ||||||
|  |       options: { | ||||||
|  |         scales: { | ||||||
|  |           yAxes: [{ | ||||||
|  |             ticks: { | ||||||
|  |               beginAtZero: true | ||||||
|  |             }, | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             } | ||||||
|  |           }], | ||||||
|  |           xAxes: [ { | ||||||
|  |             gridLines: { | ||||||
|  |               display: false | ||||||
|  |             } | ||||||
|  |           }] | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   methods: { | ||||||
|  |     render (data, options = this.options) { | ||||||
|  |       const chart = new Chart( | ||||||
|  |         this.$els.canvas.getContext('2d'), { | ||||||
|  |           type: 'line', | ||||||
|  |           data: data, | ||||||
|  |           options: options | ||||||
|  |         } | ||||||
|  |       ) | ||||||
|  |       chart.generateLegend() | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }) | ||||||
							
								
								
									
										0
									
								
								src/components/BaseCharts/Pie.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/components/BaseCharts/Pie.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								src/components/BaseCharts/Radar.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/components/BaseCharts/Radar.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										24
									
								
								src/components/TestChart.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								src/components/TestChart.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | // import BarChart from './BaseCharts/Bar' | ||||||
|  | import BarChart from './BaseCharts/Line' | ||||||
|  |  | ||||||
|  | export default BarChart.extend({ | ||||||
|  |   props: ['player', 'opponent'], | ||||||
|  |  | ||||||
|  |   ready () { | ||||||
|  |     this.render({ | ||||||
|  |       labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], | ||||||
|  |       datasets: [ | ||||||
|  |         { | ||||||
|  |           label: 'Data One', | ||||||
|  |           backgroundColor: '#f87979', | ||||||
|  |           data: [40, 39, 10, 40, 39, 80, 40] | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           label: 'Data Two', | ||||||
|  |           backgroundColor: '#f87979', | ||||||
|  |           data: [0, 0, 0, 39.30, 39.30, 39.30] | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | }) | ||||||
							
								
								
									
										8
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import App from './App' | ||||||
|  |  | ||||||
|  | /* eslint-disable no-new */ | ||||||
|  | new Vue({ | ||||||
|  |   el: 'body', | ||||||
|  |   components: { App } | ||||||
|  | }) | ||||||
							
								
								
									
										0
									
								
								static/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								static/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										26
									
								
								test/e2e/custom-assertions/elementCount.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								test/e2e/custom-assertions/elementCount.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | // A custom Nightwatch assertion. | ||||||
|  | // the name of the method is the filename. | ||||||
|  | // can be used in tests like this: | ||||||
|  | // | ||||||
|  | //   browser.assert.elementCount(selector, count) | ||||||
|  | // | ||||||
|  | // for how to write custom assertions see | ||||||
|  | // http://nightwatchjs.org/guide#writing-custom-assertions | ||||||
|  | exports.assertion = function (selector, count) { | ||||||
|  |   this.message = 'Testing if element <' + selector + '> has count: ' + count | ||||||
|  |   this.expected = count | ||||||
|  |   this.pass = function (val) { | ||||||
|  |     return val === this.expected | ||||||
|  |   } | ||||||
|  |   this.value = function (res) { | ||||||
|  |     return res.value | ||||||
|  |   } | ||||||
|  |   this.command = function (cb) { | ||||||
|  |     var self = this | ||||||
|  |     return this.api.execute(function (selector) { | ||||||
|  |       return document.querySelectorAll(selector).length | ||||||
|  |     }, [selector], function (res) { | ||||||
|  |       cb.call(self, res) | ||||||
|  |     }) | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										40
									
								
								test/e2e/nightwatch.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								test/e2e/nightwatch.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | // http://nightwatchjs.org/guide#settings-file | ||||||
|  | module.exports = { | ||||||
|  |   "src_folders": ["test/e2e/specs"], | ||||||
|  |   "output_folder": "test/e2e/reports", | ||||||
|  |   "custom_assertions_path": ["test/e2e/custom-assertions"], | ||||||
|  |  | ||||||
|  |   "selenium": { | ||||||
|  |     "start_process": true, | ||||||
|  |     "server_path": "node_modules/selenium-server/lib/runner/selenium-server-standalone-2.53.0.jar", | ||||||
|  |     "host": "127.0.0.1", | ||||||
|  |     "port": 4444, | ||||||
|  |     "cli_args": { | ||||||
|  |       "webdriver.chrome.driver": require('chromedriver').path | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |  | ||||||
|  |   "test_settings": { | ||||||
|  |     "default": { | ||||||
|  |       "selenium_port": 4444, | ||||||
|  |       "selenium_host": "localhost", | ||||||
|  |       "silent": true | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     "chrome": { | ||||||
|  |       "desiredCapabilities": { | ||||||
|  |         "browserName": "chrome", | ||||||
|  |         "javascriptEnabled": true, | ||||||
|  |         "acceptSslCerts": true | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |  | ||||||
|  |     "firefox": { | ||||||
|  |       "desiredCapabilities": { | ||||||
|  |         "browserName": "firefox", | ||||||
|  |         "javascriptEnabled": true, | ||||||
|  |         "acceptSslCerts": true | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										31
									
								
								test/e2e/runner.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								test/e2e/runner.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | |||||||
|  | // 1. start the dev server using production config | ||||||
|  | process.env.NODE_ENV = 'testing' | ||||||
|  | var server = require('../../build/dev-server.js') | ||||||
|  |  | ||||||
|  | // 2. run the nightwatch test suite against it | ||||||
|  | // to run in additional browsers: | ||||||
|  | //    1. add an entry in test/e2e/nightwatch.conf.json under "test_settings" | ||||||
|  | //    2. add it to the --env flag below | ||||||
|  | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` | ||||||
|  | // For more information on Nightwatch's config file, see | ||||||
|  | // http://nightwatchjs.org/guide#settings-file | ||||||
|  | var opts = process.argv.slice(2) | ||||||
|  | if (opts.indexOf('--config') === -1) { | ||||||
|  |   opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) | ||||||
|  | } | ||||||
|  | if (opts.indexOf('--env') === -1) { | ||||||
|  |   opts = opts.concat(['--env', 'chrome']) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | var spawn = require('cross-spawn') | ||||||
|  | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) | ||||||
|  |  | ||||||
|  | runner.on('exit', function (code) { | ||||||
|  |   server.close() | ||||||
|  |   process.exit(code) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | runner.on('error', function (err) { | ||||||
|  |   server.close() | ||||||
|  |   throw err | ||||||
|  | }) | ||||||
							
								
								
									
										14
									
								
								test/e2e/specs/test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								test/e2e/specs/test.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | |||||||
|  | // For authoring Nightwatch tests, see | ||||||
|  | // http://nightwatchjs.org/guide#usage | ||||||
|  |  | ||||||
|  | module.exports = { | ||||||
|  |   'default e2e tests': function (browser) { | ||||||
|  |     browser | ||||||
|  |     .url('http://localhost:8080') | ||||||
|  |       .waitForElementVisible('#app', 5000) | ||||||
|  |       .assert.elementPresent('.logo') | ||||||
|  |       .assert.containsText('h1', 'Hello World!') | ||||||
|  |       .assert.elementCount('p', 3) | ||||||
|  |       .end() | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								test/unit/.eslintrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								test/unit/.eslintrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   "env": { | ||||||
|  |     "mocha": true | ||||||
|  |   }, | ||||||
|  |   "globals": { | ||||||
|  |     "expect": true, | ||||||
|  |     "sinon": true | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										13
									
								
								test/unit/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								test/unit/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | |||||||
|  | // Polyfill fn.bind() for PhantomJS | ||||||
|  | /* eslint-disable no-extend-native */ | ||||||
|  | Function.prototype.bind = require('function-bind') | ||||||
|  |  | ||||||
|  | // require all test files (files that ends with .spec.js) | ||||||
|  | var testsContext = require.context('./specs', true, /\.spec$/) | ||||||
|  | testsContext.keys().forEach(testsContext) | ||||||
|  |  | ||||||
|  | // require all src files except main.js for coverage. | ||||||
|  | // you can also change this to match only the subset of files that | ||||||
|  | // you want coverage for. | ||||||
|  | var srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/) | ||||||
|  | srcContext.keys().forEach(srcContext) | ||||||
							
								
								
									
										75
									
								
								test/unit/karma.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								test/unit/karma.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | // This is a karma config file. For more details see | ||||||
|  | //   http://karma-runner.github.io/0.13/config/configuration-file.html | ||||||
|  | // we are also using it with karma-webpack | ||||||
|  | //   https://github.com/webpack/karma-webpack | ||||||
|  |  | ||||||
|  | var path = require('path') | ||||||
|  | var merge = require('webpack-merge') | ||||||
|  | var baseConfig = require('../../build/webpack.base.conf') | ||||||
|  | var utils = require('../../build/utils') | ||||||
|  | var webpack = require('webpack') | ||||||
|  | var projectRoot = path.resolve(__dirname, '../../') | ||||||
|  |  | ||||||
|  | var webpackConfig = merge(baseConfig, { | ||||||
|  |   // use inline sourcemap for karma-sourcemap-loader | ||||||
|  |   module: { | ||||||
|  |     loaders: utils.styleLoaders() | ||||||
|  |   }, | ||||||
|  |   devtool: '#inline-source-map', | ||||||
|  |   vue: { | ||||||
|  |     loaders: { | ||||||
|  |       js: 'isparta' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   plugins: [ | ||||||
|  |     new webpack.DefinePlugin({ | ||||||
|  |       'process.env': require('../../config/test.env') | ||||||
|  |     }) | ||||||
|  |   ] | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | // no need for app entry during tests | ||||||
|  | delete webpackConfig.entry | ||||||
|  |  | ||||||
|  | // make sure isparta loader is applied before eslint | ||||||
|  | webpackConfig.module.preLoaders = webpackConfig.module.preLoaders || [] | ||||||
|  | webpackConfig.module.preLoaders.unshift({ | ||||||
|  |   test: /\.js$/, | ||||||
|  |   loader: 'isparta', | ||||||
|  |   include: path.resolve(projectRoot, 'src') | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | // only apply babel for test files when using isparta | ||||||
|  | webpackConfig.module.loaders.some(function (loader, i) { | ||||||
|  |   if (loader.loader === 'babel') { | ||||||
|  |     loader.include = path.resolve(projectRoot, 'test/unit') | ||||||
|  |     return true | ||||||
|  |   } | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | module.exports = function (config) { | ||||||
|  |   config.set({ | ||||||
|  |     // to run in additional browsers: | ||||||
|  |     // 1. install corresponding karma launcher | ||||||
|  |     //    http://karma-runner.github.io/0.13/config/browsers.html | ||||||
|  |     // 2. add it to the `browsers` array below. | ||||||
|  |     browsers: ['PhantomJS'], | ||||||
|  |     frameworks: ['mocha', 'sinon-chai'], | ||||||
|  |     reporters: ['spec', 'coverage'], | ||||||
|  |     files: ['./index.js'], | ||||||
|  |     preprocessors: { | ||||||
|  |       './index.js': ['webpack', 'sourcemap'] | ||||||
|  |     }, | ||||||
|  |     webpack: webpackConfig, | ||||||
|  |     webpackMiddleware: { | ||||||
|  |       noInfo: true | ||||||
|  |     }, | ||||||
|  |     coverageReporter: { | ||||||
|  |       dir: './coverage', | ||||||
|  |       reporters: [ | ||||||
|  |         { type: 'lcov', subdir: '.' }, | ||||||
|  |         { type: 'text-summary' } | ||||||
|  |       ] | ||||||
|  |     } | ||||||
|  |   }) | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								test/unit/specs/Hello.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								test/unit/specs/Hello.spec.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | import Vue from 'vue' | ||||||
|  | import Hello from 'src/components/Hello' | ||||||
|  |  | ||||||
|  | describe('Hello.vue', () => { | ||||||
|  |   it('should render correct contents', () => { | ||||||
|  |     const vm = new Vue({ | ||||||
|  |       template: '<div><hello></hello></div>', | ||||||
|  |       components: { Hello } | ||||||
|  |     }).$mount() | ||||||
|  |     expect(vm.$el.querySelector('.hello h1').textContent).to.contain('Hello World!') | ||||||
|  |   }) | ||||||
|  | }) | ||||||
		Reference in New Issue
	
	Block a user