From b679575e0f15d9a670c44848e8d312dfc3144109 Mon Sep 17 00:00:00 2001 From: Joe Wroten Date: Sun, 7 May 2017 11:49:12 -0400 Subject: [PATCH] First Commit with Quasar --- .babelrc | 5 ++ .editorconfig | 9 +++ .eslintignore | 3 + .eslintrc.js | 31 +++++++++ .gitignore | 12 ++++ .stylintrc | 35 +++++++++++ README.md | 19 ++++++ build/css-utils.js | 91 +++++++++++++++++++++++++++ build/env-utils.js | 13 ++++ build/hot-reload.js | 9 +++ build/script.build.js | 50 +++++++++++++++ build/script.clean.js | 6 ++ build/script.dev.js | 86 +++++++++++++++++++++++++ build/webpack.base.conf.js | 115 ++++++++++++++++++++++++++++++++++ build/webpack.dev.conf.js | 43 +++++++++++++ build/webpack.prod.conf.js | 75 ++++++++++++++++++++++ config/dev.env.js | 6 ++ config/index.js | 64 +++++++++++++++++++ config/prod.env.js | 3 + docker-compose.yml | 13 ++++ dockerfile | 15 +++++ package.json | 67 ++++++++++++++++++++ src/App.vue | 15 +++++ src/assets/quasar-logo.png | Bin 0 -> 50440 bytes src/components/Error404.vue | 58 +++++++++++++++++ src/components/Index.vue | 34 ++++++++++ src/components/Spellitem.vue | 16 +++++ src/components/Spelllist.vue | 38 +++++++++++ src/index.html | 16 +++++ src/main.js | 22 +++++++ src/router.js | 27 ++++++++ src/statics/favicon.ico | Bin 0 -> 6185 bytes src/themes/app.ios.styl | 26 ++++++++ src/themes/app.mat.styl | 26 ++++++++ src/themes/app.variables.styl | 37 +++++++++++ templates/component.vue | 14 +++++ templates/layout.vue | 55 ++++++++++++++++ templates/view.vue | 20 ++++++ 38 files changed, 1174 insertions(+) create mode 100644 .babelrc create mode 100644 .editorconfig create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .stylintrc create mode 100644 README.md create mode 100644 build/css-utils.js create mode 100644 build/env-utils.js create mode 100644 build/hot-reload.js create mode 100644 build/script.build.js create mode 100644 build/script.clean.js create mode 100644 build/script.dev.js create mode 100644 build/webpack.base.conf.js create mode 100644 build/webpack.dev.conf.js create mode 100644 build/webpack.prod.conf.js create mode 100644 config/dev.env.js create mode 100644 config/index.js create mode 100644 config/prod.env.js create mode 100644 docker-compose.yml create mode 100644 dockerfile create mode 100644 package.json create mode 100644 src/App.vue create mode 100644 src/assets/quasar-logo.png create mode 100644 src/components/Error404.vue create mode 100644 src/components/Index.vue create mode 100644 src/components/Spellitem.vue create mode 100644 src/components/Spelllist.vue create mode 100644 src/index.html create mode 100644 src/main.js create mode 100644 src/router.js create mode 100644 src/statics/favicon.ico create mode 100644 src/themes/app.ios.styl create mode 100644 src/themes/app.mat.styl create mode 100644 src/themes/app.variables.styl create mode 100644 templates/component.vue create mode 100644 templates/layout.vue create mode 100644 templates/view.vue diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..d192e91 --- /dev/null +++ b/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [["es2015", {"modules": false}], "stage-2"], + "plugins": ["transform-runtime"], + "comments": false +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9d08a1a --- /dev/null +++ b/.editorconfig @@ -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 diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..2fece73 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +build/*.js +config/*.js +dist/*.js diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..bb84162 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,31 @@ +module.exports = { + root: true, + parserOptions: { + sourceType: 'module' + }, + env: { + browser: true + }, + globals: { + 'cordova': true, + 'DEV': true, + 'PROD': true, + '__THEME': true + }, + // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style + extends: 'standard', + // required to lint *.vue files + plugins: [ + 'html' + ], + // add your custom rules here + 'rules': { + // allow paren-less arrow functions + 'arrow-parens': 0, + 'one-var': 0, + 'import/first': 0, + // allow debugger during development + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'brace-style': [2, 'stroustrup', { 'allowSingleLine': true }] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a44985 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log +npm-debug.log.* +selenium-debug.log +test/unit/coverage +test/e2e/reports +cordova/platforms +cordova/plugins +thumbs.db +!.gitkeep diff --git a/.stylintrc b/.stylintrc new file mode 100644 index 0000000..ce38d77 --- /dev/null +++ b/.stylintrc @@ -0,0 +1,35 @@ +{ + "blocks": "never", + "brackets": "never", + "colons": "never", + "colors": "always", + "commaSpace": "always", + "commentSpace": "always", + "cssLiteral": "never", + "depthLimit": false, + "duplicates": true, + "efficient": "always", + "extendPref": false, + "globalDupe": true, + "indentPref": 2, + "leadingZero": "never", + "maxErrors": false, + "maxWarnings": false, + "mixed": false, + "namingConvention": false, + "namingConventionStrict": false, + "none": "never", + "noImportant": false, + "parenSpace": "never", + "placeholder": false, + "prefixVarsWithDollar": "always", + "quotePref": "single", + "semicolons": "never", + "sortOrder": false, + "stackedProperties": "never", + "trailingWhitespace": "never", + "universal": "never", + "valid": true, + "zeroUnits": "never", + "zIndexNormalize": false +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..f7a1c4f --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# Quasar App + +> A Quasar project + +## Build Setup + +``` bash +# install dependencies +$ npm install + +# serve with hot reload at localhost:8080 +$ quasar dev + +# build for production with minification +$ quasar build + +# lint code +$ quasar lint +``` diff --git a/build/css-utils.js b/build/css-utils.js new file mode 100644 index 0000000..76717e4 --- /dev/null +++ b/build/css-utils.js @@ -0,0 +1,91 @@ +var + ExtractTextPlugin = require('extract-text-webpack-plugin'), + autoprefixer = require('autoprefixer'), + purify = require('purify-css'), + glob = require('glob'), + path = require('path'), + fs = require('fs') + +module.exports.postcss = [autoprefixer()] + +module.exports.styleLoaders = function (options) { + options = options || {} + + function generateLoaders (loaders) { + if (options.postcss) { + loaders.splice(1, 0, 'postcss') + } + + var sourceLoader = loaders.map(function (loader) { + var extraParamChar + if (/\?/.test(loader)) { + loader = loader.replace(/\?/, '-loader?') + extraParamChar = '&' + } + else { + loader = loader + '-loader' + extraParamChar = '?' + } + return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') + }).join('!') + + if (options.extract) { + return ExtractTextPlugin.extract({ + use: sourceLoader, + fallback: 'vue-style-loader' + }) + } + else { + return ['vue-style-loader', sourceLoader].join('!') + } + } + + return { + css: generateLoaders(['css']), + less: generateLoaders(['css', 'less']), + sass: generateLoaders(['css', 'sass?indentedSyntax']), + scss: generateLoaders(['css', 'sass']), + styl: generateLoaders(['css', 'stylus']), + stylus: generateLoaders(['css', 'stylus']) + } +} + +module.exports.styleRules = function (options) { + var output = [] + var loaders = exports.styleLoaders(options) + for (var extension in loaders) { + var loader = loaders[extension] + output.push({ + test: new RegExp('\\.' + extension + '$'), + loader: loader + }) + } + return output +} + +function getSize (size) { + return (size / 1024).toFixed(2) + 'kb' +} + +module.exports.purify = function(cb) { + var css = glob.sync(path.join(__dirname, '../dist/**/*.css')) + var js = glob.sync(path.join(__dirname, '../dist/**/*.js')) + + Promise.all(css.map(function (file) { + return new Promise(function (resolve) { + console.log('\n Purifying ' + path.relative(path.join(__dirname, '../dist'), file).bold + '...') + purify(js, [file], {minify: true}, function (purified) { + var oldSize = fs.statSync(file).size + fs.writeFileSync(file, purified) + var newSize = fs.statSync(file).size + + console.log( + ' * Reduced size by ' + ((1 - newSize / oldSize) * 100).toFixed(2) + '%, from ' + + getSize(oldSize) + ' to ' + getSize(newSize) + '.' + ) + resolve() + }) + }) + })) + .then(cb) +} diff --git a/build/env-utils.js b/build/env-utils.js new file mode 100644 index 0000000..fe0c4eb --- /dev/null +++ b/build/env-utils.js @@ -0,0 +1,13 @@ +var + config = require('../config'), + theme = process.argv[2] || config.defaultTheme + +module.exports = { + dev: process.env.NODE_ENV === 'development', + prod: process.env.NODE_ENV === 'production', + + platform: { + theme: theme, + cordovaAssets: './cordova/platforms/' + (theme === 'mat' ? 'android' : 'ios') + '/platform_www' + } +} diff --git a/build/hot-reload.js b/build/hot-reload.js new file mode 100644 index 0000000..18aa1e2 --- /dev/null +++ b/build/hot-reload.js @@ -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() + } +}) diff --git a/build/script.build.js b/build/script.build.js new file mode 100644 index 0000000..dcc65b8 --- /dev/null +++ b/build/script.build.js @@ -0,0 +1,50 @@ +process.env.NODE_ENV = 'production' + +require('colors') + +var + shell = require('shelljs'), + path = require('path'), + env = require('./env-utils'), + css = require('./css-utils'), + config = require('../config'), + webpack = require('webpack'), + webpackConfig = require('./webpack.prod.conf'), + targetPath = path.join(__dirname, '../dist') + +console.log(' WARNING!'.bold) +console.log(' Do NOT use VueRouter\'s "history" mode if') +console.log(' building for Cordova or Electron.\n') + +require('./script.clean.js') +console.log((' Building Quasar App with "' + env.platform.theme + '" theme...\n').bold) + +shell.mkdir('-p', targetPath) +shell.cp('-R', 'src/statics', targetPath) + +function finalize () { + console.log(( + '\n Build complete with "' + env.platform.theme.bold + '" theme in ' + + '"/dist"'.bold + ' folder.\n').cyan) + + console.log(' Built files are meant to be served over an HTTP server.'.bold) + console.log(' Opening index.html over file:// won\'t work.'.bold) +} + +webpack(webpackConfig, function (err, stats) { + if (err) throw err + process.stdout.write(stats.toString({ + colors: true, + modules: false, + children: false, + chunks: false, + chunkModules: false + }) + '\n') + + if (config.build.purifyCSS) { + css.purify(finalize) + } + else { + finalize() + } +}) diff --git a/build/script.clean.js b/build/script.clean.js new file mode 100644 index 0000000..c8158b3 --- /dev/null +++ b/build/script.clean.js @@ -0,0 +1,6 @@ +var + shell = require('shelljs'), + path = require('path') + +shell.rm('-rf', path.resolve(__dirname, '../dist')) +console.log(' Cleaned build artifacts.\n') diff --git a/build/script.dev.js b/build/script.dev.js new file mode 100644 index 0000000..058288f --- /dev/null +++ b/build/script.dev.js @@ -0,0 +1,86 @@ +process.env.NODE_ENV = 'development' + +require('colors') + +var + path = require('path'), + express = require('express'), + webpack = require('webpack'), + env = require('./env-utils'), + config = require('../config'), + opn = require('opn'), + proxyMiddleware = require('http-proxy-middleware'), + webpackConfig = require('./webpack.dev.conf'), + app = express(), + port = process.env.PORT || config.dev.port, + uri = 'http://localhost:' + port + +console.log(' Starting dev server with "' + (process.argv[2] || env.platform.theme).bold + '" theme...') +console.log(' Will listen at ' + uri.bold) +if (config.dev.openBrowser) { + console.log(' Browser will open when build is ready.\n') +} + +var compiler = webpack(webpackConfig) + +// Define HTTP proxies to your custom API backend +// https://github.com/chimurai/http-proxy-middleware +var proxyTable = config.dev.proxyTable + +var devMiddleware = require('webpack-dev-middleware')(compiler, { + publicPath: webpackConfig.output.publicPath, + quiet: true +}) + +var hotMiddleware = require('webpack-hot-middleware')(compiler, { + log: function () {} +}) + +// 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 requests like API. See /config/index.js -> dev.proxyTable +// https://github.com/chimurai/http-proxy-middleware +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 staticsPath = path.posix.join(webpackConfig.output.publicPath, 'statics/') +app.use(staticsPath, express.static('./src/statics')) + +// try to serve Cordova statics for Play App +app.use(express.static(env.platform.cordovaAssets)) + +module.exports = app.listen(port, function (err) { + if (err) { + console.log(err) + return + } + + // open browser if set so in /config/index.js + if (config.dev.openBrowser) { + devMiddleware.waitUntilValid(function () { + opn(uri) + }) + } +}) diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js new file mode 100644 index 0000000..154f98c --- /dev/null +++ b/build/webpack.base.conf.js @@ -0,0 +1,115 @@ +var + path = require('path'), + webpack = require('webpack'), + config = require('../config'), + cssUtils = require('./css-utils'), + env = require('./env-utils'), + merge = require('webpack-merge'), + projectRoot = path.resolve(__dirname, '../'), + ProgressBarPlugin = require('progress-bar-webpack-plugin'), + useCssSourceMap = + (env.dev && config.dev.cssSourceMap) || + (env.prod && config.build.productionSourceMap) + +function resolve (dir) { + return path.join(__dirname, '..', dir) +} + +module.exports = { + entry: { + app: './src/main.js' + }, + output: { + path: path.resolve(__dirname, '../dist'), + publicPath: config[env.prod ? 'build' : 'dev'].publicPath, + filename: 'js/[name].js', + chunkFilename: 'js/[id].[chunkhash].js' + }, + resolve: { + extensions: ['.js', '.vue', '.json'], + modules: [ + resolve('src'), + resolve('node_modules') + ], + alias: config.aliases + }, + module: { + rules: [ + { // eslint + enforce: 'pre', + test: /\.(vue|js)$/, + loader: 'eslint-loader', + include: projectRoot, + exclude: /node_modules/, + options: { + formatter: require('eslint-friendly-formatter') + } + }, + { + test: /\.js$/, + loader: 'babel-loader', + include: projectRoot, + exclude: /node_modules/ + }, + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + postcss: cssUtils.postcss, + loaders: merge({js: 'babel-loader'}, cssUtils.styleLoaders({ + sourceMap: useCssSourceMap, + extract: env.prod + })) + } + }, + { + test: /\.json$/, + loader: 'json-loader' + }, + { + test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: 'img/[name].[hash:7].[ext]' + } + }, + { + test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, + loader: 'url-loader', + options: { + limit: 10000, + name: 'fonts/[name].[hash:7].[ext]' + } + } + ] + }, + plugins: [ + /* + Take note! + Uncomment if you wish to load only one Moment locale: + + new webpack.ContextReplacementPlugin(/moment[\/\\]locale$/, /en/), + */ + + new webpack.DefinePlugin({ + 'process.env': config[env.prod ? 'build' : 'dev'].env, + 'DEV': env.dev, + 'PROD': env.prod, + '__THEME': '"' + env.platform.theme + '"' + }), + new webpack.LoaderOptionsPlugin({ + minimize: env.prod, + options: { + context: path.resolve(__dirname, '../src'), + postcss: cssUtils.postcss + } + }), + new ProgressBarPlugin({ + format: config.progressFormat + }) + ], + performance: { + hints: false + } +} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js new file mode 100644 index 0000000..740ed7a --- /dev/null +++ b/build/webpack.dev.conf.js @@ -0,0 +1,43 @@ +var + config = require('../config'), + webpack = require('webpack'), + merge = require('webpack-merge'), + cssUtils = require('./css-utils'), + baseWebpackConfig = require('./webpack.base.conf'), + HtmlWebpackPlugin = require('html-webpack-plugin'), + FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') + +// add hot-reload related code to entry chunks +Object.keys(baseWebpackConfig.entry).forEach(function (name) { + baseWebpackConfig.entry[name] = ['./build/hot-reload'].concat(baseWebpackConfig.entry[name]) +}) + +module.exports = merge(baseWebpackConfig, { + // eval-source-map is faster for development + devtool: '#cheap-module-eval-source-map', + devServer: { + historyApiFallback: true, + noInfo: true + }, + module: { + rules: cssUtils.styleRules({ + sourceMap: config.dev.cssSourceMap, + postcss: true + }) + }, + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + new HtmlWebpackPlugin({ + filename: 'index.html', + template: 'src/index.html', + inject: true + }), + new FriendlyErrorsPlugin({ + clearConsole: config.dev.clearConsoleOnRebuild + }) + ], + performance: { + hints: false + } +}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js new file mode 100644 index 0000000..7ab7bfd --- /dev/null +++ b/build/webpack.prod.conf.js @@ -0,0 +1,75 @@ +var + path = require('path'), + config = require('../config'), + cssUtils = require('./css-utils'), + webpack = require('webpack'), + merge = require('webpack-merge'), + baseWebpackConfig = require('./webpack.base.conf'), + ExtractTextPlugin = require('extract-text-webpack-plugin'), + HtmlWebpackPlugin = require('html-webpack-plugin'), + OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') + +module.exports = merge(baseWebpackConfig, { + module: { + rules: cssUtils.styleRules({ + sourceMap: config.build.productionSourceMap, + extract: true, + postcss: true + }) + }, + devtool: config.build.productionSourceMap ? '#source-map' : false, + plugins: [ + new webpack.optimize.UglifyJsPlugin({ + sourceMap: config.build.productionSourceMap, + minimize: true, + compress: { + warnings: false + } + }), + // Compress extracted CSS. We are using this plugin so that possible + // duplicated CSS from different components can be deduped. + new OptimizeCSSPlugin({ + cssProcessorOptions: { + safe: true + } + }), + // extract css into its own file + new ExtractTextPlugin({ + filename: '[name].[contenthash].css' + }), + new HtmlWebpackPlugin({ + filename: config.build.index, + template: 'src/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'] + }) + ] +}) diff --git a/config/dev.env.js b/config/dev.env.js new file mode 100644 index 0000000..efead7c --- /dev/null +++ b/config/dev.env.js @@ -0,0 +1,6 @@ +var merge = require('webpack-merge') +var prodEnv = require('./prod.env') + +module.exports = merge(prodEnv, { + NODE_ENV: '"development"' +}) diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..6ea72f1 --- /dev/null +++ b/config/index.js @@ -0,0 +1,64 @@ +var path = require('path') + +module.exports = { + // Webpack aliases + aliases: { + quasar: path.resolve(__dirname, '../node_modules/quasar-framework/'), + src: path.resolve(__dirname, '../src'), + assets: path.resolve(__dirname, '../src/assets'), + components: path.resolve(__dirname, '../src/components') + }, + + // Progress Bar Webpack plugin format + // https://github.com/clessg/progress-bar-webpack-plugin#options + progressFormat: ' [:bar] ' + ':percent'.bold + ' (:msg)', + + // Default theme to build with ('ios' or 'mat') + defaultTheme: 'mat', + + build: { + env: require('./prod.env'), + index: path.resolve(__dirname, '../dist/index.html'), + publicPath: '', + productionSourceMap: false, + + // Remove unused CSS + // Disable it if it has side-effects for your specific app + purifyCSS: true + }, + dev: { + env: require('./dev.env'), + cssSourceMap: true, + // auto open browser or not + openBrowser: true, + publicPath: '/', + port: 8080, + + // If for example you are using Quasar Play + // to generate a QR code then on each dev (re)compilation + // you need to avoid clearing out the console, so set this + // to "false", otherwise you can set it to "true" to always + // have only the messages regarding your last (re)compilation. + clearConsoleOnRebuild: false, + + // Proxy your API if using any. + // Also see /build/script.dev.js and search for "proxy api requests" + // https://github.com/chimurai/http-proxy-middleware + proxyTable: {} + } +} + +/* + * proxyTable example: + * + proxyTable: { + // proxy all requests starting with /api + '/api': { + target: 'https://some.address.com/api', + changeOrigin: true, + pathRewrite: { + '^/api': '' + } + } + } + */ diff --git a/config/prod.env.js b/config/prod.env.js new file mode 100644 index 0000000..773d263 --- /dev/null +++ b/config/prod.env.js @@ -0,0 +1,3 @@ +module.exports = { + NODE_ENV: '"production"' +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0e406fc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,13 @@ +version: '2' + +services: + app: + build: . + image: your-docker-org/your-app-name + command: sh + volumes: + - .:/opt/app + - /opt/app/node_modules + ports: + - 8080:8080 + tty: true diff --git a/dockerfile b/dockerfile new file mode 100644 index 0000000..19c9131 --- /dev/null +++ b/dockerfile @@ -0,0 +1,15 @@ +#change this to your own repo, should you have uploaded your image! +FROM quasarframework/client-dev:latest + +MAINTAINER Your Name + +WORKDIR /opt/app + +COPY package.json /opt/app/ +RUN npm install + +COPY . /opt/app + +EXPOSE 8080 + +CMD /bin/sh diff --git a/package.json b/package.json new file mode 100644 index 0000000..938c5c6 --- /dev/null +++ b/package.json @@ -0,0 +1,67 @@ +{ + "name": "quasar-app", + "version": "0.0.1", + "description": "A Quasar App", + "author": "Your Name", + "scripts": { + "clean": "node build/script.clean.js", + "dev": "node build/script.dev.js", + "build": "node build/script.build.js", + "lint": "eslint --ext .js,.vue src" + }, + "dependencies": { + "babel-runtime": "^6.0.0", + "fastclick": "^1.0.6", + "material-design-icons": "^3.0.1", + "moment": "^2.15.0", + "quasar-framework": "^0.13.4", + "roboto-fontface": "^0.7.0", + "vue": "^2.3.0", + "vue-router": "^2.0.0" + }, + "devDependencies": { + "autoprefixer": "^6.4.0", + "babel-core": "^6.0.0", + "babel-eslint": "^7.0.0", + "babel-loader": "^7.0.0", + "babel-plugin-transform-runtime": "^6.0.0", + "babel-preset-es2015": "^6.0.0", + "babel-preset-stage-2": "^6.0.0", + "colors": "^1.1.2", + "connect-history-api-fallback": "^1.1.0", + "css-loader": "^0.28.0", + "eslint": "^3.0.1", + "eslint-config-standard": "^10.2.1", + "eslint-friendly-formatter": "^2.0.5", + "eslint-loader": "^1.3.0", + "eslint-plugin-html": "^2.0.1", + "eslint-plugin-import": "^2.2.0", + "eslint-plugin-node": "^4.2.2", + "eslint-plugin-promise": "^3.3.0", + "eslint-plugin-standard": "^3.0.1", + "eventsource-polyfill": "^0.9.6", + "express": "^4.13.3", + "extract-text-webpack-plugin": "^2.0.0-beta.4", + "file-loader": "^0.11.1", + "friendly-errors-webpack-plugin": "^1.1.3", + "html-webpack-plugin": "^2.8.1", + "http-proxy-middleware": "^0.17.0", + "json-loader": "^0.5.4", + "opn": "^5.0.0", + "optimize-css-assets-webpack-plugin": "^1.3.1", + "postcss-loader": "^1.0.0", + "progress-bar-webpack-plugin": "^1.9.0", + "purify-css": "^1.1.9", + "shelljs": "^0.7.0", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.1", + "url-loader": "^0.5.7", + "vue-loader": "^12.0.2", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.3.0", + "webpack": "^2.2.1", + "webpack-dev-middleware": "^1.8.4", + "webpack-hot-middleware": "^2.17.0", + "webpack-merge": "^4.0.0" + } +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..326d3f9 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/src/assets/quasar-logo.png b/src/assets/quasar-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2b43fbc942e6e0a7f6ed775b39b53bba89829b49 GIT binary patch literal 50440 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 +
+
+ 404 +
+
+
+ error_outline +

Oops. Nothing here...

+

+ + + + +

+
+
+
+ + + + + diff --git a/src/components/Index.vue b/src/components/Index.vue new file mode 100644 index 0000000..b29b359 --- /dev/null +++ b/src/components/Index.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/components/Spellitem.vue b/src/components/Spellitem.vue new file mode 100644 index 0000000..e73925f --- /dev/null +++ b/src/components/Spellitem.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/src/components/Spelllist.vue b/src/components/Spelllist.vue new file mode 100644 index 0000000..016993a --- /dev/null +++ b/src/components/Spelllist.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..d79d5dd --- /dev/null +++ b/src/index.html @@ -0,0 +1,16 @@ + + + + + + + + + Quasar App + + + +
+ + + diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..857a129 --- /dev/null +++ b/src/main.js @@ -0,0 +1,22 @@ +// === DEFAULT / CUSTOM STYLE === +// WARNING! always comment out ONE of the two require() calls below. +// 1. use next line to activate CUSTOM STYLE (./src/themes) +// require(`./themes/app.${__THEME}.styl`) +// 2. or, use next line to activate DEFAULT QUASAR STYLE +require(`quasar/dist/quasar.${__THEME}.css`) +// ============================== + +import Vue from 'vue' +import Quasar from 'quasar' +import router from './router' + +Vue.use(Quasar) // Install Quasar Framework + +Quasar.start(() => { + /* eslint-disable no-new */ + new Vue({ + el: '#q-app', + router, + render: h => h(require('./App')) + }) +}) diff --git a/src/router.js b/src/router.js new file mode 100644 index 0000000..4676518 --- /dev/null +++ b/src/router.js @@ -0,0 +1,27 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' + +Vue.use(VueRouter) + +function load (component) { + return () => System.import(`components/${component}.vue`) +} + +export default new VueRouter({ + /* + * NOTE! VueRouter "history" mode DOESN'T works for Cordova builds, + * it is only to be used only for websites. + * + * If you decide to go with "history" mode, please also open /config/index.js + * and set "build.publicPath" to something other than an empty string. + * Example: '/' instead of current '' + * + * If switching back to default "hash" mode, don't forget to set the + * build publicPath back to '' so Cordova builds work again. + */ + + routes: [ + { path: '/', component: load('Index') }, // Default + { path: '*', component: load('Error404') } // Not found + ] +}) diff --git a/src/statics/favicon.ico b/src/statics/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..07cbf6423d754de23389ee0d62904b4ec7afe878 GIT binary patch literal 6185 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%0A|6kA(Y~^pbeDcO z39byKPn)ZiBvwxO(Dw{dE@BcXNb5{}Ocz~XCdTH#cykq0Nz8?h>n-JfZO-}=C{rFM zCFB%qL71AyHh|U451iOHk;&Ng3_VlqYMDnWN%uuXubyReRBg)xjZ5BA&A@>3c(#)l zQMIDkW${n+RK6npwGSSPAVYd4Rx{g#kVx*YzvH_p1Zb$g{_MF=Q=8YxptD||PcLG! z6HpS*Llem-ZNNsY^izSKnmXdc9xgKx!y!^U)eQc{7A${)W2*Fu(#|vBI~dgn+-{evsw76G@hJjt?@}*1@*8#|~m4ZG4n8 zu;BPUd|Fl~$|%((6ZgQrS-gGL<&YOVQMpL6id7nz#$t7AM}$jcn}C-EG^mBTs*2w& zAXLOO#5Zrh5hYVfCDx5%)&`H=XrKgLSWHjOvo{GMMT%2iGJKuv6mr%4+i?=4uzyLE z>Q$%r8|iN-dO09;qS|VR=@bpFiI1O3QM6Bpmv`E)L?ROq>suu@oi)C{O$2D}G28P$ z(GKP*We<1e*r54gH+t z=9`a>kH=K*v}g?`#CMD5TnThqMWnA&rJb8xM>=-1);;UvB6Wr!&>wm><{`)aWGL7; zvj<4R6MFQ>3yLfB0JVtx5CFz+x7I_ZFbV5X8N0C1dt(k_^maM zO_zR)gXVz1U-$TKblDU%yVnh?t1zh}fXEu5M@2=9k5iDBi+7-+qVXM9mn%yII*+XWalQXb`Tt=HcjrL2|FHD{ z08#-8$O+Hlu2|%Mu?Fs5E`edb|4!WZ&&1 +
+ + + + + diff --git a/templates/layout.vue b/templates/layout.vue new file mode 100644 index 0000000..66b9ae9 --- /dev/null +++ b/templates/layout.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/templates/view.vue b/templates/view.vue new file mode 100644 index 0000000..ba048e3 --- /dev/null +++ b/templates/view.vue @@ -0,0 +1,20 @@ + + + + +