first commit
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
{
|
||||||
|
"comments": false,
|
||||||
|
"env": {
|
||||||
|
"test": {
|
||||||
|
"presets": [
|
||||||
|
["env", {
|
||||||
|
"targets": { "node": 7 }
|
||||||
|
}],
|
||||||
|
"stage-0"
|
||||||
|
],
|
||||||
|
"plugins": ["istanbul"]
|
||||||
|
},
|
||||||
|
"main": {
|
||||||
|
"presets": [
|
||||||
|
["env", {
|
||||||
|
"targets": { "node": 7 }
|
||||||
|
}],
|
||||||
|
"stage-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"renderer": {
|
||||||
|
"presets": [
|
||||||
|
["env", {
|
||||||
|
"modules": false
|
||||||
|
}],
|
||||||
|
"stage-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"web": {
|
||||||
|
"presets": [
|
||||||
|
["env", {
|
||||||
|
"modules": false
|
||||||
|
}],
|
||||||
|
"stage-0"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"plugins": ["transform-runtime"]
|
||||||
|
}
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
process.env.NODE_ENV = 'production'
|
||||||
|
|
||||||
|
const { say } = require('cfonts')
|
||||||
|
const chalk = require('chalk')
|
||||||
|
const del = require('del')
|
||||||
|
const { spawn } = require('child_process')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
const Multispinner = require('multispinner')
|
||||||
|
|
||||||
|
|
||||||
|
const mainConfig = require('./webpack.main.config')
|
||||||
|
const rendererConfig = require('./webpack.renderer.config')
|
||||||
|
const webConfig = require('./webpack.web.config')
|
||||||
|
|
||||||
|
const doneLog = chalk.bgGreen.white(' DONE ') + ' '
|
||||||
|
const errorLog = chalk.bgRed.white(' ERROR ') + ' '
|
||||||
|
const okayLog = chalk.bgBlue.white(' OKAY ') + ' '
|
||||||
|
const isCI = process.env.CI || false
|
||||||
|
|
||||||
|
if (process.env.BUILD_TARGET === 'clean') clean()
|
||||||
|
else if (process.env.BUILD_TARGET === 'web') web()
|
||||||
|
else build()
|
||||||
|
|
||||||
|
function clean () {
|
||||||
|
del.sync(['build/*', '!build/icons', '!build/icons/icon.*'])
|
||||||
|
console.log(`\n${doneLog}\n`)
|
||||||
|
process.exit()
|
||||||
|
}
|
||||||
|
|
||||||
|
function build () {
|
||||||
|
greeting()
|
||||||
|
|
||||||
|
del.sync(['dist/electron/*', '!.gitkeep'])
|
||||||
|
|
||||||
|
const tasks = ['main', 'renderer']
|
||||||
|
const m = new Multispinner(tasks, {
|
||||||
|
preText: 'building',
|
||||||
|
postText: 'process'
|
||||||
|
})
|
||||||
|
|
||||||
|
let results = ''
|
||||||
|
|
||||||
|
m.on('success', () => {
|
||||||
|
process.stdout.write('\x1B[2J\x1B[0f')
|
||||||
|
console.log(`\n\n${results}`)
|
||||||
|
console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`)
|
||||||
|
process.exit()
|
||||||
|
})
|
||||||
|
|
||||||
|
pack(mainConfig).then(result => {
|
||||||
|
results += result + '\n\n'
|
||||||
|
m.success('main')
|
||||||
|
}).catch(err => {
|
||||||
|
m.error('main')
|
||||||
|
console.log(`\n ${errorLog}failed to build main process`)
|
||||||
|
console.error(`\n${err}\n`)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
pack(rendererConfig).then(result => {
|
||||||
|
results += result + '\n\n'
|
||||||
|
m.success('renderer')
|
||||||
|
}).catch(err => {
|
||||||
|
m.error('renderer')
|
||||||
|
console.log(`\n ${errorLog}failed to build renderer process`)
|
||||||
|
console.error(`\n${err}\n`)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function pack (config) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
webpack(config, (err, stats) => {
|
||||||
|
if (err) reject(err.stack || err)
|
||||||
|
else if (stats.hasErrors()) {
|
||||||
|
let err = ''
|
||||||
|
|
||||||
|
stats.toString({
|
||||||
|
chunks: false,
|
||||||
|
colors: true
|
||||||
|
})
|
||||||
|
.split(/\r?\n/)
|
||||||
|
.forEach(line => {
|
||||||
|
err += ` ${line}\n`
|
||||||
|
})
|
||||||
|
|
||||||
|
reject(err)
|
||||||
|
} else {
|
||||||
|
resolve(stats.toString({
|
||||||
|
chunks: false,
|
||||||
|
colors: true
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function web () {
|
||||||
|
del.sync(['dist/web/*', '!.gitkeep'])
|
||||||
|
webpack(webConfig, (err, stats) => {
|
||||||
|
if (err || stats.hasErrors()) console.log(err)
|
||||||
|
|
||||||
|
console.log(stats.toString({
|
||||||
|
chunks: false,
|
||||||
|
colors: true
|
||||||
|
}))
|
||||||
|
|
||||||
|
process.exit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function greeting () {
|
||||||
|
const cols = process.stdout.columns
|
||||||
|
let text = ''
|
||||||
|
|
||||||
|
if (cols > 85) text = 'lets-build'
|
||||||
|
else if (cols > 60) text = 'lets-|build'
|
||||||
|
else text = false
|
||||||
|
|
||||||
|
if (text && !isCI) {
|
||||||
|
say(text, {
|
||||||
|
colors: ['yellow'],
|
||||||
|
font: 'simple3d',
|
||||||
|
space: false
|
||||||
|
})
|
||||||
|
} else console.log(chalk.yellow.bold('\n lets-build'))
|
||||||
|
console.log()
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
|
||||||
|
|
||||||
|
hotClient.subscribe(event => {
|
||||||
|
/**
|
||||||
|
* Reload browser when HTMLWebpackPlugin emits a new index.html
|
||||||
|
*
|
||||||
|
* Currently disabled until jantimon/html-webpack-plugin#680 is resolved.
|
||||||
|
* https://github.com/SimulatedGREG/electron-vue/issues/437
|
||||||
|
* https://github.com/jantimon/html-webpack-plugin/issues/680
|
||||||
|
*/
|
||||||
|
// if (event.action === 'reload') {
|
||||||
|
// window.location.reload()
|
||||||
|
// }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Notify `mainWindow` when `main` process is compiling,
|
||||||
|
* giving notice for an expected reload of the `electron` process
|
||||||
|
*/
|
||||||
|
if (event.action === 'compiling') {
|
||||||
|
document.body.innerHTML += `
|
||||||
|
<style>
|
||||||
|
#dev-client {
|
||||||
|
background: #4fc08d;
|
||||||
|
border-radius: 4px;
|
||||||
|
bottom: 20px;
|
||||||
|
box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
|
||||||
|
color: #fff;
|
||||||
|
font-family: 'Source Sans Pro', sans-serif;
|
||||||
|
left: 20px;
|
||||||
|
padding: 8px 12px;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="dev-client">
|
||||||
|
Compiling Main Process...
|
||||||
|
</div>
|
||||||
|
`
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const chalk = require('chalk')
|
||||||
|
const electron = require('electron')
|
||||||
|
const path = require('path')
|
||||||
|
const { say } = require('cfonts')
|
||||||
|
const { spawn } = require('child_process')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
const WebpackDevServer = require('webpack-dev-server')
|
||||||
|
const webpackHotMiddleware = require('webpack-hot-middleware')
|
||||||
|
|
||||||
|
const mainConfig = require('./webpack.main.config')
|
||||||
|
const rendererConfig = require('./webpack.renderer.config')
|
||||||
|
|
||||||
|
let electronProcess = null
|
||||||
|
let manualRestart = false
|
||||||
|
let hotMiddleware
|
||||||
|
|
||||||
|
function logStats (proc, data) {
|
||||||
|
let log = ''
|
||||||
|
|
||||||
|
log += chalk.yellow.bold(`┏ ${proc} Process ${new Array((19 - proc.length) + 1).join('-')}`)
|
||||||
|
log += '\n\n'
|
||||||
|
|
||||||
|
if (typeof data === 'object') {
|
||||||
|
data.toString({
|
||||||
|
colors: true,
|
||||||
|
chunks: false
|
||||||
|
}).split(/\r?\n/).forEach(line => {
|
||||||
|
log += ' ' + line + '\n'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
log += ` ${data}\n`
|
||||||
|
}
|
||||||
|
|
||||||
|
log += '\n' + chalk.yellow.bold(`┗ ${new Array(28 + 1).join('-')}`) + '\n'
|
||||||
|
|
||||||
|
console.log(log)
|
||||||
|
}
|
||||||
|
|
||||||
|
function startRenderer () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
|
||||||
|
|
||||||
|
const compiler = webpack(rendererConfig)
|
||||||
|
hotMiddleware = webpackHotMiddleware(compiler, {
|
||||||
|
log: false,
|
||||||
|
heartbeat: 2500
|
||||||
|
})
|
||||||
|
|
||||||
|
compiler.plugin('compilation', compilation => {
|
||||||
|
compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
|
||||||
|
hotMiddleware.publish({ action: 'reload' })
|
||||||
|
cb()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
compiler.plugin('done', stats => {
|
||||||
|
logStats('Renderer', stats)
|
||||||
|
})
|
||||||
|
|
||||||
|
const server = new WebpackDevServer(
|
||||||
|
compiler,
|
||||||
|
{
|
||||||
|
contentBase: path.join(__dirname, '../'),
|
||||||
|
quiet: true,
|
||||||
|
before (app, ctx) {
|
||||||
|
app.use(hotMiddleware)
|
||||||
|
ctx.middleware.waitUntilValid(() => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
server.listen(9080)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function startMain () {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main)
|
||||||
|
|
||||||
|
const compiler = webpack(mainConfig)
|
||||||
|
|
||||||
|
compiler.plugin('watch-run', (compilation, done) => {
|
||||||
|
logStats('Main', chalk.white.bold('compiling...'))
|
||||||
|
hotMiddleware.publish({ action: 'compiling' })
|
||||||
|
done()
|
||||||
|
})
|
||||||
|
|
||||||
|
compiler.watch({}, (err, stats) => {
|
||||||
|
if (err) {
|
||||||
|
console.log(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
logStats('Main', stats)
|
||||||
|
|
||||||
|
if (electronProcess && electronProcess.kill) {
|
||||||
|
manualRestart = true
|
||||||
|
process.kill(electronProcess.pid)
|
||||||
|
electronProcess = null
|
||||||
|
startElectron()
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
manualRestart = false
|
||||||
|
}, 5000)
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function startElectron () {
|
||||||
|
electronProcess = spawn(electron, ['--inspect=5858', path.join(__dirname, '../dist/electron/main.js')])
|
||||||
|
|
||||||
|
electronProcess.stdout.on('data', data => {
|
||||||
|
electronLog(data, 'blue')
|
||||||
|
})
|
||||||
|
electronProcess.stderr.on('data', data => {
|
||||||
|
electronLog(data, 'red')
|
||||||
|
})
|
||||||
|
|
||||||
|
electronProcess.on('close', () => {
|
||||||
|
if (!manualRestart) process.exit()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function electronLog (data, color) {
|
||||||
|
let log = ''
|
||||||
|
data = data.toString().split(/\r?\n/)
|
||||||
|
data.forEach(line => {
|
||||||
|
log += ` ${line}\n`
|
||||||
|
})
|
||||||
|
if (/[0-9A-z]+/.test(log)) {
|
||||||
|
console.log(
|
||||||
|
chalk[color].bold('┏ Electron -------------------') +
|
||||||
|
'\n\n' +
|
||||||
|
log +
|
||||||
|
chalk[color].bold('┗ ----------------------------') +
|
||||||
|
'\n'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function greeting () {
|
||||||
|
const cols = process.stdout.columns
|
||||||
|
let text = ''
|
||||||
|
|
||||||
|
if (cols > 104) text = 'electron-vue'
|
||||||
|
else if (cols > 76) text = 'electron-|vue'
|
||||||
|
else text = false
|
||||||
|
|
||||||
|
if (text) {
|
||||||
|
say(text, {
|
||||||
|
colors: ['yellow'],
|
||||||
|
font: 'simple3d',
|
||||||
|
space: false
|
||||||
|
})
|
||||||
|
} else console.log(chalk.yellow.bold('\n electron-vue'))
|
||||||
|
console.log(chalk.blue(' getting ready...') + '\n')
|
||||||
|
}
|
||||||
|
|
||||||
|
function init () {
|
||||||
|
greeting()
|
||||||
|
|
||||||
|
Promise.all([startRenderer(), startMain()])
|
||||||
|
.then(() => {
|
||||||
|
startElectron()
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
init()
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
process.env.BABEL_ENV = 'main'
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const { dependencies } = require('../package.json')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
|
||||||
|
const BabiliWebpackPlugin = require('babili-webpack-plugin')
|
||||||
|
|
||||||
|
let mainConfig = {
|
||||||
|
entry: {
|
||||||
|
main: path.join(__dirname, '../src/main/index.js')
|
||||||
|
},
|
||||||
|
externals: [
|
||||||
|
...Object.keys(dependencies || {})
|
||||||
|
],
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js)$/,
|
||||||
|
enforce: 'pre',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: {
|
||||||
|
loader: 'eslint-loader',
|
||||||
|
options: {
|
||||||
|
formatter: require('eslint-friendly-formatter')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
use: 'babel-loader',
|
||||||
|
exclude: /node_modules/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: 'node-loader'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
__dirname: process.env.NODE_ENV !== 'production',
|
||||||
|
__filename: process.env.NODE_ENV !== 'production'
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: '[name].js',
|
||||||
|
libraryTarget: 'commonjs2',
|
||||||
|
path: path.join(__dirname, '../dist/electron')
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new webpack.NoEmitOnErrorsPlugin()
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
extensions: ['.js', '.json', '.node']
|
||||||
|
},
|
||||||
|
target: 'electron-main'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust mainConfig for development settings
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
mainConfig.plugins.push(
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust mainConfig for production settings
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
mainConfig.plugins.push(
|
||||||
|
new BabiliWebpackPlugin(),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.NODE_ENV': '"production"'
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = mainConfig
|
||||||
@@ -0,0 +1,178 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
process.env.BABEL_ENV = 'renderer'
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const { dependencies } = require('../package.json')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
|
||||||
|
const BabiliWebpackPlugin = require('babili-webpack-plugin')
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of node_modules to include in webpack bundle
|
||||||
|
*
|
||||||
|
* Required for specific packages like Vue UI libraries
|
||||||
|
* that provide pure *.vue files that need compiling
|
||||||
|
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/webpack-configurations.html#white-listing-externals
|
||||||
|
*/
|
||||||
|
let whiteListedModules = ['vue', 'vuetify']
|
||||||
|
|
||||||
|
let rendererConfig = {
|
||||||
|
devtool: '#cheap-module-eval-source-map',
|
||||||
|
entry: {
|
||||||
|
renderer: path.join(__dirname, '../src/renderer/main.js')
|
||||||
|
},
|
||||||
|
externals: [
|
||||||
|
...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d))
|
||||||
|
],
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|vue)$/,
|
||||||
|
enforce: 'pre',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: {
|
||||||
|
loader: 'eslint-loader',
|
||||||
|
options: {
|
||||||
|
formatter: require('eslint-friendly-formatter')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ExtractTextPlugin.extract({
|
||||||
|
fallback: 'style-loader',
|
||||||
|
use: 'css-loader'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.html$/,
|
||||||
|
use: 'vue-html-loader'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
use: 'babel-loader',
|
||||||
|
exclude: /node_modules/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.node$/,
|
||||||
|
use: 'node-loader'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.vue$/,
|
||||||
|
use: {
|
||||||
|
loader: 'vue-loader',
|
||||||
|
options: {
|
||||||
|
extractCSS: process.env.NODE_ENV === 'production',
|
||||||
|
loaders: {
|
||||||
|
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
|
||||||
|
scss: 'vue-style-loader!css-loader!sass-loader'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'url-loader',
|
||||||
|
query: {
|
||||||
|
limit: 10000,
|
||||||
|
name: 'imgs/[name]--[folder].[ext]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
|
||||||
|
loader: 'url-loader',
|
||||||
|
options: {
|
||||||
|
limit: 10000,
|
||||||
|
name: 'media/[name]--[folder].[ext]'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'url-loader',
|
||||||
|
query: {
|
||||||
|
limit: 10000,
|
||||||
|
name: 'fonts/[name]--[folder].[ext]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
node: {
|
||||||
|
__dirname: process.env.NODE_ENV !== 'production',
|
||||||
|
__filename: process.env.NODE_ENV !== 'production'
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new ExtractTextPlugin('styles.css'),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
filename: 'index.html',
|
||||||
|
template: path.resolve(__dirname, '../src/index.ejs'),
|
||||||
|
minify: {
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeAttributeQuotes: true,
|
||||||
|
removeComments: true
|
||||||
|
},
|
||||||
|
nodeModules: process.env.NODE_ENV !== 'production'
|
||||||
|
? path.resolve(__dirname, '../node_modules')
|
||||||
|
: false
|
||||||
|
}),
|
||||||
|
new webpack.HotModuleReplacementPlugin(),
|
||||||
|
new webpack.NoEmitOnErrorsPlugin()
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
filename: '[name].js',
|
||||||
|
libraryTarget: 'commonjs2',
|
||||||
|
path: path.join(__dirname, '../dist/electron')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': path.join(__dirname, '../src/renderer'),
|
||||||
|
'vue$': 'vue/dist/vue.esm.js'
|
||||||
|
},
|
||||||
|
extensions: ['.js', '.vue', '.json', '.css', '.node']
|
||||||
|
},
|
||||||
|
target: 'electron-renderer'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust rendererConfig for development settings
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
rendererConfig.plugins.push(
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust rendererConfig for production settings
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
rendererConfig.devtool = ''
|
||||||
|
|
||||||
|
rendererConfig.plugins.push(
|
||||||
|
new BabiliWebpackPlugin(),
|
||||||
|
new CopyWebpackPlugin([
|
||||||
|
{
|
||||||
|
from: path.join(__dirname, '../static'),
|
||||||
|
to: path.join(__dirname, '../dist/electron/static'),
|
||||||
|
ignore: ['.*']
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.NODE_ENV': '"production"'
|
||||||
|
}),
|
||||||
|
new webpack.LoaderOptionsPlugin({
|
||||||
|
minimize: true
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = rendererConfig
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
process.env.BABEL_ENV = 'web'
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
|
||||||
|
const BabiliWebpackPlugin = require('babili-webpack-plugin')
|
||||||
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
||||||
|
const HtmlWebpackPlugin = require('html-webpack-plugin')
|
||||||
|
|
||||||
|
let webConfig = {
|
||||||
|
devtool: '#cheap-module-eval-source-map',
|
||||||
|
entry: {
|
||||||
|
web: path.join(__dirname, '../src/renderer/main.js')
|
||||||
|
},
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|vue)$/,
|
||||||
|
enforce: 'pre',
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: {
|
||||||
|
loader: 'eslint-loader',
|
||||||
|
options: {
|
||||||
|
formatter: require('eslint-friendly-formatter')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.css$/,
|
||||||
|
use: ExtractTextPlugin.extract({
|
||||||
|
fallback: 'style-loader',
|
||||||
|
use: 'css-loader'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.html$/,
|
||||||
|
use: 'vue-html-loader'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
use: 'babel-loader',
|
||||||
|
include: [ path.resolve(__dirname, '../src/renderer') ],
|
||||||
|
exclude: /node_modules/
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.vue$/,
|
||||||
|
use: {
|
||||||
|
loader: 'vue-loader',
|
||||||
|
options: {
|
||||||
|
extractCSS: true,
|
||||||
|
loaders: {
|
||||||
|
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
|
||||||
|
scss: 'vue-style-loader!css-loader!sass-loader'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'url-loader',
|
||||||
|
query: {
|
||||||
|
limit: 10000,
|
||||||
|
name: 'imgs/[name].[ext]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
|
||||||
|
use: {
|
||||||
|
loader: 'url-loader',
|
||||||
|
query: {
|
||||||
|
limit: 10000,
|
||||||
|
name: 'fonts/[name].[ext]'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
new ExtractTextPlugin('styles.css'),
|
||||||
|
new HtmlWebpackPlugin({
|
||||||
|
filename: 'index.html',
|
||||||
|
template: path.resolve(__dirname, '../src/index.ejs'),
|
||||||
|
minify: {
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeAttributeQuotes: true,
|
||||||
|
removeComments: true
|
||||||
|
},
|
||||||
|
nodeModules: false
|
||||||
|
}),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.IS_WEB': 'true'
|
||||||
|
}),
|
||||||
|
new webpack.HotModuleReplacementPlugin(),
|
||||||
|
new webpack.NoEmitOnErrorsPlugin()
|
||||||
|
],
|
||||||
|
output: {
|
||||||
|
filename: '[name].js',
|
||||||
|
path: path.join(__dirname, '../dist/web')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': path.join(__dirname, '../src/renderer'),
|
||||||
|
'vue$': 'vue/dist/vue.esm.js'
|
||||||
|
},
|
||||||
|
extensions: ['.js', '.vue', '.json', '.css']
|
||||||
|
},
|
||||||
|
target: 'web'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjust webConfig for production settings
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
webConfig.devtool = ''
|
||||||
|
|
||||||
|
webConfig.plugins.push(
|
||||||
|
new BabiliWebpackPlugin(),
|
||||||
|
new CopyWebpackPlugin([
|
||||||
|
{
|
||||||
|
from: path.join(__dirname, '../static'),
|
||||||
|
to: path.join(__dirname, '../dist/web/static'),
|
||||||
|
ignore: ['.*']
|
||||||
|
}
|
||||||
|
]),
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.NODE_ENV': '"production"'
|
||||||
|
}),
|
||||||
|
new webpack.LoaderOptionsPlugin({
|
||||||
|
minimize: true
|
||||||
|
})
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = webConfig
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
test/unit/coverage/**
|
||||||
|
test/unit/*.js
|
||||||
|
test/e2e/*.js
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
parser: 'babel-eslint',
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'module'
|
||||||
|
},
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
extends: 'standard',
|
||||||
|
globals: {
|
||||||
|
__static: true
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
'html'
|
||||||
|
],
|
||||||
|
'rules': {
|
||||||
|
// allow paren-less arrow functions
|
||||||
|
'arrow-parens': 0,
|
||||||
|
// allow async-await
|
||||||
|
'generator-star-spacing': 0,
|
||||||
|
// allow debugger during development
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0
|
||||||
|
}
|
||||||
|
}
|
||||||
+11
@@ -0,0 +1,11 @@
|
|||||||
|
.DS_Store
|
||||||
|
dist/electron/*
|
||||||
|
dist/web/*
|
||||||
|
build/*
|
||||||
|
!build/icons
|
||||||
|
coverage
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log
|
||||||
|
npm-debug.log.*
|
||||||
|
thumbs.db
|
||||||
|
!.gitkeep
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="Eslint" enabled="true" level="ERROR" enabled_by_default="true" />
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="JavaScriptSettings">
|
||||||
|
<option name="languageLevel" value="ES6" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/my-project.iml" filepath="$PROJECT_DIR$/.idea/my-project.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+12
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Generated
+320
@@ -0,0 +1,320 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="55e9631d-9eec-4a61-b221-10a0c409abfa" name="Default Changelist" comment="" />
|
||||||
|
<ignored path="$PROJECT_DIR$/.tmp/" />
|
||||||
|
<ignored path="$PROJECT_DIR$/temp/" />
|
||||||
|
<ignored path="$PROJECT_DIR$/tmp/" />
|
||||||
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="FUSProjectUsageTrigger">
|
||||||
|
<session id="-1439566542">
|
||||||
|
<usages-collector id="statistics.lifecycle.project">
|
||||||
|
<counts>
|
||||||
|
<entry key="project.closed" value="2" />
|
||||||
|
<entry key="project.open.time.0" value="2" />
|
||||||
|
<entry key="project.opened" value="2" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.extensions.open">
|
||||||
|
<counts>
|
||||||
|
<entry key="icns" value="1" />
|
||||||
|
<entry key="ico" value="1" />
|
||||||
|
<entry key="js" value="1" />
|
||||||
|
<entry key="json" value="1" />
|
||||||
|
<entry key="png" value="1" />
|
||||||
|
<entry key="ts" value="1" />
|
||||||
|
<entry key="vue" value="4" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.types.open">
|
||||||
|
<counts>
|
||||||
|
<entry key="Image" value="3" />
|
||||||
|
<entry key="JSON" value="1" />
|
||||||
|
<entry key="JavaScript" value="1" />
|
||||||
|
<entry key="TypeScript" value="1" />
|
||||||
|
<entry key="Vue.js" value="4" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.js.language.service.starts">
|
||||||
|
<counts>
|
||||||
|
<entry key="ESLintLanguageService" value="1" />
|
||||||
|
<entry key="TypeScriptServerServiceImpl" value="1" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.extensions.edit">
|
||||||
|
<counts>
|
||||||
|
<entry key="js" value="10" />
|
||||||
|
<entry key="vue" value="390" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
<usages-collector id="statistics.file.types.edit">
|
||||||
|
<counts>
|
||||||
|
<entry key="JavaScript" value="10" />
|
||||||
|
<entry key="Vue.js" value="390" />
|
||||||
|
</counts>
|
||||||
|
</usages-collector>
|
||||||
|
</session>
|
||||||
|
</component>
|
||||||
|
<component name="FileEditorManager">
|
||||||
|
<leaf SIDE_TABS_SIZE_LIMIT_KEY="375">
|
||||||
|
<file pinned="false" current-in-tab="true">
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/App.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="339">
|
||||||
|
<caret line="69" column="7" selection-start-line="69" selection-start-column="7" selection-end-line="69" selection-end-column="7" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#1321#1327#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/router/index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="650">
|
||||||
|
<caret line="25" selection-start-line="25" selection-end-line="25" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#21#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
<file pinned="false" current-in-tab="false">
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/components/rm.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="390">
|
||||||
|
<caret line="15" selection-start-line="15" selection-end-line="15" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</file>
|
||||||
|
</leaf>
|
||||||
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Vue Single File Component" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="FindInProjectRecents">
|
||||||
|
<findStrings>
|
||||||
|
<find>content</find>
|
||||||
|
</findStrings>
|
||||||
|
</component>
|
||||||
|
<component name="IdeDocumentHistory">
|
||||||
|
<option name="CHANGED_PATHS">
|
||||||
|
<list>
|
||||||
|
<option value="$PROJECT_DIR$/src/renderer/components/rm.vue" />
|
||||||
|
<option value="$PROJECT_DIR$/src/renderer/router/index.js" />
|
||||||
|
<option value="$PROJECT_DIR$/src/renderer/App.vue" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
|
||||||
|
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER">
|
||||||
|
<package-json value="$PROJECT_DIR$/package.json" />
|
||||||
|
</component>
|
||||||
|
<component name="JsGulpfileManager">
|
||||||
|
<detection-done>true</detection-done>
|
||||||
|
<sorting>DEFINITION_ORDER</sorting>
|
||||||
|
</component>
|
||||||
|
<component name="NodeModulesDirectoryManager">
|
||||||
|
<handled-path value="$PROJECT_DIR$/node_modules" />
|
||||||
|
</component>
|
||||||
|
<component name="NodePackageJsonFileManager">
|
||||||
|
<packageJsonPaths>
|
||||||
|
<path value="$PROJECT_DIR$/package.json" />
|
||||||
|
</packageJsonPaths>
|
||||||
|
</component>
|
||||||
|
<component name="PackageJsonUpdateNotifier">
|
||||||
|
<dismissed value="$PROJECT_DIR$/package.json" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectFrameBounds" extendedState="6">
|
||||||
|
<option name="x" value="1756" />
|
||||||
|
<option name="width" value="1717" />
|
||||||
|
<option name="height" value="949" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectView">
|
||||||
|
<navigator proportions="" version="1">
|
||||||
|
<foldersAlwaysOnTop value="true" />
|
||||||
|
</navigator>
|
||||||
|
<panes>
|
||||||
|
<pane id="Scope" />
|
||||||
|
<pane id="ProjectPane">
|
||||||
|
<subPane>
|
||||||
|
<expand>
|
||||||
|
<path>
|
||||||
|
<item name="my-project" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="my-project" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="my-project" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="my-project" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="my-project" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="my-project" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="renderer" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="my-project" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="my-project" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="renderer" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="components" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
<path>
|
||||||
|
<item name="my-project" type="b2602c69:ProjectViewProjectNode" />
|
||||||
|
<item name="my-project" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="src" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="renderer" type="462c0819:PsiDirectoryNode" />
|
||||||
|
<item name="router" type="462c0819:PsiDirectoryNode" />
|
||||||
|
</path>
|
||||||
|
</expand>
|
||||||
|
<select />
|
||||||
|
</subPane>
|
||||||
|
</pane>
|
||||||
|
</panes>
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent">
|
||||||
|
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||||
|
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
|
||||||
|
<property name="node.js.detected.package.eslint" value="true" />
|
||||||
|
<property name="node.js.path.for.package.eslint" value="project" />
|
||||||
|
<property name="node.js.selected.package.eslint" value="$PROJECT_DIR$/node_modules/eslint" />
|
||||||
|
<property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
|
||||||
|
<property name="nodejs_npm_path_reset_for_default_project" value="true" />
|
||||||
|
<property name="nodejs_package_manager_path" value="npm" />
|
||||||
|
<property name="prettierjs.PrettierConfiguration.Package" value="$PROJECT_DIR$/node_modules/prettier" />
|
||||||
|
<property name="ts.external.directory.path" value="$APPLICATION_HOME_DIR$/plugins/JavaScriptLanguage/jsLanguageServicesImpl/external" />
|
||||||
|
</component>
|
||||||
|
<component name="RunDashboard">
|
||||||
|
<option name="ruleStates">
|
||||||
|
<list>
|
||||||
|
<RuleState>
|
||||||
|
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
|
||||||
|
</RuleState>
|
||||||
|
<RuleState>
|
||||||
|
<option name="name" value="StatusDashboardGroupingRule" />
|
||||||
|
</RuleState>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
<component name="SvnConfiguration">
|
||||||
|
<configuration />
|
||||||
|
</component>
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="55e9631d-9eec-4a61-b221-10a0c409abfa" name="Default Changelist" comment="" />
|
||||||
|
<created>1536134871730</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1536134871730</updated>
|
||||||
|
<workItem from="1536134873014" duration="52000" />
|
||||||
|
<workItem from="1536135279029" duration="4952000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TimeTrackingManager">
|
||||||
|
<option name="totallyTimeSpent" value="5004000" />
|
||||||
|
</component>
|
||||||
|
<component name="ToolWindowManager">
|
||||||
|
<frame x="1920" y="32" width="1920" height="1048" extended-state="6" />
|
||||||
|
<editor active="true" />
|
||||||
|
<layout>
|
||||||
|
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2498671" />
|
||||||
|
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
|
||||||
|
<window_info id="npm" order="2" side_tool="true" />
|
||||||
|
<window_info id="Favorites" order="3" side_tool="true" />
|
||||||
|
<window_info anchor="bottom" id="TypeScript" />
|
||||||
|
<window_info anchor="bottom" id="Message" order="0" />
|
||||||
|
<window_info anchor="bottom" id="Find" order="1" />
|
||||||
|
<window_info anchor="bottom" id="Run" order="2" />
|
||||||
|
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
|
||||||
|
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
||||||
|
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
|
||||||
|
<window_info anchor="bottom" id="TODO" order="6" />
|
||||||
|
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
|
||||||
|
<window_info anchor="bottom" id="Version Control" order="8" show_stripe_button="false" />
|
||||||
|
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
|
||||||
|
<window_info anchor="bottom" id="Terminal" order="10" />
|
||||||
|
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
|
||||||
|
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
|
||||||
|
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
|
||||||
|
</layout>
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="1" />
|
||||||
|
</component>
|
||||||
|
<component name="VcsContentAnnotationSettings">
|
||||||
|
<option name="myLimit" value="2678400000" />
|
||||||
|
</component>
|
||||||
|
<component name="editorHistoryManager">
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/components/WelcomeView/SystemInformation.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/components/WelcomeView.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="364">
|
||||||
|
<caret line="14" column="37" lean-forward="true" selection-start-line="14" selection-start-column="37" selection-end-line="14" selection-end-column="37" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/build/icons/icon.ico">
|
||||||
|
<provider selected="true" editor-type-id="images" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/build/icons/icon.icns">
|
||||||
|
<provider selected="true" editor-type-id="images" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/build/icons/256x256.png">
|
||||||
|
<provider selected="true" editor-type-id="images" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/node_modules/@fortawesome/free-solid-svg-icons/faAdjust.d.ts">
|
||||||
|
<provider selected="true" editor-type-id="text-editor" />
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/components/rm.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="390">
|
||||||
|
<caret line="15" selection-start-line="15" selection-end-line="15" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/package.json">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1950">
|
||||||
|
<caret line="75" column="38" lean-forward="true" selection-start-line="75" selection-start-column="38" selection-end-line="75" selection-end-column="38" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/router/index.js">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="650">
|
||||||
|
<caret line="25" selection-start-line="25" selection-end-line="25" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#21#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/src/renderer/App.vue">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="339">
|
||||||
|
<caret line="69" column="7" selection-start-line="69" selection-start-column="7" selection-end-line="69" selection-end-column="7" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#1321#1327#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
+43
@@ -0,0 +1,43 @@
|
|||||||
|
# Commented sections below can be used to run tests on the CI server
|
||||||
|
# https://simulatedgreg.gitbooks.io/electron-vue/content/en/testing.html#on-the-subject-of-ci-testing
|
||||||
|
osx_image: xcode8.3
|
||||||
|
sudo: required
|
||||||
|
dist: trusty
|
||||||
|
language: c
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- os: osx
|
||||||
|
- os: linux
|
||||||
|
env: CC=clang CXX=clang++ npm_config_clang=1
|
||||||
|
compiler: clang
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- node_modules
|
||||||
|
- "$HOME/.electron"
|
||||||
|
- "$HOME/.cache"
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- libgnome-keyring-dev
|
||||||
|
- icnsutils
|
||||||
|
#- xvfb
|
||||||
|
before_install:
|
||||||
|
- mkdir -p /tmp/git-lfs && curl -L https://github.com/github/git-lfs/releases/download/v1.2.1/git-lfs-$([
|
||||||
|
"$TRAVIS_OS_NAME" == "linux" ] && echo "linux" || echo "darwin")-amd64-1.2.1.tar.gz
|
||||||
|
| tar -xz -C /tmp/git-lfs --strip-components 1 && /tmp/git-lfs/git-lfs pull
|
||||||
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils; fi
|
||||||
|
install:
|
||||||
|
#- export DISPLAY=':99.0'
|
||||||
|
#- Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
|
||||||
|
- nvm install 7
|
||||||
|
- curl -o- -L https://yarnpkg.com/install.sh | bash
|
||||||
|
- source ~/.bashrc
|
||||||
|
- npm install -g xvfb-maybe
|
||||||
|
- yarn
|
||||||
|
script:
|
||||||
|
#- xvfb-maybe node_modules/.bin/karma start test/unit/karma.conf.js
|
||||||
|
#- yarn run pack && xvfb-maybe node_modules/.bin/mocha test/e2e
|
||||||
|
- yarn run build
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# my-project
|
||||||
|
|
||||||
|
> An electron-vue project
|
||||||
|
|
||||||
|
#### Build Setup
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
# install dependencies
|
||||||
|
npm install
|
||||||
|
|
||||||
|
# serve with hot reload at localhost:9080
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# build electron application for production
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
# run unit & end-to-end tests
|
||||||
|
npm test
|
||||||
|
|
||||||
|
|
||||||
|
# lint all JS/Vue component files in `src/`
|
||||||
|
npm run lint
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
This project was generated with [electron-vue](https://github.com/SimulatedGREG/electron-vue)@[fad1966](https://github.com/SimulatedGREG/electron-vue/tree/fad1966ffb4b7f27639e224bbbebf349f7ef7d8a) using [vue-cli](https://github.com/vuejs/vue-cli). Documentation about the original structure can be found [here](https://simulatedgreg.gitbooks.io/electron-vue/content/index.html).
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Commented sections below can be used to run tests on the CI server
|
||||||
|
# https://simulatedgreg.gitbooks.io/electron-vue/content/en/testing.html#on-the-subject-of-ci-testing
|
||||||
|
version: 0.1.{build}
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
|
||||||
|
image: Visual Studio 2017
|
||||||
|
platform:
|
||||||
|
- x64
|
||||||
|
|
||||||
|
cache:
|
||||||
|
- node_modules
|
||||||
|
- '%APPDATA%\npm-cache'
|
||||||
|
- '%USERPROFILE%\.electron'
|
||||||
|
- '%USERPROFILE%\AppData\Local\Yarn\cache'
|
||||||
|
|
||||||
|
init:
|
||||||
|
- git config --global core.autocrlf input
|
||||||
|
|
||||||
|
install:
|
||||||
|
- ps: Install-Product node 8 x64
|
||||||
|
- choco install yarn --ignore-dependencies
|
||||||
|
- git reset --hard HEAD
|
||||||
|
- yarn
|
||||||
|
- node --version
|
||||||
|
|
||||||
|
build_script:
|
||||||
|
#- yarn test
|
||||||
|
- yarn build
|
||||||
|
|
||||||
|
test: off
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 35 KiB |
Binary file not shown.
Binary file not shown.
|
After Width: | Height: | Size: 257 KiB |
Vendored
Vendored
Generated
+14983
File diff suppressed because it is too large
Load Diff
+133
@@ -0,0 +1,133 @@
|
|||||||
|
{
|
||||||
|
"name": "my-project",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"author": "Thomas <thomas.philippot@labo-mylab.fr>",
|
||||||
|
"description": "An electron-vue project",
|
||||||
|
"license": null,
|
||||||
|
"main": "./dist/electron/main.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": "node .electron-vue/build.js && electron-builder",
|
||||||
|
"build:dir": "node .electron-vue/build.js && electron-builder --dir",
|
||||||
|
"build:clean": "cross-env BUILD_TARGET=clean node .electron-vue/build.js",
|
||||||
|
"build:web": "cross-env BUILD_TARGET=web node .electron-vue/build.js",
|
||||||
|
"dev": "node .electron-vue/dev-runner.js",
|
||||||
|
"watch": "cross-env BUILD_TARGET=web node .electron-vue/dev-runner.js",
|
||||||
|
"e2e": "npm run pack && mocha test/e2e",
|
||||||
|
"lint": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter src test",
|
||||||
|
"lint:fix": "eslint --ext .js,.vue -f ./node_modules/eslint-friendly-formatter --fix src test",
|
||||||
|
"pack": "npm run pack:main && npm run pack:renderer",
|
||||||
|
"pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
|
||||||
|
"pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
|
||||||
|
"test": "npm run unit && npm run e2e",
|
||||||
|
"unit": "karma start test/unit/karma.conf.js",
|
||||||
|
"postinstall": "npm run lint:fix"
|
||||||
|
},
|
||||||
|
"build": {
|
||||||
|
"productName": "my-project",
|
||||||
|
"appId": "org.simulatedgreg.electron-vue",
|
||||||
|
"directories": {
|
||||||
|
"output": "build"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist/electron/**/*"
|
||||||
|
],
|
||||||
|
"dmg": {
|
||||||
|
"contents": [
|
||||||
|
{
|
||||||
|
"x": 410,
|
||||||
|
"y": 150,
|
||||||
|
"type": "link",
|
||||||
|
"path": "/Applications"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 130,
|
||||||
|
"y": 150,
|
||||||
|
"type": "file"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"mac": {
|
||||||
|
"icon": "build/icons/icon.icns"
|
||||||
|
},
|
||||||
|
"win": {
|
||||||
|
"icon": "build/icons/icon.ico"
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"icon": "build/icons"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@fortawesome/fontawesome-svg-core": "^1.2.4",
|
||||||
|
"@fortawesome/free-solid-svg-icons": "^5.3.1",
|
||||||
|
"@fortawesome/vue-fontawesome": "^0.1.1",
|
||||||
|
"axios": "^0.16.1",
|
||||||
|
"fontawesome": "^4.7.2",
|
||||||
|
"vue": "^2.4.2",
|
||||||
|
"vue-electron": "^1.0.6",
|
||||||
|
"vue-router": "^2.5.3",
|
||||||
|
"vuetify": "1.0.0",
|
||||||
|
"vuex": "^2.3.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@fortawesome/fontawesome-free": "^5.3.1",
|
||||||
|
"babel-core": "^6.25.0",
|
||||||
|
"babel-eslint": "^7.2.3",
|
||||||
|
"babel-loader": "^7.1.1",
|
||||||
|
"babel-plugin-istanbul": "^4.1.1",
|
||||||
|
"babel-plugin-transform-runtime": "^6.23.0",
|
||||||
|
"babel-preset-env": "^1.6.0",
|
||||||
|
"babel-preset-stage-0": "^6.24.1",
|
||||||
|
"babel-register": "^6.24.1",
|
||||||
|
"babili-webpack-plugin": "^0.1.2",
|
||||||
|
"cfonts": "^1.1.3",
|
||||||
|
"chai": "^4.0.0",
|
||||||
|
"chalk": "^2.1.0",
|
||||||
|
"copy-webpack-plugin": "^4.0.1",
|
||||||
|
"cross-env": "^5.0.5",
|
||||||
|
"css-loader": "^0.28.4",
|
||||||
|
"del": "^3.0.0",
|
||||||
|
"devtron": "^1.4.0",
|
||||||
|
"electron": "^1.7.5",
|
||||||
|
"electron-builder": "^19.19.1",
|
||||||
|
"electron-debug": "^1.4.0",
|
||||||
|
"electron-devtools-installer": "^2.2.0",
|
||||||
|
"eslint": "^4.4.1",
|
||||||
|
"eslint-config-standard": "^10.2.1",
|
||||||
|
"eslint-friendly-formatter": "^3.0.0",
|
||||||
|
"eslint-loader": "^1.9.0",
|
||||||
|
"eslint-plugin-html": "^3.1.1",
|
||||||
|
"eslint-plugin-import": "^2.7.0",
|
||||||
|
"eslint-plugin-node": "^5.1.1",
|
||||||
|
"eslint-plugin-promise": "^3.5.0",
|
||||||
|
"eslint-plugin-standard": "^3.0.1",
|
||||||
|
"extract-text-webpack-plugin": "^3.0.0",
|
||||||
|
"file-loader": "^0.11.2",
|
||||||
|
"html-webpack-plugin": "^2.30.1",
|
||||||
|
"inject-loader": "^3.0.0",
|
||||||
|
"karma": "^1.3.0",
|
||||||
|
"karma-chai": "^0.1.0",
|
||||||
|
"karma-coverage": "^1.1.1",
|
||||||
|
"karma-electron": "^5.1.1",
|
||||||
|
"karma-mocha": "^1.2.0",
|
||||||
|
"karma-sourcemap-loader": "^0.3.7",
|
||||||
|
"karma-spec-reporter": "^0.0.31",
|
||||||
|
"karma-webpack": "^2.0.1",
|
||||||
|
"mocha": "^3.0.2",
|
||||||
|
"multispinner": "^0.2.1",
|
||||||
|
"node-loader": "^0.6.0",
|
||||||
|
"require-dir": "^0.3.0",
|
||||||
|
"spectron": "^3.7.1",
|
||||||
|
"style-loader": "^0.18.2",
|
||||||
|
"stylus": "^0.54.5",
|
||||||
|
"stylus-loader": "^3.0.1",
|
||||||
|
"url-loader": "^0.5.9",
|
||||||
|
"vue-html-loader": "^1.2.4",
|
||||||
|
"vue-loader": "^13.0.5",
|
||||||
|
"vue-style-loader": "^3.0.1",
|
||||||
|
"vue-template-compiler": "^2.4.2",
|
||||||
|
"webpack": "^3.5.2",
|
||||||
|
"webpack-dev-server": "^2.7.1",
|
||||||
|
"webpack-hot-middleware": "^2.18.2",
|
||||||
|
"webpack-merge": "^4.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>my-project</title>
|
||||||
|
<% if (htmlWebpackPlugin.options.nodeModules) { %>
|
||||||
|
<!-- Add `node_modules/` to global paths so `require` works properly in development -->
|
||||||
|
<script>
|
||||||
|
require('module').globalPaths.push('<%= htmlWebpackPlugin.options.nodeModules.replace(/\\/g, '\\\\') %>')
|
||||||
|
</script>
|
||||||
|
<% } %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- Set `__static` path to static files in production -->
|
||||||
|
<script>
|
||||||
|
if (process.env.NODE_ENV !== 'development') window.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- webpack builds are automatically injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/**
|
||||||
|
* This file is used specifically and only for development. It installs
|
||||||
|
* `electron-debug` & `vue-devtools`. There shouldn't be any need to
|
||||||
|
* modify this file, but it can be used to extend your development
|
||||||
|
* environment.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
// Set environment for development
|
||||||
|
process.env.NODE_ENV = 'development'
|
||||||
|
|
||||||
|
// Install `electron-debug` with `devtron`
|
||||||
|
require('electron-debug')({ showDevTools: true })
|
||||||
|
|
||||||
|
// Install `vue-devtools`
|
||||||
|
require('electron').app.on('ready', () => {
|
||||||
|
let installExtension = require('electron-devtools-installer')
|
||||||
|
installExtension.default(installExtension.VUEJS_DEVTOOLS)
|
||||||
|
.then(() => {})
|
||||||
|
.catch(err => {
|
||||||
|
console.log('Unable to install `vue-devtools`: \n', err)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
// Require `main` process to boot app
|
||||||
|
require('./index')
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
import { app, BrowserWindow } from 'electron'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set `__static` path to static files in production
|
||||||
|
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
|
||||||
|
*/
|
||||||
|
if (process.env.NODE_ENV !== 'development') {
|
||||||
|
global.__static = require('path').join(__dirname, '/static').replace(/\\/g, '\\\\')
|
||||||
|
}
|
||||||
|
|
||||||
|
let mainWindow
|
||||||
|
const winURL = process.env.NODE_ENV === 'development'
|
||||||
|
? `http://localhost:9080`
|
||||||
|
: `file://${__dirname}/index.html`
|
||||||
|
|
||||||
|
function createWindow () {
|
||||||
|
/**
|
||||||
|
* Initial window options
|
||||||
|
*/
|
||||||
|
mainWindow = new BrowserWindow({
|
||||||
|
height: 563,
|
||||||
|
useContentSize: true,
|
||||||
|
width: 1000
|
||||||
|
})
|
||||||
|
|
||||||
|
mainWindow.loadURL(winURL)
|
||||||
|
|
||||||
|
mainWindow.on('closed', () => {
|
||||||
|
mainWindow = null
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
app.on('ready', createWindow)
|
||||||
|
|
||||||
|
app.on('window-all-closed', () => {
|
||||||
|
if (process.platform !== 'darwin') {
|
||||||
|
app.quit()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
app.on('activate', () => {
|
||||||
|
if (mainWindow === null) {
|
||||||
|
createWindow()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Auto Updater
|
||||||
|
*
|
||||||
|
* Uncomment the following code below and install `electron-updater` to
|
||||||
|
* support auto updating. Code Signing with a valid certificate is required.
|
||||||
|
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-electron-builder.html#auto-updating
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
import { autoUpdater } from 'electron-updater'
|
||||||
|
|
||||||
|
autoUpdater.on('update-downloaded', () => {
|
||||||
|
autoUpdater.quitAndInstall()
|
||||||
|
})
|
||||||
|
|
||||||
|
app.on('ready', () => {
|
||||||
|
if (process.env.NODE_ENV === 'production') autoUpdater.checkForUpdates()
|
||||||
|
})
|
||||||
|
*/
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<v-app dark>
|
||||||
|
<v-navigation-drawer
|
||||||
|
fixed
|
||||||
|
v-model="drawer"
|
||||||
|
app
|
||||||
|
clipped
|
||||||
|
>
|
||||||
|
<v-list>
|
||||||
|
<v-list-tile
|
||||||
|
router
|
||||||
|
:to="item.to"
|
||||||
|
:key="i"
|
||||||
|
v-for="(item, i) in items"
|
||||||
|
exact
|
||||||
|
>
|
||||||
|
<v-list-tile-action>
|
||||||
|
<v-icon v-html="item.icon"></v-icon>
|
||||||
|
</v-list-tile-action>
|
||||||
|
<v-list-tile-content>
|
||||||
|
<v-list-tile-title v-text="item.title"></v-list-tile-title>
|
||||||
|
</v-list-tile-content>
|
||||||
|
</v-list-tile>
|
||||||
|
</v-list>
|
||||||
|
</v-navigation-drawer>
|
||||||
|
<v-toolbar fixed app clipped-left>
|
||||||
|
<v-toolbar-side-icon @click.native.stop="drawer = !drawer"></v-toolbar-side-icon>
|
||||||
|
<v-btn
|
||||||
|
icon
|
||||||
|
@click="back"
|
||||||
|
>
|
||||||
|
<v-icon>chevron_left</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-toolbar-title v-text="title"></v-toolbar-title>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-content>
|
||||||
|
<v-container fluid fill-height>
|
||||||
|
<v-slide-y-transition mode="out-in">
|
||||||
|
<router-view></router-view>
|
||||||
|
</v-slide-y-transition>
|
||||||
|
</v-container>
|
||||||
|
</v-content>
|
||||||
|
<v-footer :fixed="fixed" app>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<span>© 2017</span>
|
||||||
|
</v-footer>
|
||||||
|
</v-app>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'my-project',
|
||||||
|
data: () => ({
|
||||||
|
clipped: false,
|
||||||
|
drawer: false,
|
||||||
|
fixed: false,
|
||||||
|
items: [
|
||||||
|
{ icon: 'fas fa-home', title: 'Welcome', to: '/' },
|
||||||
|
{ icon: 'fas fa-lightbulb', title: 'Inspire', to: '/inspire' },
|
||||||
|
{ icon: 'fas fa-leaf', title: 'RM', to: '/rm' }
|
||||||
|
],
|
||||||
|
miniVariant: false,
|
||||||
|
right: true,
|
||||||
|
rightDrawer: false,
|
||||||
|
title: 'My awesome APP'
|
||||||
|
}),
|
||||||
|
methods: {
|
||||||
|
back () {
|
||||||
|
this.$router.go(-1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
@import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons');
|
||||||
|
@import url('https://use.fontawesome.com/releases/v5.0.13/css/all.css');
|
||||||
|
/* Global CSS */
|
||||||
|
|
||||||
|
</style>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,23 @@
|
|||||||
|
<template>
|
||||||
|
<v-layout column justify-center>
|
||||||
|
<v-flex>
|
||||||
|
<img src="/static/v.png" alt="Vuetify.js" class="mb-5" />
|
||||||
|
<blockquote class="text-xs-center">
|
||||||
|
“First, solve the problem. Then, write the code.”
|
||||||
|
<footer>
|
||||||
|
<small>
|
||||||
|
<em>—John Johnson</em>
|
||||||
|
</small>
|
||||||
|
</footer>
|
||||||
|
</blockquote>
|
||||||
|
</v-flex>
|
||||||
|
</v-layout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
img {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
<template>
|
||||||
|
<v-layout row wrap justify-center id="wrapper">
|
||||||
|
<v-flex xs12 md4 offset-md1 class="text-xs-center centered">
|
||||||
|
<img id="logo" class="logo" src="~@/assets/logo.png" alt="electron-vue">
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 md6 class="text-xs-center centered">
|
||||||
|
<img id="logo" class="logo" src="/static/v.png" alt="Vuetifyjs">
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs10 class="mt-3">
|
||||||
|
<v-card>
|
||||||
|
<v-card-text>
|
||||||
|
<p>Welcome to the Electron-vue + Vuetify template.</p>
|
||||||
|
<p>Vuetify is a progressive Material Design component framework for Vue.js. It was designed to empower developers to create amazing applications. For more information on Vuetify, check out the <a href="https://vuetifyjs.com" target="_blank">documentation</a>. If you have questions, please join the official <a href="https://chat.vuetifyjs.com/" target="_blank" title="chat">discord</a>. Find a bug? Report it on the github <a href="https://github.com/vuetifyjs/vuetify/issues" target="_blank" title="contribute">issue board</a>.</p>
|
||||||
|
<p>Thank you for developing with Vuetify and I look forward to bringing more exciting features in the future.</p>
|
||||||
|
<div class="text-xs-right">
|
||||||
|
<em><small>— John Leider</small></em>
|
||||||
|
</div>
|
||||||
|
</v-card-text>
|
||||||
|
<v-card-actions>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn primary flat router to="/inspire">Continue</v-btn>
|
||||||
|
</v-card-actions>
|
||||||
|
</v-card>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs10 class="mt-4">
|
||||||
|
<system-information></system-information>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs10 class="mt-4">
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="headline">Docs</v-card-title>
|
||||||
|
<v-divider></v-divider>
|
||||||
|
<v-card-actions class="pt-3 pb-3">
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn class="link-btn" @click="open('https://vuejs.org/v2/guide/')">Vue</v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn class="link-btn" @click="open('https://electron.atom.io/docs/')">Electron</v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn class="link-btn" @click="open('https://vuetifyjs.com')">Vuetify</v-btn>
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
</v-card-actions>
|
||||||
|
</v-card>
|
||||||
|
</v-flex>
|
||||||
|
</v-layout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import SystemInformation from './WelcomeView/SystemInformation'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'welcome',
|
||||||
|
components: { SystemInformation },
|
||||||
|
methods: {
|
||||||
|
open (link) {
|
||||||
|
this.$electron.shell.openExternal(link)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.centered
|
||||||
|
{
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo
|
||||||
|
{
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.link-btn
|
||||||
|
{
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
<template>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title class="headline">
|
||||||
|
Informations
|
||||||
|
</v-card-title>
|
||||||
|
<v-divider></v-divider>
|
||||||
|
<v-layout row wrap class="pa-3">
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Path:</div>
|
||||||
|
<div class="value">{{ path }}</div>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Name:</div>
|
||||||
|
<div class="value">{{ name }}</div>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Vue.js:</div>
|
||||||
|
<div class="value">{{ vue }}</div>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Electron:</div>
|
||||||
|
<div class="value">{{ electron }}</div>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Node:</div>
|
||||||
|
<div class="value">{{ node }}</div>
|
||||||
|
</v-flex>
|
||||||
|
<v-flex xs12 sm6 md4 class="item">
|
||||||
|
<div class="name">Platform:</div>
|
||||||
|
<div class="value">{{ platform }}</div>
|
||||||
|
</v-flex>
|
||||||
|
</v-layout>
|
||||||
|
</v-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
electron: process.versions['atom-shell'],
|
||||||
|
name: 'landing-page',
|
||||||
|
node: process.versions.node,
|
||||||
|
path: '/',
|
||||||
|
platform: require('os').platform(),
|
||||||
|
vue: require('vue/package.json').version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.item
|
||||||
|
{
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.name
|
||||||
|
{
|
||||||
|
display: inline;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 16px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value
|
||||||
|
{
|
||||||
|
display: inline;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 18px;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<v-layout row wrap justify-center id="wrapper">
|
||||||
|
<p>Coucou RM</p>
|
||||||
|
</v-layout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'rm'
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import axios from 'axios'
|
||||||
|
import Vuetify from 'vuetify'
|
||||||
|
import 'vuetify/dist/vuetify.css'
|
||||||
|
|
||||||
|
import App from './App'
|
||||||
|
import router from './router'
|
||||||
|
import store from './store'
|
||||||
|
|
||||||
|
Vue.use(Vuetify)
|
||||||
|
if (!process.env.IS_WEB) Vue.use(require('vue-electron'))
|
||||||
|
Vue.http = Vue.prototype.$http = axios
|
||||||
|
Vue.config.productionTip = false
|
||||||
|
|
||||||
|
/* eslint-disable no-new */
|
||||||
|
new Vue({
|
||||||
|
components: { App },
|
||||||
|
router,
|
||||||
|
store,
|
||||||
|
template: '<App/>'
|
||||||
|
}).$mount('#app')
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import Router from 'vue-router'
|
||||||
|
|
||||||
|
Vue.use(Router)
|
||||||
|
|
||||||
|
export default new Router({
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
name: 'welcome-view',
|
||||||
|
component: require('@/components/WelcomeView').default
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/inspire',
|
||||||
|
name: 'inspire',
|
||||||
|
component: require('@/components/InspireView').default
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/rm',
|
||||||
|
name: 'rm',
|
||||||
|
component: require('@/components/rm').default
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '*',
|
||||||
|
redirect: '/'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
|
||||||
|
import modules from './modules'
|
||||||
|
|
||||||
|
Vue.use(Vuex)
|
||||||
|
|
||||||
|
export default new Vuex.Store({
|
||||||
|
modules,
|
||||||
|
strict: process.env.NODE_ENV !== 'production'
|
||||||
|
})
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
const state = {
|
||||||
|
main: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
DECREMENT_MAIN_COUNTER (state) {
|
||||||
|
state.main--
|
||||||
|
},
|
||||||
|
INCREMENT_MAIN_COUNTER (state) {
|
||||||
|
state.main++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
someAsyncTask ({ commit }) {
|
||||||
|
// do something async
|
||||||
|
commit('INCREMENT_MAIN_COUNTER')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state,
|
||||||
|
mutations,
|
||||||
|
actions
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* The file enables `@/store/index.js` to import all vuex modules
|
||||||
|
* in a one-shot manner. There should not be any reason to edit this file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const files = require.context('.', false, /\.js$/)
|
||||||
|
const modules = {}
|
||||||
|
|
||||||
|
files.keys().forEach(key => {
|
||||||
|
if (key === './index.js') return
|
||||||
|
modules[key.replace(/(\.\/|\.js)/g, '')] = files(key).default
|
||||||
|
})
|
||||||
|
|
||||||
|
export default modules
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.5 KiB |
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"env": {
|
||||||
|
"mocha": true
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"assert": true,
|
||||||
|
"expect": true,
|
||||||
|
"should": true,
|
||||||
|
"__static": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
// Set BABEL_ENV to use proper env config
|
||||||
|
process.env.BABEL_ENV = 'test'
|
||||||
|
|
||||||
|
// Enable use of ES6+ on required files
|
||||||
|
require('babel-register')({
|
||||||
|
ignore: /node_modules/
|
||||||
|
})
|
||||||
|
|
||||||
|
// Attach Chai APIs to global scope
|
||||||
|
const { expect, should, assert } = require('chai')
|
||||||
|
global.expect = expect
|
||||||
|
global.should = should
|
||||||
|
global.assert = assert
|
||||||
|
|
||||||
|
// Require all JS files in `./specs` for Mocha to consume
|
||||||
|
require('require-dir')('./specs')
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import utils from '../utils'
|
||||||
|
|
||||||
|
describe('Launch', function () {
|
||||||
|
beforeEach(utils.beforeEach)
|
||||||
|
afterEach(utils.afterEach)
|
||||||
|
|
||||||
|
it('shows the proper application title', function () {
|
||||||
|
return this.app.client.getTitle()
|
||||||
|
.then(title => {
|
||||||
|
expect(title).to.equal('my-project')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import electron from 'electron'
|
||||||
|
import { Application } from 'spectron'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
afterEach () {
|
||||||
|
this.timeout(10000)
|
||||||
|
|
||||||
|
if (this.app && this.app.isRunning()) {
|
||||||
|
return this.app.stop()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
beforeEach () {
|
||||||
|
this.timeout(10000)
|
||||||
|
this.app = new Application({
|
||||||
|
path: electron,
|
||||||
|
args: ['dist/electron/main.js'],
|
||||||
|
startTimeout: 10000,
|
||||||
|
waitTimeout: 10000
|
||||||
|
})
|
||||||
|
|
||||||
|
return this.app.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
Vue.config.devtools = false
|
||||||
|
Vue.config.productionTip = false
|
||||||
|
|
||||||
|
// require all test files (files that ends with .spec.js)
|
||||||
|
const testsContext = require.context('./specs', true, /\.spec$/)
|
||||||
|
testsContext.keys().forEach(testsContext)
|
||||||
|
|
||||||
|
// require all src files except main.js for coverage.
|
||||||
|
// you can also change this to match only the subset of files that
|
||||||
|
// you want coverage for.
|
||||||
|
const srcContext = require.context('../../src/renderer', true, /^\.\/(?!main(\.js)?$)/)
|
||||||
|
srcContext.keys().forEach(srcContext)
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
'use strict'
|
||||||
|
|
||||||
|
const path = require('path')
|
||||||
|
const merge = require('webpack-merge')
|
||||||
|
const webpack = require('webpack')
|
||||||
|
|
||||||
|
const baseConfig = require('../../.electron-vue/webpack.renderer.config')
|
||||||
|
const projectRoot = path.resolve(__dirname, '../../src/renderer')
|
||||||
|
|
||||||
|
// Set BABEL_ENV to use proper preset config
|
||||||
|
process.env.BABEL_ENV = 'test'
|
||||||
|
|
||||||
|
let webpackConfig = merge(baseConfig, {
|
||||||
|
devtool: '#inline-source-map',
|
||||||
|
plugins: [
|
||||||
|
new webpack.DefinePlugin({
|
||||||
|
'process.env.NODE_ENV': '"testing"'
|
||||||
|
})
|
||||||
|
]
|
||||||
|
})
|
||||||
|
|
||||||
|
// don't treat dependencies as externals
|
||||||
|
delete webpackConfig.entry
|
||||||
|
delete webpackConfig.externals
|
||||||
|
delete webpackConfig.output.libraryTarget
|
||||||
|
|
||||||
|
// apply vue option to apply isparta-loader on js
|
||||||
|
webpackConfig.module.rules
|
||||||
|
.find(rule => rule.use.loader === 'vue-loader').use.options.loaders.js = 'babel-loader'
|
||||||
|
|
||||||
|
module.exports = config => {
|
||||||
|
config.set({
|
||||||
|
browsers: ['visibleElectron'],
|
||||||
|
client: {
|
||||||
|
useIframe: false
|
||||||
|
},
|
||||||
|
coverageReporter: {
|
||||||
|
dir: './coverage',
|
||||||
|
reporters: [
|
||||||
|
{ type: 'lcov', subdir: '.' },
|
||||||
|
{ type: 'text-summary' }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
customLaunchers: {
|
||||||
|
'visibleElectron': {
|
||||||
|
base: 'Electron',
|
||||||
|
flags: ['--show']
|
||||||
|
}
|
||||||
|
},
|
||||||
|
frameworks: ['mocha', 'chai'],
|
||||||
|
files: ['./index.js'],
|
||||||
|
preprocessors: {
|
||||||
|
'./index.js': ['webpack', 'sourcemap']
|
||||||
|
},
|
||||||
|
reporters: ['spec', 'coverage'],
|
||||||
|
singleRun: true,
|
||||||
|
webpack: webpackConfig,
|
||||||
|
webpackMiddleware: {
|
||||||
|
noInfo: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import LandingPage from '@/components/LandingPage'
|
||||||
|
|
||||||
|
describe('LandingPage.vue', () => {
|
||||||
|
it('should render correct contents', () => {
|
||||||
|
const vm = new Vue({
|
||||||
|
el: document.createElement('div'),
|
||||||
|
render: h => h(LandingPage)
|
||||||
|
}).$mount()
|
||||||
|
|
||||||
|
expect(vm.$el.querySelector('.title').textContent).to.contain('Welcome to your new project!')
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user