├── static └── .gitkeep ├── .eslintignore ├── test ├── unit │ ├── setup.js │ ├── .eslintrc │ ├── xhr-mock.js │ ├── jest.conf.js │ └── specs │ │ └── dwv.spec.js └── e2e │ ├── specs │ └── test.js │ ├── custom-assertions │ └── elementCount.js │ ├── nightwatch.conf.js │ └── runner.js ├── config ├── prod.env.js ├── test.env.js ├── dev.env.js └── index.js ├── src ├── assets │ └── logo.png ├── main.js ├── App.vue └── components │ └── dwv.vue ├── .editorconfig ├── .gitignore ├── .postcssrc.js ├── index.html ├── .babelrc ├── .eslintrc.js ├── resources └── scripts │ └── update-gh-pages.sh ├── README.md ├── .travis.yml └── package.json /static/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /config/ 3 | /dist/ 4 | /*.js 5 | /test/unit/coverage/ 6 | -------------------------------------------------------------------------------- /test/unit/setup.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | Vue.config.productionTip = false 4 | -------------------------------------------------------------------------------- /config/prod.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | module.exports = { 3 | NODE_ENV: '"production"' 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bianliuzhu/DicomViewer/HEAD/src/assets/logo.png -------------------------------------------------------------------------------- /test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "jest": true 4 | }, 5 | "globals": { 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /config/test.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const devEnv = require('./dev.env') 4 | 5 | module.exports = merge(devEnv, { 6 | NODE_ENV: '"testing"' 7 | }) 8 | -------------------------------------------------------------------------------- /config/dev.env.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | const merge = require('webpack-merge') 3 | const prodEnv = require('./prod.env') 4 | 5 | module.exports = merge(prodEnv, { 6 | NODE_ENV: '"development"' 7 | }) 8 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /test/unit/xhr-mock.js: -------------------------------------------------------------------------------- 1 | const xhrMockClass = () => ({ 2 | open : jest.fn() 3 | , send : jest.fn() 4 | , setRequestHeader: jest.fn() 5 | }) 6 | 7 | window.XMLHttpRequest = jest.fn().mockImplementation(xhrMockClass) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | /dist/ 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | /test/unit/coverage/ 8 | /test/e2e/reports/ 9 | selenium-debug.log 10 | 11 | # Editor directories and files 12 | .idea 13 | .vscode 14 | *.suo 15 | *.ntvs* 16 | *.njsproj 17 | *.sln 18 | -------------------------------------------------------------------------------- /.postcssrc.js: -------------------------------------------------------------------------------- 1 | // https://github.com/michael-ciniawsky/postcss-load-config 2 | 3 | module.exports = { 4 | "plugins": { 5 | "postcss-import": {}, 6 | "postcss-url": {}, 7 | // to edit target browsers: use "browserslist" field in package.json 8 | "autoprefixer": {} 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | dwv-vue 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // 使用“导入”命令加载Vue构建版本 2 | // (仅运行时或独立)已经在webpack.base中设置。配置一个别名。 3 | import Vue from 'vue' 4 | import App from './App' 5 | 6 | import 'vue-material/dist/vue-material.min.css' 7 | import 'vue-material/dist/theme/default.css' 8 | 9 | Vue.config.productionTip = false 10 | 11 | /* eslint-disable no-new */ 12 | new Vue({ 13 | el: '#app', 14 | components: { App }, 15 | template: '' 16 | }) 17 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { 4 | "modules": false, 5 | "targets": { 6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] 7 | } 8 | }], 9 | "stage-2" 10 | ], 11 | "plugins": ["transform-vue-jsx", "transform-runtime"], 12 | "env": { 13 | "test": { 14 | "presets": ["env", "stage-2"], 15 | "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 17 | 18 | 27 | -------------------------------------------------------------------------------- /test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#app', 5000) 14 | .assert.elementPresent('.legend') 15 | .assert.containsText('.legend', 'Powered by dwv') 16 | .assert.elementCount('.layerContainer', 1) 17 | .assert.elementCount('.imageLayer', 1) 18 | .end() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /test/unit/jest.conf.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | module.exports = { 4 | rootDir: path.resolve(__dirname, '../../'), 5 | moduleFileExtensions: [ 6 | 'js', 7 | 'json', 8 | 'vue' 9 | ], 10 | moduleNameMapper: { 11 | '^@/(.*)$': '/src/$1' 12 | }, 13 | transform: { 14 | '^.+\\.js$': '/node_modules/babel-jest', 15 | '.*\\.(vue)$': '/node_modules/vue-jest' 16 | }, 17 | testPathIgnorePatterns: [ 18 | '/test/e2e' 19 | ], 20 | snapshotSerializers: ['/node_modules/jest-serializer-vue'], 21 | setupFiles: ['/test/unit/setup'], 22 | coverageDirectory: '/test/unit/coverage', 23 | collectCoverageFrom: [ 24 | 'src/**/*.{js,vue}', 25 | '!src/main.js', 26 | '!**/node_modules/**' 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /test/unit/specs/dwv.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import '../xhr-mock.js' 3 | import dwv from '@/components/dwv' 4 | 5 | describe('dwv.vue', () => { 6 | // Inspect the component instance on mount 7 | it('sets an onClick hook when created', () => { 8 | const vm = new Vue(dwv).$mount() 9 | expect(typeof vm.onClick).toBe('function') 10 | }) 11 | 12 | // Inspect the component instance on mount 13 | it('correctly sets the legend when created', () => { 14 | const vm = new Vue(dwv).$mount() 15 | expect(vm.legend).toContain('Powered by dwv') 16 | }) 17 | 18 | // Mount an instance and inspect the render output 19 | it('renders the correct legend', () => { 20 | const Constructor = Vue.extend(dwv) 21 | const vm = new Constructor().$mount() 22 | expect(vm.$el.querySelector('.legend').textContent) 23 | .toContain('Powered by dwv') 24 | }) 25 | }) 26 | -------------------------------------------------------------------------------- /test/e2e/custom-assertions/elementCount.js: -------------------------------------------------------------------------------- 1 | // A custom Nightwatch assertion. 2 | // The assertion name is the filename. 3 | // Example usage: 4 | // 5 | // browser.assert.elementCount(selector, count) 6 | // 7 | // For more information on custom assertions see: 8 | // http://nightwatchjs.org/guide#writing-custom-assertions 9 | 10 | exports.assertion = function (selector, count) { 11 | this.message = 'Testing if element <' + selector + '> has count: ' + count 12 | this.expected = count 13 | this.pass = function (val) { 14 | return val === this.expected 15 | } 16 | this.value = function (res) { 17 | return res.value 18 | } 19 | this.command = function (cb) { 20 | var self = this 21 | return this.api.execute(function (selector) { 22 | return document.querySelectorAll(selector).length 23 | }, [selector], function (res) { 24 | cb.call(self, res) 25 | }) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // https://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parserOptions: { 6 | parser: 'babel-eslint' 7 | }, 8 | env: { 9 | browser: true, 10 | }, 11 | extends: [ 12 | // https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention 13 | // consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules. 14 | 'plugin:vue/essential', 15 | // https://github.com/standard/standard/blob/master/docs/RULES-en.md 16 | 'standard' 17 | ], 18 | // required to lint *.vue files 19 | plugins: [ 20 | 'vue' 21 | ], 22 | // add your custom rules here 23 | rules: { 24 | // allow async-await 25 | 'generator-star-spacing': 'off', 26 | // allow debugger during development 27 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /resources/scripts/update-gh-pages.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Script to push build results on the repository gh-pages branch. 3 | 4 | # we should be in /home/travis/build/ivmartel/dwv-vue 5 | echo -e "Starting to update gh-pages\n" 6 | 7 | # go to home and setup git 8 | cd $HOME 9 | git config --global user.email "travis@travis-ci.org" 10 | git config --global user.name "Travis" 11 | # using token, clone gh-pages branch 12 | git clone --quiet --branch=gh-pages https://${GH_TOKEN}@github.com/ivmartel/dwv-vue.git gh-pages 13 | # clean up demo 14 | rm -Rf $HOME/gh-pages/demo/trunk/* 15 | # copy new build in demo/trunk 16 | cp -Rf $HOME/build/ivmartel/dwv-vue/dist/* $HOME/gh-pages/demo/trunk 17 | # move back to root of repo 18 | cd $HOME/gh-pages 19 | # add, commit and push files 20 | git add -Af . 21 | git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages" 22 | git push -fq origin gh-pages 23 | 24 | echo -e "Done updating.\n" 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DicomViewer 2 | 3 | DicomViewer be based on [DWV](https://github.com/ivmartel/dwv) (DICOM Web Viewer) and [Vue.js](https://vuejs.org/). 4 | 添加工具参考:https://github.com/GleasonBian/DWVDicomViewer 5 | 6 | * 小伙伴们 这个项目没有 node_modules 需要自己 安装依赖 看下面有安装方法! 7 | 8 | ## 使用方法 9 | 10 | ``` bash 11 | # 安装依赖 12 | yarn install 13 | 14 | # 启动项目 在本地主机上热加载:8080 15 | yarn run start 16 | 17 | # 将项目打包 用生产环境 (服务器) 18 | yarn run build 19 | 20 | # 构建用于生产和查看bundle analyzer报告 21 | yarn run build --report 22 | 23 | # 运行测试单元 24 | yarn run unit 25 | 26 | # 运行 e2e 测试 27 | yarn run e2e 28 | 29 | # 运行所有测试 30 | yarn run test 31 | ``` 32 | 33 | * 1.将项目 download 至本地 34 | 35 | * 2.在项目最外层 目录 打开 命令行 输入 yarn install 安装依赖后 36 | 37 | * 3.启动项目 yarn run start 38 | 39 | ![示例图片](https://raw.githubusercontent.com/bianliuzhu/Image/master/DicomViewer0.jpg) 40 | 41 | * 4.项目 跑起来后 将本地的 Dicom File 拖入 页面的虚线框就可以看到图像了 42 | 43 | ![示例图片](https://raw.githubusercontent.com/bianliuzhu/Image/master/DicomViewer1.jpg) 44 | 45 | * 5.这是最终效果 46 | 47 | ![示例图片](https://raw.githubusercontent.com/bianliuzhu/Image/master/DicomViewer.jpg) 48 | 49 | # 想添加什么 tools 自己研究吧 50 | 51 | * 另外 推荐大家一个非常好的网站 [cornerstone](https://docs.cornerstonejs.org/); 52 | 53 | -------------------------------------------------------------------------------- /test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config') 3 | 4 | // http://nightwatchjs.org/gettingstarted#settings-file 5 | module.exports = { 6 | src_folders: ['test/e2e/specs'], 7 | output_folder: 'test/e2e/reports', 8 | custom_assertions_path: ['test/e2e/custom-assertions'], 9 | 10 | selenium: { 11 | start_process: true, 12 | server_path: require('selenium-server').path, 13 | host: '127.0.0.1', 14 | port: 4444, 15 | cli_args: { 16 | 'webdriver.chrome.driver': require('chromedriver').path 17 | } 18 | }, 19 | 20 | test_settings: { 21 | default: { 22 | selenium_port: 4444, 23 | selenium_host: 'localhost', 24 | silent: true, 25 | globals: { 26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | chrome: { 31 | desiredCapabilities: { 32 | browserName: 'chrome', 33 | javascriptEnabled: true, 34 | acceptSslCerts: true 35 | } 36 | }, 37 | 38 | firefox: { 39 | desiredCapabilities: { 40 | browserName: 'firefox', 41 | javascriptEnabled: true, 42 | acceptSslCerts: true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - 'lts/*' 5 | env: 6 | global: 7 | - secure: Tt3sYZXl1Midk7AxOOG/NRbPObpxTDUPIM6XdVgvtbXPdrdp0ylRY2nQQ3HQZCPYJZwHVb82AQ4msHPMjcibOf9RgbfXWpIDs/kXyVEWChicGEMjyM/+zJnOA5Mce9YbJZa6MqoDDBrG8x+80kQQMOFJmfQA2qKlzhaUadN8gQXBJxSTjDJgiW+1REP+39VfFgrpcPsR31rasjdkP48+A4WVmOnCLcHmdkYP9IRHUovBXRtFIY6HsJZKRQ0Fu0oUsYLZqF0zOK2YPZ64J02F/lIxkcz9VsxR0didKjUILW8+wZ5YhB7OfduocOkTHVqFsVJIsXOMAaAPcbVqsUeN5WA661MrTLVyXWivtKjGMvw1iA2L5coWZ/QAI8LN+8zJuCLVMcsS6vGMtee7Fmmmwtg7tdXJhfzZGKISET5j3Xz5x6yIxB47IeZxg9cMKmcP+UWQFKEW732jzDx1E7B995qf33/A+KDlRXc7aeFvVskg3BzEkPzTkmmhZoBg+v+mNKn0zW8c9pZKoFp942PoCEsX3skSnua0Yoc5K8pDSf56SrDCUoliaSy673/i7IUuJ9KPnnrYmVsBnETwbxE/Yj3d0BpD53YW6ZRZ+ol9Ninast3hbIX5eguhN3J/utpz0eeWGwzN0xQ1aFmanYJuJLs9E6K33PuS5M/OHSxIJyY= 8 | 9 | # greenkeeper lock file 10 | before_install: yarn global add greenkeeper-lockfile@1 11 | before_script: greenkeeper-lockfile-update 12 | after_script: greenkeeper-lockfile-upload 13 | 14 | # main 15 | script: 16 | # base href is set in config/index.js at build.assetsPublicPath 17 | - yarn run build 18 | - yarn run test 19 | 20 | after_success: 21 | # update gh-page only for master and not pull requests 22 | - if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then 23 | chmod +x ./resources/scripts/update-gh-pages.sh; "./resources/scripts/update-gh-pages.sh"; 24 | else echo "Not deploying artifacts for $TRAVIS_BRANCH"; fi 25 | -------------------------------------------------------------------------------- /test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | 4 | const webpack = require('webpack') 5 | const DevServer = require('webpack-dev-server') 6 | 7 | const webpackConfig = require('../../build/webpack.prod.conf') 8 | const devConfigPromise = require('../../build/webpack.dev.conf') 9 | 10 | let server 11 | 12 | devConfigPromise.then(devConfig => { 13 | const devServerOptions = devConfig.devServer 14 | const compiler = webpack(webpackConfig) 15 | server = new DevServer(compiler, devServerOptions) 16 | const port = devServerOptions.port 17 | const host = devServerOptions.host 18 | return server.listen(port, host) 19 | }) 20 | .then(() => { 21 | // 2. run the nightwatch test suite against it 22 | // to run in additional browsers: 23 | // 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings" 24 | // 2. add it to the --env flag below 25 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 26 | // For more information on Nightwatch's config file, see 27 | // http://nightwatchjs.org/guide#settings-file 28 | let opts = process.argv.slice(2) 29 | if (opts.indexOf('--config') === -1) { 30 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) 31 | } 32 | if (opts.indexOf('--env') === -1) { 33 | opts = opts.concat(['--env', 'chrome']) 34 | } 35 | 36 | const spawn = require('cross-spawn') 37 | const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 38 | 39 | runner.on('exit', function (code) { 40 | server.close() 41 | process.exit(code) 42 | }) 43 | 44 | runner.on('error', function (err) { 45 | server.close() 46 | throw err 47 | }) 48 | }) 49 | -------------------------------------------------------------------------------- /config/index.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | // Template version: 1.3.1 3 | // see http://vuejs-templates.github.io/webpack for documentation. 4 | 5 | const path = require('path') 6 | 7 | module.exports = { 8 | dev: { 9 | 10 | // Paths 11 | assetsSubDirectory: 'static', 12 | assetsPublicPath: '/', 13 | proxyTable: {}, 14 | 15 | // Various Dev Server settings 16 | host: 'localhost', // can be overwritten by process.env.HOST 17 | port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined 18 | autoOpenBrowser: false, 19 | errorOverlay: true, 20 | notifyOnErrors: true, 21 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions- 22 | 23 | // Use Eslint Loader? 24 | // If true, your code will be linted during bundling and 25 | // linting errors and warnings will be shown in the console. 26 | useEslint: true, 27 | // If true, eslint errors and warnings will also be shown in the error overlay 28 | // in the browser. 29 | showEslintErrorsInOverlay: false, 30 | 31 | /** 32 | * Source Maps 33 | */ 34 | 35 | // https://webpack.js.org/configuration/devtool/#development 36 | devtool: 'cheap-module-eval-source-map', 37 | 38 | // If you have problems debugging vue-files in devtools, 39 | // set this to false - it *may* help 40 | // https://vue-loader.vuejs.org/en/options.html#cachebusting 41 | cacheBusting: true, 42 | 43 | cssSourceMap: true 44 | }, 45 | 46 | build: { 47 | // Template for index.html 48 | index: path.resolve(__dirname, '../dist/index.html'), 49 | 50 | // Paths 51 | assetsRoot: path.resolve(__dirname, '../dist'), 52 | assetsSubDirectory: 'static', 53 | assetsPublicPath: '/dwv-vue/demo/trunk/', 54 | 55 | /** 56 | * Source Maps 57 | */ 58 | 59 | productionSourceMap: true, 60 | // https://webpack.js.org/configuration/devtool/#production 61 | devtool: '#source-map', 62 | 63 | // Gzip off by default as many popular static hosts such as 64 | // Surge or Netlify already gzip all static assets for you. 65 | // Before setting to `true`, make sure to: 66 | // npm install --save-dev compression-webpack-plugin 67 | productionGzip: false, 68 | productionGzipExtensions: ['js', 'css'], 69 | 70 | // Run the build command with an extra argument to 71 | // View the bundle analyzer report after build finishes: 72 | // `npm run build --report` 73 | // Set to `true` or `false` to always turn it on or off 74 | bundleAnalyzerReport: process.env.npm_config_report 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dwv-vue", 3 | "version": "0.1.0", 4 | "description": "Medical viewer using DWV (DICOM Web Viewer) and Vue.js.", 5 | "author": "ivmartel", 6 | "license": "GPL-3.0", 7 | "private": true, 8 | "scripts": { 9 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", 10 | "start": "npm run dev", 11 | "unit": "jest --config test/unit/jest.conf.js --coverage", 12 | "e2e": "node test/e2e/runner.js", 13 | "test": "npm run unit", 14 | "lint": "eslint --ext .js,.vue src test/unit test/e2e/specs", 15 | "build": "node build/build.js" 16 | }, 17 | "dependencies": { 18 | "vue": "^2.5.2", 19 | "vue-material": "~1.0.0-beta", 20 | "dwv": "0.23.4" 21 | }, 22 | "devDependencies": { 23 | "autoprefixer": "^8.1.0", 24 | "babel-core": "^6.22.1", 25 | "babel-eslint": "^8.2.1", 26 | "babel-helper-vue-jsx-merge-props": "^2.0.3", 27 | "babel-jest": "^22.4.3", 28 | "babel-loader": "^7.1.1", 29 | "babel-plugin-dynamic-import-node": "^1.2.0", 30 | "babel-plugin-syntax-jsx": "^6.18.0", 31 | "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", 32 | "babel-plugin-transform-runtime": "^6.22.0", 33 | "babel-plugin-transform-vue-jsx": "^3.5.0", 34 | "babel-preset-env": "^1.3.2", 35 | "babel-preset-stage-2": "^6.22.0", 36 | "babel-register": "^6.22.0", 37 | "chalk": "^2.0.1", 38 | "chromedriver": "^2.27.2", 39 | "copy-webpack-plugin": "^4.0.1", 40 | "cross-spawn": "^6.0.5", 41 | "css-loader": "^0.28.0", 42 | "eslint": "^4.15.0", 43 | "eslint-config-standard": "^11.0.0", 44 | "eslint-friendly-formatter": "^4.0.0", 45 | "eslint-loader": "^2.0.0", 46 | "eslint-plugin-import": "^2.7.0", 47 | "eslint-plugin-node": "^6.0.1", 48 | "eslint-plugin-promise": "^3.4.0", 49 | "eslint-plugin-standard": "^3.0.1", 50 | "eslint-plugin-vue": "^4.0.0", 51 | "extract-text-webpack-plugin": "^3.0.0", 52 | "file-loader": "^1.1.4", 53 | "friendly-errors-webpack-plugin": "^1.6.1", 54 | "html-webpack-plugin": "^3.0.7", 55 | "jest": "^22.0.4", 56 | "jest-serializer-vue": "^1.0.0", 57 | "nightwatch": "^0.9.12", 58 | "node-notifier": "^5.1.2", 59 | "optimize-css-assets-webpack-plugin": "~3.2.0", 60 | "ora": "^2.0.0", 61 | "portfinder": "^1.0.13", 62 | "postcss-import": "^11.0.0", 63 | "postcss-loader": "^2.0.8", 64 | "postcss-url": "^7.2.1", 65 | "rimraf": "^2.6.0", 66 | "selenium-server": "^3.0.1", 67 | "semver": "^5.3.0", 68 | "shelljs": "^0.8.1", 69 | "uglifyjs-webpack-plugin": "^1.1.1", 70 | "url-loader": "^1.0.1", 71 | "vue-jest": "^2.2.1", 72 | "vue-loader": "^14.2.1", 73 | "vue-style-loader": "^4.1.0", 74 | "vue-template-compiler": "^2.5.2", 75 | "webpack": "~3.6.0", 76 | "webpack-bundle-analyzer": "^2.9.0", 77 | "webpack-dev-server": "~2.9.1", 78 | "webpack-merge": "^4.1.0" 79 | }, 80 | "engines": { 81 | "node": ">= 6.0.0", 82 | "npm": ">= 3.0.0" 83 | }, 84 | "browserslist": [ 85 | "> 1%", 86 | "last 2 versions", 87 | "not ie <= 8" 88 | ] 89 | } 90 | -------------------------------------------------------------------------------- /src/components/dwv.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 80 | 81 | 82 | 110 | --------------------------------------------------------------------------------