mirror of
				https://github.com/KevinMidboe/vue-js-modal.git
				synced 2025-10-29 18:00:20 +00:00 
			
		
		
		
	first 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 | ||||
							
								
								
									
										2
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.eslintignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| build/*.js | ||||
| config/*.js | ||||
							
								
								
									
										31
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| module.exports = { | ||||
|   root: true, | ||||
|   fix: true, | ||||
|   parser: 'babel-eslint', | ||||
|   parserOptions: { | ||||
|     sourceType: 'module' | ||||
|   }, | ||||
|   extends: 'airbnb-base', | ||||
|   plugins: [ | ||||
|     'html' | ||||
|   ], | ||||
|   'settings': { | ||||
|     'import/resolver': { | ||||
|       'webpack': { | ||||
|         'config': 'build/webpack.base.conf.js' | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   'rules': { | ||||
|     // don't require .vue extension when importing | ||||
|     'no-new': 0, | ||||
|     'prefer-template': 0, | ||||
|     'no-unused-vars': 0, | ||||
|     'no-console': 0, | ||||
|     'import/extensions': ['error', 'always', { | ||||
|       'js': 'never', | ||||
|       'vue': 'never' | ||||
|     }], | ||||
|     'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 | ||||
|   } | ||||
| } | ||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,4 @@ | ||||
| .DS_Store | ||||
| node_modules/ | ||||
| dist/ | ||||
| npm-debug.log | ||||
							
								
								
									
										18
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| # vue-modal | ||||
|  | ||||
| > A Vue.js project | ||||
|  | ||||
| ## 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 | ||||
| ``` | ||||
|  | ||||
| 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). | ||||
							
								
								
									
										36
									
								
								build/build.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								build/build.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| // https://github.com/shelljs/shelljs | ||||
| require('./check-versions')() | ||||
| 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') | ||||
| }) | ||||
							
								
								
									
										45
									
								
								build/check-versions.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								build/check-versions.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| var semver = require('semver') | ||||
| var chalk = require('chalk') | ||||
| var packageConfig = require('../package.json') | ||||
| var exec = function (cmd) { | ||||
|   return require('child_process') | ||||
|     .execSync(cmd).toString().trim() | ||||
| } | ||||
|  | ||||
| var versionRequirements = [ | ||||
|   { | ||||
|     name: 'node', | ||||
|     currentVersion: semver.clean(process.version), | ||||
|     versionRequirement: packageConfig.engines.node | ||||
|   }, | ||||
|   { | ||||
|     name: 'npm', | ||||
|     currentVersion: exec('npm --version'), | ||||
|     versionRequirement: packageConfig.engines.npm | ||||
|   } | ||||
| ] | ||||
|  | ||||
| module.exports = function () { | ||||
|   var warnings = [] | ||||
|   for (var i = 0; i < versionRequirements.length; i++) { | ||||
|     var mod = versionRequirements[i] | ||||
|     if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { | ||||
|       warnings.push(mod.name + ': ' + | ||||
|         chalk.red(mod.currentVersion) + ' should be ' + | ||||
|         chalk.green(mod.versionRequirement) | ||||
|       ) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   if (warnings.length) { | ||||
|     console.log('') | ||||
|     console.log(chalk.yellow('To use this template, you must update following to modules:')) | ||||
|     console.log() | ||||
|     for (var i = 0; i < warnings.length; i++) { | ||||
|       var warning = warnings[i] | ||||
|       console.log('  ' + warning) | ||||
|     } | ||||
|     console.log() | ||||
|     process.exit(1) | ||||
|   } | ||||
| } | ||||
							
								
								
									
										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() | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										72
									
								
								build/dev-server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								build/dev-server.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| require('./check-versions')() | ||||
| var config = require('../config') | ||||
| if (!process.env.NODE_ENV) process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) | ||||
| var path = require('path') | ||||
| var express = require('express') | ||||
| var webpack = require('webpack') | ||||
| var opn = require('opn') | ||||
| var proxyMiddleware = require('http-proxy-middleware') | ||||
| var webpackConfig = 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.dev.assetsPublicPath, config.dev.assetsSubDirectory) | ||||
| app.use(staticPath, express.static('./static')) | ||||
|  | ||||
| module.exports = app.listen(port, function (err) { | ||||
|   if (err) { | ||||
|     console.log(err) | ||||
|     return | ||||
|   } | ||||
|   var uri = 'http://localhost:' + port | ||||
|   console.log('Listening at ' + uri + '\n') | ||||
|  | ||||
|   // when env is testing, don't need open it | ||||
|   if (process.env.NODE_ENV !== 'testing') { | ||||
|     opn(uri) | ||||
|   } | ||||
| }) | ||||
							
								
								
									
										61
									
								
								build/utils.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								build/utils.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| var path = require('path') | ||||
| var config = require('../config') | ||||
| var ExtractTextPlugin = require('extract-text-webpack-plugin') | ||||
|  | ||||
| exports.assetsPath = function (_path) { | ||||
|   var assetsSubDirectory = process.env.NODE_ENV === 'production' | ||||
|     ? config.build.assetsSubDirectory | ||||
|     : config.dev.assetsSubDirectory | ||||
|   return path.posix.join(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('!') | ||||
|  | ||||
|     // Extract CSS when that option is specified | ||||
|     // (which is the case during production build) | ||||
|     if (options.extract) { | ||||
|       return ExtractTextPlugin.extract('vue-style-loader', sourceLoader) | ||||
|     } else { | ||||
|       return ['vue-style-loader', sourceLoader].join('!') | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // http://vuejs.github.io/vue-loader/en/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 | ||||
| } | ||||
							
								
								
									
										94
									
								
								build/webpack.base.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								build/webpack.base.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| var path = require('path') | ||||
| var config = require('../config') | ||||
| var utils = require('./utils') | ||||
| var projectRoot = path.resolve(__dirname, '../') | ||||
|  | ||||
| var env = process.env.NODE_ENV | ||||
| // check env & config/index.js to decide weither to enable CSS Sourcemaps for the | ||||
| // various preprocessor loaders added to vue-loader at the end of this file | ||||
| var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap) | ||||
| var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap) | ||||
| var useCssSourceMap = cssSourceMapDev || cssSourceMapProd | ||||
|  | ||||
| module.exports = { | ||||
|   entry: { | ||||
|     app: './src/main.js' | ||||
|   }, | ||||
|   output: { | ||||
|     path: config.build.assetsRoot, | ||||
|     publicPath: process.env.NODE_ENV === 'production' ? config.build.assetsPublicPath : config.dev.assetsPublicPath, | ||||
|     filename: '[name].js' | ||||
|   }, | ||||
|   resolve: { | ||||
|     extensions: ['', '.js', '.vue'], | ||||
|     fallback: [path.join(__dirname, '../node_modules')], | ||||
|     alias: { | ||||
|       'vue$': 'vue/dist/vue', | ||||
|       '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: /\.(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({ sourceMap: useCssSourceMap }), | ||||
|     postcss: [ | ||||
|       require('autoprefixer')({ | ||||
|         browsers: ['last 2 versions'] | ||||
|       }) | ||||
|     ] | ||||
|   } | ||||
| } | ||||
							
								
								
									
										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({ sourceMap: config.dev.cssSourceMap }) | ||||
|   }, | ||||
|   // 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 | ||||
|     }) | ||||
|   ] | ||||
| }) | ||||
							
								
								
									
										98
									
								
								build/webpack.prod.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								build/webpack.prod.conf.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | ||||
| 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 = 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/en/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: 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"' | ||||
| }) | ||||
							
								
								
									
										32
									
								
								config/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								config/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | ||||
| // 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, | ||||
|     assetsSubDirectory: 'static', | ||||
|     assetsPublicPath: '/', | ||||
|     proxyTable: {}, | ||||
|     // CSS Sourcemaps off by default because relative paths are "buggy" | ||||
|     // with this option, according to the CSS-Loader README | ||||
|     // (https://github.com/webpack/css-loader#sourcemaps) | ||||
|     // In our experience, they generally work as expected, | ||||
|     // just be aware of this issue when enabling this option. | ||||
|     cssSourceMap: false | ||||
|   } | ||||
| } | ||||
							
								
								
									
										3
									
								
								config/prod.env.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								config/prod.env.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| module.exports = { | ||||
|   NODE_ENV: '"production"' | ||||
| } | ||||
							
								
								
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								index.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
|   <head> | ||||
|     <meta charset="utf-8"> | ||||
|     <title>vue-modal</title> | ||||
|   </head> | ||||
|   <body> | ||||
|     <div id="app"></div> | ||||
|     <!-- built files will be auto injected --> | ||||
|   </body> | ||||
| </html> | ||||
							
								
								
									
										59
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,59 @@ | ||||
| { | ||||
|   "name": "vue-modal", | ||||
|   "version": "1.0.0", | ||||
|   "description": "A Vue.js project", | ||||
|   "author": "euvl <yev.vlasenko@gmail.com>", | ||||
|   "private": true, | ||||
|   "scripts": { | ||||
|     "dev": "node build/dev-server.js", | ||||
|     "build": "node build/build.js", | ||||
|     "lint": "eslint --ext .js,.vue src" | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "babel-runtime": "^6.18.0", | ||||
|     "vue": "^2.0.1" | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "autoprefixer": "^6.4.0", | ||||
|     "babel-core": "^6.0.0", | ||||
|     "babel-eslint": "^7.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", | ||||
|     "babel-register": "^6.0.0", | ||||
|     "chalk": "^1.1.3", | ||||
|     "connect-history-api-fallback": "^1.1.0", | ||||
|     "css-loader": "^0.25.0", | ||||
|     "eslint": "^3.7.1", | ||||
|     "eslint-friendly-formatter": "^2.0.5", | ||||
|     "eslint-loader": "^1.5.0", | ||||
|     "eslint-plugin-html": "^1.3.0", | ||||
|     "eslint-config-airbnb-base": "^8.0.0", | ||||
|     "eslint-import-resolver-webpack": "^0.6.0", | ||||
|     "eslint-plugin-import": "^1.16.0", | ||||
|     "eventsource-polyfill": "^0.9.6", | ||||
|     "express": "^4.13.3", | ||||
|     "extract-text-webpack-plugin": "^1.0.1", | ||||
|     "file-loader": "^0.9.0", | ||||
|     "function-bind": "^1.0.2", | ||||
|     "html-webpack-plugin": "^2.8.1", | ||||
|     "http-proxy-middleware": "^0.17.2", | ||||
|     "json-loader": "^0.5.4", | ||||
|     "semver": "^5.3.0", | ||||
|     "opn": "^4.0.2", | ||||
|     "ora": "^0.3.0", | ||||
|     "shelljs": "^0.7.4", | ||||
|     "url-loader": "^0.5.7", | ||||
|     "vue-loader": "^9.4.0", | ||||
|     "vue-style-loader": "^1.0.0", | ||||
|     "webpack": "^1.13.2", | ||||
|     "webpack-dev-middleware": "^1.8.3", | ||||
|     "webpack-hot-middleware": "^2.12.2", | ||||
|     "webpack-merge": "^0.14.1" | ||||
|   }, | ||||
|   "engines": { | ||||
|     "node": ">= 4.0.0", | ||||
|     "npm": ">= 3.0.0" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										41
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,41 @@ | ||||
| <template> | ||||
|   <div id="app"> | ||||
|     <img src="./assets/logo.png"> | ||||
|     <button @click="showModal">Show modal</button> | ||||
|     <transition name="fade"> | ||||
|       <modal name="hello">Hello!</modal> | ||||
|     </transition> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| import Hello from './components/Hello'; | ||||
|  | ||||
| export default { | ||||
|   name: 'app', | ||||
|   methods: { | ||||
|     showModal() { | ||||
|       this.$modal.toggle('hello', false); | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <style> | ||||
| #app { | ||||
|   font-family: 'Avenir', Helvetica, Arial, sans-serif; | ||||
|   -webkit-font-smoothing: antialiased; | ||||
|   -moz-osx-font-smoothing: grayscale; | ||||
|   text-align: center; | ||||
|   color: #2c3e50; | ||||
|   margin-top: 60px; | ||||
| } | ||||
|  | ||||
| .fade-enter-active, .fade-leave-active { | ||||
|   transition: all .3s; | ||||
| } | ||||
|  | ||||
| .fade-enter, .fade-leave-active { | ||||
|   opacity: 0; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										144
									
								
								src/VueModal/Modal.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								src/VueModal/Modal.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | ||||
| <template> | ||||
|   <div class="vue-modal-overlay" v-if="visibleOverlay" @click.stop="toggle(false)"> | ||||
|     <transition :name="transition"> | ||||
|       <div :class="modalclass" ref="modal" :style="styles" v-show="visibleModal" @click.stop> | ||||
|         <template v-if="withTitle"> | ||||
|           <div class="modal-title"> | ||||
|             <slot name="title-left"/> | ||||
|             <slot name="title-right"/> | ||||
|           </div> | ||||
|         </template> | ||||
|         <slot/> | ||||
|       </div> | ||||
|     </transition> | ||||
|   </div> | ||||
| </template> | ||||
| <script> | ||||
|   import Vue from 'vue'; | ||||
|   import VueModal from './index'; | ||||
|  | ||||
|   const props = { | ||||
|     name: { | ||||
|       required: true, | ||||
|       type: [String, Number], | ||||
|     }, | ||||
|     withTitle: { | ||||
|       type: Boolean, | ||||
|       default: false, | ||||
|     }, | ||||
|     delay: { | ||||
|       type: Number, | ||||
|       default: 0, | ||||
|     }, | ||||
|     position: { | ||||
|       type: Array, | ||||
|     }, | ||||
|     transition: { | ||||
|       type: String, | ||||
|     }, | ||||
|     classes: { | ||||
|       type: [String, Array], | ||||
|       default: 'vue-modal', | ||||
|     }, | ||||
|     width: { | ||||
|       type: Number, | ||||
|       default: 600, | ||||
|     }, | ||||
|   }; | ||||
|  | ||||
|   export default { | ||||
|     name: 'Modal', | ||||
|     props, | ||||
|     data() { | ||||
|       return { | ||||
|         visible: false, | ||||
|         visibleModal: false, | ||||
|         visibleOverlay: false, | ||||
|       }; | ||||
|     }, | ||||
|     watch: { | ||||
|       visible(value) { | ||||
|         if (this.delay > 0) { | ||||
|           if (value) { | ||||
|             this.visibleOverlay = true; | ||||
|             setTimeout(() => { this.visibleModal = true; }, | ||||
|               this.delay); | ||||
|           } else { | ||||
|             this.visibleModal = false; | ||||
|             setTimeout(() => { this.visibleOverlay = false; }, | ||||
|               this.delay); | ||||
|           } | ||||
|         } else { | ||||
|           this.visibleOverlay = value; | ||||
|  | ||||
|           Vue.nextTick(() => { | ||||
|             this.visibleModal = value; | ||||
|           }); | ||||
|         } | ||||
|       }, | ||||
|     }, | ||||
|     created() { | ||||
|       VueModal.event.$on('toggle', (name, state) => { | ||||
|         if (name === this.name) { | ||||
|           this.toggle(!this.visible); | ||||
|         } | ||||
|       }); | ||||
|     }, | ||||
|     computed: { | ||||
|       modalclass() { | ||||
|         return ['modal', this.classes]; | ||||
|       }, | ||||
|       styles() { | ||||
|         return { | ||||
|           'margin-left': (-this.width / 2) + 'px', | ||||
|           width: this.width + 'px', | ||||
|         }; | ||||
|       }, | ||||
|     }, | ||||
|     methods: { | ||||
|       toggle(state) { | ||||
|         const before = this.visible ? 'before-close' : 'before-open'; | ||||
|         const after = this.visible ? 'opened' : 'closed'; | ||||
|  | ||||
|         this.$emit(before, this.name); | ||||
|         this.visible = !!state; | ||||
|         this.$emit(after, this.name); | ||||
|       }, | ||||
|     }, | ||||
|   }; | ||||
| </script> | ||||
| <style> | ||||
|   .vue-modal-overlay { | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     top: 0; | ||||
|     width: 100vw; | ||||
|     height: 100vh; | ||||
|     background: rgba(0, 0, 0, 0.1); | ||||
|     z-index: 999; | ||||
|   } | ||||
|  | ||||
|   .vue-modal-fade-enter-active, .vue-modal-fade-leave-active { | ||||
|     transition: all .3s; | ||||
|   } | ||||
|  | ||||
|   .vue-modal-fade-enter, .vue-modal-fade-leave-active { | ||||
|     opacity: 0; | ||||
|     transform: translateY(-20px); | ||||
|   } | ||||
|  | ||||
|   .vue-modal { | ||||
|     position: absolute; | ||||
|     background: white; | ||||
|     position: relative; | ||||
|     width: 900px; | ||||
|  | ||||
|     left: 50%; | ||||
|     top: 20%; | ||||
|  | ||||
|     box-sizing: border-box; | ||||
|     border-radius: 3px; | ||||
|     box-shadow: 0 20px 60px -2px rgba(27, 33, 58, .4); | ||||
|     padding: 5px; | ||||
|   } | ||||
| </style> | ||||
							
								
								
									
										39
									
								
								src/VueModal/index.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/VueModal/index.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| import Vue from 'vue'; | ||||
| import Modal from './Modal'; | ||||
|  | ||||
| const VueModal = { | ||||
|   event: new Vue(), | ||||
|   install(self, options = {}) { | ||||
|     if (this.installed) { | ||||
|       return console.log('Modal component is already installed.'); | ||||
|     } | ||||
|  | ||||
|     this.installed = true; | ||||
|  | ||||
|     const modal = { | ||||
|       toggle(name, state, params) { | ||||
|         const opts = typeof state === 'object' && typeof params === 'undefined' | ||||
|           ? state | ||||
|           : params; | ||||
|         VueModal.event.$emit('toggle', name, state); | ||||
|       }, | ||||
|       show(name, params = {}) { | ||||
|         VueModal.event.$emit('toggle', name, true); | ||||
|       }, | ||||
|       hide(name, params = {}) { | ||||
|         VueModal.event.$emit('toggle', name, false); | ||||
|       }, | ||||
|     }; | ||||
|  | ||||
|     Object.defineProperty(Vue.prototype, '$modal', { | ||||
|       get() { | ||||
|         return modal; | ||||
|       }, | ||||
|     }); | ||||
|  | ||||
|     Vue.component('modal', Modal); | ||||
|     return null; | ||||
|   }, | ||||
| }; | ||||
|  | ||||
| export default VueModal; | ||||
							
								
								
									
										
											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 | 
							
								
								
									
										53
									
								
								src/components/Hello.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/components/Hello.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| <template> | ||||
|   <div class="hello"> | ||||
|     <h1>{{ msg }}</h1> | ||||
|     <h2>Essential Links</h2> | ||||
|     <ul> | ||||
|       <li><a href="https://vuejs.org" target="_blank">Core Docs</a></li> | ||||
|       <li><a href="https://forum.vuejs.org" target="_blank">Forum</a></li> | ||||
|       <li><a href="https://gitter.im/vuejs/vue" target="_blank">Gitter Chat</a></li> | ||||
|       <li><a href="https://twitter.com/vuejs" target="_blank">Twitter</a></li> | ||||
|       <br> | ||||
|       <li><a href="http://vuejs-templates.github.io/webpack/" target="_blank">Docs for This Template</a></li> | ||||
|     </ul> | ||||
|     <h2>Ecosystem</h2> | ||||
|     <ul> | ||||
|       <li><a href="http://router.vuejs.org/" target="_blank">vue-router</a></li> | ||||
|       <li><a href="http://vuex.vuejs.org/" target="_blank">vuex</a></li> | ||||
|       <li><a href="http://vue-loader.vuejs.org/" target="_blank">vue-loader</a></li> | ||||
|       <li><a href="https://github.com/vuejs/awesome-vue" target="_blank">awesome-vue</a></li> | ||||
|     </ul> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| export default { | ||||
|   name: 'hello', | ||||
|   data() { | ||||
|     return { | ||||
|       msg: 'Welcome to Your Vue.js App', | ||||
|     }; | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|  | ||||
| <!-- Add "scoped" attribute to limit CSS to this component only --> | ||||
| <style scoped> | ||||
| h1, h2 { | ||||
|   font-weight: normal; | ||||
| } | ||||
|  | ||||
| ul { | ||||
|   list-style-type: none; | ||||
|   padding: 0; | ||||
| } | ||||
|  | ||||
| li { | ||||
|   display: inline-block; | ||||
|   margin: 0 10px; | ||||
| } | ||||
|  | ||||
| a { | ||||
|   color: #42b983; | ||||
| } | ||||
| </style> | ||||
							
								
								
									
										11
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								src/main.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| import Vue from 'vue'; | ||||
| import App from './App'; | ||||
| import VueModal from './VueModal/index'; | ||||
|  | ||||
| Vue.use(VueModal); | ||||
|  | ||||
| new Vue({ | ||||
|   el: '#app', | ||||
|   template: '<App/>', | ||||
|   components: { App }, | ||||
| }); | ||||
							
								
								
									
										0
									
								
								static/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								static/.gitkeep
									
									
									
									
									
										Normal file
									
								
							
		Reference in New Issue
	
	Block a user