Mostly set up
This commit is contained in:
		
							parent
							
								
									2cf9a5b16f
								
							
						
					
					
						commit
						620b4f3ddb
					
				
							
								
								
									
										2
									
								
								.browserslistrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.browserslistrc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | > 1% | ||||||
|  | last 2 versions | ||||||
							
								
								
									
										25
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								.editorconfig
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | # EditorConfig is awesome: http://EditorConfig.org | ||||||
|  | 
 | ||||||
|  | # Top-most EditorConfig file | ||||||
|  | root = true | ||||||
|  | 
 | ||||||
|  | # defaults for all files | ||||||
|  | [*] | ||||||
|  | charset = utf-8 | ||||||
|  | end_of_line = lf | ||||||
|  | indent_size = 2 | ||||||
|  | indent_style = space | ||||||
|  | insert_final_newline = true | ||||||
|  | trim_trailing_whitespace = true | ||||||
|  | 
 | ||||||
|  | # Markdown files uses two trailing spaces to indicate a <br> | ||||||
|  | [*.{md}] | ||||||
|  | trim_trailing_whitespace = false | ||||||
|  | 
 | ||||||
|  | # 4 space indentation | ||||||
|  | [*.{sass,scss,css}] | ||||||
|  | indent_size = 4 | ||||||
|  | 
 | ||||||
|  | # 2 space indentation | ||||||
|  | [*.{html,json}] | ||||||
|  | indent_size = 2 | ||||||
							
								
								
									
										188
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,188 @@ | |||||||
|  | module.exports = { | ||||||
|  |   root: true, | ||||||
|  |   parserOptions: { | ||||||
|  |     parser: 'babel-eslint', | ||||||
|  |     ecmaVersion: 8, | ||||||
|  |     sourceType: 'module' | ||||||
|  |   }, | ||||||
|  |   env: { | ||||||
|  |     browser: true, | ||||||
|  |     node: true | ||||||
|  |   }, | ||||||
|  |   globals: { | ||||||
|  |     jsdom: true, | ||||||
|  |     Promise: true, | ||||||
|  |     nw: true, | ||||||
|  |     Vue: true, | ||||||
|  |     Vuex: true, | ||||||
|  |     VueRouter: true, | ||||||
|  |     httpVueLoader: true, | ||||||
|  |     store: true, | ||||||
|  |     router: true | ||||||
|  |   }, | ||||||
|  |   plugins: [ | ||||||
|  |     'jest', | ||||||
|  |     // required to lint *.vue files
 | ||||||
|  |     'vue' | ||||||
|  |   ], | ||||||
|  |   extends: [ | ||||||
|  |     'eslint:recommended', | ||||||
|  |     'plugin:vue/recommended', | ||||||
|  |     'plugin:jest/recommended' | ||||||
|  |   ], | ||||||
|  |   rules: { | ||||||
|  |     'arrow-parens': ['off'], | ||||||
|  |     'brace-style': [ | ||||||
|  |       'error', | ||||||
|  |       '1tbs', | ||||||
|  |       { | ||||||
|  |         'allowSingleLine': true | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'comma-dangle': ['error', 'never'], | ||||||
|  |     'comma-spacing': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'before': false, | ||||||
|  |         'after': true | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'comma-style': ['error', 'last'], | ||||||
|  |     'curly': ['error'], | ||||||
|  |     // allow async-await
 | ||||||
|  |     'generator-star-spacing': ['off'], | ||||||
|  |     // 2 space indentation to match .editorconfig
 | ||||||
|  |     'indent': [ | ||||||
|  |       'error', | ||||||
|  |       2, | ||||||
|  |       { | ||||||
|  |         'SwitchCase': 1 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'keyword-spacing': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'before': true, | ||||||
|  |         'after': true | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     // allow debugger during development
 | ||||||
|  |     'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', | ||||||
|  |     'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', | ||||||
|  |     'no-multi-spaces': ['error'], | ||||||
|  |     'no-restricted-syntax': ['error', 'Property[method="true"]'], | ||||||
|  |     'no-unused-vars': ['error'], | ||||||
|  |     'no-undef': ['error'], | ||||||
|  |     // Only allow let and const, no var
 | ||||||
|  |     'no-var': ['error'], | ||||||
|  |     'object-curly-spacing': ['error', 'always'], | ||||||
|  |     'one-var': ['error', 'never'], | ||||||
|  |     'quotes': ['error', 'single'], | ||||||
|  |     'semi': ['error', 'always'], | ||||||
|  |     'space-before-blocks': ['error', 'always'], | ||||||
|  |     'space-before-function-paren': ['error', 'always'], | ||||||
|  |     'space-in-parens': ['error', 'never'], | ||||||
|  |     'space-infix-ops': ['error'], | ||||||
|  |     'spaced-comment': ['error', 'always'], | ||||||
|  |     // Vue Linter Options
 | ||||||
|  |     'vue/attribute-hyphenation': ['error', 'never'], | ||||||
|  |     'vue/attributes-order': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'order': [ | ||||||
|  |           // 'v-for item in items'
 | ||||||
|  |           'LIST_RENDERING', | ||||||
|  |           // 'v-if', 'v-else-if', 'v-else', 'v-show', 'v-cloak'
 | ||||||
|  |           'CONDITIONALS', | ||||||
|  |           // 'v-once', 'v-pre'
 | ||||||
|  |           'RENDER_MODIFIERS', | ||||||
|  |           // 'v-model', 'v-bind', ':property="foo"'
 | ||||||
|  |           'BINDING', | ||||||
|  |           // 'v-text', 'v-html'
 | ||||||
|  |           'CONTENT', | ||||||
|  |           // 'is'
 | ||||||
|  |           'DEFINITION', | ||||||
|  |           // 'id'
 | ||||||
|  |           'GLOBAL', | ||||||
|  |           // 'customProp="foo"', 'class', 'type', 'value' etc
 | ||||||
|  |           'OTHER_ATTR', | ||||||
|  |           // '@click="functionCall"', 'v-on="event"'
 | ||||||
|  |           'EVENTS', | ||||||
|  |           // 'slot', 'key', 'ref'
 | ||||||
|  |           'UNIQUE' | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/html-closing-bracket-newline': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'singleline': 'never', | ||||||
|  |         'multiline': 'always' | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/html-closing-bracket-spacing': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'startTag': 'never', | ||||||
|  |         'endTag': 'never', | ||||||
|  |         'selfClosingTag': 'always' | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/html-indent': [ | ||||||
|  |       'error', | ||||||
|  |       2, | ||||||
|  |       { | ||||||
|  |         'attribute': 1, | ||||||
|  |         'closeBracket': 0 | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/html-self-closing': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'html': { | ||||||
|  |           'void': 'always', | ||||||
|  |           'normal': 'never', | ||||||
|  |           'component': 'always' | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/max-attributes-per-line': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'singleline': 3, | ||||||
|  |         'multiline': { | ||||||
|  |           'max': 1, | ||||||
|  |           'allowFirstLine': false | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/name-property-casing': ['error', 'PascalCase'], | ||||||
|  |     'vue/order-in-components': [ | ||||||
|  |       'error', | ||||||
|  |       { | ||||||
|  |         'order': [ | ||||||
|  |           'el', | ||||||
|  |           'name', | ||||||
|  |           ['template', 'render'], | ||||||
|  |           'parent', | ||||||
|  |           'functional', | ||||||
|  |           ['delimiters', 'comments'], | ||||||
|  |           ['components', 'directives'], | ||||||
|  |           'extends', | ||||||
|  |           'mixins', | ||||||
|  |           'inheritAttrs', | ||||||
|  |           'model', | ||||||
|  |           ['props', 'propsData'], | ||||||
|  |           'data', | ||||||
|  |           'methods', | ||||||
|  |           'computed', | ||||||
|  |           'filters', | ||||||
|  |           'watch', | ||||||
|  |           'LIFECYCLE_HOOKS', | ||||||
|  |           'renderError' | ||||||
|  |         ] | ||||||
|  |       } | ||||||
|  |     ], | ||||||
|  |     'vue/prop-name-casing': ['error', 'camelCase'] | ||||||
|  |   } | ||||||
|  | }; | ||||||
							
								
								
									
										80
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,61 +1,27 @@ | |||||||
| # Logs | .DS_Store | ||||||
| logs | node_modules | ||||||
| *.log | /dist/ | ||||||
|  | /dist-vue/ | ||||||
|  | 
 | ||||||
|  | /tests/e2e/videos/ | ||||||
|  | /tests/e2e/screenshots/ | ||||||
|  | /tests/e2e/reports/ | ||||||
|  | selenium-debug.log | ||||||
|  | 
 | ||||||
|  | # local env files | ||||||
|  | .env.local | ||||||
|  | .env.*.local | ||||||
|  | 
 | ||||||
|  | # Log files | ||||||
| npm-debug.log* | npm-debug.log* | ||||||
| yarn-debug.log* | yarn-debug.log* | ||||||
| yarn-error.log* | yarn-error.log* | ||||||
| 
 | 
 | ||||||
| # Runtime data | # Editor directories and files | ||||||
| pids | .idea | ||||||
| *.pid | .vscode | ||||||
| *.seed | *.suo | ||||||
| *.pid.lock | *.ntvs* | ||||||
| 
 | *.njsproj | ||||||
| # Directory for instrumented libs generated by jscoverage/JSCover | *.sln | ||||||
| lib-cov | *.sw? | ||||||
| 
 |  | ||||||
| # Coverage directory used by tools like istanbul |  | ||||||
| coverage |  | ||||||
| 
 |  | ||||||
| # nyc test coverage |  | ||||||
| .nyc_output |  | ||||||
| 
 |  | ||||||
| # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) |  | ||||||
| .grunt |  | ||||||
| 
 |  | ||||||
| # Bower dependency directory (https://bower.io/) |  | ||||||
| bower_components |  | ||||||
| 
 |  | ||||||
| # node-waf configuration |  | ||||||
| .lock-wscript |  | ||||||
| 
 |  | ||||||
| # Compiled binary addons (https://nodejs.org/api/addons.html) |  | ||||||
| build/Release |  | ||||||
| 
 |  | ||||||
| # Dependency directories |  | ||||||
| node_modules/ |  | ||||||
| jspm_packages/ |  | ||||||
| 
 |  | ||||||
| # TypeScript v1 declaration files |  | ||||||
| typings/ |  | ||||||
| 
 |  | ||||||
| # Optional npm cache directory |  | ||||||
| .npm |  | ||||||
| 
 |  | ||||||
| # Optional eslint cache |  | ||||||
| .eslintcache |  | ||||||
| 
 |  | ||||||
| # Optional REPL history |  | ||||||
| .node_repl_history |  | ||||||
| 
 |  | ||||||
| # Output of 'npm pack' |  | ||||||
| *.tgz |  | ||||||
| 
 |  | ||||||
| # Yarn Integrity file |  | ||||||
| .yarn-integrity |  | ||||||
| 
 |  | ||||||
| # dotenv environment variables file |  | ||||||
| .env |  | ||||||
| 
 |  | ||||||
| # next.js build output |  | ||||||
| .next |  | ||||||
|  | |||||||
							
								
								
									
										43
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								README.md
									
									
									
									
									
								
							| @ -1,2 +1,45 @@ | |||||||
| # nw-vue-cli-example | # nw-vue-cli-example | ||||||
|  | 
 | ||||||
| NW.js + Vue-CLI 3 example | NW.js + Vue-CLI 3 example | ||||||
|  | 
 | ||||||
|  |  | ||||||
|  | 
 | ||||||
|  | * Vue | ||||||
|  | * Vue-DevTools | ||||||
|  | * Babel | ||||||
|  | * ESLint | ||||||
|  | * Jest | ||||||
|  | * Nightwatch (not working) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Running Locally for development | ||||||
|  | 
 | ||||||
|  | 1. `npm install` | ||||||
|  | 1. `npm start` | ||||||
|  | 1. An empty window will pop up while Webpack warm ups | ||||||
|  | 1. Once Webpack is running, refresh the window and you're golden | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Building for distribution | ||||||
|  | 
 | ||||||
|  | 1. `npm run build:clean` will delete your `./dist` and `./dist-vue` folders | ||||||
|  | 1. `npm run build:vue` will build just your Vue app for distribution (`./dist-vue`) | ||||||
|  | 1. `npm run build:nw` will build just your NW.js app (`./dist`) | ||||||
|  | 1. `npm run build` is your all-in-one command. It will clean out the old dist folders and build your Vue and NW.js app | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # **IMPORTANT NOTE ABOUT BUILDS!!!** | ||||||
|  | 
 | ||||||
|  | They take a long time. If you do `npm run build` expect it to take 10-15 minutes. This can be adjusted by changing the build params in the `package.json`. The more platforms and build types, the longer it takes. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ## Automated quality enforcment | ||||||
|  | 
 | ||||||
|  | 1. **Linting:** `npm run lint` - Uses rules in `./eslint.json` | ||||||
|  | 1. **Unit tests:** `npm run test:unit` - [Jest](https://jestjs.io). | ||||||
|  | 1. **End-to-end:** `npm run test:e2e` - Accepting PR to make tests run in NW.js. - [Nightwatch](https://nightwatchjs.org). | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | ### Customize configuration | ||||||
|  | 
 | ||||||
|  | See [Vue-CLI documentation](https://cli.vuejs.org/config). | ||||||
|  | |||||||
							
								
								
									
										5
									
								
								babel.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								babel.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | module.exports = { | ||||||
|  |   presets: [ | ||||||
|  |     '@vue/app' | ||||||
|  |   ] | ||||||
|  | }; | ||||||
							
								
								
									
										30
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								jest.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | module.exports = { | ||||||
|  |   moduleFileExtensions: [ | ||||||
|  |     'js', | ||||||
|  |     'jsx', | ||||||
|  |     'json', | ||||||
|  |     'vue' | ||||||
|  |   ], | ||||||
|  |   transform: { | ||||||
|  |     '^.+\\.vue$': 'vue-jest', | ||||||
|  |     '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', | ||||||
|  |     '^.+\\.jsx?$': 'babel-jest' | ||||||
|  |   }, | ||||||
|  |   transformIgnorePatterns: [ | ||||||
|  |     '/node_modules/' | ||||||
|  |   ], | ||||||
|  |   moduleNameMapper: { | ||||||
|  |     '^@/(.*)$': '<rootDir>/src/$1' | ||||||
|  |   }, | ||||||
|  |   snapshotSerializers: [ | ||||||
|  |     'jest-serializer-vue' | ||||||
|  |   ], | ||||||
|  |   testMatch: [ | ||||||
|  |     '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' | ||||||
|  |   ], | ||||||
|  |   testURL: 'http://localhost/', | ||||||
|  |   watchPlugins: [ | ||||||
|  |     'jest-watch-typeahead/filename', | ||||||
|  |     'jest-watch-typeahead/testname' | ||||||
|  |   ] | ||||||
|  | }; | ||||||
							
								
								
									
										21
									
								
								nightwatch.conf.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								nightwatch.conf.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | // eslint-disable-next-line no-unused-vars
 | ||||||
|  | let nwBinary = 'nwjs/nw.exe'; | ||||||
|  | let driver = 'nwjs/chromedriver.exe'; | ||||||
|  | 
 | ||||||
|  | if (process.platform === 'linux') { | ||||||
|  |   nwBinary = 'nwjs/nw'; | ||||||
|  |   driver = 'nwjs/chromedriver'; | ||||||
|  | } | ||||||
|  | if (process.platform === 'darwin') { | ||||||
|  |   nwBinary = 'nwjs.app/contents/MacOS/nwjs'; | ||||||
|  |   driver = 'chromedriver'; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | nwBinary = './node_modules/nw/' + nwBinary; | ||||||
|  | driver = './node_modules/nw/' + driver; | ||||||
|  | 
 | ||||||
|  | module.exports = (function (settings) { | ||||||
|  |   settings.webdriver.server_path = driver; | ||||||
|  |   settings.selenium.cli_args['webdriver.chrome.driver'] = driver; | ||||||
|  |   return settings; | ||||||
|  | })(require('./nightwatch.json')); | ||||||
							
								
								
									
										2
									
								
								nightwatch.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								nightwatch.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,2 @@ | |||||||
|  | { | ||||||
|  | } | ||||||
							
								
								
									
										16552
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										16552
									
								
								package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										113
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,113 @@ | |||||||
|  | { | ||||||
|  |   "name": "nw-vue", | ||||||
|  |   "version": "1.0.0", | ||||||
|  |   "main": "http://localhost:8964", | ||||||
|  |   "node-remote": "http://localhost:8964", | ||||||
|  |   "node-main": "", | ||||||
|  |   "window": { | ||||||
|  |     "width": 960, | ||||||
|  |     "height": 600, | ||||||
|  |     "min_width": 700, | ||||||
|  |     "min_height": 500, | ||||||
|  |     "icon": "src/assets/vue.png" | ||||||
|  |   }, | ||||||
|  |   "private": true, | ||||||
|  |   "scripts": { | ||||||
|  |     "start": "concurrently \"npm run serve\" \"nw .\"", | ||||||
|  |     "serve": "vue-cli-service serve --port=8964", | ||||||
|  |     "build": "npm run build:clean && npm run build:vue && npm run build:nw", | ||||||
|  |     "build:clean": "rimraf ./dist-vue ./dist", | ||||||
|  |     "build:vue": "vue-cli-service build --modern --dest ./dist-vue", | ||||||
|  |     "build:nw": "build --concurrent --tasks win-x86 --mirror https://dl.nwjs.io/ .", | ||||||
|  |     "build:nw2": "build --concurrent --tasks win-x86,linux-x86,linux-x64,mac-x64 --mirror https://dl.nwjs.io/ .", | ||||||
|  |     "run:win": "dist\\nw-vue-1.0.0-win-x86\\nw-vue.exe", | ||||||
|  |     "lint": "vue-cli-service lint --no-fix", | ||||||
|  |     "fix": "vue-cli-service lint --fix", | ||||||
|  |     "test:e2e": "vue-cli-service test:e2e", | ||||||
|  |     "test:unit": "vue-cli-service test:unit" | ||||||
|  |   }, | ||||||
|  |   "dependencies": { | ||||||
|  |     "express": "^4.17.1" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@vue/cli-plugin-babel": "^3.9.0", | ||||||
|  |     "@vue/cli-plugin-e2e-nightwatch": "^3.9.0", | ||||||
|  |     "@vue/cli-plugin-eslint": "^3.9.0", | ||||||
|  |     "@vue/cli-plugin-unit-jest": "^3.9.0", | ||||||
|  |     "@vue/cli-service": "^3.9.0", | ||||||
|  |     "@vue/test-utils": "1.0.0-beta.29", | ||||||
|  |     "babel-core": "7.0.0-bridge.0", | ||||||
|  |     "babel-eslint": "^10.0.1", | ||||||
|  |     "babel-jest": "^23.6.0", | ||||||
|  |     "concurrently": "^4.1.1", | ||||||
|  |     "core-js": "^2.6.5", | ||||||
|  |     "eslint": "^5.16.0", | ||||||
|  |     "eslint-plugin-jest": "^22.7.2", | ||||||
|  |     "eslint-plugin-vue": "^5.0.0", | ||||||
|  |     "nw": "0.39.2-sdk", | ||||||
|  |     "nw-vue-devtools": "^1.3.0", | ||||||
|  |     "nwjs-builder-phoenix": "^1.15.0", | ||||||
|  |     "nwjs-types": "^1.0.0", | ||||||
|  |     "rimraf": "^2.6.3", | ||||||
|  |     "vue": "^2.6.10", | ||||||
|  |     "vue-template-compiler": "^2.6.10" | ||||||
|  |   }, | ||||||
|  |   "chromium-args": "--load-extension='./node_modules/nw-vue-devtools/extension'", | ||||||
|  |   "build": { | ||||||
|  |     "nwVersion": "v0.39.2", | ||||||
|  |     "nwFlavor": "normal", | ||||||
|  |     "targets": [ | ||||||
|  |       "zip", | ||||||
|  |       "nsis7z" | ||||||
|  |     ], | ||||||
|  |     "files": [ | ||||||
|  |       "**/*" | ||||||
|  |     ], | ||||||
|  |     "excludes": [ | ||||||
|  |       "e2e/**/*", | ||||||
|  |       "src/**/*", | ||||||
|  |       "tests/**/*", | ||||||
|  |       "public/**/*" | ||||||
|  |       ".browserslistrc", | ||||||
|  |       ".eslintrc", | ||||||
|  |       ".gitignore", | ||||||
|  |       ".editorconfig", | ||||||
|  |       "babel.config.js", | ||||||
|  |       "cypress.json", | ||||||
|  |       "jest.config.js", | ||||||
|  |       "nightwatch.conf.js", | ||||||
|  |       "nightwatch.json", | ||||||
|  |       "package-lock.json", | ||||||
|  |       "screenshot.png", | ||||||
|  |       "selenium-debug.log", | ||||||
|  |       "postcss.config.js", | ||||||
|  |       "vue.config.js" | ||||||
|  |     ], | ||||||
|  |     "strippedProperties": [ | ||||||
|  |       "chromium-args", | ||||||
|  |       "scripts", | ||||||
|  |       "devDependencies", | ||||||
|  |       "build" | ||||||
|  |     ], | ||||||
|  |     "overriddenProperties": { | ||||||
|  |       "main": "http://localhost:8965", | ||||||
|  |       "node-remote": "http://localhost:8965", | ||||||
|  |       "node-main": "server.js" | ||||||
|  |     }, | ||||||
|  |     "win": { | ||||||
|  |       "icon": "public/icon.ico" | ||||||
|  |     }, | ||||||
|  |     "mac": { | ||||||
|  |       "icon": "public/icon.icns" | ||||||
|  |     }, | ||||||
|  |     "nsis": { | ||||||
|  |       "icon": "public/icon.ico", | ||||||
|  |       "unIcon": "public/icon.ico", | ||||||
|  |       "languages": [ | ||||||
|  |         "English" | ||||||
|  |       ], | ||||||
|  |       "diffUpdaters": false, | ||||||
|  |       "hashCalculation": true | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										5
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								postcss.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | module.exports = { | ||||||
|  |   plugins: { | ||||||
|  |     autoprefixer: {} | ||||||
|  |   } | ||||||
|  | }; | ||||||
							
								
								
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 4.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/icon.icns
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/icon.icns
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								public/icon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/icon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 31 KiB | 
							
								
								
									
										
											BIN
										
									
								
								public/icon.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/icon.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 3.4 KiB | 
							
								
								
									
										14
									
								
								public/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								public/index.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html lang="en"> | ||||||
|  |   <head> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||||
|  |     <meta name="viewport" content="width=device-width,initial-scale=1.0"> | ||||||
|  |     <link rel="icon" href="<%= BASE_URL %>favicon.ico"> | ||||||
|  |     <title>NwVue</title> | ||||||
|  |   </head> | ||||||
|  |   <body> | ||||||
|  |     <div id="app"></div> | ||||||
|  |     <!-- built files will be auto injected --> | ||||||
|  |   </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										
											BIN
										
									
								
								screenshot.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								screenshot.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 46 KiB | 
							
								
								
									
										4
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								server.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,4 @@ | |||||||
|  | const express = require('express'); | ||||||
|  | const app = express(); | ||||||
|  | app.use(express.static('./dist-vue')); | ||||||
|  | app.listen(8965); | ||||||
							
								
								
									
										41
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/App.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | |||||||
|  | <template> | ||||||
|  |   <div id="app"> | ||||||
|  |     <img | ||||||
|  |       src="@/assets/vue.png" | ||||||
|  |       alt="Vue.js logo" | ||||||
|  |       title="Vue.js" | ||||||
|  |       class="logo" | ||||||
|  |     /> | ||||||
|  |     <img | ||||||
|  |       src="@/assets/nw.png" | ||||||
|  |       alt="NW.js logo" | ||||||
|  |       title="NW.js" | ||||||
|  |       class="logo" | ||||||
|  |     /> | ||||||
|  |     <HelloWorld msg="Welcome to your Vue.js Desktop App in NW.js!" /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import HelloWorld from '@/components/HelloWorld.vue'; | ||||||
|  | 
 | ||||||
|  | export default { | ||||||
|  |   name: 'App', | ||||||
|  |   components: { | ||||||
|  |     HelloWorld | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style> | ||||||
|  | #app { | ||||||
|  |   margin-top: 60px; | ||||||
|  |   color: #2C3E50; | ||||||
|  |   font-family: 'Avenir', sans-serif; | ||||||
|  |   text-align: center; | ||||||
|  | } | ||||||
|  | .logo { | ||||||
|  |   max-height: 140px; | ||||||
|  |   margin: 0px 10px; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										
											BIN
										
									
								
								src/assets/nw.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/nw.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 104 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/assets/vue.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								src/assets/vue.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 6.7 KiB | 
							
								
								
									
										183
									
								
								src/components/HelloWorld.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										183
									
								
								src/components/HelloWorld.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,183 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="hello"> | ||||||
|  |     <h1>{{ msg }}</h1> | ||||||
|  |     <h3 data-test="versions"> | ||||||
|  |       You are using | ||||||
|  |       Vue.js (v{{ vueVersion }}), | ||||||
|  |       NW.js (v{{ versions.nw }}-{{ versions['nw-flavor'] }}), | ||||||
|  |       Node.js (v{{ versions.node }}), | ||||||
|  |       and | ||||||
|  |       Chromium (v{{ versions.chromium }}). | ||||||
|  |     </h3> | ||||||
|  | 
 | ||||||
|  |     <button v-if="devMode" @click="toggleDevTools"> | ||||||
|  |       <template v-if="showDevTools"> | ||||||
|  |         Show | ||||||
|  |       </template> | ||||||
|  |       <template v-else> | ||||||
|  |         Hide | ||||||
|  |       </template> | ||||||
|  |       Developer Tools | ||||||
|  |     </button> | ||||||
|  | 
 | ||||||
|  |     <p>You can use the resources below to find more information around building your Vue App.</p> | ||||||
|  |     <LinkList :links="welcomeLinks" /> | ||||||
|  | 
 | ||||||
|  |     <h3>Installed CLI Plugins</h3> | ||||||
|  |     <LinkList :links="pluginLinks" /> | ||||||
|  | 
 | ||||||
|  |     <h3>Essential Links</h3> | ||||||
|  |     <LinkList :links="essentialLinks" /> | ||||||
|  | 
 | ||||||
|  |     <h3>Ecosystem</h3> | ||||||
|  |     <LinkList :links="ecosystemLinks" /> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | import Vue from 'vue'; | ||||||
|  | 
 | ||||||
|  | import LinkList from '@/components/LinkList.vue'; | ||||||
|  | 
 | ||||||
|  | export default { | ||||||
|  |   name: 'HelloWorld', | ||||||
|  |   components: { | ||||||
|  |     LinkList | ||||||
|  |   }, | ||||||
|  |   props: { | ||||||
|  |     msg: { | ||||||
|  |       type: String, | ||||||
|  |       default: 'Welcome to your Vue Desktop App in NW.js!' | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   data: function () { | ||||||
|  |     return { | ||||||
|  |       showDevTools: true, | ||||||
|  |       welcomeLinks: [ | ||||||
|  |         { | ||||||
|  |           name: 'nw-vue-cli-example', | ||||||
|  |           url: 'https://github.com/nwutils/nw-vue-cli-example' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'NW.js', | ||||||
|  |           url: 'https://nwjs.io' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'nw-vue-devtools', | ||||||
|  |           url: 'https://github.com/nwutils/nw-vue-devtools' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'nwjs-builder-phoenix', | ||||||
|  |           url: 'https://github.com/evshiron/nwjs-builder-phoenix' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'vue-cli', | ||||||
|  |           url: 'https://cli.vuejs.org' | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       pluginLinks: [ | ||||||
|  |         { | ||||||
|  |           name: 'babel', | ||||||
|  |           url: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'eslint', | ||||||
|  |           url: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'unit-jest', | ||||||
|  |           url: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-jest' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'e2e-cypress', | ||||||
|  |           url: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-e2e-cypress' | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       essentialLinks: [ | ||||||
|  |         { | ||||||
|  |           name: 'Core Docs', | ||||||
|  |           url: 'https://vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'Forum', | ||||||
|  |           url: 'https://forum.vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'Community Chat', | ||||||
|  |           url: 'https://chat.vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'Twitter', | ||||||
|  |           url: 'https://twitter.com/vuejs' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'News', | ||||||
|  |           url: 'https://news.vuejs.org' | ||||||
|  |         } | ||||||
|  |       ], | ||||||
|  |       ecosystemLinks: [ | ||||||
|  |         { | ||||||
|  |           name: 'vue-router', | ||||||
|  |           url: 'https://router.vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'vuex', | ||||||
|  |           url: 'https://vuex.vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'vue-devtools', | ||||||
|  |           url: 'https://github.com/vuejs/vue-devtools#vue-devtools' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'vue-loader', | ||||||
|  |           url: 'https://vue-loader.vuejs.org' | ||||||
|  |         }, | ||||||
|  |         { | ||||||
|  |           name: 'awesome-vue', | ||||||
|  |           url: 'https://github.com/vuejs/awesome-vue' | ||||||
|  |         } | ||||||
|  |       ] | ||||||
|  |     }; | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     toggleDevTools: function () { | ||||||
|  |       if (this.showDevTools) { | ||||||
|  |         nw.Window.get().showDevTools(); | ||||||
|  |       } else { | ||||||
|  |         nw.Window.get().closeDevTools(); | ||||||
|  |       } | ||||||
|  |       this.showDevTools = !this.showDevTools; | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   computed: { | ||||||
|  |     devMode: function () { | ||||||
|  |       return process.env.NODE_ENV === 'development'; | ||||||
|  |     }, | ||||||
|  |     versions: function () { | ||||||
|  |       return window.process.versions; | ||||||
|  |     }, | ||||||
|  |     vueVersion: function () { | ||||||
|  |       return Vue.version; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <!-- Add "scoped" attribute to limit CSS to this component only --> | ||||||
|  | <style scoped> | ||||||
|  | h3 { | ||||||
|  |   margin: 40px 0px 0px; | ||||||
|  | } | ||||||
|  | button { | ||||||
|  |   background: linear-gradient(0deg, #2EB277, #65E6AC); | ||||||
|  |   border-width: 3.4px; | ||||||
|  |   border-color: #35495E; | ||||||
|  |   border-radius: 8px; | ||||||
|  |   margin: 22px 0px 6px 0px; | ||||||
|  |   padding: 11px 17px; | ||||||
|  |   color: #050709; | ||||||
|  |   font-family: 'Trebuchet MS', Verdana, sans-serif; | ||||||
|  |   font-size: 19px; | ||||||
|  |   font-weight: bold; | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										64
									
								
								src/components/LinkList.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								src/components/LinkList.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,64 @@ | |||||||
|  | <template> | ||||||
|  |   <ul v-if="links"> | ||||||
|  |     <li | ||||||
|  |       v-for="(link, linkIndex) in links" | ||||||
|  |       :title="link.url.replace('https://', '')" | ||||||
|  |       :key="'eco' + linkIndex" | ||||||
|  |     > | ||||||
|  |       <a | ||||||
|  |         href="#" | ||||||
|  |         @click.prevent="open(link.url)" | ||||||
|  |       > | ||||||
|  |         {{ link.name }} | ||||||
|  |       </a> | ||||||
|  |     </li> | ||||||
|  |   </ul> | ||||||
|  | </template> | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | export default { | ||||||
|  |   name: 'LinkList', | ||||||
|  |   props: { | ||||||
|  |     links: { | ||||||
|  |       type: Array, | ||||||
|  |       required: false, | ||||||
|  |       default: null, | ||||||
|  |       validator: function (links) { | ||||||
|  |         let valid = true; | ||||||
|  |         links.forEach(function (link) { | ||||||
|  |           if ( | ||||||
|  |             !link.name || | ||||||
|  |             !link.url || | ||||||
|  |             !link.name.length || | ||||||
|  |             !link.url.length || | ||||||
|  |             typeof(link.name) !== 'string' || | ||||||
|  |             typeof(link.url) !== 'string' | ||||||
|  |           ) { | ||||||
|  |             valid = false; | ||||||
|  |           } | ||||||
|  |         }); | ||||||
|  |         return valid; | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   methods: { | ||||||
|  |     open: function (url) { | ||||||
|  |       nw.Shell.openExternal(url); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <style scoped> | ||||||
|  | ul { | ||||||
|  |   padding: 0px; | ||||||
|  |   list-style-type: none; | ||||||
|  | } | ||||||
|  | li { | ||||||
|  |   display: inline-block; | ||||||
|  |   margin: 0px 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.vue'; | ||||||
|  | 
 | ||||||
|  | Vue.config.productionTip = false; | ||||||
|  | 
 | ||||||
|  | // eslint-ignore-next-line no-unused-vars
 | ||||||
|  | const app = new Vue({ | ||||||
|  |   render: function (hyperscript) { | ||||||
|  |     return hyperscript(App); | ||||||
|  |   } | ||||||
|  | }).$mount('#app'); | ||||||
							
								
								
									
										25
									
								
								tests/e2e/custom-assertions/elementCount.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								tests/e2e/custom-assertions/elementCount.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | // A custom Nightwatch assertion.
 | ||||||
|  | // The assertion name is the filename.
 | ||||||
|  | // Example usage:
 | ||||||
|  | //
 | ||||||
|  | //   browser.assert.elementCount(selector, count)
 | ||||||
|  | //
 | ||||||
|  | // For more information on custom assertions see:
 | ||||||
|  | // http://nightwatchjs.org/guide#writing-custom-assertions
 | ||||||
|  | 
 | ||||||
|  | exports.assertion = function elementCount (selector, count) { | ||||||
|  |   this.message = 'Testing if element "' + selector + '" has count: ' + count; | ||||||
|  |   this.expected = count; | ||||||
|  |   this.pass = (value) => { | ||||||
|  |     return value === count; | ||||||
|  |   }; | ||||||
|  |   this.value = (result) => { | ||||||
|  |     return result.value; | ||||||
|  |   }; | ||||||
|  |   function evaluator (_selector) { | ||||||
|  |     return document.querySelectorAll(_selector).length; | ||||||
|  |   } | ||||||
|  |   this.command = (cb) => { | ||||||
|  |     return this.api.execute(evaluator, [selector], cb); | ||||||
|  |   }; | ||||||
|  | }; | ||||||
							
								
								
									
										15
									
								
								tests/e2e/specs/test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/e2e/specs/test.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | // For authoring Nightwatch tests, see
 | ||||||
|  | // http://nightwatchjs.org/guide#usage
 | ||||||
|  | 
 | ||||||
|  | module.exports = { | ||||||
|  |   'default e2e tests': (browser) => { | ||||||
|  |     browser | ||||||
|  |       .url(process.env.VUE_DEV_SERVER_URL) | ||||||
|  |       .waitForElementVisible('#app', 5000) | ||||||
|  |       .assert.elementPresent('.hello') | ||||||
|  |       .assert.containsText('h1', 'Welcome to your Vue.js Desktop App in NW.js!') | ||||||
|  |       .assert.containsText('[data-test="versions]"', 'You are using Vue.js (v2.6.10), NW.js (v0.39.2-sdk), Node.js (v12.4.0), and Chromium (v75.0.3770.100).') | ||||||
|  |       .assert.elementCount('img', 2) | ||||||
|  |       .end(); | ||||||
|  |   } | ||||||
|  | }; | ||||||
							
								
								
									
										5
									
								
								tests/unit/.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/unit/.eslintrc.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | module.exports = { | ||||||
|  |   env: { | ||||||
|  |     jest: true | ||||||
|  |   } | ||||||
|  | }; | ||||||
							
								
								
									
										12
									
								
								tests/unit/example.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/unit/example.spec.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | import { shallowMount } from '@vue/test-utils'; | ||||||
|  | import HelloWorld from '@/components/HelloWorld.vue'; | ||||||
|  | 
 | ||||||
|  | describe('HelloWorld.vue', () => { | ||||||
|  |   it('renders props.msg when passed', () => { | ||||||
|  |     const msg = 'new message'; | ||||||
|  |     const wrapper = shallowMount(HelloWorld, { | ||||||
|  |       propsData: { msg } | ||||||
|  |     }); | ||||||
|  |     expect(wrapper.text()).toMatch(msg); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
							
								
								
									
										3
									
								
								vue.config.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								vue.config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | module.exports = { | ||||||
|  |   lintOnSave: false | ||||||
|  | }; | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user