├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .npmignore
├── .stylelintrc
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── build
├── utils
│ ├── index.js
│ ├── log.js
│ ├── style.js
│ └── write.js
├── webpack.config.base.js
├── webpack.config.browser.js
├── webpack.config.common.js
├── webpack.config.dev.js
└── webpack.config.dll.js
├── dist
├── vue-muuri.common.js
├── vue-muuri.css
└── vue-muuri.js
├── package.json
├── package.json.1844951368
├── src
├── components
│ ├── MuuriGrid.vue
│ └── items
│ │ ├── ItemLg.vue
│ │ ├── ItemLink.vue
│ │ ├── ItemMd.vue
│ │ └── ItemSm.vue
└── index.js
└── test
├── .eslintrc
├── dist
├── vuePluginTemplateDeps.dll.js
├── vuePluginTemplateDeps.dll.js.map
└── vuePluginTemplateDeps.json
├── helpers
├── Test.vue
├── index.js
├── utils.js
└── wait-for-update.js
├── index.js
├── karma.conf.js
└── visual.js
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "env",
5 | {
6 | "targets": {
7 | "browsers": [
8 | "last 2 versions"
9 | ]
10 | }
11 | }
12 | ]
13 | ],
14 | "plugins": [
15 | "transform-vue-jsx",
16 | "transform-object-rest-spread"
17 | ],
18 | "env": {
19 | "test": {
20 | "plugins": [
21 | "istanbul"
22 | ]
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | dist/*.js
2 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | parser: 'babel-eslint',
4 | parserOptions: {
5 | sourceType: 'module'
6 | },
7 | extends: 'vue',
8 | // add your custom rules here
9 | 'rules': {
10 | // allow async-await
11 | 'generator-star-spacing': 0,
12 | // allow debugger during development
13 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
14 | },
15 | globals: {
16 | requestAnimationFrame: true,
17 | performance: true
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | npm-debug.log
4 | test/coverage
5 | yarn-error.log
6 | reports
7 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | build
2 | reports
3 | src
4 | test
--------------------------------------------------------------------------------
/.stylelintrc:
--------------------------------------------------------------------------------
1 | {
2 | "processors": ["stylelint-processor-html"],
3 | "extends": "stylelint-config-standard",
4 | "rules": {
5 | "no-empty-source": null
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Contributions are **welcome** and will be fully **credited**.
4 |
5 | We accept contributions via Pull Requests on [Github](https://github.com//orloe-table-row-expander).
6 |
7 |
8 | ## Pull Requests
9 |
10 | - **Keep the same style** - eslint will automatically be ran before committing
11 |
12 | - **Tip** to pass lint tests easier use the `npm run lint:fix` command
13 |
14 | - **Add tests!** - Your patch won't be accepted if it doesn't have tests.
15 |
16 | - **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.
17 |
18 | - **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option.
19 |
20 | - **Create feature branches** - Don't ask us to pull from your master branch.
21 |
22 | - **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.
23 |
24 | - **Send coherent history** - Make sure your commits message means something
25 |
26 |
27 | ## Running Tests
28 |
29 | Launch visual tests and watch the components at the same time
30 |
31 | ``` bash
32 | $ npm run dev
33 | ```
34 |
35 |
36 | **Happy coding**!
37 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Collier Devlin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-muuri
2 |
3 | [](https://www.npmjs.com/package/vue-muuri) [](https://vuejs.org/)
4 |
5 | > A vue plugin using [Muuri](https://github.com/haltu/muuri)'s responsive, sortable, filterable and draggable grid layouts.
6 |
7 | Vue-muuri was created to provide an alternative option for creating a responsive dashboard in Vue. It is essentially a vue wrapper for [Muuri](https://github.com/haltu/muuri). Using Vue's modular component system, vue-muuri allows us to drop in any number of tile components to quickly create our dashboard.
8 |
9 | ## Installation
10 |
11 | ```bash
12 | npm install --save vue-muuri
13 | ```
14 |
15 | ### Bundler (Webpack)
16 |
17 | ```js
18 | import Vue from 'vue'
19 | import VueMuuri from 'vue-muuri'
20 | // You need a specific loader for CSS files like https://github.com/webpack/css-loader
21 | import 'vue-muuri/dist/vue-muuri.css'
22 |
23 | Vue.use(VueMuuri)
24 | ```
25 |
26 | ## How to Use
27 |
28 | Vue-muuri consists of a base `muuri-grid` component that implements the [Muuri](https://github.com/haltu/muuri) plugin. Using this component, we will be able to insert any number of item components through its slot.
29 |
30 | Example:
31 | ```html
32 |
33 |
34 |
35 | ```
36 |
37 | Out-of-the-box, vue-muuri comes with a few item components to get you started.
38 | ```js
39 | import { ItemLink, ItemSm, ItemMd, ItemLg } from 'vue-muuri'
40 | ```
41 |
42 | ```html
43 |
44 |
45 |
46 |
47 | Small item.
48 |
49 |
50 |
51 | Medium item.
52 |
53 |
54 |
55 | Large item.
56 |
57 |
58 | ```
59 |
60 | ## Events
61 |
62 | Vue-muuri also allows you to listen to events on the grid object created by [Muuri](https://github.com/haltu/muuri). Please refer to the [docs](https://github.com/haltu/muuri) for a complete list of events.
63 |
64 | Example:
65 | ```html
66 |
67 |
68 | Item {{ num }}
69 |
70 |
71 | ```
72 |
73 | ```js
74 | // ...
75 | methods: {
76 | updateOrder (items) {
77 | console.log(items)
78 | }
79 | }
80 | ```
81 |
82 | ## License
83 |
84 | [MIT](http://opensource.org/licenses/MIT)
85 |
--------------------------------------------------------------------------------
/build/utils/index.js:
--------------------------------------------------------------------------------
1 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
2 | const { join } = require('path')
3 |
4 | const {
5 | red,
6 | logError
7 | } = require('./log')
8 |
9 | const {
10 | processStyle
11 | } = require('./style')
12 |
13 | const uppercamelcase = require('uppercamelcase')
14 |
15 | exports.write = require('./write')
16 |
17 | const {
18 | author,
19 | name,
20 | version,
21 | dllPlugin
22 | } = require('../../package.json')
23 |
24 | const authorName = author.replace(/\s+<.*/, '')
25 | const minExt = process.env.NODE_ENV === 'production' ? '.min' : ''
26 |
27 | exports.author = authorName
28 | exports.version = version
29 | exports.dllName = dllPlugin.name
30 | exports.moduleName = uppercamelcase(name)
31 | exports.name = name
32 | exports.filename = name + minExt
33 | exports.banner = `/*!
34 | * ${name} v${version}
35 | * (c) ${new Date().getFullYear()} ${authorName}
36 | * Released under the MIT License.
37 | */
38 | `
39 |
40 | // log.js
41 | exports.red = red
42 | exports.logError = logError
43 |
44 | // It'd be better to add a sass property to the vue-loader options
45 | // but it simply don't work
46 | const sassOptions = {
47 | includePaths: [
48 | join(__dirname, '../../node_modules')
49 | ]
50 | }
51 |
52 | // don't extract css in test mode
53 | const nullLoader = process.env.NODE_ENV === 'common' ? 'null-loader!' : ''
54 | exports.vueLoaders =
55 | process.env.BABEL_ENV === 'test' ? {
56 | css: 'css-loader',
57 | scss: `css-loader!sass-loader?${JSON.stringify(sassOptions)}`
58 | } : {
59 | css: ExtractTextPlugin.extract(`${nullLoader}css-loader`),
60 | scss: ExtractTextPlugin.extract(
61 | `${nullLoader}css-loader!sass-loader?${JSON.stringify(sassOptions)}`
62 | )
63 | }
64 |
65 | // style.js
66 | exports.processStyle = processStyle
67 |
--------------------------------------------------------------------------------
/build/utils/log.js:
--------------------------------------------------------------------------------
1 | function logError (e) {
2 | console.log(e)
3 | }
4 |
5 | function blue (str) {
6 | return `\x1b[1m\x1b[34m${str}\x1b[39m\x1b[22m`
7 | }
8 |
9 | function green (str) {
10 | return `\x1b[1m\x1b[32m${str}\x1b[39m\x1b[22m`
11 | }
12 |
13 | function red (str) {
14 | return `\x1b[1m\x1b[31m${str}\x1b[39m\x1b[22m`
15 | }
16 |
17 | function yellow (str) {
18 | return `\x1b[1m\x1b[33m${str}\x1b[39m\x1b[22m`
19 | }
20 |
21 | module.exports = {
22 | blue,
23 | green,
24 | red,
25 | yellow,
26 | logError
27 | }
28 |
--------------------------------------------------------------------------------
/build/utils/style.js:
--------------------------------------------------------------------------------
1 | const path = require('path')
2 | const postcss = require('postcss')
3 | const cssnext = require('postcss-cssnext')
4 | const CleanCSS = require('clean-css')
5 | const { logError } = require('./log.js')
6 | const write = require('./write.js')
7 |
8 | function processCss (style) {
9 | const componentName = path.basename(style.id, '.vue')
10 | return postcss([cssnext()])
11 | .process(style.code, {})
12 | .then(result => {
13 | return {
14 | name: componentName,
15 | css: result.css,
16 | map: result.map
17 | }
18 | })
19 | }
20 |
21 | let stylus
22 | function processStylus (style) {
23 | try {
24 | stylus = stylus || require('stylus')
25 | } catch (e) {
26 | logError(e)
27 | }
28 | const componentName = path.basename(style.id, '.vue')
29 | return new Promise((resolve, reject) => {
30 | stylus.render(style.code, function (err, css) {
31 | if (err) return reject(err)
32 | resolve({
33 | original: {
34 | code: style.code,
35 | ext: 'styl'
36 | },
37 | name: componentName,
38 | css
39 | })
40 | })
41 | })
42 | }
43 |
44 | function processStyle (style) {
45 | if (style.lang === 'css') {
46 | return processCss(style)
47 | } else if (style.lang === 'stylus') {
48 | return processStylus(style)
49 | } else {
50 | throw new Error(`Unknown style language '${style.lang}'`)
51 | }
52 | }
53 |
54 | function writeCss (style) {
55 | write(`dist/${style.name}.css`, style.css)
56 | if (style.original) {
57 | write(`dist/${style.name}.${style.original.ext}`, style.original.code)
58 | }
59 | if (style.map) write(`dist/${style.name}.css.map`, style.map)
60 | write(`dist/${style.name}.min.css`, new CleanCSS().minify(style.css).styles)
61 | }
62 |
63 | module.exports = {
64 | writeCss,
65 | processStyle
66 | }
67 |
--------------------------------------------------------------------------------
/build/utils/write.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs')
2 |
3 | const { blue } = require('./log.js')
4 |
5 | function write (dest, code) {
6 | return new Promise(function (resolve, reject) {
7 | fs.writeFile(dest, code, function (err) {
8 | if (err) return reject(err)
9 | console.log(blue(dest) + ' ' + getSize(code))
10 | resolve(code)
11 | })
12 | })
13 | }
14 |
15 | function getSize (code) {
16 | return (code.length / 1024).toFixed(2) + 'kb'
17 | }
18 |
19 | module.exports = write
20 |
--------------------------------------------------------------------------------
/build/webpack.config.base.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack')
2 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
3 | const { resolve } = require('path')
4 |
5 | const {
6 | banner,
7 | filename,
8 | version,
9 | vueLoaders
10 | } = require('./utils')
11 |
12 | const plugins = [
13 | new webpack.DefinePlugin({
14 | '__VERSION__': JSON.stringify(version),
15 | 'process.env.NODE_ENV': '"test"'
16 | }),
17 | new webpack.BannerPlugin({ banner, raw: true, entryOnly: true }),
18 | new ExtractTextPlugin({
19 | filename: `${filename}.css`,
20 | // Don't extract css in test mode
21 | disable: /^(common|test)$/.test(process.env.NODE_ENV)
22 | })
23 | ]
24 |
25 | module.exports = {
26 | output: {
27 | path: resolve(__dirname, '../dist'),
28 | filename: `${filename}.common.js`
29 | },
30 | entry: ['velocityjs', 'hammerjs', './src/index.js'],
31 | resolve: {
32 | extensions: ['.js', '.vue', '.jsx', 'css'],
33 | alias: {
34 | 'src': resolve(__dirname, '../src')
35 | }
36 | },
37 | plugins: [
38 | new webpack.ProvidePlugin({
39 | $: "jquery",
40 | jQuery: "jquery"
41 | })
42 | ],
43 | module: {
44 | rules: [
45 | {
46 | test: /.jsx?$/,
47 | use: 'babel-loader',
48 | include: [
49 | resolve(__dirname, '../node_modules/@material'),
50 | resolve(__dirname, '../src'),
51 | resolve(__dirname, '../test')
52 | ]
53 | },
54 | {
55 | test: /\.vue$/,
56 | loader: 'vue-loader',
57 | options: {
58 | loaders: vueLoaders,
59 | postcss: [require('postcss-cssnext')()],
60 | optimizeSSR: false
61 | }
62 | },
63 | {
64 | test: /\.scss$/,
65 | loaders: ["style", "css", "sass"],
66 | include: resolve('assetsPath')
67 | },
68 | ]
69 | },
70 | node: {
71 | fs: 'empty',
72 | net: 'empty'
73 | },
74 | plugins
75 | }
76 |
--------------------------------------------------------------------------------
/build/webpack.config.browser.js:
--------------------------------------------------------------------------------
1 | const merge = require('webpack-merge')
2 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
3 | const base = require('./webpack.config.base')
4 | const { resolve } = require('path')
5 | const {
6 | filename,
7 | moduleName,
8 | vueLoaders
9 | } = require('./utils')
10 |
11 | module.exports = merge(base, {
12 | output: {
13 | filename: `${filename}.js`,
14 | library: moduleName,
15 | libraryTarget: 'umd'
16 | },
17 | module: {
18 | rules: [
19 | {
20 | test: /.scss$/,
21 | use: vueLoaders.scss,
22 | include: [
23 | resolve(__dirname, '../node_modules/@material'),
24 | resolve(__dirname, '../src')
25 | ]
26 | }
27 | ]
28 | },
29 | plugins: [
30 | new BundleAnalyzerPlugin({
31 | analyzerMode: 'static',
32 | openAnalyzer: false,
33 | reportFilename: resolve(__dirname, `../reports/${process.env.NODE_ENV}.html`)
34 | })
35 | ]
36 | })
37 |
--------------------------------------------------------------------------------
/build/webpack.config.common.js:
--------------------------------------------------------------------------------
1 | const merge = require('webpack-merge')
2 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
3 | const base = require('./webpack.config.base')
4 | const { resolve } = require('path')
5 | const { vueLoaders } = require('./utils')
6 |
7 | module.exports = merge(base, {
8 | output: {
9 | libraryTarget: 'commonjs2'
10 | },
11 | target: 'node',
12 | module: {
13 | rules: [
14 | {
15 | test: /.scss$/,
16 | use: vueLoaders.scss,
17 | include: [
18 | resolve(__dirname, '../node_modules/@material'),
19 | resolve(__dirname, '../src')
20 | ]
21 | }
22 | ]
23 | },
24 | plugins: [
25 | new BundleAnalyzerPlugin({
26 | analyzerMode: 'static',
27 | openAnalyzer: false,
28 | reportFilename: resolve(__dirname, `../reports/${process.env.NODE_ENV}.html`)
29 | })
30 | ]
31 | })
32 |
--------------------------------------------------------------------------------
/build/webpack.config.dev.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack')
2 | const merge = require('webpack-merge')
3 | const HtmlWebpackPlugin = require('html-webpack-plugin')
4 | const AddAssetHtmlPlugin = require('add-asset-html-webpack-plugin')
5 | const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
6 | const DashboardPlugin = require('webpack-dashboard/plugin')
7 | const base = require('./webpack.config.base')
8 | const { resolve, join } = require('path')
9 | const { existsSync } = require('fs')
10 | const {
11 | dllName,
12 | logError,
13 | red,
14 | vueLoaders
15 | } = require('./utils')
16 |
17 | const rootDir = resolve(__dirname, '../test')
18 | const buildPath = resolve(rootDir, 'dist')
19 |
20 | if (!existsSync(join(buildPath, dllName) + '.dll.js')) {
21 | logError(red('The DLL manifest is missing. Please run `npm run build:dll` (Quit this with `q`)'))
22 | process.exit(1)
23 | }
24 |
25 | const dllManifest = require(
26 | join(buildPath, dllName) + '.json'
27 | )
28 |
29 | module.exports = merge(base, {
30 | entry: {
31 | tests: resolve(rootDir, 'visual.js')
32 | },
33 | output: {
34 | path: buildPath,
35 | filename: '[name].js',
36 | chunkFilename: '[id].js'
37 | },
38 | module: {
39 | rules: [
40 | {
41 | test: /.scss$/,
42 | loader: vueLoaders.scss,
43 | include: [
44 | resolve(__dirname, '../node_modules/@material'),
45 | resolve(__dirname, '../src')
46 | ]
47 | }
48 | ]
49 | },
50 | plugins: [
51 | new webpack.DllReferencePlugin({
52 | context: join(__dirname, '..'),
53 | manifest: dllManifest
54 | }),
55 | new HtmlWebpackPlugin({
56 | chunkSortMode: 'dependency'
57 | }),
58 | new AddAssetHtmlPlugin({
59 | filepath: require.resolve(
60 | join(buildPath, dllName) + '.dll.js'
61 | )
62 | }),
63 | new webpack.optimize.CommonsChunkPlugin({
64 | name: 'vendor',
65 | minChunks (module, count) {
66 | return (
67 | module.resource &&
68 | /\.js$/.test(module.resource) &&
69 | module.resource.indexOf(join(__dirname, '../node_modules/')) === 0
70 | )
71 | }
72 | }),
73 | new webpack.optimize.CommonsChunkPlugin({
74 | name: 'manifest',
75 | chunks: ['vendor']
76 | }),
77 | new DashboardPlugin(),
78 | new BundleAnalyzerPlugin({
79 | analyzerMode: 'static',
80 | openAnalyzer: false,
81 | reportFilename: resolve(__dirname, `../reports/${process.env.NODE_ENV}.html`)
82 | })
83 | ],
84 | devtool: '#eval-source-map',
85 | devServer: {
86 | inline: true,
87 | stats: {
88 | colors: true,
89 | chunks: false,
90 | cached: false
91 | },
92 | contentBase: buildPath
93 | },
94 | performance: {
95 | hints: false
96 | }
97 | })
98 |
--------------------------------------------------------------------------------
/build/webpack.config.dll.js:
--------------------------------------------------------------------------------
1 | const { resolve, join } = require('path')
2 | const webpack = require('webpack')
3 | const pkg = require('../package.json')
4 |
5 | const rootDir = resolve(__dirname, '../test')
6 | const buildPath = resolve(rootDir, 'dist')
7 |
8 | const entry = {}
9 | entry[pkg.dllPlugin.name] = pkg.dllPlugin.include
10 |
11 | module.exports = {
12 | devtool: '#source-map',
13 | entry,
14 | output: {
15 | path: buildPath,
16 | filename: '[name].dll.js',
17 | library: '[name]'
18 | },
19 | plugins: [
20 | new webpack.DllPlugin({
21 | name: '[name]',
22 | path: join(buildPath, '[name].json')
23 | })
24 | ],
25 | performance: {
26 | hints: false
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/dist/vue-muuri.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * vue-muuri v0.1.2
3 | * (c) 2018 Collier Devlin
4 | * Released under the MIT License.
5 | */
6 |
7 |
8 | .grid[data-v-5a808db6] {
9 | position: relative;
10 | }
11 | .item[data-v-5a808db6] {
12 | display: block;
13 | position: absolute;
14 | width: 100px;
15 | height: 100px;
16 | margin: 5px;
17 | z-index: 1;
18 | background: #000;
19 | color: #fff;
20 | }
21 | .item.muuri-dragging[data-v-5a808db6] {
22 | z-index: 3;
23 | }
24 | .item.muuri-releasing[data-v-5a808db6] {
25 | z-index: 2;
26 | }
27 | .item.muuri-hidden[data-v-5a808db6] {
28 | z-index: 0;
29 | }
30 | .item-content[data-v-5a808db6] {
31 | position: relative;
32 | width: 100%;
33 | height: 100%;
34 | }
35 |
36 | .text-center[data-v-1aa14b9e] {
37 | text-align: center
38 | }
39 | .hidden[data-v-1aa14b9e] {
40 | display: none
41 | }
42 | .handle[data-v-1aa14b9e] {
43 | width: 100%;
44 | height: 25px
45 | }
46 | .handle[data-v-1aa14b9e]:hover {
47 | cursor: move
48 | }
49 | .clickable[data-v-1aa14b9e] {
50 | height: 100%;
51 | padding-top: 35px;
52 | color: blue
53 | }
54 | .clickable[data-v-1aa14b9e]:hover {
55 | cursor: pointer
56 | }
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-muuri",
3 | "version": "0.1.2",
4 | "description": "A vue plugin using Muuri's responsive, sortable, filterable and draggable grid layouts.",
5 | "author": "Collier Devlin ",
6 | "main": "dist/vue-muuri.common.js",
7 | "module": "dist/vue-muuri.esm.js",
8 | "browser": "dist/vue-muuri.js",
9 | "unpkg": "dist/vue-muuri.js",
10 | "style": "dist/vue-muuri.css",
11 | "files": [
12 | "dist",
13 | "src"
14 | ],
15 | "scripts": {
16 | "clean": "rimraf dist",
17 | "build": "yon run build:common && yon run build:browser && yon run build:browser:min",
18 | "build:common": "cross-env NODE_ENV=common webpack --config build/webpack.config.common.js --progress --hide-modules",
19 | "build:browser:base": "webpack --config build/webpack.config.browser.js --progress --hide-modules",
20 | "build:browser": "cross-env NODE_ENV=browser yon run build:browser:base",
21 | "build:browser:min": "cross-env NODE_ENV=production yon build:browser:base -- -p",
22 | "build:dll": "webpack --progress --config build/webpack.config.dll.js",
23 | "lint": "yon run lint:js && yon run lint:css",
24 | "lint:js": "eslint --ext js --ext jsx --ext vue src test/**/*.spec.js test/*.js build",
25 | "lint:js:fix": "yon run lint:js -- --fix",
26 | "lint:css": "stylelint src/**/*.{vue,css}",
27 | "lint:staged": "lint-staged",
28 | "pretest": "yon run lint",
29 | "test": "cross-env BABEL_ENV=test karma start test/karma.conf.js --single-run",
30 | "dev": "webpack-dashboard -- webpack-dev-server --config build/webpack.config.dev.js --open",
31 | "dev:coverage": "cross-env BABEL_ENV=test karma start test/karma.conf.js"
32 | },
33 | "lint-staged": {
34 | "*.{vue,jsx,js}": [
35 | "eslint --fix"
36 | ],
37 | "*.{vue,css}": [
38 | "stylefmt",
39 | "stylelint"
40 | ]
41 | },
42 | "pre-commit": "lint:staged",
43 | "devDependencies": {
44 | "add-asset-html-webpack-plugin": "^2.0.0",
45 | "babel-core": "^6.24.0",
46 | "babel-eslint": "^7.2.0",
47 | "babel-helper-vue-jsx-merge-props": "^2.0.0",
48 | "babel-loader": "^7.0.0",
49 | "babel-plugin-istanbul": "^4.1.0",
50 | "babel-plugin-syntax-jsx": "^6.18.0",
51 | "babel-plugin-transform-object-rest-spread": "^6.23.0",
52 | "babel-plugin-transform-runtime": "^6.23.0",
53 | "babel-plugin-transform-vue-jsx": "^3.4.0",
54 | "babel-preset-env": "^1.4.0",
55 | "chai": "^3.5.0",
56 | "chai-dom": "^1.4.0",
57 | "cross-env": "^4.0.0",
58 | "css-loader": "^0.28.0",
59 | "eslint": "^3.19.0",
60 | "eslint-config-vue": "^2.0.0",
61 | "eslint-plugin-vue": "^2.0.0",
62 | "extract-text-webpack-plugin": "^2.1.0",
63 | "html-webpack-plugin": "^2.28.0",
64 | "karma": "^1.7.0",
65 | "karma-chai-dom": "^1.1.0",
66 | "karma-chrome-launcher": "^2.1.0",
67 | "karma-coverage": "^1.1.0",
68 | "karma-mocha": "^1.3.0",
69 | "karma-sinon-chai": "^1.3.0",
70 | "karma-sourcemap-loader": "^0.3.7",
71 | "karma-spec-reporter": "^0.0.31",
72 | "karma-webpack": "^2.0.0",
73 | "lint-staged": "^3.4.0",
74 | "mocha": "^3.3.0",
75 | "mocha-css": "^1.0.1",
76 | "node-sass": "^4.5.3",
77 | "null-loader": "^0.1.1",
78 | "postcss": "^6.0.0",
79 | "postcss-cssnext": "^2.10.0",
80 | "pre-commit": "^1.2.0",
81 | "rimraf": "^2.6.0",
82 | "sass-loader": "^6.0.6",
83 | "sinon": "2.2.0",
84 | "sinon-chai": "^2.10.0",
85 | "style-loader": "^0.17.0",
86 | "stylefmt": "^5.3.0",
87 | "stylelint": "^7.10.0",
88 | "stylelint-config-standard": "^16.0.0",
89 | "stylelint-processor-html": "^1.0.0",
90 | "uppercamelcase": "^3.0.0",
91 | "vue": "^2.4.2",
92 | "vue-loader": "^12.2.2",
93 | "vue-template-compiler": "^2.4.2",
94 | "webpack": "^2.5.0",
95 | "webpack-bundle-analyzer": "^2.4.0",
96 | "webpack-dashboard": "^0.4.0",
97 | "webpack-dev-server": "^2.4.0",
98 | "webpack-merge": "^4.0.0",
99 | "yarn-or-npm": "^2.0.0"
100 | },
101 | "peerDependencies": {
102 | "vue": "^2.4.2"
103 | },
104 | "dllPlugin": {
105 | "name": "vuePluginTemplateDeps",
106 | "include": [
107 | "mocha/mocha.js",
108 | "style-loader!css-loader!mocha-css",
109 | "html-entities",
110 | "vue/dist/vue.js",
111 | "chai",
112 | "core-js/library",
113 | "url",
114 | "sockjs-client",
115 | "vue-style-loader/lib/addStylesClient.js",
116 | "events",
117 | "ansi-html",
118 | "style-loader/addStyles.js"
119 | ]
120 | },
121 | "license": {
122 | "type": "MIT",
123 | "url": "http://www.opensource.org/licenses/mit-license.php"
124 | },
125 | "dependencies": {
126 | "hammerjs": "^2.0.8",
127 | "jquery": "^3.2.1",
128 | "muuri": "^0.4.0",
129 | "velocityjs": "^0.9.6"
130 | }
131 | }
132 |
--------------------------------------------------------------------------------
/package.json.1844951368:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jocodev1/vue-muuri/545ca2b273b615a231492e36e346eacc709b22ce/package.json.1844951368
--------------------------------------------------------------------------------
/src/components/MuuriGrid.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
130 |
131 |
160 |
--------------------------------------------------------------------------------
/src/components/items/ItemLg.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
39 |
40 |
43 |
--------------------------------------------------------------------------------
/src/components/items/ItemLink.vue:
--------------------------------------------------------------------------------
1 |
2 |
24 |
25 |
26 |
65 |
66 |
89 |
--------------------------------------------------------------------------------
/src/components/items/ItemMd.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
39 |
40 |
43 |
--------------------------------------------------------------------------------
/src/components/items/ItemSm.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
39 |
40 |
43 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import MuuriGrid from './components/MuuriGrid.vue'
2 | import ItemLink from './components/items/ItemLink.vue'
3 | import ItemSm from './components/items/ItemSm.vue'
4 | import ItemMd from './components/items/ItemMd.vue'
5 | import ItemLg from './components/items/ItemLg.vue'
6 |
7 | var plugin = {
8 | install: function (Vue, store) {
9 | Vue.component('muuri-grid', MuuriGrid)
10 | }
11 | }
12 |
13 | // Install by default if using the script tag
14 | if (typeof window !== 'undefined' && window.Vue) {
15 | window.Vue.use(plugin)
16 | }
17 |
18 | export default plugin
19 | const version = '__VERSION__'
20 | // Export all components too
21 | export {
22 | MuuriGrid,
23 | ItemLink,
24 | ItemSm,
25 | ItemMd,
26 | ItemLg,
27 | version
28 | }
29 |
--------------------------------------------------------------------------------
/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | },
5 | "globals": {
6 | "expect": true,
7 | "sinon": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/test/dist/vuePluginTemplateDeps.json:
--------------------------------------------------------------------------------
1 | {"name":"vuePluginTemplateDeps","content":{"./node_modules/core-js/library/modules/_export.js":{"id":0,"meta":{}},"./node_modules/core-js/library/modules/_an-object.js":{"id":1,"meta":{}},"./node_modules/core-js/library/modules/_global.js":{"id":2,"meta":{}},"./node_modules/inherits/inherits_browser.js":{"id":3,"meta":{}},"./node_modules/core-js/library/modules/_is-object.js":{"id":4,"meta":{}},"./node_modules/core-js/library/modules/_fails.js":{"id":5,"meta":{}},"./node_modules/webpack/buildin/global.js":{"id":6,"meta":{}},"./node_modules/process/browser.js":{"id":7,"meta":{}},"./node_modules/core-js/library/modules/_to-length.js":{"id":8,"meta":{}},"./node_modules/core-js/library/modules/_wks.js":{"id":9,"meta":{}},"./node_modules/debug/src/browser.js":{"id":10,"meta":{}},"./node_modules/core-js/library/modules/_object-dp.js":{"id":11,"meta":{}},"./node_modules/core-js/library/modules/_descriptors.js":{"id":12,"meta":{}},"./node_modules/core-js/library/modules/_to-object.js":{"id":13,"meta":{}},"./node_modules/core-js/library/modules/_a-function.js":{"id":14,"meta":{}},"./node_modules/core-js/library/modules/_core.js":{"id":15,"meta":{}},"./node_modules/core-js/library/modules/_to-iobject.js":{"id":16,"meta":{}},"./node_modules/sockjs-client/lib/event/emitter.js":{"id":17,"meta":{}},"./node_modules/core-js/library/modules/_object-gpo.js":{"id":18,"meta":{}},"./node_modules/core-js/library/modules/_string-html.js":{"id":19,"meta":{}},"./node_modules/core-js/library/modules/_ctx.js":{"id":20,"meta":{}},"./node_modules/core-js/library/modules/_has.js":{"id":21,"meta":{}},"./node_modules/core-js/library/modules/_hide.js":{"id":22,"meta":{}},"./node_modules/core-js/library/modules/_object-gopd.js":{"id":23,"meta":{}},"./node_modules/sockjs-client/lib/utils/url.js":{"id":24,"meta":{}},"./node_modules/core-js/library/modules/_array-methods.js":{"id":25,"meta":{}},"./node_modules/core-js/library/modules/_strict-method.js":{"id":26,"meta":{}},"./node_modules/core-js/library/modules/_cof.js":{"id":27,"meta":{}},"./node_modules/core-js/library/modules/_object-sap.js":{"id":28,"meta":{}},"./node_modules/core-js/library/modules/_to-integer.js":{"id":29,"meta":{}},"./node_modules/core-js/library/modules/_defined.js":{"id":30,"meta":{}},"./node_modules/core-js/library/modules/_metadata.js":{"id":31,"meta":{}},"./node_modules/core-js/library/modules/_typed-array.js":{"id":32,"meta":{}},"./node_modules/json3/lib/json3.js":{"id":33,"meta":{}},"./node_modules/core-js/library/modules/_add-to-unscopables.js":{"id":34,"meta":{}},"./node_modules/core-js/library/modules/_for-of.js":{"id":35,"meta":{}},"./node_modules/core-js/library/modules/_meta.js":{"id":36,"meta":{}},"./node_modules/core-js/library/modules/_object-create.js":{"id":37,"meta":{}},"./node_modules/core-js/library/modules/_object-keys.js":{"id":38,"meta":{}},"./node_modules/core-js/library/modules/_property-desc.js":{"id":39,"meta":{}},"./node_modules/core-js/library/modules/_to-primitive.js":{"id":40,"meta":{}},"./node_modules/sockjs-client/lib/utils/event.js":{"id":41,"meta":{}},"./node_modules/chai/lib/chai/utils/flag.js":{"id":42,"meta":{}},"./node_modules/core-js/library/modules/_an-instance.js":{"id":43,"meta":{}},"./node_modules/core-js/library/modules/_classof.js":{"id":44,"meta":{}},"./node_modules/core-js/library/modules/_iterators.js":{"id":45,"meta":{}},"./node_modules/core-js/library/modules/_library.js":{"id":46,"meta":{}},"./node_modules/core-js/library/modules/_redefine-all.js":{"id":47,"meta":{}},"./node_modules/core-js/library/modules/_set-species.js":{"id":48,"meta":{}},"./node_modules/core-js/library/modules/_to-absolute-index.js":{"id":49,"meta":{}},"./node_modules/chai/lib/chai/config.js":{"id":50,"meta":{}},"./node_modules/core-js/library/modules/_set-to-string-tag.js":{"id":51,"meta":{}},"./node_modules/core-js/library/modules/_uid.js":{"id":52,"meta":{}},"./node_modules/core-js/library/modules/_validate-collection.js":{"id":53,"meta":{}},"./node_modules/sockjs-client/lib/transport/lib/ajax-based.js":{"id":54,"meta":{}},"./node_modules/sockjs-client/lib/utils/random.js":{"id":55,"meta":{}},"./node_modules/core-js/library/modules/_iobject.js":{"id":56,"meta":{}},"./node_modules/core-js/library/modules/_object-gopn.js":{"id":57,"meta":{}},"./node_modules/core-js/library/modules/_object-pie.js":{"id":58,"meta":{}},"./node_modules/core-js/library/modules/_string-trim.js":{"id":59,"meta":{}},"./node_modules/core-js/library/modules/core.get-iterator-method.js":{"id":60,"meta":{}},"./node_modules/sockjs-client/lib/transport/sender/xhr-local.js":{"id":61,"meta":{}},"./node_modules/sockjs-client/lib/utils/browser.js":{"id":62,"meta":{}},"./node_modules/sockjs-client/lib/utils/iframe.js":{"id":63,"meta":{}},"./node_modules/core-js/library/modules/_array-includes.js":{"id":64,"meta":{}},"./node_modules/core-js/library/modules/_collection.js":{"id":65,"meta":{}},"./node_modules/core-js/library/modules/_invoke.js":{"id":66,"meta":{}},"./node_modules/core-js/library/modules/_is-array.js":{"id":67,"meta":{}},"./node_modules/core-js/library/modules/_iter-create.js":{"id":68,"meta":{}},"./node_modules/core-js/library/modules/_iter-define.js":{"id":69,"meta":{}},"./node_modules/core-js/library/modules/_object-forced-pam.js":{"id":70,"meta":{}},"./node_modules/core-js/library/modules/_object-gops.js":{"id":71,"meta":{}},"./node_modules/core-js/library/modules/_set-collection-from.js":{"id":72,"meta":{}},"./node_modules/core-js/library/modules/_set-collection-of.js":{"id":73,"meta":{}},"./node_modules/core-js/library/modules/_shared.js":{"id":74,"meta":{}},"./node_modules/core-js/library/modules/_species-constructor.js":{"id":75,"meta":{}},"./node_modules/core-js/library/modules/_typed.js":{"id":76,"meta":{}},"./node_modules/sockjs-client/lib/transport/receiver/xhr.js":{"id":77,"meta":{}},"./node_modules/sockjs-client/lib/transport/sender/xhr-cors.js":{"id":78,"meta":{}},"./node_modules/chai/lib/chai/utils/inspect.js":{"id":79,"meta":{}},"./node_modules/core-js/library/modules/_array-fill.js":{"id":80,"meta":{}},"./node_modules/core-js/library/modules/_array-species-create.js":{"id":81,"meta":{}},"./node_modules/core-js/library/modules/_create-property.js":{"id":82,"meta":{}},"./node_modules/core-js/library/modules/_dom-create.js":{"id":83,"meta":{}},"./node_modules/core-js/library/modules/_enum-bug-keys.js":{"id":84,"meta":{}},"./node_modules/core-js/library/modules/_fails-is-regexp.js":{"id":85,"meta":{}},"./node_modules/core-js/library/modules/_html.js":{"id":86,"meta":{}},"./node_modules/core-js/library/modules/_is-array-iter.js":{"id":87,"meta":{}},"./node_modules/core-js/library/modules/_iter-detect.js":{"id":88,"meta":{}},"./node_modules/core-js/library/modules/_iter-step.js":{"id":89,"meta":{}},"./node_modules/core-js/library/modules/_math-expm1.js":{"id":90,"meta":{}},"./node_modules/core-js/library/modules/_math-sign.js":{"id":91,"meta":{}},"./node_modules/core-js/library/modules/_microtask.js":{"id":92,"meta":{}},"./node_modules/core-js/library/modules/_new-promise-capability.js":{"id":93,"meta":{}},"./node_modules/core-js/library/modules/_object-assign.js":{"id":94,"meta":{}},"./node_modules/core-js/library/modules/_own-keys.js":{"id":95,"meta":{}},"./node_modules/core-js/library/modules/_partial.js":{"id":96,"meta":{}},"./node_modules/core-js/library/modules/_redefine.js":{"id":97,"meta":{}},"./node_modules/core-js/library/modules/_replacer.js":{"id":98,"meta":{}},"./node_modules/core-js/library/modules/_shared-key.js":{"id":99,"meta":{}},"./node_modules/core-js/library/modules/_string-at.js":{"id":100,"meta":{}},"./node_modules/core-js/library/modules/_string-context.js":{"id":101,"meta":{}},"./node_modules/core-js/library/modules/_string-repeat.js":{"id":102,"meta":{}},"./node_modules/core-js/library/modules/_string-ws.js":{"id":103,"meta":{}},"./node_modules/core-js/library/modules/_task.js":{"id":104,"meta":{}},"./node_modules/core-js/library/modules/_typed-buffer.js":{"id":105,"meta":{}},"./node_modules/core-js/library/modules/_wks-define.js":{"id":106,"meta":{}},"./node_modules/core-js/library/modules/es6.array.iterator.js":{"id":107,"meta":{}},"./node_modules/sockjs-client/lib/event/event.js":{"id":108,"meta":{}},"./node_modules/sockjs-client/lib/transport/lib/iframe-wrap.js":{"id":109,"meta":{}},"./node_modules/sockjs-client/lib/transport/sender/xdr.js":{"id":110,"meta":{}},"./node_modules/sockjs-client/lib/utils/object.js":{"id":111,"meta":{}},"./node_modules/type-detect/index.js":{"id":112,"meta":{}},"./node_modules/style-loader/addStyles.js":{"id":113,"meta":{}},"./node_modules/assertion-error/index.js":{"id":114,"meta":{}},"./node_modules/chai/lib/chai/utils/getActual.js":{"id":115,"meta":{}},"./node_modules/chai/lib/chai/utils/getName.js":{"id":116,"meta":{}},"./node_modules/chai/lib/chai/utils/getPathInfo.js":{"id":117,"meta":{}},"./node_modules/chai/lib/chai/utils/hasProperty.js":{"id":118,"meta":{}},"./node_modules/chai/lib/chai/utils/objDisplay.js":{"id":119,"meta":{}},"./node_modules/chai/lib/chai/utils/transferFlags.js":{"id":120,"meta":{}},"./node_modules/core-js/library/modules/_a-number-value.js":{"id":121,"meta":{}},"./node_modules/core-js/library/modules/_array-copy-within.js":{"id":122,"meta":{}},"./node_modules/core-js/library/modules/_array-from-iterable.js":{"id":123,"meta":{}},"./node_modules/core-js/library/modules/_array-reduce.js":{"id":124,"meta":{}},"./node_modules/core-js/library/modules/_bind.js":{"id":125,"meta":{}},"./node_modules/core-js/library/modules/_collection-strong.js":{"id":126,"meta":{}},"./node_modules/core-js/library/modules/_collection-to-json.js":{"id":127,"meta":{}},"./node_modules/core-js/library/modules/_collection-weak.js":{"id":128,"meta":{}},"./node_modules/core-js/library/modules/_date-to-iso-string.js":{"id":129,"meta":{}},"./node_modules/core-js/library/modules/_flatten-into-array.js":{"id":130,"meta":{}},"./node_modules/core-js/library/modules/_ie8-dom-define.js":{"id":131,"meta":{}},"./node_modules/core-js/library/modules/_is-integer.js":{"id":132,"meta":{}},"./node_modules/core-js/library/modules/_is-regexp.js":{"id":133,"meta":{}},"./node_modules/core-js/library/modules/_iter-call.js":{"id":134,"meta":{}},"./node_modules/core-js/library/modules/_keyof.js":{"id":135,"meta":{}},"./node_modules/core-js/library/modules/_math-fround.js":{"id":136,"meta":{}},"./node_modules/core-js/library/modules/_math-log1p.js":{"id":137,"meta":{}},"./node_modules/core-js/library/modules/_math-scale.js":{"id":138,"meta":{}},"./node_modules/core-js/library/modules/_object-define.js":{"id":139,"meta":{}},"./node_modules/core-js/library/modules/_object-dps.js":{"id":140,"meta":{}},"./node_modules/core-js/library/modules/_object-gopn-ext.js":{"id":141,"meta":{}},"./node_modules/core-js/library/modules/_object-keys-internal.js":{"id":142,"meta":{}},"./node_modules/core-js/library/modules/_object-to-array.js":{"id":143,"meta":{}},"./node_modules/core-js/library/modules/_parse-float.js":{"id":144,"meta":{}},"./node_modules/core-js/library/modules/_parse-int.js":{"id":145,"meta":{}},"./node_modules/core-js/library/modules/_path.js":{"id":146,"meta":{}},"./node_modules/core-js/library/modules/_perform.js":{"id":147,"meta":{}},"./node_modules/core-js/library/modules/_promise-resolve.js":{"id":148,"meta":{}},"./node_modules/core-js/library/modules/_set-proto.js":{"id":149,"meta":{}},"./node_modules/core-js/library/modules/_string-pad.js":{"id":150,"meta":{}},"./node_modules/core-js/library/modules/_to-index.js":{"id":151,"meta":{}},"./node_modules/core-js/library/modules/_wks-ext.js":{"id":152,"meta":{}},"./node_modules/core-js/library/modules/core.is-iterable.js":{"id":153,"meta":{}},"./node_modules/core-js/library/modules/es6.map.js":{"id":154,"meta":{}},"./node_modules/core-js/library/modules/es6.set.js":{"id":155,"meta":{}},"./node_modules/core-js/library/modules/es6.weak-map.js":{"id":156,"meta":{}},"./node_modules/html-entities/lib/html5-entities.js":{"id":157,"meta":{}},"./node_modules/sockjs-client/lib/event/eventtarget.js":{"id":158,"meta":{}},"./node_modules/sockjs-client/lib/info-ajax.js":{"id":159,"meta":{}},"./node_modules/sockjs-client/lib/info-iframe-receiver.js":{"id":160,"meta":{}},"./node_modules/sockjs-client/lib/location.js":{"id":161,"meta":{}},"./node_modules/sockjs-client/lib/transport/browser/abstract-xhr.js":{"id":162,"meta":{}},"./node_modules/sockjs-client/lib/transport/browser/eventsource.js":{"id":163,"meta":{}},"./node_modules/sockjs-client/lib/transport/eventsource.js":{"id":164,"meta":{}},"./node_modules/sockjs-client/lib/transport/htmlfile.js":{"id":165,"meta":{}},"./node_modules/sockjs-client/lib/transport/iframe.js":{"id":166,"meta":{}},"./node_modules/sockjs-client/lib/transport/lib/sender-receiver.js":{"id":167,"meta":{}},"./node_modules/sockjs-client/lib/transport/xdr-streaming.js":{"id":168,"meta":{}},"./node_modules/sockjs-client/lib/transport/xhr-polling.js":{"id":169,"meta":{}},"./node_modules/sockjs-client/lib/version.js":{"id":170,"meta":{}},"./node_modules/url-parse/index.js":{"id":171,"meta":{}},"./node_modules/webpack/buildin/module.js":{"id":172,"meta":{}},"./node_modules/ansi-html/index.js":{"id":173,"meta":{}},"./node_modules/chai/index.js":{"id":174,"meta":{}},"./node_modules/core-js/library/index.js":{"id":175,"meta":{}},"./node_modules/events/events.js":{"id":176,"meta":{}},"./node_modules/html-entities/index.js":{"id":177,"meta":{}},"./node_modules/mocha/mocha.js":{"id":178,"meta":{}},"./node_modules/sockjs-client/lib/entry.js":{"id":179,"meta":{}},"./node_modules/style-loader/index.js!./node_modules/css-loader/index.js!./node_modules/mocha-css/mocha.css":{"id":180,"meta":{}},"./node_modules/url/url.js":{"id":181,"meta":{}},"./node_modules/vue-style-loader/lib/addStylesClient.js":{"id":182,"meta":{}},"./node_modules/vue/dist/vue.js":{"id":183,"meta":{}},"./node_modules/base64-js/index.js":{"id":184,"meta":{}},"./node_modules/buffer/index.js":{"id":185,"meta":{}},"./node_modules/chai/lib/chai.js":{"id":186,"meta":{}},"./node_modules/chai/lib/chai/assertion.js":{"id":187,"meta":{}},"./node_modules/chai/lib/chai/core/assertions.js":{"id":188,"meta":{}},"./node_modules/chai/lib/chai/interface/assert.js":{"id":189,"meta":{}},"./node_modules/chai/lib/chai/interface/expect.js":{"id":190,"meta":{}},"./node_modules/chai/lib/chai/interface/should.js":{"id":191,"meta":{}},"./node_modules/chai/lib/chai/utils/addChainableMethod.js":{"id":192,"meta":{}},"./node_modules/chai/lib/chai/utils/addMethod.js":{"id":193,"meta":{}},"./node_modules/chai/lib/chai/utils/addProperty.js":{"id":194,"meta":{}},"./node_modules/chai/lib/chai/utils/expectTypes.js":{"id":195,"meta":{}},"./node_modules/chai/lib/chai/utils/getEnumerableProperties.js":{"id":196,"meta":{}},"./node_modules/chai/lib/chai/utils/getMessage.js":{"id":197,"meta":{}},"./node_modules/chai/lib/chai/utils/getPathValue.js":{"id":198,"meta":{}},"./node_modules/chai/lib/chai/utils/getProperties.js":{"id":199,"meta":{}},"./node_modules/chai/lib/chai/utils/index.js":{"id":200,"meta":{}},"./node_modules/chai/lib/chai/utils/overwriteChainableMethod.js":{"id":201,"meta":{}},"./node_modules/chai/lib/chai/utils/overwriteMethod.js":{"id":202,"meta":{}},"./node_modules/chai/lib/chai/utils/overwriteProperty.js":{"id":203,"meta":{}},"./node_modules/chai/lib/chai/utils/test.js":{"id":204,"meta":{}},"./node_modules/core-js/library/modules/_array-species-constructor.js":{"id":205,"meta":{}},"./node_modules/core-js/library/modules/_enum-keys.js":{"id":206,"meta":{}},"./node_modules/core-js/library/modules/_flags.js":{"id":207,"meta":{}},"./node_modules/core-js/library/modules/_same-value.js":{"id":208,"meta":{}},"./node_modules/core-js/library/modules/core.delay.js":{"id":209,"meta":{}},"./node_modules/core-js/library/modules/core.dict.js":{"id":210,"meta":{}},"./node_modules/core-js/library/modules/core.function.part.js":{"id":211,"meta":{}},"./node_modules/core-js/library/modules/core.get-iterator.js":{"id":212,"meta":{}},"./node_modules/core-js/library/modules/core.number.iterator.js":{"id":213,"meta":{}},"./node_modules/core-js/library/modules/core.object.classof.js":{"id":214,"meta":{}},"./node_modules/core-js/library/modules/core.object.define.js":{"id":215,"meta":{}},"./node_modules/core-js/library/modules/core.object.is-object.js":{"id":216,"meta":{}},"./node_modules/core-js/library/modules/core.object.make.js":{"id":217,"meta":{}},"./node_modules/core-js/library/modules/core.regexp.escape.js":{"id":218,"meta":{}},"./node_modules/core-js/library/modules/core.string.escape-html.js":{"id":219,"meta":{}},"./node_modules/core-js/library/modules/core.string.unescape-html.js":{"id":220,"meta":{}},"./node_modules/core-js/library/modules/es6.array.copy-within.js":{"id":221,"meta":{}},"./node_modules/core-js/library/modules/es6.array.every.js":{"id":222,"meta":{}},"./node_modules/core-js/library/modules/es6.array.fill.js":{"id":223,"meta":{}},"./node_modules/core-js/library/modules/es6.array.filter.js":{"id":224,"meta":{}},"./node_modules/core-js/library/modules/es6.array.find-index.js":{"id":225,"meta":{}},"./node_modules/core-js/library/modules/es6.array.find.js":{"id":226,"meta":{}},"./node_modules/core-js/library/modules/es6.array.for-each.js":{"id":227,"meta":{}},"./node_modules/core-js/library/modules/es6.array.from.js":{"id":228,"meta":{}},"./node_modules/core-js/library/modules/es6.array.index-of.js":{"id":229,"meta":{}},"./node_modules/core-js/library/modules/es6.array.is-array.js":{"id":230,"meta":{}},"./node_modules/core-js/library/modules/es6.array.join.js":{"id":231,"meta":{}},"./node_modules/core-js/library/modules/es6.array.last-index-of.js":{"id":232,"meta":{}},"./node_modules/core-js/library/modules/es6.array.map.js":{"id":233,"meta":{}},"./node_modules/core-js/library/modules/es6.array.of.js":{"id":234,"meta":{}},"./node_modules/core-js/library/modules/es6.array.reduce-right.js":{"id":235,"meta":{}},"./node_modules/core-js/library/modules/es6.array.reduce.js":{"id":236,"meta":{}},"./node_modules/core-js/library/modules/es6.array.slice.js":{"id":237,"meta":{}},"./node_modules/core-js/library/modules/es6.array.some.js":{"id":238,"meta":{}},"./node_modules/core-js/library/modules/es6.array.sort.js":{"id":239,"meta":{}},"./node_modules/core-js/library/modules/es6.array.species.js":{"id":240,"meta":{}},"./node_modules/core-js/library/modules/es6.date.now.js":{"id":241,"meta":{}},"./node_modules/core-js/library/modules/es6.date.to-iso-string.js":{"id":242,"meta":{}},"./node_modules/core-js/library/modules/es6.date.to-json.js":{"id":243,"meta":{}},"./node_modules/core-js/library/modules/es6.date.to-primitive.js":{"id":244,"meta":{}},"./node_modules/core-js/library/modules/es6.date.to-string.js":{"id":245,"meta":{}},"./node_modules/core-js/library/modules/es6.function.bind.js":{"id":246,"meta":{}},"./node_modules/core-js/library/modules/es6.function.has-instance.js":{"id":247,"meta":{}},"./node_modules/core-js/library/modules/es6.function.name.js":{"id":248,"meta":{}},"./node_modules/core-js/library/modules/es6.math.acosh.js":{"id":249,"meta":{}},"./node_modules/core-js/library/modules/es6.math.asinh.js":{"id":250,"meta":{}},"./node_modules/core-js/library/modules/es6.math.atanh.js":{"id":251,"meta":{}},"./node_modules/core-js/library/modules/es6.math.cbrt.js":{"id":252,"meta":{}},"./node_modules/core-js/library/modules/es6.math.clz32.js":{"id":253,"meta":{}},"./node_modules/core-js/library/modules/es6.math.cosh.js":{"id":254,"meta":{}},"./node_modules/core-js/library/modules/es6.math.expm1.js":{"id":255,"meta":{}},"./node_modules/core-js/library/modules/es6.math.fround.js":{"id":256,"meta":{}},"./node_modules/core-js/library/modules/es6.math.hypot.js":{"id":257,"meta":{}},"./node_modules/core-js/library/modules/es6.math.imul.js":{"id":258,"meta":{}},"./node_modules/core-js/library/modules/es6.math.log10.js":{"id":259,"meta":{}},"./node_modules/core-js/library/modules/es6.math.log1p.js":{"id":260,"meta":{}},"./node_modules/core-js/library/modules/es6.math.log2.js":{"id":261,"meta":{}},"./node_modules/core-js/library/modules/es6.math.sign.js":{"id":262,"meta":{}},"./node_modules/core-js/library/modules/es6.math.sinh.js":{"id":263,"meta":{}},"./node_modules/core-js/library/modules/es6.math.tanh.js":{"id":264,"meta":{}},"./node_modules/core-js/library/modules/es6.math.trunc.js":{"id":265,"meta":{}},"./node_modules/core-js/library/modules/es6.number.constructor.js":{"id":266,"meta":{}},"./node_modules/core-js/library/modules/es6.number.epsilon.js":{"id":267,"meta":{}},"./node_modules/core-js/library/modules/es6.number.is-finite.js":{"id":268,"meta":{}},"./node_modules/core-js/library/modules/es6.number.is-integer.js":{"id":269,"meta":{}},"./node_modules/core-js/library/modules/es6.number.is-nan.js":{"id":270,"meta":{}},"./node_modules/core-js/library/modules/es6.number.is-safe-integer.js":{"id":271,"meta":{}},"./node_modules/core-js/library/modules/es6.number.max-safe-integer.js":{"id":272,"meta":{}},"./node_modules/core-js/library/modules/es6.number.min-safe-integer.js":{"id":273,"meta":{}},"./node_modules/core-js/library/modules/es6.number.parse-float.js":{"id":274,"meta":{}},"./node_modules/core-js/library/modules/es6.number.parse-int.js":{"id":275,"meta":{}},"./node_modules/core-js/library/modules/es6.number.to-fixed.js":{"id":276,"meta":{}},"./node_modules/core-js/library/modules/es6.number.to-precision.js":{"id":277,"meta":{}},"./node_modules/core-js/library/modules/es6.object.assign.js":{"id":278,"meta":{}},"./node_modules/core-js/library/modules/es6.object.create.js":{"id":279,"meta":{}},"./node_modules/core-js/library/modules/es6.object.define-properties.js":{"id":280,"meta":{}},"./node_modules/core-js/library/modules/es6.object.define-property.js":{"id":281,"meta":{}},"./node_modules/core-js/library/modules/es6.object.freeze.js":{"id":282,"meta":{}},"./node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js":{"id":283,"meta":{}},"./node_modules/core-js/library/modules/es6.object.get-own-property-names.js":{"id":284,"meta":{}},"./node_modules/core-js/library/modules/es6.object.get-prototype-of.js":{"id":285,"meta":{}},"./node_modules/core-js/library/modules/es6.object.is-extensible.js":{"id":286,"meta":{}},"./node_modules/core-js/library/modules/es6.object.is-frozen.js":{"id":287,"meta":{}},"./node_modules/core-js/library/modules/es6.object.is-sealed.js":{"id":288,"meta":{}},"./node_modules/core-js/library/modules/es6.object.is.js":{"id":289,"meta":{}},"./node_modules/core-js/library/modules/es6.object.keys.js":{"id":290,"meta":{}},"./node_modules/core-js/library/modules/es6.object.prevent-extensions.js":{"id":291,"meta":{}},"./node_modules/core-js/library/modules/es6.object.seal.js":{"id":292,"meta":{}},"./node_modules/core-js/library/modules/es6.object.set-prototype-of.js":{"id":293,"meta":{}},"./node_modules/core-js/library/modules/es6.object.to-string.js":{"id":294,"meta":{}},"./node_modules/core-js/library/modules/es6.parse-float.js":{"id":295,"meta":{}},"./node_modules/core-js/library/modules/es6.parse-int.js":{"id":296,"meta":{}},"./node_modules/core-js/library/modules/es6.promise.js":{"id":297,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.apply.js":{"id":298,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.construct.js":{"id":299,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.define-property.js":{"id":300,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.delete-property.js":{"id":301,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.enumerate.js":{"id":302,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.get-own-property-descriptor.js":{"id":303,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.get-prototype-of.js":{"id":304,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.get.js":{"id":305,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.has.js":{"id":306,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.is-extensible.js":{"id":307,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.own-keys.js":{"id":308,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.prevent-extensions.js":{"id":309,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.set-prototype-of.js":{"id":310,"meta":{}},"./node_modules/core-js/library/modules/es6.reflect.set.js":{"id":311,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.constructor.js":{"id":312,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.flags.js":{"id":313,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.match.js":{"id":314,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.replace.js":{"id":315,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.search.js":{"id":316,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.split.js":{"id":317,"meta":{}},"./node_modules/core-js/library/modules/es6.regexp.to-string.js":{"id":318,"meta":{}},"./node_modules/core-js/library/modules/es6.string.anchor.js":{"id":319,"meta":{}},"./node_modules/core-js/library/modules/es6.string.big.js":{"id":320,"meta":{}},"./node_modules/core-js/library/modules/es6.string.blink.js":{"id":321,"meta":{}},"./node_modules/core-js/library/modules/es6.string.bold.js":{"id":322,"meta":{}},"./node_modules/core-js/library/modules/es6.string.code-point-at.js":{"id":323,"meta":{}},"./node_modules/core-js/library/modules/es6.string.ends-with.js":{"id":324,"meta":{}},"./node_modules/core-js/library/modules/es6.string.fixed.js":{"id":325,"meta":{}},"./node_modules/core-js/library/modules/es6.string.fontcolor.js":{"id":326,"meta":{}},"./node_modules/core-js/library/modules/es6.string.fontsize.js":{"id":327,"meta":{}},"./node_modules/core-js/library/modules/es6.string.from-code-point.js":{"id":328,"meta":{}},"./node_modules/core-js/library/modules/es6.string.includes.js":{"id":329,"meta":{}},"./node_modules/core-js/library/modules/es6.string.italics.js":{"id":330,"meta":{}},"./node_modules/core-js/library/modules/es6.string.iterator.js":{"id":331,"meta":{}},"./node_modules/core-js/library/modules/es6.string.link.js":{"id":332,"meta":{}},"./node_modules/core-js/library/modules/es6.string.raw.js":{"id":333,"meta":{}},"./node_modules/core-js/library/modules/es6.string.repeat.js":{"id":334,"meta":{}},"./node_modules/core-js/library/modules/es6.string.small.js":{"id":335,"meta":{}},"./node_modules/core-js/library/modules/es6.string.starts-with.js":{"id":336,"meta":{}},"./node_modules/core-js/library/modules/es6.string.strike.js":{"id":337,"meta":{}},"./node_modules/core-js/library/modules/es6.string.sub.js":{"id":338,"meta":{}},"./node_modules/core-js/library/modules/es6.string.sup.js":{"id":339,"meta":{}},"./node_modules/core-js/library/modules/es6.string.trim.js":{"id":340,"meta":{}},"./node_modules/core-js/library/modules/es6.symbol.js":{"id":341,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.array-buffer.js":{"id":342,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.data-view.js":{"id":343,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.float32-array.js":{"id":344,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.float64-array.js":{"id":345,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.int16-array.js":{"id":346,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.int32-array.js":{"id":347,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.int8-array.js":{"id":348,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.uint16-array.js":{"id":349,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.uint32-array.js":{"id":350,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.uint8-array.js":{"id":351,"meta":{}},"./node_modules/core-js/library/modules/es6.typed.uint8-clamped-array.js":{"id":352,"meta":{}},"./node_modules/core-js/library/modules/es6.weak-set.js":{"id":353,"meta":{}},"./node_modules/core-js/library/modules/es7.array.flat-map.js":{"id":354,"meta":{}},"./node_modules/core-js/library/modules/es7.array.flatten.js":{"id":355,"meta":{}},"./node_modules/core-js/library/modules/es7.array.includes.js":{"id":356,"meta":{}},"./node_modules/core-js/library/modules/es7.asap.js":{"id":357,"meta":{}},"./node_modules/core-js/library/modules/es7.error.is-error.js":{"id":358,"meta":{}},"./node_modules/core-js/library/modules/es7.global.js":{"id":359,"meta":{}},"./node_modules/core-js/library/modules/es7.map.from.js":{"id":360,"meta":{}},"./node_modules/core-js/library/modules/es7.map.of.js":{"id":361,"meta":{}},"./node_modules/core-js/library/modules/es7.map.to-json.js":{"id":362,"meta":{}},"./node_modules/core-js/library/modules/es7.math.clamp.js":{"id":363,"meta":{}},"./node_modules/core-js/library/modules/es7.math.deg-per-rad.js":{"id":364,"meta":{}},"./node_modules/core-js/library/modules/es7.math.degrees.js":{"id":365,"meta":{}},"./node_modules/core-js/library/modules/es7.math.fscale.js":{"id":366,"meta":{}},"./node_modules/core-js/library/modules/es7.math.iaddh.js":{"id":367,"meta":{}},"./node_modules/core-js/library/modules/es7.math.imulh.js":{"id":368,"meta":{}},"./node_modules/core-js/library/modules/es7.math.isubh.js":{"id":369,"meta":{}},"./node_modules/core-js/library/modules/es7.math.rad-per-deg.js":{"id":370,"meta":{}},"./node_modules/core-js/library/modules/es7.math.radians.js":{"id":371,"meta":{}},"./node_modules/core-js/library/modules/es7.math.scale.js":{"id":372,"meta":{}},"./node_modules/core-js/library/modules/es7.math.signbit.js":{"id":373,"meta":{}},"./node_modules/core-js/library/modules/es7.math.umulh.js":{"id":374,"meta":{}},"./node_modules/core-js/library/modules/es7.object.define-getter.js":{"id":375,"meta":{}},"./node_modules/core-js/library/modules/es7.object.define-setter.js":{"id":376,"meta":{}},"./node_modules/core-js/library/modules/es7.object.entries.js":{"id":377,"meta":{}},"./node_modules/core-js/library/modules/es7.object.get-own-property-descriptors.js":{"id":378,"meta":{}},"./node_modules/core-js/library/modules/es7.object.lookup-getter.js":{"id":379,"meta":{}},"./node_modules/core-js/library/modules/es7.object.lookup-setter.js":{"id":380,"meta":{}},"./node_modules/core-js/library/modules/es7.object.values.js":{"id":381,"meta":{}},"./node_modules/core-js/library/modules/es7.observable.js":{"id":382,"meta":{}},"./node_modules/core-js/library/modules/es7.promise.finally.js":{"id":383,"meta":{}},"./node_modules/core-js/library/modules/es7.promise.try.js":{"id":384,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.define-metadata.js":{"id":385,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.delete-metadata.js":{"id":386,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.get-metadata-keys.js":{"id":387,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.get-metadata.js":{"id":388,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.get-own-metadata-keys.js":{"id":389,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.get-own-metadata.js":{"id":390,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.has-metadata.js":{"id":391,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.has-own-metadata.js":{"id":392,"meta":{}},"./node_modules/core-js/library/modules/es7.reflect.metadata.js":{"id":393,"meta":{}},"./node_modules/core-js/library/modules/es7.set.from.js":{"id":394,"meta":{}},"./node_modules/core-js/library/modules/es7.set.of.js":{"id":395,"meta":{}},"./node_modules/core-js/library/modules/es7.set.to-json.js":{"id":396,"meta":{}},"./node_modules/core-js/library/modules/es7.string.at.js":{"id":397,"meta":{}},"./node_modules/core-js/library/modules/es7.string.match-all.js":{"id":398,"meta":{}},"./node_modules/core-js/library/modules/es7.string.pad-end.js":{"id":399,"meta":{}},"./node_modules/core-js/library/modules/es7.string.pad-start.js":{"id":400,"meta":{}},"./node_modules/core-js/library/modules/es7.string.trim-left.js":{"id":401,"meta":{}},"./node_modules/core-js/library/modules/es7.string.trim-right.js":{"id":402,"meta":{}},"./node_modules/core-js/library/modules/es7.symbol.async-iterator.js":{"id":403,"meta":{}},"./node_modules/core-js/library/modules/es7.symbol.observable.js":{"id":404,"meta":{}},"./node_modules/core-js/library/modules/es7.system.global.js":{"id":405,"meta":{}},"./node_modules/core-js/library/modules/es7.weak-map.from.js":{"id":406,"meta":{}},"./node_modules/core-js/library/modules/es7.weak-map.of.js":{"id":407,"meta":{}},"./node_modules/core-js/library/modules/es7.weak-set.from.js":{"id":408,"meta":{}},"./node_modules/core-js/library/modules/es7.weak-set.of.js":{"id":409,"meta":{}},"./node_modules/core-js/library/modules/web.dom.iterable.js":{"id":410,"meta":{}},"./node_modules/core-js/library/modules/web.immediate.js":{"id":411,"meta":{}},"./node_modules/core-js/library/modules/web.timers.js":{"id":412,"meta":{}},"./node_modules/core-js/library/shim.js":{"id":413,"meta":{}},"./node_modules/css-loader/index.js!./node_modules/mocha-css/mocha.css":{"id":414,"meta":{}},"./node_modules/css-loader/lib/css-base.js":{"id":415,"meta":{}},"./node_modules/debug/src/debug.js":{"id":416,"meta":{}},"./node_modules/deep-eql/index.js":{"id":417,"meta":{}},"./node_modules/deep-eql/lib/eql.js":{"id":418,"meta":{}},"./node_modules/deep-eql/node_modules/type-detect/index.js":{"id":419,"meta":{}},"./node_modules/deep-eql/node_modules/type-detect/lib/type.js":{"id":420,"meta":{}},"./node_modules/html-entities/lib/html4-entities.js":{"id":421,"meta":{}},"./node_modules/html-entities/lib/xml-entities.js":{"id":422,"meta":{}},"./node_modules/ieee754/index.js":{"id":423,"meta":{}},"./node_modules/isarray/index.js":{"id":424,"meta":{}},"./node_modules/ms/index.js":{"id":425,"meta":{}},"./node_modules/punycode/punycode.js":{"id":426,"meta":{}},"./node_modules/querystring-es3/decode.js":{"id":427,"meta":{}},"./node_modules/querystring-es3/encode.js":{"id":428,"meta":{}},"./node_modules/querystring-es3/index.js":{"id":429,"meta":{}},"./node_modules/requires-port/index.js":{"id":430,"meta":{}},"./node_modules/setimmediate/setImmediate.js":{"id":431,"meta":{}},"./node_modules/sockjs-client/lib/event/close.js":{"id":432,"meta":{}},"./node_modules/sockjs-client/lib/event/trans-message.js":{"id":433,"meta":{}},"./node_modules/sockjs-client/lib/facade.js":{"id":434,"meta":{}},"./node_modules/sockjs-client/lib/iframe-bootstrap.js":{"id":435,"meta":{}},"./node_modules/sockjs-client/lib/info-iframe.js":{"id":436,"meta":{}},"./node_modules/sockjs-client/lib/info-receiver.js":{"id":437,"meta":{}},"./node_modules/sockjs-client/lib/main.js":{"id":438,"meta":{}},"./node_modules/sockjs-client/lib/shims.js":{"id":439,"meta":{}},"./node_modules/sockjs-client/lib/transport-list.js":{"id":440,"meta":{}},"./node_modules/sockjs-client/lib/transport/browser/websocket.js":{"id":441,"meta":{}},"./node_modules/sockjs-client/lib/transport/jsonp-polling.js":{"id":442,"meta":{}},"./node_modules/sockjs-client/lib/transport/lib/buffered-sender.js":{"id":443,"meta":{}},"./node_modules/sockjs-client/lib/transport/lib/polling.js":{"id":444,"meta":{}},"./node_modules/sockjs-client/lib/transport/receiver/eventsource.js":{"id":445,"meta":{}},"./node_modules/sockjs-client/lib/transport/receiver/htmlfile.js":{"id":446,"meta":{}},"./node_modules/sockjs-client/lib/transport/receiver/jsonp.js":{"id":447,"meta":{}},"./node_modules/sockjs-client/lib/transport/sender/jsonp.js":{"id":448,"meta":{}},"./node_modules/sockjs-client/lib/transport/sender/xhr-fake.js":{"id":449,"meta":{}},"./node_modules/sockjs-client/lib/transport/websocket.js":{"id":450,"meta":{}},"./node_modules/sockjs-client/lib/transport/xdr-polling.js":{"id":451,"meta":{}},"./node_modules/sockjs-client/lib/transport/xhr-streaming.js":{"id":452,"meta":{}},"./node_modules/sockjs-client/lib/utils/browser-crypto.js":{"id":453,"meta":{}},"./node_modules/sockjs-client/lib/utils/escape.js":{"id":454,"meta":{}},"./node_modules/sockjs-client/lib/utils/log.js":{"id":455,"meta":{}},"./node_modules/sockjs-client/lib/utils/transport.js":{"id":456,"meta":{}},"./node_modules/style-loader/fixUrls.js":{"id":457,"meta":{}},"./node_modules/timers-browserify/main.js":{"id":458,"meta":{}},"./node_modules/type-detect/lib/type.js":{"id":459,"meta":{}},"./node_modules/url-parse/node_modules/querystringify/index.js":{"id":460,"meta":{}},"./node_modules/url/util.js":{"id":461,"meta":{}},"./node_modules/vue-style-loader/lib/listToStyles.js":{"id":462,"meta":{}},"./node_modules/webpack/buildin/amd-options.js":{"id":463,"meta":{}}}}
--------------------------------------------------------------------------------
/test/helpers/Test.vue:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 |
39 |
40 |
108 |
--------------------------------------------------------------------------------
/test/helpers/index.js:
--------------------------------------------------------------------------------
1 | import camelcase from 'camelcase'
2 | import { createVM, Vue } from './utils'
3 | import { nextTick } from './wait-for-update'
4 |
5 | export function dataPropagationTest (Component) {
6 | return function () {
7 | const spy = sinon.spy()
8 | const vm = createVM(this, function (h) {
9 | return (
10 | Hello
11 | )
12 | })
13 | spy.should.have.not.been.called
14 | vm.$('.custom').should.exist
15 | vm.$('.custom').click()
16 | spy.should.have.been.calledOnce
17 | }
18 | }
19 |
20 | export function attrTest (it, base, Component, attr) {
21 | const attrs = Array.isArray(attr) ? attr : [attr]
22 |
23 | attrs.forEach(attr => {
24 | it(attr, function (done) {
25 | const vm = createVM(this, function (h) {
26 | const opts = {
27 | props: {
28 | [camelcase(attr)]: this.active
29 | }
30 | }
31 | return (
32 | {attr}
33 | )
34 | }, {
35 | data: { active: true }
36 | })
37 | vm.$(`.${base}`).should.have.class(`${base}--${attr}`)
38 | vm.active = false
39 | nextTick().then(() => {
40 | vm.$(`.${base}`).should.not.have.class(`${base}--${attr}`)
41 | vm.active = true
42 | }).then(done)
43 | })
44 | })
45 | }
46 |
47 | export {
48 | createVM,
49 | Vue,
50 | nextTick
51 | }
52 |
--------------------------------------------------------------------------------
/test/helpers/utils.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue/dist/vue.js'
2 | import Test from './Test.vue'
3 |
4 | Vue.config.productionTip = false
5 | const isKarma = !!window.__karma__
6 |
7 | export function createVM (context, template, opts = {}) {
8 | return isKarma
9 | ? createKarmaTest(context, template, opts)
10 | : createVisualTest(context, template, opts)
11 | }
12 |
13 | const emptyNodes = document.querySelectorAll('nonexistant')
14 | Vue.prototype.$$ = function $$ (selector) {
15 | const els = document.querySelectorAll(selector)
16 | const vmEls = this.$el.querySelectorAll(selector)
17 | const fn = vmEls.length
18 | ? el => vmEls.find(el)
19 | : el => this.$el === el
20 | const found = Array.from(els).filter(fn)
21 | return found.length
22 | ? found
23 | : emptyNodes
24 | }
25 |
26 | Vue.prototype.$ = function $ (selector) {
27 | const els = document.querySelectorAll(selector)
28 | const vmEl = this.$el.querySelector(selector)
29 | const fn = vmEl
30 | ? el => el === vmEl
31 | : el => el === this.$el
32 | // Allow should chaining for tests
33 | return Array.from(els).find(fn) || emptyNodes
34 | }
35 |
36 | export function createKarmaTest (context, template, opts) {
37 | const el = document.createElement('div')
38 | document.getElementById('tests').appendChild(el)
39 | const render = typeof template === 'string'
40 | ? { template: `${template}
` }
41 | : { render: template }
42 | return new Vue({
43 | el,
44 | name: 'Test',
45 | ...render,
46 | ...opts
47 | })
48 | }
49 |
50 | export function createVisualTest (context, template, opts) {
51 | let vm
52 | if (typeof template === 'string') {
53 | opts.components = opts.components || {}
54 | // Let the user define a test component
55 | if (!opts.components.Test) {
56 | opts.components.Test = Test
57 | }
58 | vm = new Vue({
59 | name: 'TestContainer',
60 | el: context.DOMElement,
61 | template: `${template}`,
62 | ...opts
63 | })
64 | } else {
65 | // TODO allow redefinition of Test component
66 | vm = new Vue({
67 | name: 'TestContainer',
68 | el: context.DOMElement,
69 | render (h) {
70 | return h(Test, {
71 | attrs: {
72 | id: context.DOMElement.id
73 | }
74 | // render the passed component with this scope
75 | }, [template.call(this, h)])
76 | },
77 | ...opts
78 | })
79 | }
80 |
81 | context.DOMElement.vm = vm
82 | return vm
83 | }
84 |
85 | export function register (name, component) {
86 | Vue.component(name, component)
87 | }
88 |
89 | export { isKarma, Vue }
90 |
--------------------------------------------------------------------------------
/test/helpers/wait-for-update.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue/dist/vue.js'
2 |
3 | // Testing helper
4 | // nextTick().then(() => {
5 | //
6 | // Automatically waits for nextTick
7 | // }).then(() => {
8 | // return a promise or value to skip the wait
9 | // })
10 | function nextTick () {
11 | const jobs = []
12 | let done
13 |
14 | const chainer = {
15 | then (cb) {
16 | jobs.push(cb)
17 | return chainer
18 | }
19 | }
20 |
21 | function shift (...args) {
22 | const job = jobs.shift()
23 | let result
24 | try {
25 | result = job(...args)
26 | } catch (e) {
27 | jobs.length = 0
28 | done(e)
29 | }
30 |
31 | // wait for nextTick
32 | if (result !== undefined) {
33 | if (result.then) {
34 | result.then(shift)
35 | } else {
36 | shift(result)
37 | }
38 | } else if (jobs.length) {
39 | requestAnimationFrame(() => Vue.nextTick(shift))
40 | }
41 | }
42 |
43 | // First time
44 | Vue.nextTick(() => {
45 | done = jobs[jobs.length - 1]
46 | if (done.toString().slice(0, 14) !== 'function (err)') {
47 | throw new Error('waitForUpdate chain is missing .then(done)')
48 | }
49 | shift()
50 | })
51 |
52 | return chainer
53 | }
54 |
55 | exports.nextTick = nextTick
56 | exports.delay = time => new Promise(resolve => setTimeout(resolve, time))
57 |
--------------------------------------------------------------------------------
/test/index.js:
--------------------------------------------------------------------------------
1 | // Polyfill fn.bind() for PhantomJS
2 | import bind from 'function-bind'
3 | /* eslint-disable no-extend-native */
4 | Function.prototype.bind = bind
5 |
6 | // Polyfill Object.assign for PhantomJS
7 | import objectAssign from 'object-assign'
8 | Object.assign = objectAssign
9 |
10 | // require all src files for coverage.
11 | // you can also change this to match only the subset of files that
12 | // you want coverage for.
13 | const srcContext = require.context('../src', true, /^\.\/(?!index(\.js)?$)/)
14 | srcContext.keys().forEach(srcContext)
15 |
16 | // Use a div to insert elements
17 | before(function () {
18 | const el = document.createElement('DIV')
19 | el.id = 'tests'
20 | document.body.appendChild(el)
21 | })
22 |
23 | // Remove every test html scenario
24 | afterEach(function () {
25 | const el = document.getElementById('tests')
26 | for (let i = 0; i < el.children.length; ++i) {
27 | el.removeChild(el.children[i])
28 | }
29 | })
30 |
31 | const specsContext = require.context('./specs', true)
32 | specsContext.keys().forEach(specsContext)
33 |
--------------------------------------------------------------------------------
/test/karma.conf.js:
--------------------------------------------------------------------------------
1 | const merge = require('webpack-merge')
2 | const baseConfig = require('../build/webpack.config.dev.js')
3 |
4 | const webpackConfig = merge(baseConfig, {
5 | // use inline sourcemap for karma-sourcemap-loader
6 | devtool: '#inline-source-map'
7 | })
8 |
9 | webpackConfig.plugins = []
10 |
11 | const vueRule = webpackConfig.module.rules.find(rule => rule.loader === 'vue-loader')
12 | vueRule.options = vueRule.options || {}
13 | vueRule.options.loaders = vueRule.options.loaders || {}
14 | vueRule.options.loaders.js = 'babel-loader'
15 |
16 | // no need for app entry during tests
17 | delete webpackConfig.entry
18 |
19 | module.exports = function (config) {
20 | config.set({
21 | // to run in additional browsers:
22 | // 1. install corresponding karma launcher
23 | // http://karma-runner.github.io/0.13/config/browsers.html
24 | // 2. add it to the `browsers` array below.
25 | browsers: ['Chrome'],
26 | frameworks: ['mocha', 'chai-dom', 'sinon-chai'],
27 | reporters: ['spec', 'coverage'],
28 | files: ['./index.js'],
29 | preprocessors: {
30 | './index.js': ['webpack', 'sourcemap']
31 | },
32 | webpack: webpackConfig,
33 | webpackMiddleware: {
34 | noInfo: true
35 | },
36 | coverageReporter: {
37 | dir: './coverage',
38 | reporters: [
39 | { type: 'lcov', subdir: '.' },
40 | { type: 'text-summary' }
41 | ]
42 | }
43 | })
44 | }
45 |
--------------------------------------------------------------------------------
/test/visual.js:
--------------------------------------------------------------------------------
1 | import 'style-loader!css-loader!mocha-css'
2 |
3 | // create a div where mocha can add its stuff
4 | const mochaDiv = document.createElement('DIV')
5 | mochaDiv.id = 'mocha'
6 | document.body.appendChild(mochaDiv)
7 |
8 | import 'mocha/mocha.js'
9 | import sinon from 'sinon'
10 | import chai from 'chai'
11 | window.mocha.setup({
12 | ui: 'bdd',
13 | slow: 750,
14 | timeout: 5000,
15 | globals: [
16 | '__VUE_DEVTOOLS_INSTANCE_MAP__',
17 | 'script',
18 | 'inject',
19 | 'originalOpenFunction'
20 | ]
21 | })
22 | window.sinon = sinon
23 | chai.use(require('chai-dom'))
24 | chai.use(require('sinon-chai'))
25 | chai.should()
26 |
27 | let vms = []
28 | let testId = 0
29 |
30 | beforeEach(function () {
31 | this.DOMElement = document.createElement('DIV')
32 | this.DOMElement.id = `test-${++testId}`
33 | document.body.appendChild(this.DOMElement)
34 | })
35 |
36 | afterEach(function () {
37 | const testReportElements = document.getElementsByClassName('test')
38 | const lastReportElement = testReportElements[testReportElements.length - 1]
39 |
40 | if (!lastReportElement) return
41 | const el = document.getElementById(this.DOMElement.id)
42 | if (el) lastReportElement.appendChild(el)
43 | // Save the vm to hide it later
44 | if (this.DOMElement.vm) vms.push(this.DOMElement.vm)
45 | })
46 |
47 | // Hide all tests at the end to prevent some weird bugs
48 | before(function () {
49 | vms = []
50 | testId = 0
51 | })
52 | after(function () {
53 | requestAnimationFrame(function () {
54 | setTimeout(function () {
55 | vms.forEach(vm => {
56 | // Hide if test passed
57 | if (!vm.$el.parentElement.classList.contains('fail')) {
58 | vm.$children[0].visible = false
59 | }
60 | })
61 | }, 100)
62 | })
63 | })
64 |
65 | // const specsContext = require.context('./specs', true)
66 | // specsContext.keys().forEach(specsContext)
67 |
68 | window.mocha.checkLeaks()
69 | window.mocha.run()
70 |
--------------------------------------------------------------------------------