mirror of
https://github.com/marktext/marktext.git
synced 2025-05-02 23:43:41 +08:00
Upgrade to Electron 7 (#1543)
* Upgrade to Electron 7 * Fix E2E test issue with Electron 7 * Fix native theme event * Remove runtime native theme detection * Update Electron to v7.0.1 * Fix keytar exception
This commit is contained in:
parent
0ced076328
commit
09f920eade
@ -19,6 +19,7 @@ files:
|
|||||||
- "!node_modules/vega-lite/build/vega-lite*.js.map"
|
- "!node_modules/vega-lite/build/vega-lite*.js.map"
|
||||||
# Don't bundle build files
|
# Don't bundle build files
|
||||||
- "!node_modules/@felixrieseberg/spellchecker/bin"
|
- "!node_modules/@felixrieseberg/spellchecker/bin"
|
||||||
|
- "!node_modules/@hfelix/spellchecker/bin"
|
||||||
- "!node_modules/ced/bin"
|
- "!node_modules/ced/bin"
|
||||||
- "!node_modules/ced/vendor"
|
- "!node_modules/ced/vendor"
|
||||||
- "!node_modules/cld/bin"
|
- "!node_modules/cld/bin"
|
||||||
@ -34,6 +35,7 @@ files:
|
|||||||
- "!node_modules/ced/build/vendor"
|
- "!node_modules/ced/build/vendor"
|
||||||
# Don't bundle LGPL source files
|
# Don't bundle LGPL source files
|
||||||
- "!node_modules/@felixrieseberg/spellchecker/vendor"
|
- "!node_modules/@felixrieseberg/spellchecker/vendor"
|
||||||
|
- "!node_modules/@hfelix/spellchecker/vendor"
|
||||||
extraFiles:
|
extraFiles:
|
||||||
- "LICENSE"
|
- "LICENSE"
|
||||||
- from: "resources/THIRD-PARTY-LICENSES.txt"
|
- from: "resources/THIRD-PARTY-LICENSES.txt"
|
||||||
|
11
package.json
11
package.json
@ -34,7 +34,7 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hfelix/electron-localshortcut": "^3.1.1",
|
"@hfelix/electron-localshortcut": "^3.1.1",
|
||||||
"@hfelix/electron-spellchecker": "^1.0.0-rc.1",
|
"@hfelix/electron-spellchecker": "^1.0.0-rc.3",
|
||||||
"@octokit/rest": "^16.33.1",
|
"@octokit/rest": "^16.33.1",
|
||||||
"arg": "^4.1.1",
|
"arg": "^4.1.1",
|
||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
@ -65,7 +65,7 @@
|
|||||||
"joplin-turndown-plugin-gfm": "^1.0.11",
|
"joplin-turndown-plugin-gfm": "^1.0.11",
|
||||||
"katex": "^0.11.1",
|
"katex": "^0.11.1",
|
||||||
"keyboard-layout": "^2.0.16",
|
"keyboard-layout": "^2.0.16",
|
||||||
"keytar": "^5.0.0-beta.3",
|
"keytar": "5.0.0-beta.4",
|
||||||
"mermaid": "^8.4.0",
|
"mermaid": "^8.4.0",
|
||||||
"plist": "^3.0.1",
|
"plist": "^3.0.1",
|
||||||
"popper.js": "^1.16.0",
|
"popper.js": "^1.16.0",
|
||||||
@ -113,7 +113,7 @@
|
|||||||
"del": "^5.1.0",
|
"del": "^5.1.0",
|
||||||
"devtron": "^1.4.0",
|
"devtron": "^1.4.0",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"electron": "^6.1.0",
|
"electron": "^7.0.1",
|
||||||
"electron-builder": "^21.2.0",
|
"electron-builder": "^21.2.0",
|
||||||
"electron-devtools-installer": "^2.2.4",
|
"electron-devtools-installer": "^2.2.4",
|
||||||
"electron-rebuild": "^1.8.6",
|
"electron-rebuild": "^1.8.6",
|
||||||
@ -153,7 +153,7 @@
|
|||||||
"postcss-preset-env": "^6.6.0",
|
"postcss-preset-env": "^6.6.0",
|
||||||
"raw-loader": "^3.1.0",
|
"raw-loader": "^3.1.0",
|
||||||
"require-dir": "^1.2.0",
|
"require-dir": "^1.2.0",
|
||||||
"spectron": "^8.0.0",
|
"spectron": "^9.0.0",
|
||||||
"style-loader": "^1.0.0",
|
"style-loader": "^1.0.0",
|
||||||
"svg-sprite-loader": "^4.1.6",
|
"svg-sprite-loader": "^4.1.6",
|
||||||
"svgo": "^1.3.0",
|
"svgo": "^1.3.0",
|
||||||
@ -171,9 +171,6 @@
|
|||||||
"webpack-hot-middleware": "^2.25.0",
|
"webpack-hot-middleware": "^2.25.0",
|
||||||
"webpack-merge": "^4.2.1"
|
"webpack-merge": "^4.2.1"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
|
||||||
"vscode-windows-registry": "^1.0.2"
|
|
||||||
},
|
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@github.com:marktext/marktext.git"
|
"url": "git@github.com:marktext/marktext.git"
|
||||||
|
@ -3,7 +3,7 @@ import fse from 'fs-extra'
|
|||||||
import { exec } from 'child_process'
|
import { exec } from 'child_process'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import log from 'electron-log'
|
import log from 'electron-log'
|
||||||
import { app, BrowserWindow, clipboard, dialog, ipcMain, systemPreferences } from 'electron'
|
import { app, BrowserWindow, clipboard, dialog, ipcMain, nativeTheme } from 'electron'
|
||||||
import { isChildOfDirectory } from 'common/filesystem/paths'
|
import { isChildOfDirectory } from 'common/filesystem/paths'
|
||||||
import { isLinux, isOsx, isWindows } from '../config'
|
import { isLinux, isOsx, isWindows } from '../config'
|
||||||
import parseArgs from '../cli/parser'
|
import parseArgs from '../cli/parser'
|
||||||
@ -115,7 +115,7 @@ class App {
|
|||||||
const { paths } = this._accessor
|
const { paths } = this._accessor
|
||||||
ensureDefaultDict(paths.userDataPath)
|
ensureDefaultDict(paths.userDataPath)
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
log.error(error)
|
log.error('Error copying Hunspell dictionary: ', error)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,7 +143,13 @@ class App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { startUpAction, defaultDirectoryToOpen } = preferences.getAll()
|
const {
|
||||||
|
startUpAction,
|
||||||
|
defaultDirectoryToOpen,
|
||||||
|
autoSwitchTheme,
|
||||||
|
theme
|
||||||
|
} = preferences.getAll()
|
||||||
|
|
||||||
if (startUpAction === 'folder' && defaultDirectoryToOpen) {
|
if (startUpAction === 'folder' && defaultDirectoryToOpen) {
|
||||||
const info = normalizeMarkdownPath(defaultDirectoryToOpen)
|
const info = normalizeMarkdownPath(defaultDirectoryToOpen)
|
||||||
if (info) {
|
if (info) {
|
||||||
@ -151,29 +157,32 @@ class App {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set initial native theme for theme in preferences.
|
||||||
|
const isDarkTheme = /dark/i.test(theme)
|
||||||
|
if (autoSwitchTheme === 0 && isDarkTheme !== nativeTheme.shouldUseDarkColors) {
|
||||||
|
selectTheme(nativeTheme.shouldUseDarkColors ? 'dark' : 'light')
|
||||||
|
nativeTheme.themeSource = nativeTheme.shouldUseDarkColors ? 'dark' : 'light'
|
||||||
|
} else {
|
||||||
|
nativeTheme.themeSource = isDarkTheme ? 'dark' : 'light'
|
||||||
|
}
|
||||||
|
|
||||||
|
let isDarkMode = nativeTheme.shouldUseDarkColors
|
||||||
|
ipcMain.on('broadcast-preferences-changed', change => {
|
||||||
|
// Set Chromium's color for native elements after theme change.
|
||||||
|
if (change.theme) {
|
||||||
|
const isDarkTheme = /dark/i.test(change.theme)
|
||||||
|
if (isDarkMode !== isDarkTheme) {
|
||||||
|
isDarkMode = isDarkTheme
|
||||||
|
nativeTheme.themeSource = isDarkTheme ? 'dark' : 'light'
|
||||||
|
} else if (nativeTheme.themeSource === 'system') {
|
||||||
|
// Need to set dark or light theme because we set `system` to get the current system theme.
|
||||||
|
nativeTheme.themeSource = isDarkMode ? 'dark' : 'light'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
if (isOsx) {
|
if (isOsx) {
|
||||||
app.dock.setMenu(dockMenu)
|
app.dock.setMenu(dockMenu)
|
||||||
|
|
||||||
// Listen for system theme change and change Mark Text own `dark` and `light`.
|
|
||||||
// In macOS 10.14 Mojave, Apple introduced a new system-wide dark mode for
|
|
||||||
// all macOS computers.
|
|
||||||
systemPreferences.subscribeNotification(
|
|
||||||
'AppleInterfaceThemeChangedNotification',
|
|
||||||
() => {
|
|
||||||
const preferences = this._accessor.preferences
|
|
||||||
const { theme } = preferences.getAll()
|
|
||||||
|
|
||||||
// Application menu is automatically updated via preference manager.
|
|
||||||
if (systemPreferences.isDarkMode() && theme !== 'dark' &&
|
|
||||||
theme !== 'material-dark' && theme !== 'one-dark') {
|
|
||||||
selectTheme('dark')
|
|
||||||
}
|
|
||||||
if (!systemPreferences.isDarkMode() && theme !== 'light' &&
|
|
||||||
theme !== 'ulysses' && theme !== 'graphite') {
|
|
||||||
selectTheme('light')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
} else if (isWindows) {
|
} else if (isWindows) {
|
||||||
app.setJumpList([{
|
app.setJumpList([{
|
||||||
type: 'recent'
|
type: 'recent'
|
||||||
|
@ -16,7 +16,7 @@ export const editorWinOptions = {
|
|||||||
zoomFactor: 1.0
|
zoomFactor: 1.0
|
||||||
}
|
}
|
||||||
|
|
||||||
export const defaultPreferenceWinOptions = {
|
export const preferencesWinOptions = {
|
||||||
width: 950,
|
width: 950,
|
||||||
height: 650,
|
height: 650,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
|
@ -71,7 +71,7 @@ class DataCenter extends EventEmitter {
|
|||||||
|
|
||||||
return Object.assign(data, encryptObj)
|
return Object.assign(data, encryptObj)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error('Failed to decrypt secure keys:', err)
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ class DataCenter extends EventEmitter {
|
|||||||
try {
|
try {
|
||||||
return await keytar.setPassword(serviceName, key, value)
|
return await keytar.setPassword(serviceName, key, value)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error('dataCenter::setItem:', err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return this.store.set(key, value)
|
return this.store.set(key, value)
|
||||||
|
@ -235,7 +235,7 @@ class Watcher {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
log.error(error)
|
log.error('Error while watching files:', error)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -60,9 +60,7 @@ try {
|
|||||||
// Catch errors that may come from invalid configuration files like settings.
|
// Catch errors that may come from invalid configuration files like settings.
|
||||||
const msgHint = err.message.includes('Config schema violation')
|
const msgHint = err.message.includes('Config schema violation')
|
||||||
? 'This seems to be an issue with your configuration file(s). ' : ''
|
? 'This seems to be an issue with your configuration file(s). ' : ''
|
||||||
|
log.error(`Loading Mark Text failed during initialization! ${msgHint}`, err)
|
||||||
log.error(`Loading Mark Text failed during initialization! ${msgHint}`)
|
|
||||||
log.error(err)
|
|
||||||
|
|
||||||
const EXIT_ON_ERROR = !!process.env.MARKTEXT_EXIT_ON_ERROR
|
const EXIT_ON_ERROR = !!process.env.MARKTEXT_EXIT_ON_ERROR
|
||||||
const SHOW_ERROR_DIALOG = !process.env.MARKTEXT_ERROR_INTERACTION
|
const SHOW_ERROR_DIALOG = !process.env.MARKTEXT_ERROR_INTERACTION
|
||||||
|
@ -62,7 +62,7 @@ const handleResponseForExport = async (e, { type, content, pathname, title, page
|
|||||||
}
|
}
|
||||||
win.webContents.send('AGANI::export-success', { type, filePath })
|
win.webContents.send('AGANI::export-success', { type, filePath })
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error('Error while exporting:', err)
|
||||||
const ERROR_MSG = err.message || `Error happened when export ${filePath}`
|
const ERROR_MSG = err.message || `Error happened when export ${filePath}`
|
||||||
win.webContents.send('AGANI::show-notification', {
|
win.webContents.send('AGANI::show-notification', {
|
||||||
title: 'Export failure',
|
title: 'Export failure',
|
||||||
@ -80,19 +80,9 @@ const handleResponseForExport = async (e, { type, content, pathname, title, page
|
|||||||
|
|
||||||
const handleResponseForPrint = e => {
|
const handleResponseForPrint = e => {
|
||||||
const win = BrowserWindow.fromWebContents(e.sender)
|
const win = BrowserWindow.fromWebContents(e.sender)
|
||||||
|
win.webContents.print({ printBackground: true }, () => {
|
||||||
// See GH#749, Electron#16085 and Electron#17523.
|
removePrintServiceFromWindow(win)
|
||||||
dialog.showMessageBox(win, {
|
|
||||||
type: 'info',
|
|
||||||
buttons: ['OK'],
|
|
||||||
defaultId: 0,
|
|
||||||
noLink: true,
|
|
||||||
message: 'Printing doesn\'t work',
|
|
||||||
detail: 'Printing is disabled due to an Electron upstream issue. Please export the document as PDF and print the PDF file. We apologize for the inconvenience!'
|
|
||||||
})
|
})
|
||||||
// win.webContents.print({ printBackground: true }, () => {
|
|
||||||
// removePrintServiceFromWindow(win)
|
|
||||||
// })
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleResponseForSave = async (e, { id, filename, markdown, pathname, options, defaultPath }) => {
|
const handleResponseForSave = async (e, { id, filename, markdown, pathname, options, defaultPath }) => {
|
||||||
@ -140,7 +130,7 @@ const handleResponseForSave = async (e, { id, filename, markdown, pathname, opti
|
|||||||
return id
|
return id
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
log.error(err)
|
log.error('Error while saving:', err)
|
||||||
win.webContents.send('mt::tab-save-failure', id, err.message)
|
win.webContents.send('mt::tab-save-failure', id, err.message)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -185,7 +175,7 @@ const openPandocFile = async (windowId, pathname) => {
|
|||||||
const data = await converter()
|
const data = await converter()
|
||||||
ipcMain.emit('app-open-markdown-by-id', windowId, data)
|
ipcMain.emit('app-open-markdown-by-id', windowId, data)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error('Error while converting file:', err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +206,7 @@ ipcMain.on('mt::save-and-close-tabs', async (e, unsavedFiles) => {
|
|||||||
win.send('mt::force-close-tabs-by-id', tabIds)
|
win.send('mt::force-close-tabs-by-id', tabIds)
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
log.error(err.error)
|
log.error('Error while save all:', err.error)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
const tabIds = unsavedFiles.map(f => f.id)
|
const tabIds = unsavedFiles.map(f => f.id)
|
||||||
@ -262,7 +252,7 @@ ipcMain.on('AGANI::response-file-save-as', async (e, { id, filename, markdown, p
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
log.error(err)
|
log.error('Error while save as:', err)
|
||||||
win.webContents.send('mt::tab-save-failure', id, err.message)
|
win.webContents.send('mt::tab-save-failure', id, err.message)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -282,8 +272,7 @@ ipcMain.on('mt::close-window-confirm', async (e, unsavedFiles) => {
|
|||||||
ipcMain.emit('window-close-by-id', win.id)
|
ipcMain.emit('window-close-by-id', win.id)
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
console.log(err)
|
log.error('Error while saving before quit:', err)
|
||||||
log.error(err)
|
|
||||||
|
|
||||||
// Notify user about the problem.
|
// Notify user about the problem.
|
||||||
dialog.showMessageBox(win, {
|
dialog.showMessageBox(win, {
|
||||||
@ -446,19 +435,9 @@ export const importFile = async win => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const print = win => {
|
export const print = win => {
|
||||||
if (!win) {
|
if (win) {
|
||||||
return
|
win.webContents.send('mt::show-export-dialog', 'print')
|
||||||
}
|
}
|
||||||
// See GH#749, Electron#16085 and Electron#17523.
|
|
||||||
dialog.showMessageBox(win, {
|
|
||||||
type: 'info',
|
|
||||||
buttons: ['OK'],
|
|
||||||
defaultId: 0,
|
|
||||||
noLink: true,
|
|
||||||
message: 'Printing doesn\'t work',
|
|
||||||
detail: 'Printing is disabled due to an Electron upstream issue. Please export the document as PDF and print the PDF file. We apologize for the inconvenience!'
|
|
||||||
})
|
|
||||||
// win.webContents.send('mt::show-export-dialog', 'print')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const openFile = async win => {
|
export const openFile = async win => {
|
||||||
|
@ -9,13 +9,13 @@ export const toggleAlwaysOnTop = win => {
|
|||||||
export const zoomIn = win => {
|
export const zoomIn = win => {
|
||||||
const { webContents } = win
|
const { webContents } = win
|
||||||
const zoom = webContents.getZoomFactor()
|
const zoom = webContents.getZoomFactor()
|
||||||
// WORKAROUND: Electron#16018
|
// WORKAROUND: We need to set zoom on the browser window due to Electron#16018.
|
||||||
webContents.send('mt::window-zoom', Math.min(2.0, zoom + 0.125))
|
webContents.send('mt::window-zoom', Math.min(2.0, zoom + 0.125))
|
||||||
}
|
}
|
||||||
|
|
||||||
export const zoomOut = win => {
|
export const zoomOut = win => {
|
||||||
const { webContents } = win
|
const { webContents } = win
|
||||||
const zoom = webContents.getZoomFactor()
|
const zoom = webContents.getZoomFactor()
|
||||||
// WORKAROUND: Electron#16018
|
// WORKAROUND: We need to set zoom on the browser window due to Electron#16018.
|
||||||
webContents.send('mt::window-zoom', Math.max(1.0, zoom - 0.125))
|
webContents.send('mt::window-zoom', Math.max(1.0, zoom - 0.125))
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ class AppMenu {
|
|||||||
}
|
}
|
||||||
return recentDocuments
|
return recentDocuments
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error(err)
|
log.error('Error while read recently used documents:', err)
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,19 +17,13 @@ export default function (keybindings) {
|
|||||||
toggleAlwaysOnTop(browserWindow)
|
toggleAlwaysOnTop(browserWindow)
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
// TODO: Disable due GH#1225.
|
|
||||||
visible: false,
|
|
||||||
type: 'separator'
|
type: 'separator'
|
||||||
}, {
|
}, {
|
||||||
// TODO: Disable due GH#1225.
|
|
||||||
visible: false,
|
|
||||||
label: 'Zoom In',
|
label: 'Zoom In',
|
||||||
click (menuItem, browserWindow) {
|
click (menuItem, browserWindow) {
|
||||||
zoomIn(browserWindow)
|
zoomIn(browserWindow)
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
// TODO: Disable due GH#1225.
|
|
||||||
visible: false,
|
|
||||||
label: 'Zoom Out',
|
label: 'Zoom Out',
|
||||||
click (menuItem, browserWindow) {
|
click (menuItem, browserWindow) {
|
||||||
zoomOut(browserWindow)
|
zoomOut(browserWindow)
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
import { isWindows } from '../../config'
|
|
||||||
|
|
||||||
let GetStringRegKey = null
|
|
||||||
if (isWindows) {
|
|
||||||
try {
|
|
||||||
GetStringRegKey = require('vscode-windows-registry').GetStringRegKey
|
|
||||||
} catch (e) {
|
|
||||||
// Ignore webpack build error on macOS and Linux.
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const winHKEY = {
|
|
||||||
HKCU: 'HKEY_CURRENT_USER',
|
|
||||||
HKLM: 'HKEY_LOCAL_MACHINE',
|
|
||||||
HKCR: 'HKEY_CLASSES_ROOT',
|
|
||||||
HKU: 'HKEY_USERS',
|
|
||||||
HKCC: 'HKEY_CURRENT_CONFIG'
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the registry key value.
|
|
||||||
*
|
|
||||||
* @param {winHKEY} hive The registry key
|
|
||||||
* @param {string} path The registry subkey
|
|
||||||
* @param {string} name The registry name
|
|
||||||
* @returns {string|null|undefined} The registry key value or null/undefined.
|
|
||||||
*/
|
|
||||||
export const getStringRegKey = (hive, path, name) => {
|
|
||||||
try {
|
|
||||||
return GetStringRegKey(hive, path, name)
|
|
||||||
} catch (e) {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,24 +3,12 @@ import fs from 'fs'
|
|||||||
import path from 'path'
|
import path from 'path'
|
||||||
import EventEmitter from 'events'
|
import EventEmitter from 'events'
|
||||||
import Store from 'electron-store'
|
import Store from 'electron-store'
|
||||||
import { BrowserWindow, ipcMain, systemPreferences } from 'electron'
|
import { BrowserWindow, ipcMain, nativeTheme } from 'electron'
|
||||||
import log from 'electron-log'
|
import log from 'electron-log'
|
||||||
import { isOsx, isWindows } from '../config'
|
import { isWindows } from '../config'
|
||||||
import { hasSameKeys } from '../utils'
|
import { hasSameKeys } from '../utils'
|
||||||
import { getStringRegKey, winHKEY } from '../platform/win32/registry.js'
|
|
||||||
import schema from './schema'
|
import schema from './schema'
|
||||||
|
|
||||||
const isDarkSystemMode = () => {
|
|
||||||
if (isOsx) {
|
|
||||||
return systemPreferences.isDarkMode()
|
|
||||||
} else if (isWindows) {
|
|
||||||
// NOTE: This key is a 32-Bit DWORD but converted to JS string!
|
|
||||||
const buf = getStringRegKey(winHKEY.HKCU, 'Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize', 'AppsUseLightTheme')
|
|
||||||
return buf === '' // zero (0)
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
const PREFERENCES_FILE_NAME = 'preferences'
|
const PREFERENCES_FILE_NAME = 'preferences'
|
||||||
|
|
||||||
class Preference extends EventEmitter {
|
class Preference extends EventEmitter {
|
||||||
@ -50,7 +38,9 @@ class Preference extends EventEmitter {
|
|||||||
let defaultSettings = null
|
let defaultSettings = null
|
||||||
try {
|
try {
|
||||||
defaultSettings = fse.readJsonSync(this.staticPath)
|
defaultSettings = fse.readJsonSync(this.staticPath)
|
||||||
if (isDarkSystemMode()) {
|
|
||||||
|
// Set best theme on first application start.
|
||||||
|
if (nativeTheme.shouldUseDarkColors) {
|
||||||
defaultSettings.theme = 'dark'
|
defaultSettings.theme = 'dark'
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
@ -247,6 +247,15 @@
|
|||||||
"description": "Theme--Select the theme used in Mark Text",
|
"description": "Theme--Select the theme used in Mark Text",
|
||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
|
"autoSwitchTheme": {
|
||||||
|
"description": "Theme--Automatically adjust application theme according system.",
|
||||||
|
"default": 2,
|
||||||
|
"enum": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
"spellcheckerEnabled": {
|
"spellcheckerEnabled": {
|
||||||
"description": "Spelling--Whether spell checking is enabled.",
|
"description": "Spelling--Whether spell checking is enabled.",
|
||||||
|
@ -46,8 +46,9 @@ const filesHandler = (files, directory, key) => {
|
|||||||
|
|
||||||
const rebuild = (directory) => {
|
const rebuild = (directory) => {
|
||||||
fs.readdir(directory, (err, files) => {
|
fs.readdir(directory, (err, files) => {
|
||||||
if (err) log.error(err)
|
if (err) {
|
||||||
else {
|
log.error('imagePathAutoComplement::rebuild:', err)
|
||||||
|
} else {
|
||||||
filesHandler(files, directory)
|
filesHandler(files, directory)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -3,7 +3,7 @@ import { BrowserWindow, ipcMain } from 'electron'
|
|||||||
import electronLocalshortcut from '@hfelix/electron-localshortcut'
|
import electronLocalshortcut from '@hfelix/electron-localshortcut'
|
||||||
import BaseWindow, { WindowLifecycle, WindowType } from './base'
|
import BaseWindow, { WindowLifecycle, WindowType } from './base'
|
||||||
import { centerWindowOptions } from './utils'
|
import { centerWindowOptions } from './utils'
|
||||||
import { TITLE_BAR_HEIGHT, defaultPreferenceWinOptions, isLinux, isOsx } from '../config'
|
import { TITLE_BAR_HEIGHT, preferencesWinOptions, isLinux, isOsx, isWindows } from '../config'
|
||||||
|
|
||||||
class SettingWindow extends BaseWindow {
|
class SettingWindow extends BaseWindow {
|
||||||
/**
|
/**
|
||||||
@ -21,12 +21,18 @@ class SettingWindow extends BaseWindow {
|
|||||||
*/
|
*/
|
||||||
createWindow (options = {}) {
|
createWindow (options = {}) {
|
||||||
const { menu: appMenu, env, keybindings, preferences } = this._accessor
|
const { menu: appMenu, env, keybindings, preferences } = this._accessor
|
||||||
const winOptions = Object.assign({}, defaultPreferenceWinOptions, options)
|
const winOptions = Object.assign({}, preferencesWinOptions, options)
|
||||||
centerWindowOptions(winOptions)
|
centerWindowOptions(winOptions)
|
||||||
if (isLinux) {
|
if (isLinux) {
|
||||||
winOptions.icon = path.join(__static, 'logo-96px.png')
|
winOptions.icon = path.join(__static, 'logo-96px.png')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WORKAROUND: Electron has issues with different DPI per monitor when
|
||||||
|
// setting a fixed window size.
|
||||||
|
if (isWindows) {
|
||||||
|
winOptions.resizable = true
|
||||||
|
}
|
||||||
|
|
||||||
// Enable native or custom/frameless window and titlebar
|
// Enable native or custom/frameless window and titlebar
|
||||||
const { titleBarStyle, theme } = preferences.getAll()
|
const { titleBarStyle, theme } = preferences.getAll()
|
||||||
if (!isOsx) {
|
if (!isOsx) {
|
||||||
|
@ -146,6 +146,7 @@ export default {
|
|||||||
dispatch('LINTEN_FOR_PRINT_SERVICE_CLEARUP')
|
dispatch('LINTEN_FOR_PRINT_SERVICE_CLEARUP')
|
||||||
dispatch('LINTEN_FOR_EXPORT_SUCCESS')
|
dispatch('LINTEN_FOR_EXPORT_SUCCESS')
|
||||||
dispatch('LISTEN_FOR_FILE_CHANGE')
|
dispatch('LISTEN_FOR_FILE_CHANGE')
|
||||||
|
dispatch('LISTEN_WINDOW_ZOOM')
|
||||||
// module: notification
|
// module: notification
|
||||||
dispatch('LISTEN_FOR_NOTIFICATION')
|
dispatch('LISTEN_FOR_NOTIFICATION')
|
||||||
|
|
||||||
|
@ -18,3 +18,14 @@ export const themes = [
|
|||||||
name: 'one-dark'
|
name: 'one-dark'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export const autoSwitchThemeOptions = [{
|
||||||
|
label: 'Adjust theme at startup', // Always
|
||||||
|
value: 0
|
||||||
|
}, /* {
|
||||||
|
label: 'Only at runtime',
|
||||||
|
value: 1
|
||||||
|
}, */ {
|
||||||
|
label: 'Never',
|
||||||
|
value: 2
|
||||||
|
}]
|
||||||
|
@ -4,12 +4,19 @@
|
|||||||
<section class="offcial-themes">
|
<section class="offcial-themes">
|
||||||
<div v-for="t of themes" :key="t.name" class="theme"
|
<div v-for="t of themes" :key="t.name" class="theme"
|
||||||
:class="[t.name, { 'active': t.name === theme }]"
|
:class="[t.name, { 'active': t.name === theme }]"
|
||||||
@click="handleSelectTheme(t.name)"
|
@click="onSelectChange('theme', t.name)"
|
||||||
>
|
>
|
||||||
<div v-html="t.html"></div>
|
<div v-html="t.html"></div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<separator></separator>
|
<separator></separator>
|
||||||
|
<cur-select
|
||||||
|
description="Automatically adjust application theme according system."
|
||||||
|
:value="autoSwitchTheme"
|
||||||
|
:options="autoSwitchThemeOptions"
|
||||||
|
:onChange="value => onSelectChange('autoSwitchTheme', value)"
|
||||||
|
></cur-select>
|
||||||
|
<separator></separator>
|
||||||
<section class="import-themes ag-underdevelop">
|
<section class="import-themes ag-underdevelop">
|
||||||
<div>
|
<div>
|
||||||
<span>Open the themes folder</span>
|
<span>Open the themes folder</span>
|
||||||
@ -27,21 +34,25 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import themeMd from './theme.md'
|
import themeMd from './theme.md'
|
||||||
import { themes } from './config'
|
import { autoSwitchThemeOptions, themes } from './config'
|
||||||
import markdownToHtml from '@/util/markdownToHtml'
|
import markdownToHtml from '@/util/markdownToHtml'
|
||||||
|
import CurSelect from '../common/select'
|
||||||
import Separator from '../common/separator'
|
import Separator from '../common/separator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
|
CurSelect,
|
||||||
Separator
|
Separator
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
|
this.autoSwitchThemeOptions = autoSwitchThemeOptions
|
||||||
return {
|
return {
|
||||||
themes: []
|
themes: []
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
|
autoSwitchTheme: state => state.preferences.autoSwitchTheme,
|
||||||
theme: state => state.preferences.theme
|
theme: state => state.preferences.theme
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@ -60,11 +71,8 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleSelectTheme (theme) {
|
onSelectChange (type, value) {
|
||||||
this.$store.dispatch('SET_SINGLE_PREFERENCE', {
|
this.$store.dispatch('SET_SINGLE_PREFERENCE', { type, value })
|
||||||
type: 'theme',
|
|
||||||
value: theme
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,7 +92,7 @@ export default {
|
|||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
width: 250px;
|
width: 250px;
|
||||||
height: 100px;
|
height: 100px;
|
||||||
margin: 0px 22px 10px 22px;
|
margin: 0px 20px 10px 20px;
|
||||||
padding-left: 30px;
|
padding-left: 30px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -44,6 +44,7 @@ const state = {
|
|||||||
footnote: false,
|
footnote: false,
|
||||||
|
|
||||||
theme: 'light',
|
theme: 'light',
|
||||||
|
autoSwitchTheme: 2,
|
||||||
|
|
||||||
spellcheckerEnabled: false,
|
spellcheckerEnabled: false,
|
||||||
spellcheckerIsHunspell: false, // macOS only
|
spellcheckerIsHunspell: false, // macOS only
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
"footnote": false,
|
"footnote": false,
|
||||||
|
|
||||||
"theme": "light",
|
"theme": "light",
|
||||||
|
"autoSwitchTheme": 2,
|
||||||
|
|
||||||
"spellcheckerEnabled": false,
|
"spellcheckerEnabled": false,
|
||||||
"spellcheckerIsHunspell": false,
|
"spellcheckerIsHunspell": false,
|
||||||
|
115
yarn.lock
115
yarn.lock
@ -852,12 +852,17 @@
|
|||||||
ajv "^6.1.0"
|
ajv "^6.1.0"
|
||||||
ajv-keywords "^3.1.0"
|
ajv-keywords "^3.1.0"
|
||||||
|
|
||||||
"@felixrieseberg/spellchecker@^4.0.10":
|
"@electron/get@^1.0.1":
|
||||||
version "4.0.10"
|
version "1.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/@felixrieseberg/spellchecker/-/spellchecker-4.0.10.tgz#ec4b11bcaa98a45d0f1c768a2f3dfb2b8768ed3f"
|
resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.5.0.tgz#6217d9d18fb71fbd8cd2445a31aa0edc723d19dd"
|
||||||
integrity sha512-b+BlHcBXjx+W7yGNAtoVpAv8dvmAQ8Tp2YhNjqxIgocb6Wq1nKLl4jfu9DG60UWC0hTNvvQ74ny9ojiUFNqGSA==
|
integrity sha512-tafxBz6n08G6SX961F/h8XFtpB/DdwRvJJoDeOH9x78jDSCMQ2G/rRWqSwLFp9oeMFBJf0Pf5Kkw6TKt5w9TWg==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "^2.13.2"
|
debug "^4.1.1"
|
||||||
|
env-paths "^2.2.0"
|
||||||
|
fs-extra "^8.1.0"
|
||||||
|
got "^9.6.0"
|
||||||
|
sanitize-filename "^1.6.2"
|
||||||
|
sumchecker "^3.0.0"
|
||||||
|
|
||||||
"@hfelix/electron-localshortcut@^3.1.1":
|
"@hfelix/electron-localshortcut@^3.1.1":
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
@ -869,12 +874,12 @@
|
|||||||
electron-is-accelerator "^0.1.0"
|
electron-is-accelerator "^0.1.0"
|
||||||
keyboardevents-areequal "^0.2.1"
|
keyboardevents-areequal "^0.2.1"
|
||||||
|
|
||||||
"@hfelix/electron-spellchecker@^1.0.0-rc.1":
|
"@hfelix/electron-spellchecker@^1.0.0-rc.3":
|
||||||
version "1.0.0-rc.1"
|
version "1.0.0-rc.3"
|
||||||
resolved "https://registry.yarnpkg.com/@hfelix/electron-spellchecker/-/electron-spellchecker-1.0.0-rc.1.tgz#595762825bd77d1dc43cbc38e725e84e5baa989a"
|
resolved "https://registry.yarnpkg.com/@hfelix/electron-spellchecker/-/electron-spellchecker-1.0.0-rc.3.tgz#6a76eaf16a4c15987cdda00d42bd9896a0590e70"
|
||||||
integrity sha512-blQCgk2Dw0mep0eQPZzcMG5bYEmf+Zvih48doiGloclgYikxBb8kYR64hKZQycVg+SeXuLeTodL7L2KI5MXn0Q==
|
integrity sha512-qG2YxRtoOLycA7vRJENds4POxV7VC8yVmDXi7dIz3czRUZgNJNCQDR5YoRQ9xPXVLWT3oYB/RLwOS3RJRP3AnA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@felixrieseberg/spellchecker" "^4.0.10"
|
"@hfelix/spellchecker" "^4.0.11"
|
||||||
bcp47 "^1.1.2"
|
bcp47 "^1.1.2"
|
||||||
cld "^2.5.1"
|
cld "^2.5.1"
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
@ -888,6 +893,13 @@
|
|||||||
resolved "https://registry.npmjs.org/@hfelix/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.1.tgz#7e1d4fd913759c381b7919cc7faf4c0c641d457c"
|
resolved "https://registry.npmjs.org/@hfelix/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-1.1.1.tgz#7e1d4fd913759c381b7919cc7faf4c0c641d457c"
|
||||||
integrity sha512-1eVkDSqoRQkF2FrPPia2EZ3310c0TvFKYvSuJbaxHpRKbI6eVHcVGKpmOSDli6Qdn3Bu0h7ozfgMZbAEBD+BLQ==
|
integrity sha512-1eVkDSqoRQkF2FrPPia2EZ3310c0TvFKYvSuJbaxHpRKbI6eVHcVGKpmOSDli6Qdn3Bu0h7ozfgMZbAEBD+BLQ==
|
||||||
|
|
||||||
|
"@hfelix/spellchecker@^4.0.11":
|
||||||
|
version "4.0.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/@hfelix/spellchecker/-/spellchecker-4.0.11.tgz#bc86881e419c7e12c88ab996a5bbbe78f044385c"
|
||||||
|
integrity sha512-xBVSHB6OPnqD+KBL5cQO0o20/TIezigD0U1a7V+e+5OvAmCnqdWo23IOdZrUDA7bBhNvK2Pml9jF3U7HRo272A==
|
||||||
|
dependencies:
|
||||||
|
nan "^2.13.2"
|
||||||
|
|
||||||
"@markedjs/html-differ@^3.0.0":
|
"@markedjs/html-differ@^3.0.0":
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.npmjs.org/@markedjs/html-differ/-/html-differ-3.0.0.tgz#d7084adc3e9c060fe3f39a7f86f5543bb545d727"
|
resolved "https://registry.npmjs.org/@markedjs/html-differ/-/html-differ-3.0.0.tgz#d7084adc3e9c060fe3f39a7f86f5543bb545d727"
|
||||||
@ -1017,10 +1029,10 @@
|
|||||||
resolved "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f"
|
resolved "https://registry.npmjs.org/@types/node/-/node-12.7.5.tgz#e19436e7f8e9b4601005d73673b6dc4784ffcc2f"
|
||||||
integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==
|
integrity sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==
|
||||||
|
|
||||||
"@types/node@^10.12.18":
|
"@types/node@^12.0.12":
|
||||||
version "10.14.22"
|
version "12.11.7"
|
||||||
resolved "https://registry.npmjs.org/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4"
|
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a"
|
||||||
integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==
|
integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==
|
||||||
|
|
||||||
"@types/q@^1.5.1":
|
"@types/q@^1.5.1":
|
||||||
version "1.5.2"
|
version "1.5.2"
|
||||||
@ -1892,7 +1904,7 @@ bl@^1.0.0:
|
|||||||
|
|
||||||
bl@^3.0.0:
|
bl@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
|
resolved "https://registry.yarnpkg.com/bl/-/bl-3.0.0.tgz#3611ec00579fd18561754360b21e9f784500ff88"
|
||||||
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
|
integrity sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==
|
||||||
dependencies:
|
dependencies:
|
||||||
readable-stream "^3.0.1"
|
readable-stream "^3.0.1"
|
||||||
@ -3769,7 +3781,7 @@ decompress-response@^3.3.0:
|
|||||||
|
|
||||||
decompress-response@^4.2.0:
|
decompress-response@^4.2.0:
|
||||||
version "4.2.1"
|
version "4.2.1"
|
||||||
resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
|
resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986"
|
||||||
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
|
integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==
|
||||||
dependencies:
|
dependencies:
|
||||||
mimic-response "^2.0.0"
|
mimic-response "^2.0.0"
|
||||||
@ -4287,10 +4299,10 @@ electron-builder@^21.2.0:
|
|||||||
update-notifier "^3.0.1"
|
update-notifier "^3.0.1"
|
||||||
yargs "^13.3.0"
|
yargs "^13.3.0"
|
||||||
|
|
||||||
electron-chromedriver@^6.0.0:
|
electron-chromedriver@^7.0.0:
|
||||||
version "6.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.npmjs.org/electron-chromedriver/-/electron-chromedriver-6.0.0.tgz#a91b940c83f1c42ced52c9ef0605d8721613a8a2"
|
resolved "https://registry.yarnpkg.com/electron-chromedriver/-/electron-chromedriver-7.0.0.tgz#204e1bfcdf2dfd56e5a3b8e6f37d19b1433a7937"
|
||||||
integrity sha512-UIhRl0sN5flfUjqActXsFrZQU1NmBObvlxzPnyeud8vhR67TllXCoqfvhQJmIrJAJJK+5M1DFhJ5iTGT++dvkg==
|
integrity sha512-7qymT0fn3VTit0peym1iz4Y+fTwq9EPsv1V9Qh+vQdoVqP/4SM9lOHrsBeuFN1JJADZLu7R119ZvMkP6EnLYhw==
|
||||||
dependencies:
|
dependencies:
|
||||||
electron-download "^4.1.1"
|
electron-download "^4.1.1"
|
||||||
extract-zip "^1.6.7"
|
extract-zip "^1.6.7"
|
||||||
@ -4305,7 +4317,7 @@ electron-devtools-installer@^2.2.4:
|
|||||||
rimraf "^2.5.2"
|
rimraf "^2.5.2"
|
||||||
semver "^5.3.0"
|
semver "^5.3.0"
|
||||||
|
|
||||||
electron-download@^4.1.0, electron-download@^4.1.1:
|
electron-download@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8"
|
resolved "https://registry.npmjs.org/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8"
|
||||||
integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==
|
integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg==
|
||||||
@ -4393,13 +4405,13 @@ electron-window-state@^5.0.3:
|
|||||||
jsonfile "^4.0.0"
|
jsonfile "^4.0.0"
|
||||||
mkdirp "^0.5.1"
|
mkdirp "^0.5.1"
|
||||||
|
|
||||||
electron@^6.1.0:
|
electron@^7.0.1:
|
||||||
version "6.1.0"
|
version "7.0.1"
|
||||||
resolved "https://registry.npmjs.org/electron/-/electron-6.1.0.tgz#f816347cc0b21cb231b829a4ba5133fbfbbbe100"
|
resolved "https://registry.yarnpkg.com/electron/-/electron-7.0.1.tgz#6da2c07aa0513d3d156b5b027f317e0959261d43"
|
||||||
integrity sha512-CGdM6671gA0WUmsQCVO3stqpvm6/x+S+MkKlqgsk2N3GXnIa3KkfR8k4YNp8gnCgLSZQ0yucFQB/DyEYSjrzrA==
|
integrity sha512-eMFoZIO0+eOAE9FyNC/f0Vp8l/sJziTMK+axEt2XIpGCagom1IZgUKPGwmHUcftZCX5lNKh+Tv53T0GcNnNTKQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "^10.12.18"
|
"@electron/get" "^1.0.1"
|
||||||
electron-download "^4.1.0"
|
"@types/node" "^12.0.12"
|
||||||
extract-zip "^1.0.3"
|
extract-zip "^1.0.3"
|
||||||
|
|
||||||
element-resize-detector@^1.2.0:
|
element-resize-detector@^1.2.0:
|
||||||
@ -4449,13 +4461,20 @@ encodeurl@~1.0.2:
|
|||||||
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||||
|
|
||||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||||
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
|
integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
once "^1.4.0"
|
once "^1.4.0"
|
||||||
|
|
||||||
|
end-of-stream@^1.4.1:
|
||||||
|
version "1.4.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||||
|
integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
|
||||||
|
dependencies:
|
||||||
|
once "^1.4.0"
|
||||||
|
|
||||||
engine.io-client@~3.2.0:
|
engine.io-client@~3.2.0:
|
||||||
version "3.2.1"
|
version "3.2.1"
|
||||||
resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
|
resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36"
|
||||||
@ -7114,10 +7133,10 @@ keypress@0.1.x:
|
|||||||
resolved "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a"
|
resolved "https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz#4a3188d4291b66b4f65edb99f806aa9ae293592a"
|
||||||
integrity sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=
|
integrity sha1-SjGI1CkbZrT2XtuZ+AaqmuKTWSo=
|
||||||
|
|
||||||
keytar@^5.0.0-beta.3:
|
keytar@5.0.0-beta.4:
|
||||||
version "5.0.0-beta.3"
|
version "5.0.0-beta.4"
|
||||||
resolved "https://registry.npmjs.org/keytar/-/keytar-5.0.0-beta.3.tgz#326793cd54336152311ba6ee23cba66b35d9c933"
|
resolved "https://registry.yarnpkg.com/keytar/-/keytar-5.0.0-beta.4.tgz#273c842780ccfd1fda25b37832e284e8741eec9f"
|
||||||
integrity sha512-e6zEkaq9AahKi5olNm/cqJAxTD8MNDGEN2Ew2eqTcBSJ+UWDGTp84nWUJ8EyS31vuz+Fcu9tcZzPZB4F94Wqcw==
|
integrity sha512-avv3gNY+y72AYsUCSQn1VdETCgRuTDy1YJ1Pm3kIuIHlfIhaaZzVKrZSRwVLt3omWxQ80aI8I8bHPP1c5zxjqw==
|
||||||
dependencies:
|
dependencies:
|
||||||
nan "2.14.0"
|
nan "2.14.0"
|
||||||
prebuild-install "5.3.2"
|
prebuild-install "5.3.2"
|
||||||
@ -7878,7 +7897,7 @@ mimic-response@^1.0.0, mimic-response@^1.0.1:
|
|||||||
|
|
||||||
mimic-response@^2.0.0:
|
mimic-response@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
|
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.0.0.tgz#996a51c60adf12cb8a87d7fb8ef24c2f3d5ebb46"
|
||||||
integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
|
integrity sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==
|
||||||
|
|
||||||
mini-css-extract-plugin@^0.8.0:
|
mini-css-extract-plugin@^0.8.0:
|
||||||
@ -9470,7 +9489,7 @@ posthtml@^0.9.2:
|
|||||||
|
|
||||||
prebuild-install@5.3.2:
|
prebuild-install@5.3.2:
|
||||||
version "5.3.2"
|
version "5.3.2"
|
||||||
resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e"
|
resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.2.tgz#6392e9541ac0b879ef0f22b3d65037417eb2035e"
|
||||||
integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==
|
integrity sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==
|
||||||
dependencies:
|
dependencies:
|
||||||
detect-libc "^1.0.3"
|
detect-libc "^1.0.3"
|
||||||
@ -10526,7 +10545,7 @@ simple-concat@^1.0.0:
|
|||||||
|
|
||||||
simple-get@^3.0.3:
|
simple-get@^3.0.3:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
|
resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3"
|
||||||
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
|
integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==
|
||||||
dependencies:
|
dependencies:
|
||||||
decompress-response "^4.2.0"
|
decompress-response "^4.2.0"
|
||||||
@ -10836,13 +10855,13 @@ spdy@^4.0.1:
|
|||||||
select-hose "^2.0.0"
|
select-hose "^2.0.0"
|
||||||
spdy-transport "^3.0.0"
|
spdy-transport "^3.0.0"
|
||||||
|
|
||||||
spectron@^8.0.0:
|
spectron@^9.0.0:
|
||||||
version "8.0.0"
|
version "9.0.0"
|
||||||
resolved "https://registry.npmjs.org/spectron/-/spectron-8.0.0.tgz#86e83c5dccb174850c052e2e718d5b1158764a52"
|
resolved "https://registry.yarnpkg.com/spectron/-/spectron-9.0.0.tgz#6581780027172095e168353c82ed934212a0c97f"
|
||||||
integrity sha512-MI9+lAamDnw7S0vKaxXjU3g5qaW5KANaFLc+Hgq+QmMCkQbZLt6ukFFGfalmwIuYrmq+yWQPCD4CXgt3VSHrLA==
|
integrity sha512-aMxprQ+5/8hDl27P6FafIuuL8jAueJ7WEc6S6pEEQNU7xGCMcfj0RY6TB1i9BtkazMymIxAkmwqlK233Fbhcgw==
|
||||||
dependencies:
|
dependencies:
|
||||||
dev-null "^0.1.1"
|
dev-null "^0.1.1"
|
||||||
electron-chromedriver "^6.0.0"
|
electron-chromedriver "^7.0.0"
|
||||||
request "^2.87.0"
|
request "^2.87.0"
|
||||||
split "^1.0.0"
|
split "^1.0.0"
|
||||||
webdriverio "^4.13.0"
|
webdriverio "^4.13.0"
|
||||||
@ -11107,6 +11126,13 @@ sumchecker@^2.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
debug "^2.2.0"
|
debug "^2.2.0"
|
||||||
|
|
||||||
|
sumchecker@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.0.tgz#da5457b4605184575c76540e5e99cc777cb8ce4c"
|
||||||
|
integrity sha512-yreseuC/z4iaodVoq07XULEOO9p4jnQazO7mbrnDSvWAU/y2cbyIKs+gWJptfcGu9R+1l27K8Rkj0bfvqnBpgQ==
|
||||||
|
dependencies:
|
||||||
|
debug "^4.1.0"
|
||||||
|
|
||||||
supports-color@6.0.0:
|
supports-color@6.0.0:
|
||||||
version "6.0.0"
|
version "6.0.0"
|
||||||
resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
|
resolved "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a"
|
||||||
@ -11247,7 +11273,7 @@ tapable@^1.0.0, tapable@^1.1.3:
|
|||||||
|
|
||||||
tar-fs@^2.0.0:
|
tar-fs@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
|
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.0.tgz#677700fc0c8b337a78bee3623fdc235f21d7afad"
|
||||||
integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
|
integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
|
||||||
dependencies:
|
dependencies:
|
||||||
chownr "^1.1.1"
|
chownr "^1.1.1"
|
||||||
@ -11270,7 +11296,7 @@ tar-stream@^1.5.0:
|
|||||||
|
|
||||||
tar-stream@^2.0.0:
|
tar-stream@^2.0.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
|
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.0.tgz#d1aaa3661f05b38b5acc9b7020efdca5179a2cc3"
|
||||||
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
|
integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
|
||||||
dependencies:
|
dependencies:
|
||||||
bl "^3.0.0"
|
bl "^3.0.0"
|
||||||
@ -12419,11 +12445,6 @@ vscode-ripgrep@^1.5.7:
|
|||||||
resolved "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.7.tgz#acb6b548af488a4bca5d0f1bb5faf761343289ce"
|
resolved "https://registry.npmjs.org/vscode-ripgrep/-/vscode-ripgrep-1.5.7.tgz#acb6b548af488a4bca5d0f1bb5faf761343289ce"
|
||||||
integrity sha512-/Vsz/+k8kTvui0q3O74pif9FK0nKopgFTiGNVvxicZANxtSA8J8gUE9GQ/4dpi7D/2yI/YVORszwVskFbz46hQ==
|
integrity sha512-/Vsz/+k8kTvui0q3O74pif9FK0nKopgFTiGNVvxicZANxtSA8J8gUE9GQ/4dpi7D/2yI/YVORszwVskFbz46hQ==
|
||||||
|
|
||||||
vscode-windows-registry@^1.0.2:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/vscode-windows-registry/-/vscode-windows-registry-1.0.2.tgz#b863e704a6a69c50b3098a55fbddbe595b0c124a"
|
|
||||||
integrity sha512-/CLLvuOSM2Vme2z6aNyB+4Omd7hDxpf4Thrt8ImxnXeQtxzel2bClJpFQvQqK/s4oaXlkBKS7LqVLeZM+uSVIA==
|
|
||||||
|
|
||||||
vue-electron@^1.0.6:
|
vue-electron@^1.0.6:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.npmjs.org/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"
|
resolved "https://registry.npmjs.org/vue-electron/-/vue-electron-1.0.6.tgz#e798e03180b8933539defe31f92e53b9242b9406"
|
||||||
|
Loading…
Reference in New Issue
Block a user